Skip to content

Crash with Generic Class and Dict #18996

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
mscheifer opened this issue Apr 29, 2025 · 1 comment
Open

Crash with Generic Class and Dict #18996

mscheifer opened this issue Apr 29, 2025 · 1 comment
Labels
crash topic-pep-695 Issues related to PEP 695 syntax

Comments

@mscheifer
Copy link

mscheifer commented Apr 29, 2025

Crash Report

I first encountered the bug on a project where I had just started trying to implement the new generic type syntax introduced in Python 3.12. I initially saw this bug with mypy 1.15 but it also occurs on the current master branch.

Traceback

repro.py:5: 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.16.0+dev.7b4f6311e29452cc8d4ddb78331d0047c8b17e93
Traceback (most recent call last):
  File "/home/matthew/code/mypy/venv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/main.py", line 127, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/main.py", line 211, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 191, in build
    result = _build(
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 267, in _build
    graph = dispatch(sources, manager, stdout)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 2939, in dispatch
    process_graph(graph, manager)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 3337, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 3438, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/build.py", line 2311, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 472, in check_first_pass
    self.accept(d)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 1200, in accept
    return visitor.visit_class_def(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 2536, in visit_class_def
    self.accept(defn.defs)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 1281, in accept
    return visitor.visit_block(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 3025, in visit_block
    self.accept(s)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 813, in accept
    return visitor.visit_func_def(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 1129, in visit_func_def
    self._visit_func_def(defn)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 1133, in _visit_func_def
    self.check_func_item(defn, name=defn.name)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 1168, in check_func_item
    self.check_func_def(defn, typ, name, allow_empty)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 1455, in check_func_def
    self.accept(item.body)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 1281, in accept
    return visitor.visit_block(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 3025, in visit_block
    self.accept(s)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 1301, in accept
    return visitor.visit_expression_stmt(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checker.py", line 4711, in visit_expression_stmt
    expr_type = self.expr_checker.accept(s.expr, allow_none_return=True, always_allow_any=True)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 5962, in accept
    typ = self.visit_call_expr(node, allow_none_return=True)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 488, in visit_call_expr
    return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 578, in visit_call_expr_inner
    self.accept(e.callee, type_context, always_allow_any=True, is_callee=True)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 5970, in accept
    typ = node.accept(self)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/nodes.py", line 1914, in accept
    return visitor.visit_member_expr(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 3342, in visit_member_expr
    result = self.analyze_ordinary_member_access(e, is_lvalue)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkexpr.py", line 3372, in analyze_ordinary_member_access
    member_type = analyze_member_access(
        e.name,
    ...<10 lines>...
        rvalue=rvalue,
    )
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkmember.py", line 219, in analyze_member_access
    result = _analyze_member_access(name, typ, mx, override_info)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkmember.py", line 238, in _analyze_member_access
    return analyze_instance_member_access(name, typ, mx, override_info)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkmember.py", line 360, in analyze_instance_member_access
    signature = check_self_arg(
        signature, mx.self_type, method.is_class, mx.context, name, mx.msg
    )
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/checkmember.py", line 1038, in check_self_arg
    if subtypes.is_subtype(
       ~~~~~~~~~~~~~~~~~~~^
        dispatched_arg_type,
        ^^^^^^^^^^^^^^^^^^^^
    ...<6 lines>...
        ignore_pos_arg_names=True,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^
    ):
    ^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 188, in is_subtype
    return _is_subtype(left, right, subtype_context, proper_subtype=False)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 355, in _is_subtype
    return left.accept(SubtypeVisitor(orig_right, subtype_context, proper_subtype))
           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/types.py", line 1475, in accept
    return visitor.visit_instance(self)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 573, in visit_instance
    infer_class_variances(right.type)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 2152, in infer_class_variances
    if not infer_variance(info, i):
           ~~~~~~~~~~~~~~^^^^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 2114, in infer_variance
    if not is_subtype(typ, typ2):
           ~~~~~~~~~~^^^^^^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 188, in is_subtype
    return _is_subtype(left, right, subtype_context, proper_subtype=False)
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 355, in _is_subtype
    return left.accept(SubtypeVisitor(orig_right, subtype_context, proper_subtype))
           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/types.py", line 3039, in accept
    return visitor.visit_partial_type(self)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/matthew/code/mypy/venv/lib/python3.13/site-packages/mypy/subtypes.py", line 1088, in visit_partial_type
    raise RuntimeError(f'Partial type "{left}" cannot be checked with "issubtype()"')
RuntimeError: Partial type "<partial dict[?, ?]>" cannot be checked with "issubtype()"
repro.py:5: : note: use --pdb to drop into pdb

To Reproduce

$ mypy repro.py

repro.py:

class Repro[T]:
    def __init__(self, v) -> None:
        self.storage = {}

        self.foo()

    def foo(self):
        pass

This is as minimal as I could get it.

Your Environment

  • Mypy version used: mypy 1.16.0+dev.7b4f6311e29452cc8d4ddb78331d0047c8b17e93 (compiled: no)
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: Python 3.13.2
  • Operating system and version: Manjaro Linux
@hauntsaninja hauntsaninja added the topic-pep-695 Issues related to PEP 695 syntax label Apr 29, 2025
@hauntsaninja
Copy link
Collaborator

Thanks for the report. Looks like this has always been a crash with new generic syntax cc @JukkaL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash topic-pep-695 Issues related to PEP 695 syntax
Projects
None yet
Development

No branches or pull requests

2 participants