-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
bugmypy got something wrongmypy got something wrong
Description
After upgrading from mypy 1.19.0 to 1.19.1, we're experiencing nondeterministic type checking behavior:
- Without
type: ignore[type-var]: Sometimes reports "Value of type variable 'S' of 'Response' cannot be 'object'" [type-var] - With
type: ignore[type-var]: Sometimes reports "Unused 'type: ignore[type-var]' comment" [unused-ignore]
The error state is inconsistent and appears related to PR #20345 (which fixed issue #20344 about nondeterministic behavior with tuple type vars).
Environment
- Mypy version: 1.19.1
- Python version: 3.13
- Upgraded from: mypy 1.19.0 (no errors)
Example
Granted, this is a simplified, sanitized example I have extracted from our code base but I believe it highlights the case where the issue is happening
from typing import LiteralString
class Container[S: LiteralString, T]:
"""A container with a LiteralString key."""
def __init__(self, key: S, value: T) -> None:
self.key = key
self.value = value
class Response[S: LiteralString, T]:
"""A response parameterized by LiteralString."""
def __init__(self, container: Container[S, T]) -> None:
self.container = container
def process[S: LiteralString, S1: LiteralString](
containers: list[Container[S, int] | Container[S1, str]],
) -> dict[int, Response]:
"""Create responses from a union of containers with different LiteralString keys."""
return {
i: Response(container) # May error: type-var or unused-ignore
for i, container in enumerate(containers)
}Scenario 1: With type: ignore[type-var] comment
example.py:28: error: Unused "type: ignore[type-var]" comment [unused-ignore]
Scenario 2: Without the comment (in different contexts)
Sometimes passes with no errors, sometimes shows:
example.py:28: error: Value of type variable "S" of "Response" cannot be "object" [type-var]
I'm not able to nail down exactly when each scenario surfaces but hopefully this is enough to go on as it otherwise presents as a regression since 1.19.0
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrong