Repository navigation
Closed
Closed
Copy link
Labels
crashtopic-inferenceWhen to infer types or require explicit annotationsWhen to infer types or require explicit annotations
Description
Crash Report
When using allow_redefinition_new = true using an undeclared instance variable crashes mypy
Traceback
mypy --show-traceback .\test.py
PS <project path>> mypy --show-traceback .\test.py
test.py:9: 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.19.0+dev.1b8841b665efdc308828ece877cb8e5141954a7b
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "<project path>\.venv\Scripts\mypy.exe\__main__.py", line 10, in <module>
sys.exit(console_entry())
File "<project path>\.venv\Lib\site-packages\mypy\__main__.py", line 15, in console_entry
main()
File "<project path>\.venv\Lib\site-packages\mypy\main.py", line 127, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "<project path>\.venv\Lib\site-packages\mypy\main.py", line 211, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 196, in build
result = _build(
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 272, in _build
graph = dispatch(sources, manager, stdout)
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 2933, in dispatch
process_graph(graph, manager)
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 3333, in process_graph
process_stale_scc(graph, scc, manager)
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 3434, in process_stale_scc
graph[id].type_check_first_pass()
File "<project path>\.venv\Lib\site-packages\mypy\build.py", line 2312, in type_check_first_pass
self.type_checker().check_first_pass()
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 524, in check_first_pass
self.accept(d)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 635, in accept
stmt.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 1445, in accept
return visitor.visit_class_def(self)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 2665, in visit_class_def
self.accept(defn.defs)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 635, in accept
stmt.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 1542, in accept
return visitor.visit_block(self)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 3126, in visit_block
self.accept(s)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 635, in accept
stmt.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 971, in accept
return visitor.visit_func_def(self)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 1192, in visit_func_def
self._visit_func_def(defn)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 1196, in _visit_func_def
self.check_func_item(defn, name=defn.name)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 1231, in check_func_item
self.check_func_def(defn, typ, name, allow_empty)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 1504, in check_func_def
self.accept(item.body)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 635, in accept
stmt.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 1542, in accept
return visitor.visit_block(self)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 3126, in visit_block
self.accept(s)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 635, in accept
stmt.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 1629, in accept
return visitor.visit_assignment_stmt(self)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 3177, in visit_assignment_stmt
self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None, s.new_syntax)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 3385, in check_assignment
self.check_indexed_assignment(index_lvalue, rvalue, lvalue)
File "<project path>\.venv\Lib\site-packages\mypy\checker.py", line 4752, in check_indexed_assignment
basetype = get_proper_type(self.expr_checker.accept(lvalue.base))
File "<project path>\.venv\Lib\site-packages\mypy\checkexpr.py", line 6050, in accept
typ = node.accept(self)
File "<project path>\.venv\Lib\site-packages\mypy\nodes.py", line 2175, in accept
return visitor.visit_member_expr(self)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "<project path>\.venv\Lib\site-packages\mypy\checkexpr.py", line 3318, in visit_member_expr
narrowed = self.narrow_type_from_binder(e, result)
File "<project path>\.venv\Lib\site-packages\mypy\checkexpr.py", line 6353, in narrow_type_from_binder
narrowed = narrow_declared_type(known_type, restriction)
File "<project path>\.venv\Lib\site-packages\mypy\meet.py", line 174, in narrow_declared_type
elif not is_overlapping_types(declared, narrowed, prohibit_none_typevar_overlap=True):
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<project path>\.venv\Lib\site-packages\mypy\meet.py", line 354, in is_overlapping_types
assert False, "Unexpectedly encountered partial type"
^^^^^
AssertionError: Unexpectedly encountered partial type
test.py:9: : note: use --pdb to drop into pdbTo Reproduce
import random
class Test:
# var: dict[str, str] | None # This declaration would fix the crash
def __init__(self) -> None:
if random.choice([True, False]):
self.var = None
return
self.var = {}
self.var["test"] = ""Your Environment
- Mypy version used: 1.18.2 and 1.19.0+dev.1b8841b665efdc308828ece877cb8e5141954a7b
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files):
allow_redefinition_new = true # without this it works
local_partial_types = true- Python version used: 3.13.7
- Operating system and version: Windows 11 Version 10.0.22631 Build 22631
Metadata
Metadata
Assignees
Labels
crashtopic-inferenceWhen to infer types or require explicit annotationsWhen to infer types or require explicit annotations
Activity
neopexrl commentedon Oct 3, 2025
Is this still available to work on?
ilevkivskyi commentedon Oct 4, 2025
cc @JukkaL who worked on this.
@neopexrl You can of course try, but FWIW it may be not the best first issue.
bernikr commentedon Oct 4, 2025
i forgot to include the information that this bug is a regression and did not exist in 1.17
sterliakov commentedon Oct 11, 2025
This bisects to my #19400, but I don't see any obvious reason for that to be a root cause of leaking partials. I'll look deeper tomorrow.
Do not push partial types to the binder (#20202)