| -- NOTE: If a module has a name starting or ending with _, it is skipped in |
| -- output. |
| |
| [case testImport] |
| import x |
| x.y |
| [file x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| Import:1(x) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(x) |
| y [x.y]))) |
| MypyFile:1( |
| tmp/x.py |
| AssignmentStmt:1( |
| NameExpr(y [x.y]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testImportedNameInType] |
| import m |
| x = None # type: m.c |
| [file m.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| Import:1(m) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| m.c)) |
| MypyFile:1( |
| tmp/m.py |
| ClassDef:1( |
| c |
| PassStmt:1())) |
| |
| [case testImportFrom] |
| from m import y |
| x = y |
| [file m.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m, [y]) |
| AssignmentStmt:2( |
| NameExpr(x* [__main__.x]) |
| NameExpr(y [m.y]))) |
| MypyFile:1( |
| tmp/m.py |
| AssignmentStmt:1( |
| NameExpr(y [m.y]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testImportFromType] |
| from m import c |
| x = None # type: c |
| [file m.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m, [c]) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| m.c)) |
| MypyFile:1( |
| tmp/m.py |
| ClassDef:1( |
| c |
| PassStmt:1())) |
| |
| [case testImportMultiple] |
| import _m, _n |
| _m.x, _n.y |
| [fixture _m.py] |
| x = 1 |
| [fixture _n.py] |
| y = 2 |
| [out] |
| MypyFile:1( |
| Import:1(_m, _n) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| MemberExpr:2( |
| NameExpr(_m) |
| x [_m.x]) |
| MemberExpr:2( |
| NameExpr(_n) |
| y [_n.y])))) |
| |
| [case testImportAs] |
| import _m as n |
| n.x |
| [fixture _m.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(_m : n) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(n [_m]) |
| x [_m.x]))) |
| |
| [case testImportFromMultiple] |
| from _m import x, y |
| x, y |
| [fixture _m.py] |
| x = y = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(_m, [x, y]) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| NameExpr(x [_m.x]) |
| NameExpr(y [_m.y])))) |
| |
| [case testImportFromAs] |
| from _m import y as z |
| z |
| [fixture _m.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(_m, [y : z]) |
| ExpressionStmt:2( |
| NameExpr(z [_m.y]))) |
| |
| [case testAccessImportedName] |
| from m import x |
| y = x |
| [file m.py] |
| from _n import x |
| [fixture _n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m, [x]) |
| AssignmentStmt:2( |
| NameExpr(y* [__main__.y]) |
| NameExpr(x [_n.x]))) |
| MypyFile:1( |
| tmp/m.py |
| ImportFrom:1(_n, [x])) |
| |
| [case testAccessImportedName2] |
| import _m |
| y = _m.x |
| [fixture _m.py] |
| from _n import x |
| [fixture _n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| AssignmentStmt:2( |
| NameExpr(y* [__main__.y]) |
| MemberExpr:2( |
| NameExpr(_m) |
| x [_n.x]))) |
| |
| [case testAccessingImportedNameInType] |
| from _m import c |
| x = None # type: c |
| [fixture _m.py] |
| from _n import c |
| [fixture _n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| ImportFrom:1(_m, [c]) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| _n.c)) |
| |
| [case testAccessingImportedNameInType2] |
| import _m |
| x = None # type: _m.c |
| [fixture _m.py] |
| from _n import c |
| [fixture _n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| _n.c)) |
| |
| [case testAccessingImportedModule] |
| from _m import _n |
| _n.x |
| [fixture _m.py] |
| import _n |
| [fixture _n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(_m, [_n]) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(_n) |
| x [_n.x]))) |
| |
| [case testAccessingImportedModule2] |
| import _m |
| _m._n.x |
| [fixture _m.py] |
| import _n |
| [fixture _n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(_m) |
| _n) |
| x [_n.x]))) |
| |
| [case testAccessTypeViaDoubleIndirection] |
| from _m import c |
| a = None # type: c |
| [fixture _m.py] |
| from _n import c |
| [fixture _n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| ImportFrom:1(_m, [c]) |
| AssignmentStmt:2( |
| NameExpr(a [__main__.a]) |
| NameExpr(None [builtins.None]) |
| _n.c)) |
| |
| [case testAccessTypeViaDoubleIndirection2] |
| import _m |
| a = None # type: _m.c |
| [fixture _m.py] |
| from _n import c |
| [fixture _n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| AssignmentStmt:2( |
| NameExpr(a [__main__.a]) |
| NameExpr(None [builtins.None]) |
| _n.c)) |
| |
| [case testImportAsterisk] |
| from _m import * |
| x, y |
| [fixture _m.py] |
| x = y = 1 |
| [out] |
| MypyFile:1( |
| ImportAll:1(_m) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| NameExpr(x [_m.x]) |
| NameExpr(y [_m.y])))) |
| |
| [case testImportAsteriskAndImportedNames] |
| from _m import * |
| n_.x, y |
| [fixture _m.py] |
| import n_ |
| from n_ import y |
| [fixture n_.py] |
| x = y = 1 |
| [out] |
| MypyFile:1( |
| ImportAll:1(_m) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| MemberExpr:2( |
| NameExpr(n_) |
| x [n_.x]) |
| NameExpr(y [n_.y])))) |
| |
| [case testImportAsteriskAndImportedNamesInTypes] |
| from _m import * |
| x = None # type: n_.c |
| y = None # type: d |
| [fixture _m.py] |
| import n_ |
| from n_ import d |
| [fixture n_.py] |
| class c: pass |
| class d: pass |
| [out] |
| MypyFile:1( |
| ImportAll:1(_m) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| n_.c) |
| AssignmentStmt:3( |
| NameExpr(y [__main__.y]) |
| NameExpr(None [builtins.None]) |
| n_.d)) |
| |
| [case testModuleInSubdir] |
| import _m |
| _m.x |
| [fixture _m/__init__.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(_m) |
| x [_m.x]))) |
| |
| [case testNestedModules] |
| import m.n |
| m.n.x, m.y |
| [fixture m/__init__.py] |
| y = 1 |
| [file m/n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(m.n) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(m) |
| n [m.n]) |
| x [m.n.x]) |
| MemberExpr:2( |
| NameExpr(m) |
| y [m.y])))) |
| MypyFile:1( |
| tmp/m/n.py |
| AssignmentStmt:1( |
| NameExpr(x [m.n.x]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testImportFromSubmodule] |
| from m._n import x |
| x |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m._n, [x]) |
| ExpressionStmt:2( |
| NameExpr(x [m._n.x]))) |
| |
| [case testImportAllFromSubmodule] |
| from m._n import * |
| x, y |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| x = y = 1 |
| [out] |
| MypyFile:1( |
| ImportAll:1(m._n) |
| ExpressionStmt:2( |
| TupleExpr:2( |
| NameExpr(x [m._n.x]) |
| NameExpr(y [m._n.y])))) |
| |
| [case testSubmodulesAndTypes] |
| import m._n |
| x = None # type: m._n.c |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| Import:1(m._n) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| m._n.c)) |
| |
| [case testSubmodulesAndTypes2] |
| from m._n import c |
| x = None # type: c |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| class c: pass |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m._n, [c]) |
| AssignmentStmt:2( |
| NameExpr(x [__main__.x]) |
| NameExpr(None [builtins.None]) |
| m._n.c)) |
| |
| [case testFromPackageImportModule] |
| from m import _n |
| _n.x |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| ImportFrom:1(m, [_n]) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(_n [m._n]) |
| x [m._n.x]))) |
| |
| [case testDeeplyNestedModule] |
| import m.n.k |
| m.n.k.x |
| m.n.b |
| m.a |
| [fixture m/__init__.py] |
| a = 1 |
| [fixture m/n/__init__.py] |
| b = 1 |
| [file m/n/k.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(m.n.k) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(m) |
| n [m.n]) |
| k [m.n.k]) |
| x [m.n.k.x])) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| MemberExpr:3( |
| NameExpr(m) |
| n [m.n]) |
| b [m.n.b])) |
| ExpressionStmt:4( |
| MemberExpr:4( |
| NameExpr(m) |
| a [m.a]))) |
| MypyFile:1( |
| tmp/m/n/k.py |
| AssignmentStmt:1( |
| NameExpr(x [m.n.k.x]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testImportInSubmodule] |
| import m._n |
| y = m._n.x |
| [fixture m/__init__.py] |
| [fixture m/_n.py] |
| from m._k import x |
| [fixture m/_k.py] |
| x = 1 |
| [out] |
| MypyFile:1( |
| Import:1(m._n) |
| AssignmentStmt:2( |
| NameExpr(y* [__main__.y]) |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(m) |
| _n [m._n]) |
| x [m._k.x]))) |
| |
| [case testBuiltinsUsingModule] |
| o = None # type: __builtins__.object |
| [out] |
| MypyFile:1( |
| AssignmentStmt:1( |
| NameExpr(o [__main__.o]) |
| NameExpr(None [builtins.None]) |
| builtins.object)) |
| |
| [case testImplicitAccessToBuiltins] |
| object |
| [out] |
| MypyFile:1( |
| ExpressionStmt:1( |
| NameExpr(object [builtins.object]))) |
| |
| [case testAssignmentToModuleAttribute] |
| import _m |
| _m.x = ( |
| _m.x) |
| [fixture _m.py] |
| x = None |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| AssignmentStmt:2( |
| MemberExpr:2( |
| NameExpr(_m) |
| x [_m.x]) |
| MemberExpr:3( |
| NameExpr(_m) |
| x [_m.x]))) |
| |
| [case testAssignmentThatRefersToModule] |
| import _m |
| _m.x[None] = None |
| [fixture _m.py] |
| x = None |
| [out] |
| MypyFile:1( |
| Import:1(_m) |
| AssignmentStmt:2( |
| IndexExpr:2( |
| MemberExpr:2( |
| NameExpr(_m) |
| x [_m.x]) |
| NameExpr(None [builtins.None])) |
| NameExpr(None [builtins.None]))) |
| |
| [case testImportInBlock] |
| if 1: |
| import _x |
| _x.y |
| [fixture _x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| IfStmt:1( |
| If( |
| IntExpr(1)) |
| Then( |
| Import:2(_x) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| NameExpr(_x) |
| y [_x.y]))))) |
| |
| [case testImportInFunction] |
| def f() -> None: |
| import _x |
| _x.y |
| [fixture _x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| FuncDef:1( |
| f |
| def () |
| Block:2( |
| Import:2(_x) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| NameExpr(_x) |
| y [_x.y]))))) |
| |
| [case testImportInClassBody] |
| class A: |
| from _x import y |
| z = y |
| [fixture _x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| ClassDef:1( |
| A |
| ImportFrom:2(_x, [y]) |
| AssignmentStmt:3( |
| NameExpr(z* [m]) |
| NameExpr(y [__main__.A.y])))) |
| |
| [case testImportInClassBody2] |
| class A: |
| import _x |
| z = _x.y |
| [fixture _x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| ClassDef:1( |
| A |
| Import:2(_x) |
| AssignmentStmt:3( |
| NameExpr(z* [m]) |
| MemberExpr:3( |
| NameExpr(_x) |
| y [_x.y])))) |
| |
| [case testImportModuleTwice] |
| def f() -> None: |
| import x |
| import x |
| x.y |
| [file x.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| FuncDef:1( |
| f |
| def () |
| Block:2( |
| Import:2(x) |
| Import:3(x) |
| ExpressionStmt:4( |
| MemberExpr:4( |
| NameExpr(x) |
| y [x.y]))))) |
| MypyFile:1( |
| tmp/x.py |
| AssignmentStmt:1( |
| NameExpr(y [x.y]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testRelativeImport0] |
| import m.x |
| m.x.z.y |
| [fixture m/__init__.py] |
| [file m/x.py] |
| from . import z |
| [file m/z.py] |
| y = 1 |
| [out] |
| MypyFile:1( |
| Import:1(m.x) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(m) |
| x [m.x]) |
| z [m.z]) |
| y [m.z.y]))) |
| MypyFile:1( |
| tmp/m/x.py |
| ImportFrom:1(., [z])) |
| MypyFile:1( |
| tmp/m/z.py |
| AssignmentStmt:1( |
| NameExpr(y [m.z.y]) |
| IntExpr(1) |
| builtins.int)) |
| |
| [case testRelativeImport1] |
| import m.t.b as b |
| b.x.y |
| b.z.y |
| [fixture m/__init__.py] |
| [file m/x.py] |
| y = 1 |
| [file m/z.py] |
| y = 3 |
| [fixture m/t/__init__.py] |
| [file m/t/b.py] |
| from .. import x, z |
| [out] |
| MypyFile:1( |
| Import:1(m.t.b : b) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| MemberExpr:2( |
| NameExpr(b [m.t.b]) |
| x [m.x]) |
| y [m.x.y])) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| MemberExpr:3( |
| NameExpr(b [m.t.b]) |
| z [m.z]) |
| y [m.z.y]))) |
| MypyFile:1( |
| tmp/m/t/b.py |
| ImportFrom:1(.., [x, z])) |
| MypyFile:1( |
| tmp/m/x.py |
| AssignmentStmt:1( |
| NameExpr(y [m.x.y]) |
| IntExpr(1) |
| builtins.int)) |
| MypyFile:1( |
| tmp/m/z.py |
| AssignmentStmt:1( |
| NameExpr(y [m.z.y]) |
| IntExpr(3) |
| builtins.int)) |
| |
| [case testRelativeImport2] |
| import m.t.b as b |
| b.xy |
| b.zy |
| [fixture m/__init__.py] |
| [file m/x.py] |
| y = 1 |
| [file m/z.py] |
| y = 3 |
| [fixture m/t/__init__.py] |
| [file m/t/b.py] |
| from ..x import y as xy |
| from ..z import y as zy |
| [out] |
| MypyFile:1( |
| Import:1(m.t.b : b) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(b [m.t.b]) |
| xy [m.x.y])) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| NameExpr(b [m.t.b]) |
| zy [m.z.y]))) |
| MypyFile:1( |
| tmp/m/t/b.py |
| ImportFrom:1(..x, [y : xy]) |
| ImportFrom:2(..z, [y : zy])) |
| MypyFile:1( |
| tmp/m/x.py |
| AssignmentStmt:1( |
| NameExpr(y [m.x.y]) |
| IntExpr(1) |
| builtins.int)) |
| MypyFile:1( |
| tmp/m/z.py |
| AssignmentStmt:1( |
| NameExpr(y [m.z.y]) |
| IntExpr(3) |
| builtins.int)) |
| |
| [case testRelativeImport3] |
| import m.t |
| m.zy |
| m.xy |
| m.t.y |
| [fixture m/__init__.py] |
| from .x import * |
| from .z import * |
| [file m/x.py] |
| from .z import zy as xy |
| [file m/z.py] |
| zy = 3 |
| [fixture m/t/__init__.py] |
| from .b import * |
| [file m/t/b.py] |
| from .. import xy as y |
| [out] |
| MypyFile:1( |
| Import:1(m.t) |
| ExpressionStmt:2( |
| MemberExpr:2( |
| NameExpr(m) |
| zy [m.z.zy])) |
| ExpressionStmt:3( |
| MemberExpr:3( |
| NameExpr(m) |
| xy [m.z.zy])) |
| ExpressionStmt:4( |
| MemberExpr:4( |
| MemberExpr:4( |
| NameExpr(m) |
| t [m.t]) |
| y [m.z.zy]))) |
| MypyFile:1( |
| tmp/m/t/b.py |
| ImportFrom:1(.., [xy : y])) |
| MypyFile:1( |
| tmp/m/x.py |
| ImportFrom:1(.z, [zy : xy])) |
| MypyFile:1( |
| tmp/m/z.py |
| AssignmentStmt:1( |
| NameExpr(zy [m.z.zy]) |
| IntExpr(3) |
| builtins.int)) |
| |
| [case testRelativeImportFromSameModule] |
| import m.x |
| [fixture m/__init__.py] |
| [file m/x.py] |
| from .x import nonexistent |
| [out] |
| tmp/m/x.py:1: error: Module "m.x" has no attribute "nonexistent" |
| |
| [case testImportFromSameModule] |
| import m.x |
| [fixture m/__init__.py] |
| [file m/x.py] |
| from m.x import nonexistent |
| [out] |
| tmp/m/x.py:1: error: Module "m.x" has no attribute "nonexistent" |
| |
| [case testImportMisspellingSingleCandidate] |
| import f |
| [fixture m/__init__.py] |
| [file m/x.py] |
| def some_function(): |
| pass |
| [file f.py] |
| from m.x import somefunction |
| [out] |
| tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function"? |
| |
| [case testImportMisspellingMultipleCandidates] |
| import f |
| [fixture m/__init__.py] |
| [file m/x.py] |
| def some_function(): |
| pass |
| def somef_unction(): |
| pass |
| [file f.py] |
| from m.x import somefunction |
| [out] |
| tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function" or "somef_unction"? |
| |
| [case testImportMisspellingMultipleCandidatesTruncated] |
| import f |
| [fixture m/__init__.py] |
| [file m/x.py] |
| def some_function(): |
| pass |
| def somef_unction(): |
| pass |
| def somefu_nction(): |
| pass |
| def somefun_ction(): |
| pass |
| [file f.py] |
| from m.x import somefunction |
| [out] |
| tmp/f.py:1: error: Module "m.x" has no attribute "somefunction"; maybe "some_function", "somef_unction", or "somefu_nction"? |
| |
| [case testFromImportAsInStub] |
| from m import * |
| x |
| y # E: Name "y" is not defined |
| [file m.pyi] |
| from m2 import x as x |
| from m2 import y |
| [file m2.py] |
| x = 1 |
| y = 2 |
| [out] |
| |
| [case testFromImportAsInNonStub] |
| from m_ import * |
| x |
| y |
| [fixture m_.py] |
| from m2_ import x as x |
| from m2_ import y |
| [fixture m2_.py] |
| x = 1 |
| y = 2 |
| [out] |
| MypyFile:1( |
| ImportAll:1(m_) |
| ExpressionStmt:2( |
| NameExpr(x [m2_.x])) |
| ExpressionStmt:3( |
| NameExpr(y [m2_.y]))) |
| |
| [case testImportAsInStub] |
| from m import * |
| m2 |
| m3 # E: Name "m3" is not defined |
| [file m.pyi] |
| import m2 as m2 |
| import m3 |
| [file m2.py] |
| [file m3.py] |
| [out] |
| |
| [case testImportAsInNonStub] |
| from m_ import * |
| m2_ |
| m3_ |
| [fixture m_.py] |
| import m2_ as m2_ |
| import m3_ |
| [fixture m2_.py] |
| [fixture m3_.py] |
| [out] |
| MypyFile:1( |
| ImportAll:1(m_) |
| ExpressionStmt:2( |
| NameExpr(m2_)) |
| ExpressionStmt:3( |
| NameExpr(m3_))) |
| |
| [case testErrorsInMultipleModules] |
| import m |
| x |
| [file m.py] |
| y |
| [out] |
| tmp/m.py:1: error: Name "y" is not defined |
| main:2: error: Name "x" is not defined |
| |
| [case testImportTwice] |
| import typing |
| from x import a, a # ok (we could give a warning, but this is valid) |
| def f() -> None: |
| from x import a |
| from x import a # ok |
| import x |
| import x # ok, since we may import multiple submodules of a package |
| [file x.py] |
| a = 1 |
| [out] |
| MypyFile:1( |
| Import:1(typing) |
| ImportFrom:2(x, [a, a]) |
| FuncDef:3( |
| f |
| def () |
| Block:4( |
| ImportFrom:4(x, [a]) |
| ImportFrom:5(x, [a]))) |
| Import:6(x) |
| Import:7(x)) |
| MypyFile:1( |
| tmp/x.py |
| AssignmentStmt:1( |
| NameExpr(a [x.a]) |
| IntExpr(1) |
| builtins.int)) |