Assertion failure crash with shadowed functools module: assert isinstance(singledispatch_obj, Instance)
Open
Nobody has claimed this yet.
crash
priority-2-low
- Dominant language
- Python
- Stars
- 20.6k
- Forks
- 3.3k
- PR merge metrics
- PR metrics pending
Description
Crash Report
I noticed this crash when running mypy on the cpython codebase.
Traceback
Traceback (most recent call last):
File ".venv-mypy/bin/mypy", 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 223, in build
result = _build(
File "mypy/mypy/build.py", line 302, in _build
graph = dispatch(sources, manager, stdout)
File "mypy/mypy/build.py", line 2953, in dispatch
process_graph(graph, manager)
File "mypy/mypy/build.py", line 3344, in process_graph
done, still_working = manager.wait_for_done(graph)
File "mypy/mypy/build.py", line 926, in wait_for_done
process_stale_scc(graph, next_scc, self)
File "mypy/mypy/build.py", line 3482, in process_stale_scc
graph[id].type_check_first_pass()
File "mypy/mypy/build.py", line 2341, in type_check_first_pass
self.type_checker().check_first_pass()
File "mypy/mypy/checker.py", line 530, in check_first_pass
self.accept(d)
File "mypy/mypy/checker.py", line 641, in accept
stmt.accept(self)
~~~~~~~~~~~^^^^^^
File "mypy/mypy/nodes.py", line 1164, in accept
return visitor.visit_decorator(self)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy/mypy/checker.py", line 5466, in visit_decorator
self.visit_decorator_inner(e)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
File "mypy/mypy/checker.py", line 5502, in visit_decorator_inner
sig, t2 = self.expr_checker.check_call(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
dec, [temp], [nodes.ARG_POS], e, callable_name=fullname, object_type=object_type
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "mypy/mypy/checkexpr.py", line 1589, in check_call
return self.check_callable_call(
~~~~~~~~~~~~~~~~~~~~~~~~^
callee,
^^^^^^^
...<6 lines>...
object_type,
^^^^^^^^^^^^
)
^
File "mypy/mypy/checkexpr.py", line 1832, in check_callable_call
new_ret_type = self.apply_function_plugin(
callee,
...<7 lines>...
context,
)
File "mypy/mypy/checkexpr.py", line 1270, in apply_function_plugin
return callback(
FunctionContext(
...<8 lines>...
)
)
File "mypy/mypy/plugins/singledispatch.py", line 109, in create_singledispatch_function_callback
assert isinstance(singledispatch_obj, Instance)
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError:
functools.py:4: : note: use --pdb to drop into pdb
To Reproduce
Save the following snippet as functools.py and run mypy on it:
def singledispatch(func):
pass
@singledispatch
def f(fn):
pass
Your Environment
- Mypy version used: 67df1163e5e2d197795811d8083da6afd13fb4f3
- Mypy command-line flags: N/A
- Mypy configuration options from
mypy.ini(and other config files): N/A - Python version used: 3.13.7
- Operating system and version: Arch Linux
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with mypy/plugins/singledispatch.py, especially create_singledispatch_function_callback and the assertion shown in the traceback. Reproduce the crash by saving the provided snippet as functools.py and running mypy on it. Done means this shadowed functools module no longer causes an AssertionError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100