Skip to content

Cannot find exec_module for _importlib_modulespec.exec_module with incremental #2451

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
refi64 opened this issue Nov 14, 2016 · 6 comments
Closed

Comments

@refi64
Copy link
Contributor

refi64 commented Nov 14, 2016

Still trying to get a test case, but here's the traceback:

ryan@DevPC-LX ~/blaze-py master $ mypy blaze
Traceback (most recent call last):
  File "/media/ryan/stuff/anaconda/bin/mypy", line 6, in <module>
    exec(compile(open(__file__).read(), __file__, 'exec'))
  File "/media/ryan/stuff/mypy/scripts/mypy", line 6, in <module>
    main(__file__)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/main.py", line 41, in main
    res = type_check_only(sources, bin_dir, options)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/main.py", line 86, in type_check_only
    options=options)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 183, in build
    dispatch(sources, manager)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1512, in dispatch
    process_graph(graph, manager)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1685, in process_graph
    process_fresh_scc(graph, prev_scc)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1754, in process_fresh_scc
    graph[id].fix_cross_refs()
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1300, in fix_cross_refs
    fixup_module_pass_one(self.tree, self.manager.modules)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 17, in fixup_module_pass_one
    node_fixer.visit_symbol_table(tree.names)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 82, in visit_symbol_table
    self.visit_type_info(value.node)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 51, in visit_type_info
    self.visit_symbol_table(info.names)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 75, in visit_symbol_table
    stnode = lookup_qualified_stnode(self.modules, cross_ref)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 244, in lookup_qualified_stnode
    assert key in names, "Cannot find %s for %s" % (key, name)
AssertionError: Cannot find exec_module for _importlib_modulespec.exec_module
ryan@DevPC-LX ~/blaze-py master $ 
@refi64 refi64 changed the title Cannot find exec_module for _importlib_modulespec.exec_module Cannot find exec_module for _importlib_modulespec.exec_module with incremental Nov 14, 2016
@refi64
Copy link
Contributor Author

refi64 commented Nov 14, 2016

Test case:

class A: pass
class B: pass
class C: pass

class X:
    attr: A
class Y:
    attr: B
class Z(X, Y):
    attr: C

Example:

ryan@DevPC-LX ~/blaze-mypy2 master $ mypy --fast-parser --python-version 3.6 -i x.py
x.py: note: In class "Z":
x.py:9: error: Definition of "attr" in base class "X" is incompatible with definition in base class "Y"
ryan@DevPC-LX ~/blaze-mypy2 master $ mypy --fast-parser --python-version 3.6 -i x.py
Traceback (most recent call last):
  File "/media/ryan/stuff/anaconda/bin/mypy", line 6, in <module>
    exec(compile(open(__file__).read(), __file__, 'exec'))
  File "/media/ryan/stuff/mypy/scripts/mypy", line 6, in <module>
    main(__file__)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/main.py", line 41, in main
    res = type_check_only(sources, bin_dir, options)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/main.py", line 86, in type_check_only
    options=options)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 183, in build
    dispatch(sources, manager)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1512, in dispatch
    process_graph(graph, manager)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1685, in process_graph
    process_fresh_scc(graph, prev_scc)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1754, in process_fresh_scc
    graph[id].fix_cross_refs()
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/build.py", line 1300, in fix_cross_refs
    fixup_module_pass_one(self.tree, self.manager.modules)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 17, in fixup_module_pass_one
    node_fixer.visit_symbol_table(tree.names)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 82, in visit_symbol_table
    self.visit_type_info(value.node)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 51, in visit_type_info
    self.visit_symbol_table(info.names)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 75, in visit_symbol_table
    stnode = lookup_qualified_stnode(self.modules, cross_ref)
  File "/media/stuff/anaconda/lib/python3.4/site-packages/mypy/fixup.py", line 244, in lookup_qualified_stnode
    assert key in names, "Cannot find %s for %s" % (key, name)
AssertionError: Cannot find module_repr for _importlib_modulespec.module_repr
ryan@DevPC-LX ~/blaze-mypy2 master $ 

@gvanrossum
Copy link
Member

Looks like this is new since 0.4.5. Perhaps you can bisect?

@gvanrossum gvanrossum changed the title Cannot find exec_module for _importlib_modulespec.exec_module with incremental Cannot find exec_module for _importlib_modulespec.exec_module with incremental Nov 14, 2016
@refi64
Copy link
Contributor Author

refi64 commented Nov 14, 2016

@gvanrossum First bad commit was 075a8da, from #2304.

@refi64
Copy link
Contributor Author

refi64 commented Nov 14, 2016

Also, here's a slightly smaller test case:

class A: pass
class B: pass

class X:
    attr: A
class Y:
    attr: B
class Z(X, Y): pass

The core bug seems to be when two different base classes define an attribute to be of different types.

@refi64
Copy link
Contributor Author

refi64 commented Nov 14, 2016

I've been doing some research. This apparently has something to do with functions defined inside of conditionals inside classes, like:

class X:
    if sys.version_info >= (1, 2, 3):
        def f(self): pass
    else:
        def f(self): pass

Previously, only global functions went through the first pass of semantic analysis. Now, because of the changes in #2304, methods are also analyzed. Immediately returning from FirstPass.visit_if_stmt will work around the issue.

@refi64
Copy link
Contributor Author

refi64 commented Nov 14, 2016

AAAAND THE BUG IS...this innocent line:

         func._fullname = sem.qualified_name(func.name())

Now methods are being evaluated, BUT qualified_name always returns a module-level name. Kind of anti-climatic...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants