o
    gN                     @   sJ   d dl Z d dlZd dlmZmZ G dd de jZedkr#e   dS dS )    N)check_syntax_errorcpython_onlyc                   @   sH  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ed-d. Zd/d0 Zed1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(edKdL Z)dMS )N
ScopeTestsc                 C   <   dd }|d}|d}|  |dd |  |dd d S )Nc                        fdd}|S )Nc                        |  S N yxr	   E/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_scope.pyadder      z?ScopeTests.testSimpleNesting.<locals>.make_adder.<locals>.adderr	   r   r   r	   r   r   
make_adder      z0ScopeTests.testSimpleNesting.<locals>.make_adder   
         assertEqual)selfr   incplus10r	   r	   r   testSimpleNesting	   s
   zScopeTests.testSimpleNestingc                 C   r   )Nc                    s    fdd}| S )Nc                         fdd} | S )Nc                    r   r   r	   r
   r   r	   r   r      r   zNScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extra.<locals>.adderr	   r   r   r	   r   extra   r   z?ScopeTests.testExtraNesting.<locals>.make_adder2.<locals>.extrar	   )r   r!   r	   r   r   make_adder2      z0ScopeTests.testExtraNesting.<locals>.make_adder2r   r   r   r   r   r   )r   r"   r   r   r	   r	   r   testExtraNesting   
   zScopeTests.testExtraNestingc                 C   s<   dd }|d}|d}|  |dd |  |dd d S )	Nc                    s    fdd} d  |S )Nc                    r   r   r	   r
   r   r	   r   r   (   r   zEScopeTests.testSimpleAndRebinding.<locals>.make_adder3.<locals>.adderr   r	   r   r	   r   r   make_adder3'   s   z6ScopeTests.testSimpleAndRebinding.<locals>.make_adder3r   	   r   r   r   r   r   )r   r&   r   r   r	   r	   r   testSimpleAndRebinding%   
   z!ScopeTests.testSimpleAndRebindingc                    s>    fdd}d | }|  |dd d |  |dd d S )Nc                         fdd} |  S )Nc                     r*   )Nc                     r   )Nc                    r   r   r	   r
   Zglobal_xr	   r   r   8   r   zbScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest.<locals>.adderr	   r    r+   r	   r   nest7   r   zSScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nestr	   r,   r+   r	   r   r,   6   r#   zEScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nestr	   r-   r+   r	   r   make_adder45   s   z7ScopeTests.testNestingGlobalNoFree.<locals>.make_adder4r   r   r   r   r   r   )r   r.   r   r	   r+   r   testNestingGlobalNoFree3   s   	z"ScopeTests.testNestingGlobalNoFreec                 C   r   )Nc                       G  fddd}| S )Nc                          e Zd Z fddZdS )zFScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adderc                    s    | S r   r	   )r   r   r   r	   r   __call__I   r   zOScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adder.__call__N)__name__
__module____qualname__r2   r	   r   r	   r   AdderH       r6   r	   )r   r6   r	   r   r   make_adder5G   s   z7ScopeTests.testNestingThroughClass.<locals>.make_adder5r   r   r   r   r   r   )r   r8   r   r   r	   r	   r   testNestingThroughClassE   r)   z"ScopeTests.testNestingThroughClassc                 C   r   )Nc                 S   s   dd }| a |S )Nc                 S   s   t |  S r   Zglobal_nest_xr
   r	   r	   r   r   W   r   zMScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6.<locals>.adderr:   r   r	   r	   r   make_adder6U   s   z>ScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6r   r      r   r   r   )r   r;   r   r   r	   r	   r   testNestingPlusFreeRefToGlobalS   r%   z)ScopeTests.testNestingPlusFreeRefToGlobalc                 C   s$   dd }|d}|  |dd d S )Nc                 S   s   dd }|dS )Nc                    s   d  fdd}|S )N*   c                    r   r   r	   zr   r	   r   hg   r   zEScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.g.<locals>.hr	   )r   rA   r	   r   r   ge   s   z:ScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.gr   r	   r   rB   r	   r	   r   fd   s   z/ScopeTests.testNearestEnclosingScope.<locals>.fr      /   r   )r   rD   Z	test_funcr	   r	   r   testNearestEnclosingScopeb   s   z$ScopeTests.testNearestEnclosingScopec                    s>   dd   fdd}|ddd}|ddd	}|  | d
 d S )Nc                 S   s   | S r   r	   r   r	   r	   r   identityq      z9ScopeTests.testMixedFreevarsAndCellvars.<locals>.identityc                    s    fdd}|S )Nc                    s&   |  }  fdd}| |S )Nc                      s      S r   r	   r	   )brH   r   r@   r	   r   rA   w   s   zHScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.g.<locals>.hr	   )arJ   crA   )rH   r   r@   )rJ   r   r   rB   u   s   z=ScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.gr	   )r   r   r@   rB   rH   )r   r@   r   rD   t   s   z2ScopeTests.testMixedFreevarsAndCellvars.<locals>.fr   r            '   r   r   rD   rB   rA   r	   rM   r   testMixedFreevarsAndCellvarso   s
   z'ScopeTests.testMixedFreevarsAndCellvarsc                    s   dd }| }|  | d |  | d |  | d d G  fddd}| }|  | d |  | d |  | d d S )Nc                     s   d G  fddd} |  S )Nvarc                       0   e Zd Zdd Z fddZdd Zdd Zd	S )
z:ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Testc                 S      dS Nmethodr	   r   r	   r	   r   method_and_var   rI   zIScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.method_and_varc                        S r   r	   rY   rZ   r	   r   test   rI   z?ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.testc                 S      t dS NglobalstrrY   r	   r	   r   actual_global   r   zHScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.actual_globalc                 S      t | S r   ra   rY   r	   r	   r   rb      r   z>ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.strNr3   r4   r5   rZ   r]   rc   rb   r	   r\   r	   r   Test   s
    rf   r	   )rf   r	   r\   r   r]      s   	z,ScopeTests.testFreeVarInMethod.<locals>.testrT   rX   r`   c                       rU   )
z,ScopeTests.testFreeVarInMethod.<locals>.Testc                 S   rV   rW   r	   rY   r	   r	   r   rZ      rI   z;ScopeTests.testFreeVarInMethod.<locals>.Test.method_and_varc                    r[   r   r	   rY   r\   r	   r   r]      rI   z1ScopeTests.testFreeVarInMethod.<locals>.Test.testc                 S   r^   r_   ra   rY   r	   r	   r   rc      r   z:ScopeTests.testFreeVarInMethod.<locals>.Test.actual_globalc                 S   rd   r   ra   rY   r	   r	   r   rb      r   z0ScopeTests.testFreeVarInMethod.<locals>.Test.strNre   r	   r\   r	   r   rf      s
    rf   )r   r]   rZ   rc   )r   r]   trf   r	   r\   r   testFreeVarInMethod   s   zScopeTests.testFreeVarInMethodc                 C   s2   dddd}|  |ddd |  | d d S )N   rK   c                    s    fdd}| d S )Nc                          d S )NrE   r	   r	   rj   r	   r   bar   r   z8ScopeTests.testCellIsKwonlyArg.<locals>.foo.<locals>.barrN   r	   )rK   rl   r	   rj   r   foo   s   
z+ScopeTests.testCellIsKwonlyArg.<locals>.foor>   2      r   )r   rm   r	   r	   r   testCellIsKwonlyArg   s   zScopeTests.testCellIsKwonlyArgc                 C   s   dd }|  |dd d S )Nc                    s$    fdd | dkr | S t d)Nc                    s   | dkrdS |  | d  S )Nr   r   r	   )nfactr	   r   rs      s   z1ScopeTests.testRecursion.<locals>.f.<locals>.factr   zx must be >= 0)
ValueErrorr   r	   rr   r   rD      s   z#ScopeTests.testRecursion.<locals>.frP   i  r   r   rD   r	   r	   r   testRecursion   s   zScopeTests.testRecursionc                 C   s,   t | d t | d t | d t | d d S )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   rY   r	   r	   r   testUnoptimizedNamespaces   s   


	z$ScopeTests.testUnoptimizedNamespacesc           	         s   dd }|d}|d}|  |dd |  |dd dd }|d}|d}|  |dd |  |dd  fd	d}d |d }|  |dd
 dd }|ddd
}|ddd}|  | d d S )Nc                        fddS )Nc                    r   r   r	   r
   r   r	   r   <lambda>       :ScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>r	   r   r	   r   r   ry          z(ScopeTests.testLambdas.<locals>.<lambda>r   r   r   rE      c                    s    fdd S )Nc                      rx   )Nc                    r   r   r	   r
   r   r	   r   ry      rz   LScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r	   r	   r   r	   r   ry      r|   r{   r	   r   r	   r   r   ry          c                    rx   )Nc                    r   r   r	   r
   r+   r	   r   ry      rz   r{   r	   r   r+   r	   r   ry      r|   rN   c                    s    fddS )Nc                    s    fddS )Nc                      s      S r   r	   r	   )rJ   r   r@   r	   r   ry      r|   r~   r	   rK   rJ   rL   r   r@   )rJ   r   ry      s    r{   r	   )r   r   r@   r	   r   r   ry      r   rO   rP      r   )	r   f1r   r   f2Zf3Zf8rB   rA   r	   r+   r   testLambdas   s$   zScopeTests.testLambdasc                 C   ,   dd }dd }|  t| |  t| d S )Nc                     s   t    fdd} d d S )Nc                      r[   r   r	   r	   r
   r	   r   inner  rI   z@ScopeTests.testUnboundLocal.<locals>.errorInOuter.<locals>.innerr   printr   r	   r
   r   errorInOuter   s   z1ScopeTests.testUnboundLocal.<locals>.errorInOuterc                     s    fdd} |   d d S )Nc                      r[   r   r	   r	   r
   r	   r   r     rI   z@ScopeTests.testUnboundLocal.<locals>.errorInInner.<locals>.innerr   r	   r   r	   r
   r   errorInInner  s   z1ScopeTests.testUnboundLocal.<locals>.errorInInnerassertRaisesUnboundLocalError	NameErrorr   r   r   r	   r	   r   testUnboundLocal   s   zScopeTests.testUnboundLocalc                 C   r   )Nc                     s   d  t    fdd} d S )Nr   c                      r[   r   r	   r	   r
   r	   r   r     rI   zIScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuter.<locals>.innerr   r   r	   r
   r   r     s   z:ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInOuterc                     s    fdd} d  |   d S )Nc                      r[   r   r	   r	   r
   r	   r   r     rI   zIScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInner.<locals>.innerr   r	   r   r	   r
   r   r     s   
z:ScopeTests.testUnboundLocal_AfterDel.<locals>.errorInInnerr   r   r	   r	   r   testUnboundLocal_AfterDel  s   z$ScopeTests.testUnboundLocal_AfterDelc                 C   s   t dd| ji d S )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   rY   r	   r	   r   testUnboundLocal_AugAssign#  s   
z%ScopeTests.testUnboundLocal_AugAssignc                 C   sB   dd }|  |ddd d dd }|  |d	d
 d d	 d S )Nc                     r   )Nc                      r[   r   r	   r	   lstr	   r   returner4  rI   zIScopeTests.testComplexDefinitions.<locals>.makeReturner.<locals>.returnerr	   )r   r   r	   r   r   makeReturner3  r   z7ScopeTests.testComplexDefinitions.<locals>.makeReturnerr   r   rN   )r   r   rN   c                     r   )Nc                      r[   r   r	   r	   kwargsr	   r   r   ;  rI   zJScopeTests.testComplexDefinitions.<locals>.makeReturner2.<locals>.returnerr	   )r   r   r	   r   r   makeReturner2:  r   z8ScopeTests.testComplexDefinitions.<locals>.makeReturner2r<   rj   rK   r   )r   r   r   r	   r	   r   testComplexDefinitions1  s   z!ScopeTests.testComplexDefinitionsc                 C      t d d S )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   rY   r	   r	   r   testScopeOfGlobalStmtA  s   z ScopeTests.testScopeOfGlobalStmtc                    sD   G  fddd  fdd}t dD ]}|  q|  jd d S )Nc                       s(   e Zd ZdZ fddZ fddZdS )z!ScopeTests.testLeaks.<locals>.Foor   c                    s     j d7  _ d S Nr   countrY   Foor	   r   __init__     z*ScopeTests.testLeaks.<locals>.Foo.__init__c                    s     j d8  _ d S r   r   rY   r   r	   r   __del__  r   z)ScopeTests.testLeaks.<locals>.Foo.__del__N)r3   r4   r5   r   r   r   r	   r   r	   r   r     s    r   c                     s      fdd} |   d S )Nc                      r[   r   r	   r	   r   r	   r   r     rI   z,ScopeTests.testLeaks.<locals>.f1.<locals>.f2r	   )r   r   r   r   r     s   
z ScopeTests.testLeaks.<locals>.f1d   r   )ranger   r   )r   r   ir	   r   r   	testLeaks  s
   	zScopeTests.testLeaksc                 C   r   )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   rY   r	   r	   r   testClassAndGlobal  s   zScopeTests.testClassAndGlobalc                 C   s>   dd }|dd}|  d| |d= | |dddd d S )	Nc                    r   )Nc                    s"    fdd}  } d7  t  S )Nc                    r   r   r	   r?   r
   r	   r   rA     r   z>ScopeTests.testLocalsFunction.<locals>.f.<locals>.g.<locals>.hrN   )locals)r   rA   wr   r
   r   rB     s   z3ScopeTests.testLocalsFunction.<locals>.f.<locals>.gr	   rC   r	   r   r   rD     s   z(ScopeTests.testLocalsFunction.<locals>.fr   rO   rA      rP   )r   r   r   )assertInr   )r   rD   dr	   r	   r   testLocalsFunction  s
   	zScopeTests.testLocalsFunctionc                 C   sH   dd }|  |djd dd }|dj}| d| | d| d S )Nc                       G  fddd}|S )Nc                       s"   e Zd ZdZ fddZe  dS )0ScopeTests.testLocalsClass.<locals>.f.<locals>.C   c                    r[   r   r	   rY   r   r	   r   m  rI   2ScopeTests.testLocalsClass.<locals>.f.<locals>.C.mN)r3   r4   r5   r   r   r   r	   r   r	   r   C  s    
r   r	   r   r   r	   r   r   rD        z%ScopeTests.testLocalsClass.<locals>.fr   r   c                    r   )Nc                       s&   e Zd Z Z fddZee ZdS )r   c                    r[   r   r	   rY   r   r	   r   r     rI   r   N)r3   r4   r5   r   r   listr   r@   r	   r   r	   r   r     s    r   r	   r   r	   r   r   rD     r   r   r   )r   r   r@   assertNotInr   )r   rD   varnamesr	   r	   r   testLocalsClass  s   
zScopeTests.testLocalsClassc                    sN   dd l }| |j|  |dd  d G  fddd}|  d d S )Nr   c                 S      d S r   r	   r   r	   r	   r   ry         z6ScopeTests.testLocalsClass_WithTrace.<locals>.<lambda>r   c                       r1   )z/ScopeTests.testLocalsClass_WithTrace.<locals>.Cc                    r[   r   r	   rY   r   r	   r   rD     rI   z1ScopeTests.testLocalsClass_WithTrace.<locals>.C.fN)r3   r4   r5   rD   r	   r   r	   r   r      r7   r   )sys
addCleanupsettracegettracer   )r   r   r   r	   r   r   testLocalsClass_WithTrace  s   z$ScopeTests.testLocalsClass_WithTracec                 C   s(   dd }|d }|  |j|  d S )Nc                    r   )Nc                       s   e Zd Z fddZ ZdS )z1ScopeTests.testBoundAndFree.<locals>.f.<locals>.Cc                    r[   r   r	   rY   r   r	   r   r     rI   z3ScopeTests.testBoundAndFree.<locals>.f.<locals>.C.mN)r3   r4   r5   r   rK   r	   r   r	   r   r   
  s    r   r	   r   r	   r   r   rD   	  s   z&ScopeTests.testBoundAndFree.<locals>.frN   )r   rK   r   )r   rD   instr	   r	   r   testBoundAndFree  s   
zScopeTests.testBoundAndFreec                    sn   dd l } fdd dd }G dd d}| |j|  |  |d|d	 |d  | t|j d S )
Nr   c                    r[   r   r	   r   tracerr	   r   r     rI   z7ScopeTests.testInteractionWithTraceFunc.<locals>.tracerc                    s6   |\} |dkr dkrd|j | f   fddS d S )Nr    z_%s__%sc                    s
   t |  S r   )getattr)objZdesr	   r   ry     s   
 zNScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetter.<locals>.<lambda>)r3   )nameklassgetterkindr	   r   r   adaptgetter  s   z<ScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetterc                   @   s   e Zd ZdS )z:ScopeTests.testInteractionWithTraceFunc.<locals>.TestClassN)r3   r4   r5   r	   r	   r	   r   	TestClass!  s    r   rm   )r   r   )r   r   r   r   r   	TypeError)r   r   r   r   r	   r   r   testInteractionWithTraceFunc  s   

z'ScopeTests.testInteractionWithTraceFuncc                 C   sT   dd }|d}|  tt|j zt|ji  W n
 ty"   Y d S w | d d S )Nc                    rx   )Nc                      rk   r   r	   r	   r   r	   r   ry   .  rz   z<ScopeTests.testEvalExecFreeVars.<locals>.f.<locals>.<lambda>r	   r   r	   r   r   rD   -  s   z*ScopeTests.testEvalExecFreeVars.<locals>.frN   z9exec should have failed, because code contained free vars)r   r   eval__code__r   r   r   rD   rB   r	   r	   r   testEvalExecFreeVars+  s   zScopeTests.testEvalExecFreeVarsc                 C   sZ   zt t W n	 ty   Y nw t d dd }|  zt t W d S  ty,   Y d S w )Nzbad should not be definedc                   S   s   dd dD  d S )Nc                 S   s   g | ]}|  D ]}|qqS r	   )split).0sbadr	   r	   r   
<listcomp>D  s    z?ScopeTests.testListCompLocalVars.<locals>.x.<locals>.<listcomp>za br	   r	   r	   r	   r   r   C  r   z+ScopeTests.testListCompLocalVars.<locals>.x)r   r   r   )r   r   r	   r	   r   testListCompLocalVars:  s   z ScopeTests.testListCompLocalVarsc                 C   s   dd }|d  d S )Nc                    r   )Nc                      s     t d d S )Nzx + 1)r   r	   r   r	   r   rB   O  s   z1ScopeTests.testEvalFreeVars.<locals>.f.<locals>.gr	   rC   r	   r   r   rD   N  s   z&ScopeTests.testEvalFreeVars.<locals>.frO   r	   ru   r	   r	   r   testEvalFreeVarsL  s   zScopeTests.testEvalFreeVarsc                 C   s   G dd d}d S )Nc                   @      e Zd Zdd ZdS )z+ScopeTests.testFreeingCell.<locals>.Specialc                 S   s
   t   d S r   )Znestedcell_getrY   r	   r	   r   r   Z  s   
z3ScopeTests.testFreeingCell.<locals>.Special.__del__N)r3   r4   r5   r   r	   r	   r	   r   SpecialY      r   r	   )r   r   r	   r	   r   testFreeingCellV  s   zScopeTests.testFreeingCellc                 C   sP   dd }|d\}}|  | d |  | d |  | d |  | d d S )Nc                    s     fdd} fdd}||fS )Nc                          d7   S r   r	   r	   r   r	   r   r   `     z7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.incc                          d8   S r   r	   r	   r   r	   r   decd  r   z7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.decr	   )r   r   r   r	   r   r   rD   _  s   z*ScopeTests.testNonLocalFunction.<locals>.fr   r   r   r   )r   rD   r   r   r	   r	   r   testNonLocalFunction]  s   zScopeTests.testNonLocalFunctionc                 C   sT   dd }|d}|  | d |  | d |  | d |  | d d S )Nc                    r0   )Nc                       s$   e Zd Z fddZ fddZdS )z3ScopeTests.testNonLocalMethod.<locals>.f.<locals>.cc                    r   r   r	   rY   r   r	   r   r   s  r   z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.incc                    r   r   r	   rY   r   r	   r   r   w  r   z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.decN)r3   r4   r5   r   r   r	   r   r	   r   rL   r  s    rL   r	   r   rL   r	   r   r   rD   q  s   	z(ScopeTests.testNonLocalMethod.<locals>.fr   r   r   )r   r   r   r   rD   rL   r	   r	   r   testNonLocalMethodp  s   zScopeTests.testNonLocalMethodc                 C   s8   i }i }t d|| | d|d  | d|d  d S )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   Zresult2r'   Zresult9)r   r   )r   Zlocal_nsZ	global_nsr	   r	   r   #testGlobalInParallelNestedFunctions  s   z.ScopeTests.testGlobalInParallelNestedFunctionsc                 C   s4   dd }|d}|  | d | d|jj d S )Nc                    r0   )Nc                       s    e Zd Z d7   fddZdS )z2ScopeTests.testNonLocalClass.<locals>.f.<locals>.cr   c                    r[   r   r	   rY   r   r	   r   get  rI   z6ScopeTests.testNonLocalClass.<locals>.f.<locals>.c.getN)r3   r4   r5   r   r	   r   r	   r   rL     s    rL   r	   r   r	   r   r   rD     s   z'ScopeTests.testNonLocalClass.<locals>.fr   r   r   )r   r   r   	__class____dict__r   r	   r	   r   testNonLocalClass  s   zScopeTests.testNonLocalClassc                 C   s,   dd }|d}|  t|dg d d S )Nc                    r   )Nc                 3   s"    t | D ]	} d7   V  qd S r   )r   )r   r   r   r	   r   rB     s
   z6ScopeTests.testNonLocalGenerator.<locals>.f.<locals>.gr	   rC   r	   r   r   rD     s   z+ScopeTests.testNonLocalGenerator.<locals>.fr   rE   )r   r   rN   rO   rE   )r   r   r   r	   r	   r   testNonLocalGenerator  s   z ScopeTests.testNonLocalGeneratorc                 C   s(   dd }|d}| }|  | d d S )Nc                    r   )Nc                     s    d8   fdd} | S )Nr   c                      r   )NrO   r	   r	   r   r	   r   rA     r   z>ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g.<locals>.hr	   )rA   r   r	   r   rB     s   z3ScopeTests.testNestedNonLocal.<locals>.f.<locals>.gr	   rC   r	   r   r   rD     s   z(ScopeTests.testNestedNonLocal.<locals>.fr   rN   r   rR   r	   r	   r   testNestedNonLocal  s   zScopeTests.testNestedNonLocalc                 C   s   dd }dd }d S )Nc                 S   r   r   r	   rj   r	   r	   r   top  rI   z/ScopeTests.testTopIsNotSignificant.<locals>.topc                   S   r   r   r	   r	   r	   r	   r   rJ     r   z-ScopeTests.testTopIsNotSignificant.<locals>.br	   )r   r   rJ   r	   r	   r   testTopIsNotSignificant  s   z"ScopeTests.testTopIsNotSignificantc                    sR   d G  fddd}|  |jd G dd d}| t|d |   d d S )Nr>   c                       s   e Zd Zde d<  ZdS z8ScopeTests.testClassNamespaceOverridesClosure.<locals>.X+   r   N)r3   r4   r5   r   r   r	   r   r	   r   X  s    
r   r   c                   @   s   e Zd Zde d< [dS r   )r3   r4   r5   r   r   r	   r	   r	   r   r     s    
r   )r   r   ZassertFalsehasattr)r   r   r	   r   r   "testClassNamespaceOverridesClosure  s   z-ScopeTests.testClassNamespaceOverridesClosurec                 C   s8   G dd d}| }|   t|}~| |  d S )Nc                   @   r   )z'ScopeTests.testCellLeak.<locals>.Testerc              
      sF   	 z	dd  W d  d S  t y" } z| _W Y d }~d  d S d }~ww )Nr   c                      r[   r   r	   r	   rY   r	   r   ry     r   z=ScopeTests.testCellLeak.<locals>.Tester.dig.<locals>.<lambda>r   )	Exceptionexc)r   r   r	   rY   r   dig  s   
z+ScopeTests.testCellLeak.<locals>.Tester.digN)r3   r4   r5   r   r	   r	   r	   r   Tester  r   r   )r   weakrefrefZassertIsNone)r   r   Ztesterr  r	   r	   r   testCellLeak  s   	
zScopeTests.testCellLeakN)*r3   r4   r5   r   r$   r(   r/   r9   r=   rG   rS   rh   rp   rv   rw   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   r      sT    %"T!


r   __main__)	Zunittestr  Ztest.supportr   r   ZTestCaser   r3   mainr	   r	   r	   r   <module>   s         v