Closed
Description
Bug Report
Mypy reasons incorrectly about the return type of collections.deque.copy()
if the item type is a generic with a type parameter inside a generic class.
To Reproduce
from collections import deque
from typing import Any, Callable, Generic, List, Protocol, TypeVar
T = TypeVar("T")
def test(item_type: T) -> None:
a: deque[List[T]] = deque()
b: deque[List[T]] = a.copy() # ok
class Test(Generic[T]):
def test(self) -> None:
a: deque[List[T]] = deque()
b: deque[List[T]] = a.copy() # error: Incompatible types in assignment (expression has type "deque[List[List[T]]]", variable has type "deque[List[T]]") [assignment]
Expected Behavior
The return type in the above example should be List[T]
not List[List[T]]
.
Your Environment
-
Mypy version used: 0.942
-
Mypy command-line flags:
mypy test.py
-
Mypy configuration options from
mypy.ini
(and other config files):[tool.mypy] strict = true namespace_packages = true ignore_missing_imports = true show_error_codes = true exclude = "tests"
-
Python version used: 3.10.2
-
Operating system and version: OSX 12.2.1 Monterey