Skip to content
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

No recognition of concretized type for generic in method's self #14806

Open
magwas opened this issue Mar 1, 2023 · 1 comment
Open

No recognition of concretized type for generic in method's self #14806

magwas opened this issue Mar 1, 2023 · 1 comment
Labels
bug mypy got something wrong topic-paramspec PEP 612, ParamSpec, Concatenate

Comments

@magwas
Copy link

magwas commented Mar 1, 2023

Bug Report

Mypy does not seem to recognize concretized type for a generic in its method's self.

To Reproduce

from typing import Callable, Generic, TypeVar
from typing_extensions import ParamSpec, Concatenate, Self
from unittest.mock import Mock

P = ParamSpec("P")
R = TypeVar("R")


class Check(Generic[P, R]):
    def check(self) -> None:
        pass

class Shall(
        Generic[P, R]):
    def __init__(self, callable: Callable[P, R]) -> None:
            pass
    def suchThat(self, other: Callable[Concatenate[R, P], bool]) -> Self:
        return self

def check(returnValue: None, other: Check[[int],str] ) -> bool:
    return True



Shall[[Check[[int],str]],None](Check[[int],str].check).suchThat(check)

https://mypy-play.net/?mypy=master&python=3.9&gist=0f2967cc8cff879cdfcc8280b7fca53c

Expected Behavior

No error

Actual Behavior

main.py:25: error: Argument 1 to "Shall" has incompatible type "Callable[[Check[P, R]], None]"; expected "Callable[[Check[[int], str]], None]" [arg-type]

  • Mypy version used: latest master (de26134)
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
strict = True
explicit_package_bases = True
namespace_packages = True
#mypy_path = src:test
files = src,test
mypy_path = $MYPY_CONFIG_FILE_DIR/src:$MYPY_CONFIG_FILE_DIR/test
  • Python version used: 3.9.2
@magwas magwas added the bug mypy got something wrong label Mar 1, 2023
@magwas
Copy link
Author

magwas commented Mar 1, 2023

Even smaller reproduction:

from typing import Callable, Generic, TypeVar
from typing_extensions import ParamSpec, Concatenate, Self
from unittest.mock import Mock

P = ParamSpec("P")
R = TypeVar("R")


class Check(Generic[P, R]):
    def check(self) -> None:
        pass

class Shall(
        Generic[P, R]):
    def __init__(self, callable: Callable[P, R]) -> None:
            pass

Shall[[Check[[int],str]],None](Check[[int],str].check)

https://mypy-play.net/?mypy=master&python=3.9&gist=4ed820cd660f49a4f7f3d800054576aa

magwas added a commit to kode-konveyor/cdd-python that referenced this issue Mar 1, 2023
@ilevkivskyi ilevkivskyi added the topic-paramspec PEP 612, ParamSpec, Concatenate label Aug 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong topic-paramspec PEP 612, ParamSpec, Concatenate
Projects
None yet
Development

No branches or pull requests

2 participants