Skip to content

bad-specialization falsely reported when matching typevar #3047

@MarcoGorelli

Description

@MarcoGorelli

Describe the Bug

from typing import TypeVar
from typing import TypeVar, Iterable, Iterator

class Series:
    ...

class DataFrame:
    def __iter__(self) -> Iterator[Series]:
        ...

FrameType = TypeVar("FrameType", bound="DataFrame")

def main(left: DataFrame, right: DataFrame) -> None:

    def func(*a: FrameType | Iterable[FrameType]) -> None:
        return None

    func(left, right)

pyrefly:

ERROR `Series` is not assignable to upper bound `DataFrame` of type variable `FrameType` [bad-specialization]
  --> t.py:18:9
   |
18 |     func(left, right)
   |         ^^^^^^^^^^^^^
   |
 INFO 1 error

Both left and right are DataFrame so we should be able to pass them both to func

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0AVZjABqqSgB10YavSYt2nbr35Dio8QBo6ASQYxKqbLG16DqBrylSAxlFRw4dAMoGI8RFLre6hP9fQ7BycAEQtUADFDGhhPdB86TBgwOgB9VIh9SnSACjgYKDAASjoAWgA%2BXSyLXgBtV0p3OABdOISEv0IAqNQYtRg6AF5BYTFKHIkQHr7hSe08AFcsQcmwhkjomEmigKSUmlRWHNgwBkQ6NY3emG1GtgALM4vw6ZgSiroAOVx0WICEvZ0MBLGw5ABUqHOr36dAAPlVzMYYLVocJmu9Kt9fm12t5KDAGAtKPEsVt0F4fMDAsdkgxbhAHgwiiBNCAyPiwFBSIRLDQoBQAMR0AAKpA5XLoaCweHwdBsP0gbCJFggPy66CFrgGjwYxDgiAA9Ab2ckuYReGwDTB0AbMLgbHADfLpAzlQxVTagbw6KgAG6HexIuUK12Gd0-Oi4Yjh9BwdVkBj3H6lX0GOAeoZ0SYAZkIAEYAEyTKS1AzUSgtKRLLg8PgwTClTAQfE2d2pzMAcgZ6F4MA7Uh7DFK%2BIAjgtm-XSgBrGCkUqoGw2eBOYYdgDu4nQ-fQIAAvqyF22YBFoDAKFKcAQSORd0A

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions