`bad-argument-type` when using protocols
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 516
- PR merge metrics
- No merged PRs in 30d
Description
### Describe the Bug
```py
from typing import TypeVar, Protocol, Callable, Any, Sequence
class NativeExpr: ...
NativeExprT = TypeVar("NativeExprT", bound=NativeExpr)
NativeExprT_co = TypeVar("NativeExprT_co", bound=NativeExpr, covariant=True)
class CompliantExpr(Protocol[NativeExprT_co]): ...
CompliantExprT = TypeVar("CompliantExprT", bound=CompliantExpr[Any], covariant=True)
class SQLExpr(CompliantExpr[NativeExprT], Protocol[NativeExprT]):
@classmethod
def from_elementwise(
cls, func: Callable[[Sequence[NativeExprT]], NativeExprT]
) -> None:
return None
SQLExprT = TypeVar("SQLExprT", bound=SQLExpr[Any], covariant=True)
class CompliantNamespace(Protocol[CompliantExprT]):
@property
def _expr(self) -> type[CompliantExprT]: ...
class SQLNamespace(CompliantNamespace[SQLExprT], Protocol[SQLExprT, NativeExprT_co]):
def foo(self) -> None:
def _func(a: Sequence[NativeExprT_co]) -> NativeExprT_co:
return a[0]
self._expr.from_elementwise(_func)
return None
```
Then:
```console
(scratch) mgorelli@marcoslaptop:~/scratch$ mypy t.py
Success: no issues found in 1 source file
(scratch) mgorelli@marcoslaptop:~/scratch$ pyright t.py
0 errors, 0 warnings, 0 informations
(scratch) mgorelli@marcoslaptop:~/scratch$ zuban check t.py
Success: no issues found in 1 source file
(scratch) mgorelli@marcoslaptop:~/scratch$ ty check t.py
All checks passed!
(scratch) mgorelli@marcoslaptop:~/scratch$ pyrefly check t.py
ERROR Argument `(a: Sequence[NativeExprT_co]) -> NativeExprT_co` is not assignable to parameter `func` with type `(Sequence[NativeExprT]) -> NativeExprT` in function `SQLExpr.from_elementwise` [bad-argument-type]
--> t.py:38:37
|
38 | self._expr.from_elementwise(_func)
| ^^^^^
|
INFO 1 error
```
### Sandbox Link
https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0AVZjABqqSgBo6ABWoNcAY1xQpAYVRQoqbLCkBBdKSkBlGAEcArjHQKYAHXQOHCrXDh0AcqgYQAbjABRfGJKRDpCCKdHdC8ffyCQgToAXkFhMUoACjsQWL9A4MoBHKk8CyxkvPjCgEoHKoLEgH0lFLTiUXFs3O98hKKW3BK6MoqG-qklX3EIDAZkgUorOujnV3dVWmIoWfQGfszZXHklKABtccKBQYBdGrCIwiiHTe4duf6k1KEOjO7X7a7fZXYajTDJAHvPb9M4GUg3Sa4aaUIELJYwFZRFyoNx0YwARQAMgdIUCYZdEgiZHJFMoLr1qpT7g46Ky6AABbFuGgwBgAC1wmBZbMwMDAdDA1BoTRgsB5ewA7hA4DBsug2Rq6C44FIwOUFGF1JptLAzmdTJZrLZ6XFGkUblSKfbhayanQALQAPk8uHQMEQLs1lF5Fko6o8vvsq3QBOJVzaP06WRysc%2BoNw5XBqcKsMMVKmMzmaOWzxs6zopLmXh5cGIqFshxppzOlehVzuAfVbPZIVwHT4pEDovFMsKmRVUDAbq9jGELa2UOBlIekWjXPcser8DrDdbDC3tfrMHNRM%2BVKOJzp2cSUid1yUHaHYoluFw49lU493ojfs7mpFz5NHqNiZKgYQWlYNjHnetzTt%2BDJ2veuB-v%2BQYhmGdCoGcAAMNxRKhdATmAhCjiEhCSrQMpytYDBKiqmRAfqKwEcGDChuGkYgBIIBkMGYBQKQhDyDQUAUAAxDIpB8QJhEYDgBBar6kBsKGvS%2Bk86ASaYMB0HyDAMMQcCIAA9MZvFigJhC8GwxnWMZmCKHAxlKOgymqT4vrGS%2BlCYdM0AmjpLluZQanqn2HnoHAGlkPyvruv4lBwBAvptDkADMhAAIwAEw5A4ZwwJQ1CJXh6DlFwPB8DAmDupgEDBgotptAA5BAbDoLwMDNQ4HUMO6waWPV1XugA1jApDuvWti4qkzUKuI6DdegIAAL7cfWtoAGLQDAFBoFgeBEGQq1AA
### (Only applicable for extension issues) IDE Information
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.