Skip to content

functools.partial reassignment with ParamSpec #2737

@grievejia

Description

@grievejia

Describe the Bug

Minimal repro:

import functools
from collections.abc import Callable
from typing import Any, ParamSpec, TypeVar

P = ParamSpec("P")
T = TypeVar("T")

async def run_in_threadpool(func: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
    # FP: `partial[T]` is not assignable to variable `func` with type `(P) -> T`
    func = functools.partial(func, *args, **kwargs)  # E: bad-assignment
    return func()


# Non-async variant (same issue)
def run_sync(func: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
    # FP: same as above
    func = functools.partial(func, *args, **kwargs)  # E: bad-assignment
    return func()

Same code has 0 errors in all other type checkers

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIEAtsbgE4AuABGAK7oDGDuuUcAOujB1cVJh16wuEXOjiFU2Dk2q1GTAMKooURbEHDRTBqWIR0AcxU16zAILpSAGiYAFVHVRUAysRgcXABVTGAA1D0FBVyYAXjcPL19-AAp%2BEFc0gEpBQNimYL9wulSQQKzI9FQ4Uk4mTBgwJjp2AH1zFoYACzoYVExaXmS2TkRNbV1sWABtVyCAXRcAKg8LOFHXBTpVpcWAawB3FbW3QgOjzKYAWgA%2BfMRBJkemAGImADFXUYADYg8GCG0U0Ccy%2BKjgTHQuGYVTgEAslUmMGMuCYADcPADEUwvsMOKD9hAusYQtjkq4Ljd8l8Hk9cXlcdxePJfowAVAhuwAkxlls4DszryLi8mABRUbYPqXGFw9BUGDoBg0x49BisOjoFic5LZdAVV4AOVkUuqtXRdABCqYyTQcrBcFYMB19UazXQLRNHA5IzGOj0MBm8yWR3Wm223L2h15IYFqwpt0C9w1T1eH1GNqRVSYilwqJgSs1tTiDJ4fBIfzZXq5PLDiwj50erzFTAlmGNsPhcoV%2BZVao1uO1ICcIFY-1LZAorwAqqPCaQC9JZAJdVgGix6FRUAwWuhWFRsDBivhRuYGHGmHAGHRE08mjBVeqWGl9bv91emMB8ABfNKCQcgMg9GAUCkIQ3BUFAE5uKQgHAeeGA4AQ4iyJAFhqpuMjoIQgivN4MBIp0DAMMQawAPQkQBDTAYQ9AWCR8okZguAcHAJESEIcJof8sgkWudBZui0B%2Bkh7GoZ4XEargxDifIghkF0Rq5nQsKyHkaQAMyEAAjAATD%2B6AgJ%2BQ6oNIuZvNAMAUGgWB4EQ46fkAA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    typecheckingusabilityUsability & readiness issues identified with running Pyrefly on top OSS projects

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions