global_foo = 1


def test_outer_function():
    foo = 1
    def bar():
        <weak_warning descr="Shadows name 'foo' from outer scope">foo</weak_warning>, <weak_warning descr="Shadows name 'bar' from outer scope">bar</weak_warning> = 1, 2
    def baz(<weak_warning descr="Shadows name 'foo' from outer scope">foo</weak_warning>, <weak_warning descr="Shadows name 'bar' from outer scope">bar</weak_warning>, <weak_warning descr="Shadows name 'baz' from outer scope">baz</weak_warning>):
        pass
    def nested():
        def <weak_warning descr="Shadows name 'baz' from outer scope">baz</weak_warning>(<weak_warning descr="Shadows name 'foo' from outer scope">foo</weak_warning>):
            <weak_warning descr="Shadows name 'bar' from outer scope">bar</weak_warning> = 1


def test_outer_class():
    baz = 1
    quux = 2
    spam = 3
    class C(object):
        def foo(self):
            def foo():
                def <weak_warning descr="Shadows name 'bar' from outer scope">bar</weak_warning>():
                    class <weak_warning descr="Shadows name 'C' from outer scope">C</weak_warning>:
                        def baz(self):
                            pass
            def bar():
                pass

            <weak_warning descr="Shadows name 'baz' from outer scope">baz</weak_warning> = 2

        def spam(self):
            pass

        quux = 1


def test_outer_global():
    global global_foo
    global_foo = 2


def test_outer_comprehensions():
    print(x for x in range(10))
    print([y for y in range(10)])
    def f(x, <weak_warning descr="Shadows name 'y' from outer scope">y</weak_warning>):
        pass


def test_outer_single_underscore():
    _ = "abc"
    def foo():
        _ = "def"


# PY-3996
def test_outer_underscore_prefixed():
    _a = "abc"
    def foo():
        <weak_warning descr="Shadows name '_a' from outer scope">_a</weak_warning> = "def"


# PY-3996
def test_outer_underscore_prefixed_parameter():
    def foo(_a):
        def bar(_a):
            print(_a)
        print(_a)
