Mypy crashes with an internal error on some generic type aliases when used in some specific import state.
repro\aliases.py: error: INTERNAL ERROR -- Please try using mypy master on GitHub:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 1.20.0+dev.ece4d41e2c1b8e67fd099291c54562020d24ae7e.dirty
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "mypy\test_venv\Scripts\mypy.exe\__main__.py", line 7, in <module>
sys.exit(console_entry())
File "mypy\mypy\__main__.py", line 15, in console_entry
main()
File "mypy\mypy\main.py", line 127, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "mypy\mypy\main.py", line 211, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "mypy\mypy\build.py", line 215, in build
result = _build(
File "mypy\mypy\build.py", line 294, in _build
graph = dispatch(sources, manager, stdout)
File "mypy\mypy\build.py", line 2945, in dispatch
process_graph(graph, manager)
File "mypy\mypy\build.py", line 3336, in process_graph
done, still_working = manager.wait_for_done(graph)
File "mypy\mypy\build.py", line 918, in wait_for_done
process_stale_scc(graph, next_scc, self)
File "mypy\mypy\build.py", line 3468, in process_stale_scc
mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
File "mypy\mypy\semanal_main.py", line 103, in semantic_analysis_for_scc
check_type_arguments(graph, scc, errors)
File "mypy\mypy\semanal_main.py", line 447, in check_type_arguments
with state.wrap_context():
File "C:\Program Files\Python313\Lib\contextlib.py", line 162, in __exit__
self.gen.throw(value)
File "mypy\mypy\build.py", line 2075, in wrap_context
yield
File "mypy\mypy\semanal_main.py", line 449, in check_type_arguments
state.tree.accept(analyzer)
~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "mypy\mypy\nodes.py", line 407, in accept
return visitor.visit_mypy_file(self)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\semanal_typeargs.py", line 68, in visit_mypy_file
super().visit_mypy_file(o)
~~~~~~~~~~~~~~~~~~~~~~~^^^
File "mypy\mypy\traverser.py", line 120, in visit_mypy_file
d.accept(self)
~~~~~~~~^^^^^^
File "mypy\mypy\nodes.py", line 1660, in accept
return visitor.visit_assignment_stmt(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\mixedtraverser.py", line 84, in visit_assignment_stmt
super().visit_assignment_stmt(o)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
File "mypy\mypy\traverser.py", line 170, in visit_assignment_stmt
o.rvalue.accept(self)
~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\nodes.py", line 2353, in accept
return visitor.visit_index_expr(self)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\traverser.py", line 336, in visit_index_expr
o.analyzed.accept(self)
~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\nodes.py", line 3143, in accept
return visitor.visit_type_alias_expr(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\mixedtraverser.py", line 56, in visit_type_alias_expr
o.node.accept(self)
~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\nodes.py", line 4335, in accept
return visitor.visit_type_alias(self)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\mixedtraverser.py", line 95, in visit_type_alias
o.target.accept(self)
~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\types.py", line 421, in accept
return visitor.visit_type_alias_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\semanal_typeargs.py", line 92, in visit_type_alias_type
is_error, is_invalid = self.validate_args(
~~~~~~~~~~~~~~~~~~^
t.alias.name, tuple(t.args), t.alias.alias_tvars, t
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "mypy\mypy\semanal_typeargs.py", line 207, in validate_args
if not object_upper_bound and not is_subtype(arg, upper_bound):
~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "mypy\mypy\subtypes.py", line 190, in is_subtype
return _is_subtype(left, right, subtype_context, proper_subtype=False)
File "mypy\mypy\subtypes.py", line 359, in _is_subtype
return left.accept(SubtypeVisitor(orig_right, subtype_context, proper_subtype))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy\mypy\types.py", line 693, in accept
return visitor.visit_type_var(self)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy\mypy\subtypes.py", line 656, in visit_type_var
return self._is_subtype(left.upper_bound, self.right)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy\mypy\subtypes.py", line 431, in _is_subtype
return is_subtype(left, right, subtype_context=self.subtype_context)
File "mypy\mypy\subtypes.py", line 190, in is_subtype
return _is_subtype(left, right, subtype_context, proper_subtype=False)
File "mypy\mypy\subtypes.py", line 359, in _is_subtype
return left.accept(SubtypeVisitor(orig_right, subtype_context, proper_subtype))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy\mypy\types.py", line 3634, in accept
assert isinstance(visitor, SyntheticTypeVisitor), visitor
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: <mypy.subtypes.SubtypeVisitor object at 0x000001D16BD61A90>
This problem arose in a relatively large codebase; I have attempt to minimize the reproducer as much as I can.
Crash Report
Mypy crashes with an internal error on some generic type aliases when used in some specific import state.
Traceback
To Reproduce
This problem arose in a relatively large codebase; I have attempt to minimize the reproducer as much as I can.
Create three files (
aliases.py,defs.py,someclass.py) in a directory with an empty__init__.py.The contents are as follows:
aliases.py
defs.py
someclass.py
Your Environment
mypy 1.20.0+dev.ece4d41e2c1b8e67fd099291c54562020d24ae7e (compiled: no)mypy --show-traceback