[case testEmptyFile]
[out]
MypyFile:1()

[case testGlobalVariable]
x = 1
x
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x [__main__.x])
    IntExpr(1)
    builtins.int)
  ExpressionStmt:2(
    NameExpr(x [__main__.x])))

[case testMultipleGlobals]
x = y = 2
z = 3
(x, y, z)
[out]
MypyFile:1(
  AssignmentStmt:1(
    Lvalues(
      NameExpr(x* [__main__.x])
      NameExpr(y* [__main__.y]))
    IntExpr(2))
  AssignmentStmt:2(
    NameExpr(z [__main__.z])
    IntExpr(3)
    builtins.int)
  ExpressionStmt:3(
    TupleExpr:3(
      NameExpr(x [__main__.x])
      NameExpr(y [__main__.y])
      NameExpr(z [__main__.z]))))

[case testEmptyFunction]
def f(): pass
f()
[out]
MypyFile:1(
  FuncDef:1(
    f
    Block:1(
      PassStmt:1()))
  ExpressionStmt:2(
    CallExpr:2(
      NameExpr(f [__main__.f])
      Args())))

[case testAccessingGlobalNameBeforeDefinition]
# flags: --disable-error-code used-before-def
x
f()
x = 1
def f(): pass
[out]
MypyFile:1(
  ExpressionStmt:2(
    NameExpr(x [__main__.x]))
  ExpressionStmt:3(
    CallExpr:3(
      NameExpr(f [__main__.f])
      Args()))
  AssignmentStmt:4(
    NameExpr(x [__main__.x])
    IntExpr(1)
    builtins.int)
  FuncDef:5(
    f
    Block:5(
      PassStmt:5())))

[case testFunctionArgs]
def f(x, y):
  (x, y)
[out]
MypyFile:1(
  FuncDef:1(
    f
    Args(
      Var(x)
      Var(y))
    Block:2(
      ExpressionStmt:2(
        TupleExpr:2(
          NameExpr(x [l])
          NameExpr(y [l]))))))

[case testLocalVar]
def f():
  x = 1
  x
[out]
MypyFile:1(
  FuncDef:1(
    f
    Block:2(
      AssignmentStmt:2(
        NameExpr(x* [l])
        IntExpr(1))
      ExpressionStmt:3(
        NameExpr(x [l])))))

[case testAccessGlobalInFn]
def f():
  x
  g()
x = 1
def g(): pass
[out]
MypyFile:1(
  FuncDef:1(
    f
    Block:2(
      ExpressionStmt:2(
        NameExpr(x [__main__.x]))
      ExpressionStmt:3(
        CallExpr:3(
          NameExpr(g [__main__.g])
          Args()))))
  AssignmentStmt:4(
    NameExpr(x [__main__.x])
    IntExpr(1)
    builtins.int)
  FuncDef:5(
    g
    Block:5(
      PassStmt:5())))

[case testAssignmentAfterInit]
x = 1
x = 2
def f(y):
  y = 1
  z = 1
  z = 2
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x [__main__.x])
    IntExpr(1)
    builtins.int)
  AssignmentStmt:2(
    NameExpr(x [__main__.x])
    IntExpr(2))
  FuncDef:3(
    f
    Args(
      Var(y))
    Block:4(
      AssignmentStmt:4(
        NameExpr(y [l])
        IntExpr(1))
      AssignmentStmt:5(
        NameExpr(z* [l])
        IntExpr(1))
      AssignmentStmt:6(
        NameExpr(z [l])
        IntExpr(2)))))

[case testLocalAndGlobalAliasing]
x = 1
def f():
  x = 2
  x
x
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x [__main__.x])
    IntExpr(1)
    builtins.int)
  FuncDef:2(
    f
    Block:3(
      AssignmentStmt:3(
        NameExpr(x* [l])
        IntExpr(2))
      ExpressionStmt:4(
        NameExpr(x [l]))))
  ExpressionStmt:5(
    NameExpr(x [__main__.x])))

[case testArgumentInitializers]
def f(x = f, y = object):
  x, y
[out]
MypyFile:1(
  FuncDef:1(
    f
    Args(
      default(
        Var(x)
        NameExpr(f [__main__.f]))
      default(
        Var(y)
        NameExpr(object [builtins.object])))
    Block:2(
      ExpressionStmt:2(
        TupleExpr:2(
          NameExpr(x [l])
          NameExpr(y [l]))))))

[case testVarArgs]
def f(x, *y):
  x, y
[out]
MypyFile:1(
  FuncDef:1(
    f
    Args(
      Var(x))
    VarArg(
      Var(y))
    Block:2(
      ExpressionStmt:2(
        TupleExpr:2(
          NameExpr(x [l])
          NameExpr(y [l]))))))

[case testGlobalDecl]
x = None
def f():
    global x
    x = None
    x
class A: pass
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x* [__main__.x])
    NameExpr(None [builtins.None]))
  FuncDef:2(
    f
    Block:3(
      GlobalDecl:3(
        x)
      AssignmentStmt:4(
        NameExpr(x [__main__.x])
        NameExpr(None [builtins.None]))
      ExpressionStmt:5(
        NameExpr(x [__main__.x]))))
  ClassDef:6(
    A
    PassStmt:6()))

[case testMultipleNamesInGlobalDecl]
x, y = None, None
def f():
    global x, y
    x = y
[out]
MypyFile:1(
  AssignmentStmt:1(
    TupleExpr:1(
      NameExpr(x* [__main__.x])
      NameExpr(y* [__main__.y]))
    TupleExpr:1(
      NameExpr(None [builtins.None])
      NameExpr(None [builtins.None])))
  FuncDef:2(
    f
    Block:3(
      GlobalDecl:3(
        x
        y)
      AssignmentStmt:4(
        NameExpr(x [__main__.x])
        NameExpr(y [__main__.y])))))

[case testGlobalDeclScope]
x = None
def f():
    global x
def g():
    x = None
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x* [__main__.x])
    NameExpr(None [builtins.None]))
  FuncDef:2(
    f
    Block:3(
      GlobalDecl:3(
        x)))
  FuncDef:4(
    g
    Block:5(
      AssignmentStmt:5(
        NameExpr(x* [l])
        NameExpr(None [builtins.None])))))

[case testGlobalDeclScope2]
x = None
def f():
    global x
def g():
    x = None
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x* [__main__.x])
    NameExpr(None [builtins.None]))
  FuncDef:2(
    f
    Block:3(
      GlobalDecl:3(
        x)))
  FuncDef:4(
    g
    Block:5(
      AssignmentStmt:5(
        NameExpr(x* [l])
        NameExpr(None [builtins.None])))))

[case testGlobalWithinMethod]
x = None
class A:
  def f(self):
    global x
    x = self
[out]
MypyFile:1(
  AssignmentStmt:1(
    NameExpr(x* [__main__.x])
    NameExpr(None [builtins.None]))
  ClassDef:2(
    A
    FuncDef:3(
      f
      Args(
        Var(self))
      Block:4(
        GlobalDecl:4(
          x)
        AssignmentStmt:5(
          NameExpr(x [__main__.x])
          NameExpr(self [l]))))))

[case testGlobalDefinedInBlock]
# flags: --allow-redefinition
if object:
    x = object()
    x = x
x
[out]
MypyFile:1(
  IfStmt:2(
    If(
      NameExpr(object [builtins.object]))
    Then(
      AssignmentStmt:3(
        NameExpr(x'* [__main__.x'])
        CallExpr:3(
          NameExpr(object [builtins.object])
          Args()))
      AssignmentStmt:4(
        NameExpr(x* [__main__.x])
        NameExpr(x' [__main__.x']))))
  ExpressionStmt:5(
    NameExpr(x [__main__.x])))

[case testNonlocalDecl]
def g():
    x = None
    def f():
        nonlocal x
        x = None
        x
[out]
MypyFile:1(
  FuncDef:1(
    g
    Block:2(
      AssignmentStmt:2(
        NameExpr(x* [l])
        NameExpr(None [builtins.None]))
      FuncDef:3(
        f
        Block:4(
          NonlocalDecl:4(
            x)
          AssignmentStmt:5(
            NameExpr(x [l])
            NameExpr(None [builtins.None]))
          ExpressionStmt:6(
            NameExpr(x [l])))))))

[case testNonlocalClass]
def f() -> None:
    a = 0
    class C:
        nonlocal a
        a = 1
[out]
MypyFile:1(
  FuncDef:1(
    f
    def ()
    Block:2(
      AssignmentStmt:2(
        NameExpr(a* [l])
        IntExpr(0))
      ClassDef:3(
        C
        NonlocalDecl:4(
          a)
        AssignmentStmt:5(
          NameExpr(a* [m])
          IntExpr(1))))))

[case testMultipleNamesInNonlocalDecl]
def g():
    x, y = None, None
    def f(z):
        nonlocal x, y
        x = y
[out]
MypyFile:1(
  FuncDef:1(
    g
    Block:2(
      AssignmentStmt:2(
        TupleExpr:2(
          NameExpr(x* [l])
          NameExpr(y* [l]))
        TupleExpr:2(
          NameExpr(None [builtins.None])
          NameExpr(None [builtins.None])))
      FuncDef:3(
        f
        Args(
          Var(z))
        Block:4(
          NonlocalDecl:4(
            x
            y)
          AssignmentStmt:5(
            NameExpr(x [l])
            NameExpr(y [l])))))))

[case testNestedFunctions]
def f(x):
    def g(y):
        z = y + x
    return g
[out]
MypyFile:1(
  FuncDef:1(
    f
    Args(
      Var(x))
    Block:2(
      FuncDef:2(
        g
        Args(
          Var(y))
        Block:3(
          AssignmentStmt:3(
            NameExpr(z* [l])
            OpExpr:3(
              +
              NameExpr(y [l])
              NameExpr(x [l])))))
      ReturnStmt:4(
        NameExpr(g [l])))))

[case testNestedFunctionWithOverlappingName]
def f(x):
    def g():
        x = 1
[out]
MypyFile:1(
  FuncDef:1(
    f
    Args(
      Var(x))
    Block:2(
      FuncDef:2(
        g
        Block:3(
          AssignmentStmt:3(
            NameExpr(x* [l])
            IntExpr(1)))))))

[case testFinalValuesOnVar]
from typing import Final, Any

def func() -> Any: ...
x: Final = 1
y: Final = 1.0
s: Final = "hi"
t: Final = True
n: Final = func()
[out]
MypyFile:1(
  ImportFrom:1(typing, [Final, Any])
  FuncDef:3(
    func
    def () -> Any
    Block:3(
      ExpressionStmt:3(
        Ellipsis)))
  AssignmentStmt:4(
    NameExpr(x [__main__.x] = 1)
    IntExpr(1)
    Literal[1]?)
  AssignmentStmt:5(
    NameExpr(y [__main__.y] = 1.0)
    FloatExpr(1.0)
    Literal[1.0]?)
  AssignmentStmt:6(
    NameExpr(s [__main__.s] = hi)
    StrExpr(hi)
    Literal['hi']?)
  AssignmentStmt:7(
    NameExpr(t [__main__.t] = True)
    NameExpr(True [builtins.True])
    Literal[True]?)
  AssignmentStmt:8(
    NameExpr(n* [__main__.n] = None)
    CallExpr:8(
      NameExpr(func [__main__.func])
      Args())))
