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

Type error randomly raised when using a decorator and a type: ignore comment #18125

Open
Viicos opened this issue Nov 7, 2024 · 1 comment
Open
Labels
bug mypy got something wrong

Comments

@Viicos
Copy link
Contributor

Viicos commented Nov 7, 2024

To Reproduce

  1. Create a new environment with pydantic==2.9.2 installed.
  2. Create a file t.py:
from typing import Any

from typing_extensions import Self

from pydantic import BaseModel, model_validator
from pydantic.functional_validators import ModelWrapValidatorHandler


class WrapModelValidator(BaseModel):
    @model_validator(mode='wrap')  # type: ignore[arg-type]  # pyright: ignore[reportArgumentType]
    def no_classmethod(cls, value: Any, handler: ModelWrapValidatorHandler[Self]) -> Self: ...
  1. Run mypy --cache-dir=/dev/null --python-version 3.10 --disable-error-code empty-body --warn-unused-ignores t.py

Mypy will randomly raise:

t.py:10: error: Unused "type: ignore" comment  [unused-ignore]

And sometimes suceed.

Sorry I couldn't provide more details, the issue is really weird and it seems like mypy doesn't produce fully reproducible results in this case.

Your Environment

  • Mypy version used: 1.13.0
  • Mypy command-line flags: --cache-dir=/dev/null --python-version 3.10 --disable-error-code empty-body --warn-unused-ignores
  • Mypy configuration options from mypy.ini (and other config files):
  • Python version used: 3.12
@brianschubert
Copy link
Collaborator

Thanks! I can reproduce this locally. This is certainly a weird one!

So far I've narrowed this down to some non-deterministic behavior of is_subtype (specifically during this invocation).

What's quite interesting is that the nondeterministic behavior isn't just between mypy runs, but also between invocations of is_subtype with the same arguments during the same run (here's a video demo in my debugger).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug mypy got something wrong
Projects
None yet
Development

No branches or pull requests

2 participants