KEMBAR78
INTERNAL ERROR when defining "__add__" in two related Protocol classes · Issue #9771 · python/mypy · GitHub
Skip to content

INTERNAL ERROR when defining "__add__" in two related Protocol classes #9771

@tyralla

Description

@tyralla

The following minimal example causes a crash:

from typing import Protocol, TypeVar, Union

T1 = TypeVar("T1", bound=float)
T2 = TypeVar("T2", bound=float)


class Vector(Protocol[T1]):

    def __len__(self) -> int:
        ...

    def __add__(
        self: "Vector[T1]",
        other: Union[T2, "Vector[T2]"],
    ) -> "Vector[Union[T1, T2]]":
        ...


class Matrix(Protocol[T1]):

    def __add__(
        self: "Matrix[T1]",
        other: Union[T2, Vector[T2], "Matrix[T2]"],
    ) -> "Matrix[Union[T1, T2]]":
        ...

The traceback:

Traceback (most recent call last):
  File "C:\Users\tyralla\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\tyralla\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "mypy\checker.py", line 401, in accept
  File "mypy\nodes.py", line 940, in accept
  File "mypy\checker.py", line 1756, in visit_class_def
  File "mypy\checker.py", line 1824, in check_protocol_variance
  File "mypy\subtypes.py", line 93, in is_subtype
  File "mypy\subtypes.py", line 135, in _is_subtype
  File "mypy\types.py", line 794, in accept
  File "mypy\subtypes.py", line 264, in visit_instance
  File "mypy\subtypes.py", line 538, in is_protocol_implementation
  File "mypy\subtypes.py", line 605, in find_member
  File "mypy\subtypes.py", line 701, in find_node_type
  File "mypy\expandtype.py", line 29, in expand_type_by_instance
  File "mypy\expandtype.py", line 16, in expand_type
  File "mypy\types.py", line 1098, in accept
  File "mypy\expandtype.py", line 97, in visit_callable_type
  File "mypy\expandtype.py", line 143, in expand_types
  File "mypy\types.py", line 1724, in accept
  File "mypy\expandtype.py", line 123, in visit_union_type
  File "mypy\typeops.py", line 366, in make_simplified_union
  File "mypy\subtypes.py", line 1156, in is_proper_subtype
  File "mypy\subtypes.py", line 1177, in _is_proper_subtype
  File "mypy\types.py", line 794, in accept
  File "mypy\subtypes.py", line 1273, in visit_instance
  File "mypy\subtypes.py", line 556, in is_protocol_implementation
  File "mypy\subtypes.py", line 1156, in is_proper_subtype
  File "mypy\subtypes.py", line 1177, in _is_proper_subtype
  File "mypy\types.py", line 1098, in accept
  File "mypy\subtypes.py", line 1294, in visit_callable_type
  File "mypy\subtypes.py", line 839, in is_callable_compatible
  File "mypy\subtypes.py", line 1068, in unify_generic_callable
  File "mypy\constraints.py", line 101, in infer_constraints
  File "mypy\constraints.py", line 174, in _infer_constraints
  File "mypy\types.py", line 794, in accept
  File "mypy\constraints.py", line 399, in visit_instance
  File "mypy\subtypes.py", line 554, in is_protocol_implementation
  File "mypy\subtypes.py", line 93, in is_subtype
  File "mypy\subtypes.py", line 135, in _is_subtype
  File "mypy\types.py", line 1098, in accept
  File "mypy\subtypes.py", line 299, in visit_callable_type
  File "mypy\subtypes.py", line 839, in is_callable_compatible
  File "mypy\subtypes.py", line 1068, in unify_generic_callable
  File "mypy\constraints.py", line 101, in infer_constraints
  File "mypy\constraints.py", line 174, in _infer_constraints
  File "mypy\types.py", line 794, in accept
  File "mypy\constraints.py", line 401, in visit_instance
  File "mypy\constraints.py", line 437, in infer_constraints_from_protocol_members

How I use Mypy:

  • Mypy version used: 0.790
  • Mypy command-line flags: --follow-imports=silent --show-error-codes --warn-unused-ignores --warn-redundant-casts --strict --show-traceback
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.8.5
  • Operating system and version: Windows 10

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions