
    0hhW                         S SK r S SKrS SKJrJr  S SKJr   " S S\ R                  5      r\S:X  a  \ R                  " 5         gg)    N)check_syntax_errorcpython_only)
gc_collectc                   (   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\S 5       rS r\S 5       rS r S r!S r"S  r#S! r$S" r%S# r&S$ r'S% r(S& r)S' r*S( r+\S) 5       r,S* r-S+r.g,)-
ScopeTests   c                     S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        g )Nc                    ^  U 4S jnU$ )Nc                    > TU -   $ N yxs    8/opt/python-3.13.8/usr/lib/python3.13/test/test_scope.pyadder?ScopeTests.testSimpleNesting.<locals>.make_adder.<locals>.adder       1u    r   r   r   s   ` r   
make_adder0ScopeTests.testSimpleNesting.<locals>.make_adder   s    Lr      
      r   assertEqual)selfr   incplus10s       r   testSimpleNestingScopeTests.testSimpleNesting
   sC    	
 mBQ#Q'r   c                     S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        g )Nc                    ^  U 4S jnU" 5       $ )Nc                     > U4S jn U $ )Nc                    > TU -   $ r   r   r   s    r   r   NScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extra.<locals>.adder       q5Lr   r   )r   r   s    r   extra?ScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extra   s    !r   r   )r   r*   s   ` r   make_adder20ScopeTests.testExtraNesting.<locals>.make_adder2   s     7Nr   r   r   r   r   r   r   )r   r,   r    r!   s       r   testExtraNestingScopeTests.testExtraNesting   sC    	 !nRQ#Q'r   c                     S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        g )Nc                    ^  U 4S jnT S-   m U$ )Nc                    > TU -   $ r   r   r   s    r   r   EScopeTests.testSimpleAndRebinding.<locals>.make_adder3.<locals>.adder)   r   r   r   r   r   s   ` r   make_adder36ScopeTests.testSimpleAndRebinding.<locals>.make_adder3(   s    AALr   r   	   r   r   r   r   r   )r   r4   r    r!   s       r   testSimpleAndRebinding!ScopeTests.testSimpleAndRebinding&   sC    	 !nQQ#Q'r   c                    ^ U4S jnSmU" 5       nU R                  U" S5      S5        SmU R                  U" S5      S5        g )Nc                     > U4S jn U " 5       $ )Nc                     > U4S jn U " 5       $ )Nc                     > U4S jn U $ )Nc                    > TU -   $ r   r   r   global_xs    r   r   bScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest.<locals>.adder9   s    '!|+r   r   )r   r?   s    r   nestSScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest8   s    , Lr   r   rA   r?   s    r   rA   EScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest7   s    ! vr   r   rC   s    r   make_adder47ScopeTests.testNestingGlobalNoFree.<locals>.make_adder46   s     6Mr   r   r   r   r   r   r   )r   rE   r   r?   s      @r   testNestingGlobalNoFree"ScopeTests.testNestingGlobalNoFree4   sC    	 q1%rA&r   c                     S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        g )Nc                 ,   ^   " U 4S jS5      nU" 5       $ )Nc                   "   > \ rS rSrU 4S jrSrg)FScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.AdderI   c                    > TU-   $ r   r   )r   r   r   s     r   __call__OScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adder.__call__J   r)   r   r   N)__name__
__module____qualname____firstlineno__rO   __static_attributes__r   s   r   AdderrL   I   s    ! !r   rW   r   )r   rW   s   ` r   make_adder57ScopeTests.testNestingThroughClass.<locals>.make_adder5H   s    ! ! 7Nr   r   r   r   r   r   r   )r   rX   r    r!   s       r   testNestingThroughClass"ScopeTests.testNestingThroughClassF   sC    	 !nRQ#Q'r   c                     S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        g )Nc                     S nU q U$ )Nc                     [         U -   $ r   global_nest_xr   s    r   r   MScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6.<locals>.adderX   s    $q((r   r_   r   s     r   make_adder6>ScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6V   s    )MLr   r   r      r   r   r   )r   rc   r    r!   s       r   testNestingPlusFreeRefToGlobal)ScopeTests.testNestingPlusFreeRefToGlobalT   sC    	 !nRQ$Q'r   c                 J    S nU" S5      nU R                  U" S5      S5        g )Nc                     S nU" S5      $ )Nc                    ^ SmU4S jnU$ )N*   c                    > TU -   $ r   r   )zr   s    r   hEScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.g.<locals>.hh   r)   r   r   )r   rn   r   s     @r   g:ScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.gf   s    !r   r   r   r   rp   s     r   f/ScopeTests.testNearestEnclosingScope.<locals>.fe   s    
 Q4Kr   r      /   r   )r   rs   	test_funcs      r   testNearestEnclosingScope$ScopeTests.testNearestEnclosingScopec   s&    	 bE	1r*r   c                 n   ^ S mU4S jnU" SSS5      nU" SSS5      nU R                  U" 5       S5        g )	Nc                     U $ r   r   rV   s    r   identity9ScopeTests.testMixedFreevarsAndCellvars.<locals>.identityr   s    Hr   c                    >^ ^ UU U4S jnU$ )Nc                 2   >^^ U T-   n UUUU4S jnUT-   mU$ )Nc                      > T" TT T-   -  5      $ r   r   )br|   r   rm   s   r   rn   HScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.g.<locals>.hx   s     $AQK00r   r   )ar   crn   r   r|   r   rm   s    `  @r   rp   =ScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.gv   s&    E1 1 Er   r   )r   r   rm   rp   r|   s   ` ` r   rs   2ScopeTests.testMixedFreevarsAndCellvars.<locals>.fu   s     Hr   r   r            '   r   )r   rs   rp   rn   r|   s       @r   testMixedFreevarsAndCellvars'ScopeTests.testMixedFreevarsAndCellvarsp   s;    			 aAJaAJb!r   c                   ^ S nU" 5       nU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        Sm " U4S jS5      nU" 5       nU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        g )Nc                  0   ^ Sm " U4S jS5      n U " 5       $ )Nvarc                   4   > \ rS rSrS rU 4S jrS rS rSrg):ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test   c                     gNmethodr   r   s    r   method_and_varIScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.method_and_var   s    #r   c                    > T$ r   r   r   r   s    r   test?ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.test   s	    ))r   c                     [        S5      $ Nglobalstrr   s    r   actual_globalHScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.actual_global   s    x=(r   c                     [        U 5      $ r   r   r   s    r   r   >ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.str   s    t9$r   r   N	rQ   rR   rS   rT   r   r   r   r   rU   r   s   r   Testr      s    $*)%r   r   r   )r   r   s    @r   r   ,ScopeTests.testFreeVarInMethod.<locals>.test   s    "N% % 6Mr   r   r   r   c                   4   > \ rS rSrS rU 4S jrS rS rSrg),ScopeTests.testFreeVarInMethod.<locals>.Test   c                     gr   r   r   s    r   r   ;ScopeTests.testFreeVarInMethod.<locals>.Test.method_and_var   s    r   c                    > T$ r   r   r   s    r   r   1ScopeTests.testFreeVarInMethod.<locals>.Test.test   s	    %%r   c                     [        S5      $ r   r   r   s    r   r   :ScopeTests.testFreeVarInMethod.<locals>.Test.actual_global   s    8}$r   c                     [        U 5      $ r   r   r   s    r   r   0ScopeTests.testFreeVarInMethod.<locals>.Test.str   s    4y r   r   Nr   r   s   r   r   r      s     &%!r   r   )r   r   r   r   )r   r   tr   r   s       @r   testFreeVarInMethodScopeTests.testFreeVarInMethod   s    	 F5)))+X6*H5		! 		! F5)))+X6*H5r   c                 l    SS.S jnU R                  U" SS9S5        U R                  U" 5       S5        g )N   r   c                 $   ^  U 4S jnU" 5       S-   $ )Nc                     > T S-   $ )Nru   r   r   s   r   bar8ScopeTests.testCellIsKwonlyArg.<locals>.foo.<locals>.bar   r   r   r   r   )r   r   s   ` r   foo+ScopeTests.testCellIsKwonlyArg.<locals>.foo   s    519r   rk   2      r   )r   r   s     r   testCellIsKwonlyArgScopeTests.testCellIsKwonlyArg   s4      	
 	rB'#r   c                     S nU" 5       nS nU" U5      nUR                   u  nU" 5       nU R                  Xb5        U R                  Xe5        g )Nc                  4   ^ SmU4S jn U R                   u  nU$ )Nrk   c                     > T $ r   r   values   r   innerCScopeTests.testCellIsArgAndEscapes.<locals>.external.<locals>.inner       r   __closure__r   cellr   s     @r   external4ScopeTests.testCellIsArgAndEscapes.<locals>.external       E%%EDKr   c                    ^  U 4S jnU$ )Nc                     > T $ r   r   )args   r   eggs>ScopeTests.testCellIsArgAndEscapes.<locals>.spam.<locals>.eggs       
r   r   )r   r   s   ` r   spam0ScopeTests.testCellIsArgAndEscapes.<locals>.spam   s    Kr   r   assertIsassertIsNotr   r   cell_extr   r   cell_closure	cell_eggss          r   testCellIsArgAndEscapes"ScopeTests.testCellIsArgAndEscapes   sN    
	 :	
 H~((F	i*1r   c                     S nU" 5       nS nU" U5      nUR                   u  nU" 5       nU R                  Xb5        U R                  Xe5        g )Nc                  4   ^ SmU4S jn U R                   u  nU$ )Nrk   c                     > T $ r   r   r   s   r   r   EScopeTests.testCellIsLocalAndEscapes.<locals>.external.<locals>.inner   r   r   r   r   s     @r   r   6ScopeTests.testCellIsLocalAndEscapes.<locals>.external   r   r   c                    ^ U mU4S jnU$ )Nc                     > T $ r   r   )r   s   r   r   @ScopeTests.testCellIsLocalAndEscapes.<locals>.spam.<locals>.eggs   s    r   r   )r   r   r   s     @r   r   2ScopeTests.testCellIsLocalAndEscapes.<locals>.spam   s    DKr   r   r   s          r   testCellIsLocalAndEscapes$ScopeTests.testCellIsLocalAndEscapes   sN    
	 :	 H~((F	i*1r   c                 :    S nU R                  U" S5      S5        g )Nc                 B   ^ U4S jmU S:  a  T" U 5      $ [        S5      e)Nc                 .   > U S:X  a  gU T" U S-
  5      -  $ Nr   r   r   )nfacts    r   r   1ScopeTests.testRecursion.<locals>.f.<locals>.fact   s    6tAE{?*r   r   zx must be >= 0)
ValueError)r   r   s    @r   rs   #ScopeTests.testRecursion.<locals>.f   s&    +
 AvAw !122r   r   i  r   r   rs   s     r   testRecursionScopeTests.testRecursion   s    		3 	1s#r   c                 d    [        U S5        [        U S5        [        U S5        [        U S5        g )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   r   s    r   testUnoptimizedNamespaces$ScopeTests.testUnoptimizedNamespaces   sD    4 " 	 	4 " 	 	4 " 	 	4 " 	r   c                   ^	 S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        S nU" S5      nU" S5      nU R                  U" S5      S5        U R                  U" S5      S5        U	4S jnSm	U" S 5      nU R                  U" S5      S	5        S
 nU" SSS	5      nU" SSS5      nU R                  U" 5       S5        g )Nc                    ^  U 4S j$ )Nc                    > TU -   $ r   r   r   s    r   <lambda>:ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>  s	    Qr   r   rV   s   `r   r  (ScopeTests.testLambdas.<locals>.<lambda>  s    r   r   r   r   ru      c                    ^  U 4S j" 5       $ )Nc                     > U 4S j$ )Nc                    > TU -   $ r   r   r   s    r   r  LScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>!  s	    1q5r   r   rV   s   r   r  r  !  s    r   r   rV   s   `r   r  r  !  s	    03r   c                    > U4S j$ )Nc                    > TU -   $ r   r   r>   s    r   r  r  '  s	    Ar   r   )r   r?   s    r   r  r  '  s    -r   r   c                    ^^ UU4S j$ )Nc                    >^ UUU4S j$ )Nc                     > TT T-   -  $ r   r   )r   r   rm   s   r   r  r	  ,  s    a1q5kr   r   )r   r   r   r   rm   s    ` r   r  r  ,  s    -Ar   r   )r   r   rm   s    ``r   r  r  ,  s    Ar   r   r      r   )
r   f1r    r!   f2f3f8rp   rn   r?   s
            @r   testLambdasScopeTests.testLambdas  s    &eBQ#B'3eBQ#B'-hQ#Aq!QKaAJb!r   c                 h    S nS nU R                  [        U5        U R                  [        U5        g )Nc                  ,   ^ [        T5        U4S jn Smg )Nc                     > T $ r   r   ra   s   r   r   @ScopeTests.testUnboundLocal.<locals>.errorInOuter.<locals>.inner5      r   r   printr   r   s    @r   errorInOuter1ScopeTests.testUnboundLocal.<locals>.errorInOuter3  s    !HAr   c                  $   ^ U4S jn U " 5         Smg )Nc                     > T $ r   r   ra   s   r   r   @ScopeTests.testUnboundLocal.<locals>.errorInInner.<locals>.inner:  r  r   r   r   r  s    @r   errorInInner1ScopeTests.testUnboundLocal.<locals>.errorInInner9  s    GAr   assertRaisesUnboundLocalError	NameErrorr   r  r#  s      r   testUnboundLocalScopeTests.testUnboundLocal1  s/    		 	+\:)\2r   c                 h    S nS nU R                  [        U5        U R                  [        U5        g )Nc                  .   ^ Sm@[        T5        U4S jn g )Nr   c                     > T $ r   r   ra   s   r   r   IScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuter.<locals>.innerJ  r  r   r  r  s    @r   r  :ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuterF  s    A!Hr   c                  &   ^ U4S jn Sm@U " 5         g )Nc                     > T $ r   r   ra   s   r   r   IScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInner.<locals>.innerN  r  r   r   r   r  s    @r   r#  :ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInnerM  s    AGr   r%  r)  s      r   testUnboundLocal_AfterDel$ScopeTests.testUnboundLocal_AfterDelB  s/    		 	+\:)\2r   c                 4    [        SSU R                  05        g )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)execr8  r   s    r   testUnboundLocal_AugAssign%ScopeTests.testUnboundLocal_AugAssignW  s     
 $))$
	&r   c                     S nU R                  U" SSS5      " 5       S5        S nU R                  U" SS9" 5       S	   S5        g )
Nc                     ^  U 4S jnU$ )Nc                     > T $ r   r   )lsts   r   returnerIScopeTests.testComplexDefinitions.<locals>.makeReturner.<locals>.returnerh  r   r   r   )r?  r@  s   ` r   makeReturner7ScopeTests.testComplexDefinitions.<locals>.makeReturnerg  s    Or   r   r   r   )r   r   r   c                     ^  U 4S jnU$ )Nc                     > T $ r   r   )kwargss   r   r@  JScopeTests.testComplexDefinitions.<locals>.makeReturner2.<locals>.returnero  s    r   r   )rF  r@  s   ` r   makeReturner28ScopeTests.testComplexDefinitions.<locals>.makeReturner2n  s    Or   re   r   r   r   )r   rB  rH  s      r   testComplexDefinitions!ScopeTests.testComplexDefinitionse  sI    	
 	a!,.8	
 	,.s3R8r   c                     [        S5        g )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)
            r9  r   s    r   testScopeOfGlobalStmt ScopeTests.testScopeOfGlobalStmtu  s     	 O O	r   c                    ^  " U4S jS5      mU4S jn[        S5       H
  nU" 5         M     [        5         U R                  TR                  S5        g )Nc                   2   > \ rS rSrSrU 4S jrU 4S jrSrg)!ScopeTests.testLeaks.<locals>.Fooi  r   c                 0   > T=R                   S-  sl         g Nr   countr   Foos    r   __init__*ScopeTests.testLeaks.<locals>.Foo.__init__      		Q	r   c                 0   > T=R                   S-  sl         g rT  rU  rW  s    r   __del__)ScopeTests.testLeaks.<locals>.Foo.__del__  r[  r   r   N)rQ   rR   rS   rT   rV  rY  r]  rU   )rX  s   r   rX  rR    s    E r   rX  c                  0   >^ T" 5       mU4S jn U " 5         g )Nc                     > T $ r   r   rV   s   r   r  ,ScopeTests.testLeaks.<locals>.f1.<locals>.f2  r  r   r   )r  r   rX  s    @r   r   ScopeTests.testLeaks.<locals>.f1  s    ADr   d   r   )ranger   r   rV  )r   r  irX  s      @r   	testLeaksScopeTests.testLeaks  sB    	 		 sAD  	A&r   c                     [        S5        g )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)
            rM  r   s    r   testClassAndGlobalScopeTests.testClassAndGlobal  s      	r   c                 |    S nU" S5      " S5      nU R                  SU5        US	 U R                  USSSS.5        g )Nc                    ^  U 4S jnU$ )Nc                 :   >^  U 4S jnTT -   nT S-  m [        5       $ )Nc                    > TU -   $ r   r   )rm   r   s    r   rn   >ScopeTests.testLocalsFunction.<locals>.f.<locals>.g.<locals>.h  r)   r   r   )locals)r   rn   wr   s   `  r   rp   3ScopeTests.testLocalsFunction.<locals>.f.<locals>.g  s!    !EQxr   r   rr   s   ` r   rs   (ScopeTests.testLocalsFunction.<locals>.f  s      Hr   r   r   rn      r   )r   r   rq  )assertInr   )r   rs   ds      r   testLocalsFunctionScopeTests.testLocalsFunction  sB    	 aDGc1cF!!!45r   c                     S nU R                  U" S5      R                  S5        S nU" S5      R                  nU R                  SU5        U R	                  SU5        g )Nc                 "   ^   " U 4S jS5      nU$ )Nc                   4   > \ rS rSrSrU 4S jr\" 5         Srg)0ScopeTests.testLocalsClass.<locals>.f.<locals>.Ci     c                    > T$ r   r   r   r   s    r   m2ScopeTests.testLocalsClass.<locals>.f.<locals>.C.m      Hr   r   N)rQ   rR   rS   rT   r   r  rp  rU   rV   s   r   Cr|    s    r   r  r   r   r  s   ` r   rs   %ScopeTests.testLocalsClass.<locals>.f  s     
 Hr   r   r}  c                 "   ^   " U 4S jS5      nU$ )Nc                   B   > \ rS rSr Y rU 4S jr\" \" 5       5      rSr	g)r|  i  c                    > T$ r   r   r  s    r   r  r  !  r  r   r   N)
rQ   rR   rS   rT   r   r  listrp  rm   rU   rV   s   r   r  r|    s    Nr   r  r   r  s   ` r   rs   r    s    # #
 Hr   r   r   )r   r   rm   assertNotInru  )r   rs   varnamess      r   testLocalsClassScopeTests.testLocalsClass	  sS    	 	1$	 Q466h'c8$r   c                    ^ SS K nU R                  UR                  UR                  5       5        UR                  S 5        Sm " U4S jS5      nU R	                  TS5        g )Nr   c                     g r   r   )r   r   r   s      r   r  6ScopeTests.testLocalsClass_WithTrace.<locals>.<lambda>2  s    $r   r}  c                   "   > \ rS rSrU 4S jrSrg)/ScopeTests.testLocalsClass_WithTrace.<locals>.Ci5  c                    > T$ r   r   r  s    r   rs   1ScopeTests.testLocalsClass_WithTrace.<locals>.C.f6  r  r   r   N)rQ   rR   rS   rT   rs   rU   rV   s   r   r  r  5  s     r   r  )sys
addCleanupsettracegettracer   )r   r  r  r   s      @r   testLocalsClass_WithTrace$ScopeTests.testLocalsClass_WithTrace*  sN     	clln5&'	 	 	Br   c                 x    S nU" S5      " 5       nU R                  UR                  UR                  5       5        g )Nc                 "   ^   " U 4S jS5      nU$ )Nc                   (   > \ rS rSrU 4S jr Y rSrg)1ScopeTests.testBoundAndFree.<locals>.f.<locals>.Ci?  c                    > T$ r   r   r  s    r   r  3ScopeTests.testBoundAndFree.<locals>.f.<locals>.C.m@  r  r   r   N)rQ   rR   rS   rT   r  r   rU   rV   s   r   r  r  ?  s    r   r  r   r  s   ` r   rs   &ScopeTests.testBoundAndFree.<locals>.f>  s      Hr   r   )r   r   r  )r   rs   insts      r   testBoundAndFreeScopeTests.testBoundAndFree;  s.    	 tv*r   c                    ^ SS K nU4S jmS n " S S5      nU R                  UR                  UR                  5       5        UR                  T5        U" SUS5        UR                  S 5        U R	                  [
        UR                  5        g )Nr   c                    > T$ r   r   )r   r   r   tracers      r   r  7ScopeTests.testInteractionWithTraceFunc.<locals>.tracerL  s    Mr   c                 \   ^ Uu  nmUS:X  a   TS:X  a  SUR                   < SU < 3mU4S j$ g )Nr    ___c                    > [        U T5      $ r   )getattr)objdess    r   r  NScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetter.<locals>.<lambda>T  s    73#4r   )rQ   )nameklassgetterkindr  s       @r   adaptgetter<ScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetterO  s3    ID#qy"9',~~t<C44 r   c                       \ rS rSrSrg):ScopeTests.testInteractionWithTraceFunc.<locals>.TestClassiV  r   N)rQ   rR   rS   rT   rU   r   r   r   	TestClassr  V  s    r   r  r   )r   r  )r  r  r  r  r&  	TypeError)r   r  r  r  r  s       @r   testInteractionWithTraceFunc'ScopeTests.testInteractionWithTraceFuncH  sn     			5	 	 	clln5VE9g.T)S\\2r   c                     S nU" S5      nU R                  [        [        UR                  5         [	        UR                  0 5        U R                  S5        g ! [         a     g f = f)Nc                    ^  U 4S j$ )Nc                     > T S-   $ rT  r   rV   s   r   r  <ScopeTests.testEvalExecFreeVars.<locals>.f.<locals>.<lambda>c  s	    1q5r   r   rV   s   `r   rs   *ScopeTests.testEvalExecFreeVars.<locals>.fb  s	      r   r   z9exec should have failed, because code contained free vars)r&  r  eval__code__r9  r8  r   rs   rp   s      r   testEvalExecFreeVarsScopeTests.testEvalExecFreeVars`  s_    	! aD)T1::6	SR  IIQR  		s   A 
A'&A'c                      [        [        5        [        S5        S nU" 5          [        [        5        g ! [         a     N'f = f! [         a     g f = f)Nzbad should not be definedc                  d    S V Vs/ s H  o R                  5         H  oPM     M       n ng s  snn f )Nza b)split)sbads     r   r   +ScopeTests.testListCompLocalVars.<locals>.xx  s#    5%Q779CS9S%55s   ",)r  r  r(  r  s     r   testListCompLocalVars ScopeTests.testListCompLocalVarso  sX    	/#J -.	6 	
	#J  		  		s    7 A 
AA
AAc                 $    S nU" S5      " 5         g )Nc                    ^  U 4S jnU$ )Nc                      > T   [        S5        g )Nzx + 1)r  rV   s   r   rp   1ScopeTests.testEvalFreeVars.<locals>.f.<locals>.g  s    Wr   r   rr   s   ` r   rs   &ScopeTests.testEvalFreeVars.<locals>.f  s     Hr   r   r   r   s     r   testEvalFreeVarsScopeTests.testEvalFreeVars  s    	 	
!r   c                      " S S5      ng )Nc                       \ rS rSrS rSrg)+ScopeTests.testFreeingCell.<locals>.Speciali  c                     [        5         g r   )nestedcell_getr   s    r   r]  3ScopeTests.testFreeingCell.<locals>.Special.__del__  s     r   r   N)rQ   rR   rS   rT   r]  rU   r   r   r   Specialr    s    !r   r  r   )r   r  s     r   testFreeingCellScopeTests.testFreeingCell  s    	! 	!r   c                     S nU" S5      u  p#U R                  U" 5       S5        U R                  U" 5       S5        U R                  U" 5       S5        U R                  U" 5       S5        g )Nc                 "   ^  U 4S jnU 4S jnX4$ )Nc                     > T S-  m T $ rT  r   rV   s   r   r    7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.inc      Qr   c                     > T S-  m T $ rT  r   rV   s   r   dec7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.dec  r  r   r   )r   r    r  s   `  r   rs   *ScopeTests.testNonLocalFunction.<locals>.f  s     8Or   r   r   r   r   )r   rs   r    r  s       r   testNonLocalFunctionScopeTests.testNonLocalFunction  s\    		 Q4""""r   c                    S nU" S5      nU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        g )Nc                 ,   ^   " U 4S jS5      nU" 5       $ )Nc                   .   > \ rS rSrU 4S jrU 4S jrSrg)3ScopeTests.testNonLocalMethod.<locals>.f.<locals>.ci  c                    > TS-  mT$ rT  r   r  s    r   r    7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.inc      FAHr   c                    > TS-  mT$ rT  r   r  s    r   r  7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.dec  r  r   r   N)rQ   rR   rS   rT   r    r  rU   rV   s   r   r   r    s     r   r   r   r   r   s   ` r   rs   (ScopeTests.testNonLocalMethod.<locals>.f  s      3Jr   r   r   r   )r   r    r  r   rs   r   s      r   testNonLocalMethodScopeTests.testNonLocalMethod  sj    
	 aD!$!$!$!$r   c                 x    0 n0 n[        SX5        U R                  SUS   5        U R                  SUS   5        g )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   result2r6   result9)r9  r   )r   local_ns	global_nss      r   #testGlobalInParallelNestedFunctions.ScopeTests.testGlobalInParallelNestedFunctions  sL    
 	  	& 	Ii01Ii01r   c                     S nU" S5      nU R                  UR                  5       S5        U R                  SUR                  R                  5        g )Nc                 ,   ^   " U 4S jS5      nU" 5       $ )Nc                   .   > \ rS rSr Y S-  m U 4S jrSrg)2ScopeTests.testNonLocalClass.<locals>.f.<locals>.ci  r   c                    > T$ r   r   r  s    r   get6ScopeTests.testNonLocalClass.<locals>.f.<locals>.c.get  r  r   r   N)rQ   rR   rS   rT   r  rU   rV   s   r   r   r    s    Q r   r   r   r  s   ` r   rs   'ScopeTests.testNonLocalClass.<locals>.f  s     
 3Jr   r   r   r   )r   r  r  	__class____dict__r  s      r   testNonLocalClassScopeTests.testNonLocalClass  sB    	 aD!$akk223r   c                 `    S nU" S5      nU R                  [        U" S5      5      / SQ5        g )Nc                    ^  U 4S jnU$ )Nc              3   D   >#    [        U 5       H  nTS-  mTv   M     g 7frT  )rd  )r   re  r   s     r   rp   6ScopeTests.testNonLocalGenerator.<locals>.f.<locals>.g  s"     qAFAG "s    r   rr   s   ` r   rs   +ScopeTests.testNonLocalGenerator.<locals>.f  s    
 Hr   r   ru   )r   r   r   r   ru   )r   r  r  s      r   testNonLocalGenerator ScopeTests.testNonLocalGenerator  s*    	 aDad_5r   c                 V    S nU" S5      nU" 5       nU R                  U" 5       S5        g )Nc                    ^  U 4S jnU$ )Nc                     > TS-  mU4S jn U $ )Nr   c                     > T S-  m T $ )Nr   r   rV   s   r   rn   >ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g.<locals>.h  r  r   r   )rn   r   s    r   rp   3ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g  s    Q r   r   rr   s   ` r   rs   (ScopeTests.testNestedNonLocal.<locals>.f  s     Hr   r   r   r   )r   rs   rp   rn   s       r   testNestedNonLocalScopeTests.testNestedNonLocal  s+    		 aDCa r   c                     S nS ng )Nc                     g r   r   r   s    r   top/ScopeTests.testTopIsNotSignificant.<locals>.top  s    r   c                      g r   r   r   r   r   r   -ScopeTests.testTopIsNotSignificant.<locals>.b   s    r   r   )r   r  r   s      r   testTopIsNotSignificant"ScopeTests.testTopIsNotSignificant  s    		r   c                    ^ Sm " U4S jS5      nU R                  UR                  S5         " S S5      nU R                  [        US5      5        U R                  TS5        g )Nrk   c                   0   > \ rS rSrS\" 5       S'    Y rSrg)8ScopeTests.testClassNamespaceOverridesClosure.<locals>.Xi  +   r   r   N)rQ   rR   rS   rT   rp  r   rU   rV   s   r   Xr&    s    FHSMAr   r(  r'  c                   *    \ rS rSrS\" 5       S'   CSrg)r&  i
  r'  r   r   N)rQ   rR   rS   rT   rp  r   rU   r   r   r   r(  r&  
  s    FHSMr   r   )r   r   assertFalsehasattr)r   r(  r   s     @r   "testClassNamespaceOverridesClosure-ScopeTests.testClassNamespaceOverridesClosure  sX    	 	 	b!	 	 	C)Br   c                      " S S5      nU" 5       nUR                  5         [        R                  " U5      nA[        5         U R	                  U" 5       5        g )Nc                       \ rS rSrS rSrg)'ScopeTests.testCellLeak.<locals>.Testeri  c                 X   ^    SS-    S m g ! [          a  nUT l         S nAS m g S nAff = fr   )	Exceptionexc)r   r3  s   ` r   dig+ScopeTests.testCellLeak.<locals>.Tester.dig  s9    #aC  ! #"DHH#s    
)$))r3  N)rQ   rR   rS   rT   r4  rU   r   r   r   Testerr0    s    r   r6  )r4  weakrefrefr   assertIsNone)r   r6  testerr8  s       r   testCellLeakScopeTests.testCellLeak  sD    	 	 

kk&!#% r   c                 .    " S S5      nU" 5       nU R                  [        5         UR                  5         S S S 5        UR                  5       nU R                  [        5         U" SS9  S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Nc                        \ rS rSrS rS rSrg)8ScopeTests.test_multiple_nesting.<locals>.MultiplyNestedi/  c                 B    Sn " S S5      nU" 5       R                  SS9$ )Nr   c                       \ rS rSrS rSrg)FScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f1.<locals>.Di2  c                     U$ r   r   r   _D__args     r   rp   HScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f1.<locals>.D.g3      $r   r   NrQ   rR   rS   rT   rp   rU   r   r   r   DrB  2      %r   rI  r   _MultiplyNested__argrp   r   rL  rI  s      r   r  ;ScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f10  s&    % % suu!u44r   c                 <    Sn " S S5      nU" 5       R                   $ )Nr   c                       \ rS rSrS rSrg)FScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f2.<locals>.Di9  c                     U$ r   r   rD  s     r   rp   HScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f2.<locals>.D.g:  rG  r   r   NrH  r   r   r   rI  rR  9  rJ  r   rI  rM  rN  s      r   r  ;ScopeTests.test_multiple_nesting.<locals>.MultiplyNested.f27  s    % % suur   r   N)rQ   rR   rS   rT   r  r  rU   r   r   r   MultiplyNestedr?  /  s    5r   rV  r   rK  )r&  r  r  r  )r   rV  r  closures       r   test_multiple_nesting ScopeTests.test_multiple_nesting-  so    	 	 y)GGI * '')y)+ *)	 *) *)s   A5%B5
B
Br   N)/rQ   rR   rS   rT   r"   r.   r7   rG   rZ   rf   rx   r   r   r   r   r   r   r   r  r*  r5  r:  rJ  rN  rf  ri  rw  r  r   r  r  r  r  r  r  r  r  r  r  r
  r  r  r"  r,  r;  rX  rU   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!"  ! !8,r   r   __main__)
unittestr7  test.supportr   r   r   TestCaser   rQ   mainr   r   r   <module>r_     s>      9 #|,"" |,| zMMO r   