Skip to content

[ty] Omit the binding context from the display of a ParamSpec when the ParamSpec is included in the displayed type parameters of the enclosing signature#23211

Merged
AlexWaygood merged 1 commit intomainfrom
alex/paramspec-suffix
Feb 10, 2026
Merged

Conversation

@AlexWaygood
Copy link
Member

@AlexWaygood AlexWaygood commented Feb 10, 2026

Summary

In #22435, we changed our display of Callable types so that we used PEP-695 type parameters more consistently to indicate the scoping of typevars inside these Callable types. As part of that change, we started omitting the binding context from the display of a type variable in a Callable signature if the type variable was anyway being displayed as part of a type parameter list, since the appearance of the type variable in a type parameter list makes the scoping of the type variable explicit and means that the binding context just adds unnecessary noise.

However, we forgot to make the same changes to ParamSpecs: currently on main, we always display the binding context when displaying a ParamSpec. That leads to internally inconsistent displays like

[**P, T](c: (**P@identity2) -> T) -> (**P@identity2) -> T

This PR updates our logic for displaying ParamSpecs so that the binding context is also omitted from the display when the ParamSpec is listed in a type parameter list for an active scope:

[**P, T](c: (**P) -> T) -> (**P) -> T

Test Plan

mdtests updated

…the `ParamSpec` is included in the displayed type parameters of the enclosing signature
@AlexWaygood AlexWaygood requested a review from carljm as a code owner February 10, 2026 21:01
@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Feb 10, 2026
@AlexWaygood AlexWaygood added the diagnostics Related to reporting of diagnostics. label Feb 10, 2026
Copy link
Member

@dcreager dcreager left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@astral-sh-bot
Copy link

astral-sh-bot bot commented Feb 10, 2026

Typing conformance results

No changes detected ✅

@astral-sh-bot
Copy link

astral-sh-bot bot commented Feb 10, 2026

mypy_primer results

Changes were detected when running on open source projects
pytest-robotframework (https://github.com/detachhead/pytest-robotframework)
- pytest_robotframework/_internal/utils.py:51:16: error[invalid-return-type] Return type does not match returned value: expected `[**P'return](**P'return@decorator) -> T`, found `_Wrapped[(...), T@decorator, P@new_fn, T@decorator]`
+ pytest_robotframework/_internal/utils.py:51:16: error[invalid-return-type] Return type does not match returned value: expected `[**P'return](**P'return) -> T`, found `_Wrapped[(...), T@decorator, P@new_fn, T@decorator]`

scrapy (https://github.com/scrapy/scrapy)
- scrapy/utils/decorators.py:40:16: error[invalid-assignment] Object of type `(...) -> Unknown` is not assignable to `def deco[**_P, _T](func: (**_P@deco) -> _T) -> (**_P@deco) -> _T`
+ scrapy/utils/decorators.py:40:16: error[invalid-assignment] Object of type `(...) -> Unknown` is not assignable to `def deco[**_P, _T](func: (**_P) -> _T) -> (**_P) -> _T`

pydantic (https://github.com/pydantic/pydantic)
- pydantic/_internal/_core_metadata.py:87:54: error[invalid-assignment] Invalid assignment to key "pydantic_js_extra" with declared type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | ((dict[str, Divergent], type[Any], /) -> None)` on TypedDict `CoreMetadata`: value of type `dict[object, object]`
+ pydantic/_internal/_core_metadata.py:87:54: error[invalid-assignment] Invalid assignment to key "pydantic_js_extra" with declared type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | ((dict[str, int | float | str | ... omitted 3 union elements], type[Any], /) -> None)` on TypedDict `CoreMetadata`: value of type `dict[object, object]`
- pydantic/fields.py:949:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:949:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:989:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:989:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1032:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:1032:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1072:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:1072:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1115:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:1115:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1154:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:1154:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1194:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`
+ pydantic/fields.py:1194:5: error[invalid-parameter-default] Default value of type `PydanticUndefinedType` is not assignable to annotated parameter type `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`
- pydantic/fields.py:1573:13: error[invalid-argument-type] Argument is incorrect: Expected `dict[str, Divergent] | ((dict[str, Divergent], /) -> None) | None`, found `Top[dict[Unknown, Unknown]] | (((dict[str, Divergent], /) -> None) & ~Top[dict[Unknown, Unknown]]) | None`
+ pydantic/fields.py:1573:13: error[invalid-argument-type] Argument is incorrect: Expected `dict[str, int | float | str | ... omitted 3 union elements] | ((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) | None`, found `Top[dict[Unknown, Unknown]] | (((dict[str, int | float | str | ... omitted 3 union elements], /) -> None) & ~Top[dict[Unknown, Unknown]]) | None`

Expression (https://github.com/cognitedata/Expression)
+ tests/test_compose.py:21:16: error[invalid-assignment] Object of type `(Never, /) -> Never` is not assignable to `(int, /) -> int`
- Found 204 diagnostics
+ Found 205 diagnostics

antidote (https://github.com/Finistere/antidote)
- src/antidote/lib/interface_ext/_function.py:53:16: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, Out'return](**P'return@FunctionInterfaceImpl) -> Out'return`, found `(**P@FunctionInterfaceImpl) -> Out@FunctionInterfaceImpl`
+ src/antidote/lib/interface_ext/_function.py:53:16: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, Out'return](**P'return) -> Out'return`, found `(**P@FunctionInterfaceImpl) -> Out@FunctionInterfaceImpl`
- src/antidote/lib/interface_ext/_function.py:61:16: error[invalid-return-type] Return type does not match returned value: expected `Dependency[[**P'return, Out'return](**P'return@FunctionInterfaceImpl) -> Out'return]`, found `ImplementationQuery[(**P@FunctionInterfaceImpl) -> Out@FunctionInterfaceImpl]`
+ src/antidote/lib/interface_ext/_function.py:61:16: error[invalid-return-type] Return type does not match returned value: expected `Dependency[[**P'return, Out'return](**P'return) -> Out'return]`, found `ImplementationQuery[(**P@FunctionInterfaceImpl) -> Out@FunctionInterfaceImpl]`

xarray (https://github.com/pydata/xarray)
- xarray/tests/test_plot.py:1316:53: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return@staticmethod) -> _R_co'return) | staticmethod[(...), Unknown]`
+ xarray/tests/test_plot.py:1316:53: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return) -> _R_co'return) | staticmethod[(...), Unknown]`
- xarray/tests/test_plot.py:1336:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return@staticmethod) -> _R_co'return) | staticmethod[(...), Unknown]`
+ xarray/tests/test_plot.py:1336:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return) -> _R_co'return) | staticmethod[(...), Unknown]`
- xarray/tests/test_plot.py:1343:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return@staticmethod) -> _R_co'return) | staticmethod[(...), Unknown]`
+ xarray/tests/test_plot.py:1343:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return) -> _R_co'return) | staticmethod[(...), Unknown]`
- xarray/tests/test_plot.py:1421:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return@staticmethod) -> _R_co'return) | staticmethod[(...), Unknown]`
+ xarray/tests/test_plot.py:1421:12: warning[possibly-missing-attribute] Attribute `__name__` may be missing on object of type `([**_P'return, _R_co'return](**_P'return) -> _R_co'return) | staticmethod[(...), Unknown]`

prefect (https://github.com/PrefectHQ/prefect)
- src/prefect/client/utilities.py:71:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return](**P'return@client_injector) -> Coroutine[Any, Any, R]`, found `_Wrapped[(...), Coroutine[Any, Any, R@client_injector], P@wrapper, CoroutineType[Any, Any, R@client_injector]]`
+ src/prefect/client/utilities.py:71:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return](**P'return) -> Coroutine[Any, Any, R]`, found `_Wrapped[(...), Coroutine[Any, Any, R@client_injector], P@wrapper, CoroutineType[Any, Any, R@client_injector]]`
- src/prefect/input/run_input.py:672:20: error[invalid-return-type] Return type does not match returned value: expected `T@GetAutomaticInputHandler | AutomaticRunInput[T@GetAutomaticInputHandler]`, found `Unknown | Coroutine[Any, Any, Unknown]`
+ src/prefect/input/run_input.py:672:20: error[invalid-return-type] Return type does not match returned value: expected `T@GetAutomaticInputHandler | AutomaticRunInput[T@GetAutomaticInputHandler]`, found `T@GetAutomaticInputHandler | AutomaticRunInput[T@GetAutomaticInputHandler] | Coroutine[Any, Any, T@GetAutomaticInputHandler | AutomaticRunInput[T@GetAutomaticInputHandler]]`

hydpy (https://github.com/hydpy-dev/hydpy)
- hydpy/core/objecttools.py:490:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, T'return]((**P'return@excmessage_decorator) -> T'return, /) -> (**P'return@excmessage_decorator) -> T'return`, found `(TypeVar, /) -> TypeVar`
+ hydpy/core/objecttools.py:490:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, T'return]((**P'return) -> T'return, /) -> (**P'return) -> T'return`, found `(TypeVar, /) -> TypeVar`

dd-trace-py (https://github.com/DataDog/dd-trace-py)
- ddtrace/internal/telemetry/writer.py:761:9: error[invalid-assignment] Object of type `Unknown | ([**_P'return, _R_co'return](**_P'return@staticmethod) -> _R_co'return)` is not assignable to attribute `excepthook` of type `(type[BaseException], BaseException, TracebackType | None, /) -> Any`
+ ddtrace/internal/telemetry/writer.py:761:9: error[invalid-assignment] Object of type `Unknown | ([**_P'return, _R_co'return](**_P'return) -> _R_co'return)` is not assignable to attribute `excepthook` of type `(type[BaseException], BaseException, TracebackType | None, /) -> Any`
- tests/debugging/mocking.py:195:9: error[invalid-assignment] Object of type `(_) -> Unknown` is not assignable to attribute `register` of type `def register[**_P, _T](func: (**_P@register) -> _T, /, *args: _P.args, **kwargs: _P.kwargs) -> (**_P@register) -> _T`
+ tests/debugging/mocking.py:195:9: error[invalid-assignment] Object of type `(_) -> Unknown` is not assignable to attribute `register` of type `def register[**_P, _T](func: (**_P) -> _T, /, *args: _P.args, **kwargs: _P.kwargs) -> (**_P) -> _T`

sympy (https://github.com/sympy/sympy)
+ sympy/parsing/mathematica.py:692:38: error[invalid-argument-type] Argument to function `__new__` is incorrect: Expected `Iterable[Never]`, found `Unknown | list[Unknown | str]`
- Found 15829 diagnostics
+ Found 15830 diagnostics

materialize (https://github.com/MaterializeInc/materialize)
+ misc/python/materialize/cli/mz_workload_anonymize.py:251:13: error[no-matching-overload] No overload of bound method `join` matches arguments
- Found 534 diagnostics
+ Found 535 diagnostics

zulip (https://github.com/zulip/zulip)
- zerver/lib/import_realm.py:1166:13: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(dict[str, Any], /) -> None`, found `(def process_avatars(record: dict[str, Any]) -> None) | ([**P'return](**P'return@partial) -> None)`
+ zerver/lib/import_realm.py:1166:13: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(dict[str, Any], /) -> None`, found `(def process_avatars(record: dict[str, Any]) -> None) | ([**P'return](**P'return) -> None)`
- zerver/lib/parallel.py:121:46: error[invalid-argument-type] Argument to bound method `submit` is incorrect: Expected `(**P'return@partial) -> None`, found `([**P'return](**P'return@partial) -> None) | ((ParallelRecordType@run_parallel_queue, /) -> None)`
+ zerver/lib/parallel.py:121:46: error[invalid-argument-type] Argument to bound method `submit` is incorrect: Expected `(**P'return@partial) -> None`, found `([**P'return](**P'return) -> None) | ((ParallelRecordType@run_parallel_queue, /) -> None)`
- zerver/lib/test_runner.py:129:32: error[invalid-argument-type] Argument to function `process_instrumented_calls` is incorrect: Expected `(dict[str, Any], /) -> None`, found `[**P'return](**P'return@partial) -> Any`
+ zerver/lib/test_runner.py:129:32: error[invalid-argument-type] Argument to function `process_instrumented_calls` is incorrect: Expected `(dict[str, Any], /) -> None`, found `[**P'return](**P'return) -> Any`
- zerver/tests/test_parallel.py:197:17: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return@partial) -> None`
+ zerver/tests/test_parallel.py:197:17: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return) -> None`
- zerver/tests/test_parallel.py:230:21: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return@partial) -> None`
+ zerver/tests/test_parallel.py:230:21: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return) -> None`
- zerver/tests/test_parallel.py:267:17: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return@partial) -> None`
+ zerver/tests/test_parallel.py:267:17: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return) -> None`
- zerver/tests/test_parallel.py:300:13: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return@partial) -> None`
+ zerver/tests/test_parallel.py:300:13: error[invalid-argument-type] Argument to function `run_parallel` is incorrect: Expected `(int, /) -> None`, found `[**P'return](**P'return) -> None`
- zerver/webhooks/bitbucket/view.py:538:75: error[invalid-assignment] Object of type `dict[str, BodyGetter | ([**P'return](**P'return@partial) -> str)]` is not assignable to `dict[str, BodyGetter]`
+ zerver/webhooks/bitbucket/view.py:538:75: error[invalid-assignment] Object of type `dict[str, BodyGetter | ([**P'return](**P'return) -> str)]` is not assignable to `dict[str, BodyGetter]`
- zerver/webhooks/github/view.py:1032:61: error[invalid-assignment] Object of type `dict[str, ((Helper, /) -> str) | ([**P'return](**P'return@partial) -> str)]` is not assignable to `dict[str, (Helper, /) -> str]`
+ zerver/webhooks/github/view.py:1032:61: error[invalid-assignment] Object of type `dict[str, ((Helper, /) -> str) | ([**P'return](**P'return) -> str)]` is not assignable to `dict[str, (Helper, /) -> str]`
- zerver/webhooks/gitlab/view.py:538:51: error[invalid-assignment] Object of type `dict[str, EventFunction | ([**P'return](**P'return@partial) -> str)]` is not assignable to `dict[str, EventFunction]`
+ zerver/webhooks/gitlab/view.py:538:51: error[invalid-assignment] Object of type `dict[str, EventFunction | ([**P'return](**P'return) -> str)]` is not assignable to `dict[str, EventFunction]`
- zerver/webhooks/groove/view.py:93:72: error[invalid-assignment] Object of type `dict[str, ((WildValue, /) -> str | None) | ([**P'return](**P'return@partial) -> str)]` is not assignable to `dict[str, (WildValue, /) -> str | None]`
+ zerver/webhooks/groove/view.py:93:72: error[invalid-assignment] Object of type `dict[str, ((WildValue, /) -> str | None) | ([**P'return](**P'return) -> str)]` is not assignable to `dict[str, (WildValue, /) -> str | None]`
- zerver/webhooks/shortcut/view.py:704:87: error[invalid-assignment] Object of type `dict[str, ((WildValue, WildValue, /) -> str | None) | ([**P'return](**P'return@partial) -> str)]` is not assignable to `dict[str, (WildValue, WildValue, /) -> str | None]`
+ zerver/webhooks/shortcut/view.py:704:87: error[invalid-assignment] Object of type `dict[str, ((WildValue, WildValue, /) -> str | None) | ([**P'return](**P'return) -> str)]` is not assignable to `dict[str, (WildValue, WildValue, /) -> str | None]`
- zerver/webhooks/shortcut/view.py:737:88: error[invalid-assignment] Object of type `dict[str, ((WildValue, WildValue, /) -> str | None) | ([**P'return](**P'return@partial) -> str | None)]` is not assignable to `dict[str, (WildValue, WildValue, /) -> str | None]`
+ zerver/webhooks/shortcut/view.py:737:88: error[invalid-assignment] Object of type `dict[str, ((WildValue, WildValue, /) -> str | None) | ([**P'return](**P'return) -> str | None)]` is not assignable to `dict[str, (WildValue, WildValue, /) -> str | None]`
- zerver/webhooks/shortcut/view.py:751:99: error[invalid-assignment] Object of type `dict[str, ((WildValue, /) -> Iterator[WildValue]) | ([**P'return](**P'return@partial) -> Iterator[WildValue])]` is not assignable to `dict[str, (WildValue, /) -> Iterator[WildValue]]`
+ zerver/webhooks/shortcut/view.py:751:99: error[invalid-assignment] Object of type `dict[str, ((WildValue, /) -> Iterator[WildValue]) | ([**P'return](**P'return) -> Iterator[WildValue])]` is not assignable to `dict[str, (WildValue, /) -> Iterator[WildValue]]`
- zerver/worker/base.py:200:29: error[invalid-argument-type] Argument to function `signal` is incorrect: Expected `((int, FrameType | None, /) -> Any) | int | None`, found `[**P'return](**P'return@partial) -> None`
+ zerver/worker/base.py:200:29: error[invalid-argument-type] Argument to function `signal` is incorrect: Expected `((int, FrameType | None, /) -> Any) | int | None`, found `[**P'return](**P'return) -> None`

core (https://github.com/home-assistant/core)
- homeassistant/components/heos/media_player.py:161:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _T_co'return, _R'return, _YieldT_co'return, _SendT_nd_contra'return, _ReturnT_nd_co'return]((**_P'return@catch_action_error) -> Awaitable[_R'return], /) -> (**_P'return@catch_action_error) -> Coroutine[Any, Any, _R'return]`, found `def decorator(func: _FuncType[_P@decorator, _R@decorator]) -> _ReturnFuncType[_P@decorator, _R@decorator]`
+ homeassistant/components/heos/media_player.py:161:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _T_co'return, _R'return, _YieldT_co'return, _SendT_nd_contra'return, _ReturnT_nd_co'return]((**_P'return) -> Awaitable[_R'return], /) -> (**_P'return) -> Coroutine[Any, Any, _R'return]`, found `def decorator(func: _FuncType[_P@decorator, _R@decorator]) -> _ReturnFuncType[_P@decorator, _R@decorator]`
- homeassistant/components/nice_go/util.py:66:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, _YieldT_co'return, _SendT_nd_contra'return, _ReturnT_nd_co'return, _R'return]((**P'return@retry) -> Coroutine[Any, Any, _R'return], /) -> (**P'return@retry) -> Coroutine[Any, Any, _R'return]`, found `def decorator(func: (**P@decorator) -> Coroutine[Any, Any, _R@decorator]) -> (**P@decorator) -> Coroutine[Any, Any, _R@decorator]`
+ homeassistant/components/nice_go/util.py:66:12: error[invalid-return-type] Return type does not match returned value: expected `[**P'return, _YieldT_co'return, _SendT_nd_contra'return, _ReturnT_nd_co'return, _R'return]((**P'return) -> Coroutine[Any, Any, _R'return], /) -> (**P'return) -> Coroutine[Any, Any, _R'return]`, found `def decorator(func: (**P@decorator) -> Coroutine[Any, Any, _R@decorator]) -> (**P@decorator) -> Coroutine[Any, Any, _R@decorator]`
- homeassistant/helpers/deprecation.py:113:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _R'return]((**_P'return@deprecated_class) -> _R'return, /) -> (**_P'return@deprecated_class) -> _R'return`, found `def deprecated_decorator(cls: (**_P@deprecated_decorator) -> _R@deprecated_decorator) -> (**_P@deprecated_decorator) -> _R@deprecated_decorator`
+ homeassistant/helpers/deprecation.py:113:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _R'return]((**_P'return) -> _R'return, /) -> (**_P'return) -> _R'return`, found `def deprecated_decorator(cls: (**_P@deprecated_decorator) -> _R@deprecated_decorator) -> (**_P@deprecated_decorator) -> _R@deprecated_decorator`
- homeassistant/helpers/deprecation.py:138:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _R'return]((**_P'return@deprecated_function) -> _R'return, /) -> (**_P'return@deprecated_function) -> _R'return`, found `def deprecated_decorator(func: (**_P@deprecated_decorator) -> _R@deprecated_decorator) -> (**_P@deprecated_decorator) -> _R@deprecated_decorator`
+ homeassistant/helpers/deprecation.py:138:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _R'return]((**_P'return) -> _R'return, /) -> (**_P'return) -> _R'return`, found `def deprecated_decorator(func: (**_P@deprecated_decorator) -> _R@deprecated_decorator) -> (**_P@deprecated_decorator) -> _R@deprecated_decorator`
- homeassistant/helpers/deprecation.py:173:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _T'return]((**_P'return@deprecated_hass_argument) -> _T'return, /) -> (**_P'return@deprecated_hass_argument) -> _T'return`, found `def _decorator(func: (**_P@_decorator) -> _T@_decorator) -> (**_P@_decorator) -> _T@_decorator`
+ homeassistant/helpers/deprecation.py:173:12: error[invalid-return-type] Return type does not match returned value: expected `[**_P'return, _T'return]((**_P'return) -> _T'return, /) -> (**_P'return) -> _T'return`, found `def _decorator(func: (**_P@_decorator) -> _T@_decorator) -> (**_P@_decorator) -> _T@_decorator`

scipy (https://github.com/scipy/scipy)
- scipy/signal/tests/test_short_time_fft.py:1116:23: error[invalid-argument-type] Method `__class_getitem__` of type `Unknown | ([**_P'return, _R_co'return](**_P'return@classmethod) -> _R_co'return)` cannot be called with key of type `<class 'float64'>` on object of type `<class 'ShortTimeFFT'>`
+ scipy/signal/tests/test_short_time_fft.py:1116:23: error[invalid-argument-type] Method `__class_getitem__` of type `Unknown | ([**_P'return, _R_co'return](**_P'return) -> _R_co'return)` cannot be called with key of type `<class 'float64'>` on object of type `<class 'ShortTimeFFT'>`

@astral-sh-bot
Copy link

astral-sh-bot bot commented Feb 10, 2026

Memory usage report

Summary

Project Old New Diff Outcome
flake8 51.85MB 51.85MB - ☑️
sphinx 282.30MB 282.30MB - ☑️
trio 123.95MB 123.95MB - ☑️
prefect 710.23MB 710.23MB -0.0% (-0.00MB) ⬇️

Significant changes

Click to expand detailed breakdown

prefect

Name Old New Diff Outcome
check_file_impl 17.39MB 17.39MB -0.0% (-0.00MB) ⬇️

@AlexWaygood AlexWaygood enabled auto-merge (squash) February 10, 2026 21:06
@AlexWaygood AlexWaygood merged commit 48602db into main Feb 10, 2026
51 checks passed
@AlexWaygood AlexWaygood deleted the alex/paramspec-suffix branch February 10, 2026 21:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

diagnostics Related to reporting of diagnostics. ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants