You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To illustrate the bug with a more "realistic" example, here is the top of an Order class to demonstrate the Strategy pattern, where a concrete strategy is named a promotion, and it must be a callable that accepts an Order argument:
@dataclassclassOrder: # the Contextcustomer: Customercart: Sequence[LineItem]
promotion: Optional[Callable[['Order'], float]] =None# the Strategy
Mypy 0.910 accepts the code above, but crashes with the code below:
classOrder(NamedTuple):
customer: Customercart: Sequence[LineItem]
promotion: Optional[Callable[['Order'], float]] =None# the Strategy
I put # type: ignore instead of # the Strategy on that line, but it did not help: Mypy still crashed.
The error:
$ mypy strategy_namedtuple.py
Deferral trace:
strategy_namedtuple:49
strategy_namedtuple:49
strategy_namedtuple:-1
... repeat those 3 lines many times ...
strategy_namedtuple.py: error: INTERNAL ERROR: maximum semantic analysis iteration count reached
strategy_namedtuple.py:71: error: Cannot resolve name "Order" (possible cyclic definition)
strategy_namedtuple.py:76: error: Cannot resolve name "Order" (possible cyclic definition)
strategy_namedtuple.py:85: error: Cannot resolve name "Order" (possible cyclic definition)
strategy_namedtuple.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: 0.910
Traceback (most recent call last):
File "/Users/luciano/flupy/.py310b3/bin/mypy", line 8, in <module>
sys.exit(console_entry())
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/__main__.py", line 11, in console_entry
main(None, sys.stdout, sys.stderr)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/main.py", line 87, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/main.py", line 165, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 179, in build
result = _build(
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 254, in _build
graph = dispatch(sources, manager, stdout)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 2697, in dispatch
process_graph(graph, manager)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 3021, in process_graph
process_stale_scc(graph, scc, manager)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 3113, in process_stale_scc
mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_main.py", line 84, in semantic_analysis_for_scc
check_type_arguments(graph, scc, errors)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_main.py", line 358, in check_type_arguments
with state.wrap_context():
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 151, in __exit__
self.gen.throw(type, value, traceback)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/build.py", line 1955, in wrap_context
yield
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_main.py", line 360, in check_type_arguments
state.tree.accept(analyzer)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/nodes.py", line 305, in accept
return visitor.visit_mypy_file(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_typeargs.py", line 39, in visit_mypy_file
super().visit_mypy_file(o)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/traverser.py", line 37, in visit_mypy_file
d.accept(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/nodes.py", line 950, in accept
return visitor.visit_class_def(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_typeargs.py", line 50, in visit_class_def
super().visit_class_def(defn)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/mixedtraverser.py", line 28, in visit_class_def
super().visit_class_def(o)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/traverser.py", line 73, in visit_class_def
o.defs.accept(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/nodes.py", line 1015, in accept
return visitor.visit_block(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_typeargs.py", line 54, in visit_block
super().visit_block(o)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/traverser.py", line 41, in visit_block
s.accept(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/nodes.py", line 687, in accept
return visitor.visit_func_def(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/traverser.py", line 56, in visit_func_def
self.visit_func(o)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_typeargs.py", line 46, in visit_func
super().visit_func(defn)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/mixedtraverser.py", line 23, in visit_func
self.visit_optional_type(o.type)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/mixedtraverser.py", line 91, in visit_optional_type
t.accept(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/types.py", line 1156, in accept
return visitor.visit_callable_type(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/typetraverser.py", line 52, in visit_callable_type
t.fallback.accept(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/types.py", line 846, in accept
return visitor.visit_instance(self)
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/semanal_typeargs.py", line 70, in visit_instance
for (i, arg), tvar in zip(enumerate(t.args), info.defn.type_vars):
File "/Users/luciano/flupy/.py310b3/lib/python3.10/site-packages/mypy/nodes.py", line 2705, in __getattribute__
raise AssertionError(object.__getattribute__(self, 'msg'))
AssertionError: fallback can't be filled out until semanal
strategy_namedtuple.py: : note: use --pdb to drop into pdb
But I get no crash, only the expected Cannot resolve name "Order" (possible cyclic definition). Can you provide a self-contained sample that reproduces the crash?
There is another crash on recursive namedtuples (#8695), but the stack trace is different than the one @ramalho posted, so it might be a different underlying issue.
To illustrate the bug with a more "realistic" example, here is the top of an
Order
class to demonstrate the Strategy pattern, where a concrete strategy is named apromotion
, and it must be a callable that accepts anOrder
argument:Mypy 0.910 accepts the code above, but crashes with the code below:
I put
# type: ignore
instead of# the Strategy
on that line, but it did not help: Mypy still crashed.The error:
Originally posted by @ramalho in #9397 (comment)
The text was updated successfully, but these errors were encountered: