Skip to content

unpacked two tuples in NewType crashes with AssertionError #21237

@tharvik

Description

@tharvik

Crash Report

I'm trying to derive (via unpacking) a tuple wrapped in NewType from another one and ended-up crashing mypy.

Traceback

./main.py:4: 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: 2.0.0+dev.d0f55505ed6ac60e5917b5943534228f864fb6a6
./main.py:4: note: use --pdb to drop into pdb
Traceback (most recent call last):
  File "/home/tharvik/tmp/mypy-crash/.venv/bin/mypy", line 10, in <module>
    sys.exit(console_entry())
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/main.py", line 143, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/main.py", line 233, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 421, in build
    result = build_inner(
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 529, in build_inner
    graph = dispatch(sources, manager, stdout, connect_threads)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 4012, in dispatch
    process_graph(graph, manager)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 4476, in process_graph
    done, still_working, results = manager.wait_for_done(graph)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 1389, in wait_for_done
    process_stale_scc(graph, next_scc, self)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 4650, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/build.py", line 3271, in type_check_first_pass
    self.type_checker().check_first_pass(recurse_into_functions=recurse_into_functions)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checker.py", line 537, in check_first_pass
    self.accept(d)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checker.py", line 648, in accept
    stmt.accept(self)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/nodes.py", line 1810, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checker.py", line 5000, in visit_expression_stmt
    expr_type = self.expr_checker.accept(s.expr, allow_none_return=True, always_allow_any=True)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 6131, in accept
    typ = self.visit_call_expr(node, allow_none_return=True)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 502, in visit_call_expr
    return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 639, in visit_call_expr_inner
    ret_type = self.check_call_expr_with_callee_type(
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 1489, in check_call_expr_with_callee_type
    ret_type, callee_type = self.check_call(
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 1582, in check_call
    return self.check_callable_call(
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 1793, in check_callable_call
    arg_types = self.infer_arg_types_in_context(callee, args, arg_kinds, formal_to_actual)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 2012, in infer_arg_types_in_context
    res.append(self.accept(arg, ctx))
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 6188, in accept
    typ = self.accept_maybe_cache(node, type_context=type_context)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 6223, in accept_maybe_cache
    typ = node.accept(self)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/nodes.py", line 2936, in accept
    return visitor.visit_tuple_expr(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 5297, in visit_tuple_expr
    if isinstance(type_context, TupleType) and self.tuple_context_matches(e, type_context):
                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 5266, in tuple_context_matches
    ctx_unpack_index = find_unpack_in_list(ctx.items)
  File "/home/tharvik/tmp/mypy-crash/.venv/lib/python3.13/site-packages/mypy/types.py", line 4192, in find_unpack_in_list
    assert old_index is None
           ^^^^^^^^^^^^^^^^^
AssertionError

To Reproduce

https://mypy-play.net/?gist=201fe8d4446594b2b70b80c932b4ce0b

Your Environment

  • Mypy version used: HEAD
  • Python version used: 3.13.12
  • Operating system and version: Gentoo/Linux, n/a

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions