Skip to content

unpacked two tuples in NewType crashes with AssertionError #21237

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions