After upgrading from 1.17.1 to 1.18.1, I started seeing crashes when checking code that imports htpy.
The crash is already fixed on master, so I'm not sure if it will also be fixed for 1.18.x.
Segmentation fault (core dumped) mypy test.py
mypy-repro/.venv/lib/python3.13/site-packages/htpy/_types.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.18.1
Traceback (most recent call last):
File "mypy-repro/.venv/bin/mypy", line 7, in <module>
sys.exit(console_entry())
File "mypy-repro/mypy/mypy/__main__.py", line 15, in console_entry
main()
File "mypy-repro/mypy/mypy/main.py", line 127, in main
res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
File "mypy-repro/mypy/mypy/main.py", line 211, in run_build
res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
File "mypy-repro/mypy/mypy/build.py", line 194, in build
result = _build(
File "mypy-repro/mypy/mypy/build.py", line 270, in _build
graph = dispatch(sources, manager, stdout)
File "mypy-repro/mypy/mypy/build.py", line 2976, in dispatch
process_graph(graph, manager)
File "mypy-repro/mypy/mypy/build.py", line 3397, in process_graph
process_stale_scc(graph, scc, manager)
File "mypy-repro/mypy/mypy/build.py", line 3502, in process_stale_scc
graph[id].finish_passes()
File "mypy-repro/mypy/mypy/build.py", line 2402, in finish_passeswithself.wrap_context():
File "/usr/lib/python3.13/contextlib.py", line 162, in __exit__self.gen.throw(value)
File "mypy-repro/mypy/mypy/build.py", line 2087, in wrap_contextyield
File "mypy-repro/mypy/mypy/build.py", line 2424, in finish_passesself._patch_indirect_dependencies(self.type_checker().module_refs, all_types)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy-repro/mypy/mypy/build.py", line 2457, in _patch_indirect_dependencies
encountered =self.manager.indirection_detector.find_modules(types) | module_refs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 36, in find_modulesself._visit(typ)
~~~~~~~~~~~^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 44, in _visit
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 1657, in acceptreturn visitor.visit_instance(self)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 108, in visit_instanceself._visit_type_tuple(t.args)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 54, in _visit_type_tuple
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 1657, in acceptreturn visitor.visit_instance(self)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 108, in visit_instanceself._visit_type_tuple(t.args)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 54, in _visit_type_tuple
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 429, in acceptreturn visitor.visit_type_alias_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 152, in visit_type_alias_typeself._visit(types.get_proper_type(t))
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
[...snip...]
File "mypy-repro/mypy/mypy/indirection.py", line 44, in _visit
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 3288, in acceptreturn visitor.visit_union_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 143, in visit_union_typeself._visit_type_list(t.items)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 64, in _visit_type_list
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 2239, in acceptreturn visitor.visit_callable_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 120, in visit_callable_typeself._visit(t.ret_type)
~~~~~~~~~~~^^^^^^^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 44, in _visit
typ.accept(self)
~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 429, in acceptreturn visitor.visit_type_alias_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/indirection.py", line 152, in visit_type_alias_typeself._visit(types.get_proper_type(t))
~~~~~~~~~~~~~~~~~~~~~^^^
File "mypy-repro/mypy/mypy/types.py", line 3531, in get_proper_type
typ = typ._expand_once()
File "mypy-repro/mypy/mypy/types.py", line 370, in _expand_oncereturnself.alias.target.accept(InstantiateAliasVisitor(mapping))
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 3288, in acceptreturn visitor.visit_union_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 4263, in visit_union_typereturn TypeTranslator.visit_union_type(self, t)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "mypy-repro/mypy/mypy/type_visitor.py", line 302, in visit_union_typeself.translate_type_list(t.items),
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "mypy-repro/mypy/mypy/type_visitor.py", line 312, in translate_type_listreturn [t.accept(self) for t in types]
~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 1657, in acceptreturn visitor.visit_instance(self)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/expandtype.py", line 215, in visit_instance
args =self.expand_type_tuple_with_unpack(t.args)
File "mypy-repro/mypy/mypy/expandtype.py", line 457, in expand_type_tuple_with_unpack
items.append(item.accept(self))
~~~~~~~~~~~^^^^^^
File "mypy-repro/mypy/mypy/types.py", line 429, in acceptreturn visitor.visit_type_alias_type(self)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^RecursionError: maximum recursion depth exceededmypy-repro/.venv/lib/python3.13/site-packages/htpy/_types.py: : note: use --pdb to drop into pdb
Crash Report
After upgrading from 1.17.1 to 1.18.1, I started seeing crashes when checking code that imports htpy.
The crash is already fixed on master, so I'm not sure if it will also be fixed for 1.18.x.
I bisected between v1.17.1 and v1.18.1:
The crash was fixed on master by ccd290c.
Traceback
When I use mypy from PyPI, I get a crash in Python:
When I use a local installation, I get a
RecursionErrorcrash:To Reproduce
Your Environment
mypy.ini(and other config files): N/A