o
    HXhSO                     @   sV   d dl Z d dlZd dlmZmZ d dlmZ G dd de jZedkr)e 	  dS dS )    N)check_syntax_errorcpython_only)
gc_collectc                   @   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
   9/opt/python-3.10.19/usr/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   9   r   zbScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nest.<locals>.adderr
   r!   r,   r
   r   nest8   r   zSScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nest.<locals>.nestr
   r-   r,   r
   r   r-   7   r$   zEScopeTests.testNestingGlobalNoFree.<locals>.make_adder4.<locals>.nestr
   r.   r,   r
   r   make_adder46   s   z7ScopeTests.testNestingGlobalNoFree.<locals>.make_adder4r   r   r   r   r   r   )r   r/   r   r
   r,   r   testNestingGlobalNoFree4   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__J   r   zOScopeTests.testNestingThroughClass.<locals>.make_adder5.<locals>.Adder.__call__N)__name__
__module____qualname__r3   r
   r   r
   r   AdderI       r7   r
   )r   r7   r
   r   r   make_adder5H   s   z7ScopeTests.testNestingThroughClass.<locals>.make_adder5r   r   r   r   r   r   )r   r9   r   r   r
   r
   r   testNestingThroughClassF   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   X   r   zMScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6.<locals>.adderr;   r   r
   r
   r   make_adder6V   s   z>ScopeTests.testNestingPlusFreeRefToGlobal.<locals>.make_adder6r   r      r   r   r   )r   r<   r   r   r
   r
   r   testNestingPlusFreeRefToGlobalT   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   hh   r   zEScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.g.<locals>.hr
   )r   rB   r
   r   r   gf   s   z:ScopeTests.testNearestEnclosingScope.<locals>.f.<locals>.gr   r
   r   rC   r
   r
   r   fe   s   z/ScopeTests.testNearestEnclosingScope.<locals>.fr      /   r   )r   rE   Z	test_funcr
   r
   r   testNearestEnclosingScopec   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   identityr      z9ScopeTests.testMixedFreevarsAndCellvars.<locals>.identityc                    s    fdd}|S )Nc                    s&   |  }  fdd}| |S )Nc                      s      S r	   r
   r
   )brI   r   rA   r
   r   rB   x   s   zHScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.g.<locals>.hr
   )arK   crB   )rI   r   rA   )rK   r   r   rC   v   s   z=ScopeTests.testMixedFreevarsAndCellvars.<locals>.f.<locals>.gr
   )r   r   rA   rC   rI   )r   rA   r   rE   u   s   z2ScopeTests.testMixedFreevarsAndCellvars.<locals>.fr   r            '   r   r   rE   rC   rB   r
   rN   r   testMixedFreevarsAndCellvarsp   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   rJ   zIScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.method_and_varc                        S r	   r
   rZ   r[   r
   r   test   rJ   z?ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.testc                 S      t dS NglobalstrrZ   r
   r
   r   actual_global   r   zHScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.actual_globalc                 S      t | S r	   rb   rZ   r
   r
   r   rc      r   z>ScopeTests.testFreeVarInMethod.<locals>.test.<locals>.Test.strNr4   r5   r6   r[   r^   rd   rc   r
   r]   r
   r   Test   s
    rg   r
   )rg   r
   r]   r   r^      s   	z,ScopeTests.testFreeVarInMethod.<locals>.testrU   rY   ra   c                       rV   )
z,ScopeTests.testFreeVarInMethod.<locals>.Testc                 S   rW   rX   r
   rZ   r
   r
   r   r[      rJ   z;ScopeTests.testFreeVarInMethod.<locals>.Test.method_and_varc                    r\   r	   r
   rZ   r]   r
   r   r^      rJ   z1ScopeTests.testFreeVarInMethod.<locals>.Test.testc                 S   r_   r`   rb   rZ   r
   r
   r   rd      r   z:ScopeTests.testFreeVarInMethod.<locals>.Test.actual_globalc                 S   re   r	   rb   rZ   r
   r
   r   rc      r   z0ScopeTests.testFreeVarInMethod.<locals>.Test.strNrf   r
   r]   r
   r   rg      s
    rg   )r   r^   r[   rd   )r   r^   trg   r
   r]   r   testFreeVarInMethod   s   zScopeTests.testFreeVarInMethodc                 C   s2   dddd}|  |ddd |  | d d S )N   rL   c                    s    fdd}| d S )Nc                          d S )NrF   r
   r
   rk   r
   r   bar   r   z8ScopeTests.testCellIsKwonlyArg.<locals>.foo.<locals>.barrO   r
   )rL   rm   r
   rk   r   foo   s   
z+ScopeTests.testCellIsKwonlyArg.<locals>.foor?   2      r   )r   rn   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   rt      s   z1ScopeTests.testRecursion.<locals>.f.<locals>.factr   zx must be >= 0)
ValueErrorr   r
   rs   r   rE      s   z#ScopeTests.testRecursion.<locals>.frQ   i  r   r   rE   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   rZ   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   rz          z(ScopeTests.testLambdas.<locals>.<lambda>r   r   r   rF      c                    s    fdd S )Nc                      ry   )Nc                    r   r	   r
   r   r   r
   r   rz      r{   LScopeTests.testLambdas.<locals>.<lambda>.<locals>.<lambda>.<locals>.<lambda>r
   r
   r   r
   r   rz      r}   r|   r
   r   r
   r   r   rz          c                    ry   )Nc                    r   r	   r
   r   r,   r
   r   rz      r{   r|   r
   r   r,   r
   r   rz      r}   rO   c                    s    fddS )Nc                    s    fddS )Nc                      s      S r	   r
   r
   )rK   r   rA   r
   r   rz      r}   r   r
   rL   rK   rM   r   rA   )rK   r   rz      s    r|   r
   )r   r   rA   r
   r   r   rz      r   rP   rQ      r   )	r   f1r   r   f2Zf3Zf8rC   rB   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  rJ   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     rJ   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     rJ   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     rJ   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   rZ   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   returner5  rJ   zIScopeTests.testComplexDefinitions.<locals>.makeReturner.<locals>.returnerr
   )r   r   r
   r   r   makeReturner4  r   z7ScopeTests.testComplexDefinitions.<locals>.makeReturnerr   r   rO   )r   r   rO   c                     r   )Nc                      r\   r	   r
   r
   kwargsr
   r   r   <  rJ   zJScopeTests.testComplexDefinitions.<locals>.makeReturner2.<locals>.returnerr
   )r   r   r
   r   r   makeReturner2;  r   z8ScopeTests.testComplexDefinitions.<locals>.makeReturner2r=   rk   rL   r   )r   r   r   r
   r
   r   testComplexDefinitions2  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   rZ   r
   r
   r   testScopeOfGlobalStmtB  s   z ScopeTests.testScopeOfGlobalStmtc                    sJ   G  fddd  fdd}t dD ]}|  qt  |  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   countrZ   Foor
   r   __init__     z*ScopeTests.testLeaks.<locals>.Foo.__init__c                    s     j d8  _ d S r   r   rZ   r   r
   r   __del__  r   z)ScopeTests.testLeaks.<locals>.Foo.__del__N)r4   r5   r6   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     rJ   z,ScopeTests.testLeaks.<locals>.f1.<locals>.f2r
   )r   r   r   r   r     s   
z ScopeTests.testLeaks.<locals>.f1d   r   )ranger   r   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   rZ   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   rB     r   z>ScopeTests.testLocalsFunction.<locals>.f.<locals>.g.<locals>.hrO   )locals)r   rB   wr   r   r   rC     s   z3ScopeTests.testLocalsFunction.<locals>.f.<locals>.gr
   rD   r
   r   r   rE     s   z(ScopeTests.testLocalsFunction.<locals>.fr   rP   rB      rQ   )r   r   r   )assertInr   )r   rE   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
   rZ   r   r
   r   m  rJ   2ScopeTests.testLocalsClass.<locals>.f.<locals>.C.mN)r4   r5   r6   r   r   r   r
   r   r
   r   C  s    
r   r
   r   r   r
   r   r   rE        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
   rZ   r   r
   r   r     rJ   r   N)r4   r5   r6   r   r   listr   rA   r
   r   r
   r   r     s    r   r
   r   r
   r   r   rE     r   r   r   )r   r   rA   assertNotInr   )r   rE   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   rz         z6ScopeTests.testLocalsClass_WithTrace.<locals>.<lambda>r   c                       r2   )z/ScopeTests.testLocalsClass_WithTrace.<locals>.Cc                    r\   r	   r
   rZ   r   r
   r   rE     rJ   z1ScopeTests.testLocalsClass_WithTrace.<locals>.C.fN)r4   r5   r6   rE   r
   r   r
   r   r     r8   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
   rZ   r   r
   r   r     rJ   z3ScopeTests.testBoundAndFree.<locals>.f.<locals>.C.mN)r4   r5   r6   r   rL   r
   r   r
   r   r     s    r   r
   r   r
   r   r   rE     s   z&ScopeTests.testBoundAndFree.<locals>.frO   )r   rL   r   )r   rE   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     rJ   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   rz   !  s   
 zNScopeTests.testInteractionWithTraceFunc.<locals>.adaptgetter.<locals>.<lambda>)r4   )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)r4   r5   r6   r
   r
   r
   r   	TestClass#  s    r   rn   )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                    ry   )Nc                      rl   r   r
   r
   r   r
   r   rz   0  r{   z<ScopeTests.testEvalExecFreeVars.<locals>.f.<locals>.<lambda>r
   r   r
   r   r   rE   /  s   z*ScopeTests.testEvalExecFreeVars.<locals>.frO   z9exec should have failed, because code contained free vars)r   r   eval__code__r   r   r   rE   rC   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>F  s    z?ScopeTests.testListCompLocalVars.<locals>.x.<locals>.<listcomp>za br
   r
   r
   r
   r   r   E  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   rC   Q  s   z1ScopeTests.testEvalFreeVars.<locals>.f.<locals>.gr
   rD   r
   r   r   rE   P  s   z&ScopeTests.testEvalFreeVars.<locals>.frP   r
   rv   r
   r
   r   testEvalFreeVarsN  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_getrZ   r
   r
   r   r   \  s   
z3ScopeTests.testFreeingCell.<locals>.Special.__del__N)r4   r5   r6   r   r
   r
   r
   r   Special[      r   r
   )r   r   r
   r
   r   testFreeingCellX  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   b     z7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.incc                          d8   S r   r
   r
   r   r
   r   decf  r   z7ScopeTests.testNonLocalFunction.<locals>.f.<locals>.decr
   )r   r   r   r
   r   r   rE   a  s   z*ScopeTests.testNonLocalFunction.<locals>.fr   r   r   r   )r   rE   r   r   r
   r
   r   testNonLocalFunction_  s   zScopeTests.testNonLocalFunctionc                 C   sT   dd }|d}|  | d |  | d |  | d |  | d d S )Nc                    r1   )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
   rZ   r   r
   r   r   u  r   z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.incc                    r   r   r
   rZ   r   r
   r   r   y  r   z7ScopeTests.testNonLocalMethod.<locals>.f.<locals>.c.decN)r4   r5   r6   r   r   r
   r   r
   r   rM   t  s    rM   r
   r   rM   r
   r   r   rE   s  s   	z(ScopeTests.testNonLocalMethod.<locals>.fr   r   r   )r   r   r   r   rE   rM   r
   r
   r   testNonLocalMethodr  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                    r1   )Nc                       s    e Zd Z d7   fddZdS )z2ScopeTests.testNonLocalClass.<locals>.f.<locals>.cr   c                    r\   r	   r
   rZ   r   r
   r   get  rJ   z6ScopeTests.testNonLocalClass.<locals>.f.<locals>.c.getN)r4   r5   r6   r   r
   r   r
   r   rM     s    rM   r
   r   r
   r   r   rE     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   rC     s
   z6ScopeTests.testNonLocalGenerator.<locals>.f.<locals>.gr
   rD   r
   r   r   rE     s   z+ScopeTests.testNonLocalGenerator.<locals>.fr   rF   )r   r   rO   rP   rF   )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   )NrP   r
   r
   r   r
   r   rB     r   z>ScopeTests.testNestedNonLocal.<locals>.f.<locals>.g.<locals>.hr
   )rB   r   r
   r   rC     s   z3ScopeTests.testNestedNonLocal.<locals>.f.<locals>.gr
   rD   r
   r   r   rE     s   z(ScopeTests.testNestedNonLocal.<locals>.fr   rO   r   rS   r
   r
   r   testNestedNonLocal  s   zScopeTests.testNestedNonLocalc                 C   s   dd }dd }d S )Nc                 S   r   r	   r
   rk   r
   r
   r   top  rJ   z/ScopeTests.testTopIsNotSignificant.<locals>.topc                   S   r   r	   r
   r
   r
   r
   r   rK     r   z-ScopeTests.testTopIsNotSignificant.<locals>.br
   )r   r   rK   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)r4   r5   r6   r   r   r
   r   r
   r   X  s    
r   r   c                   @   s   e Zd Zde d< [dS r   )r4   r5   r6   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   s>   G dd d}| }|   t|}~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
   rZ   r
   r   rz     r   z=ScopeTests.testCellLeak.<locals>.Tester.dig.<locals>.<lambda>r   )	Exceptionexc)r   r   r
   rZ   r   dig  s   
z+ScopeTests.testCellLeak.<locals>.Tester.digN)r4   r5   r6   r   r
   r
   r
   r   Tester  r   r  )r   weakrefrefr   ZassertIsNone)r   r  Ztesterr  r
   r
   r   testCellLeak  s   	
zScopeTests.testCellLeakN)*r4   r5   r6   r   r%   r)   r0   r:   r>   rH   rT   ri   rq   rw   rx   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   r   ZTestCaser   r4   mainr
   r
   r
   r   <module>   s         x