From 8a45a9fb891e9db56b8bb1fd3261a49261668df4 Mon Sep 17 00:00:00 2001 From: Mike Ribbons Date: Mon, 2 Sep 2024 20:54:21 +1000 Subject: [PATCH] Fix typing errors with set_extenion methods eg: ``` Argument of type "(span: Span, tag: str) -> str" cannot be assigned to parameter "method" of type "SpanMethod | None" in function "set_extension" Type "(span: Span, tag: str) -> str" is incompatible with type "SpanMethod | None" "function" is incompatible with protocol "SpanMethod" "__call__" is not present "function" is incompatible with "None"PylancereportArgumentType ``` Rationale: `Callable` only accepts a single parameter, optional parameters don't work ... isn't recognized as variadic arguments (... not valid here) SomeMethod(Protocol) __call__ approach doesn't support mapping non variadic arguments to variadic arguments. Therefore, to not break the currently documented interface, implement a union of Callable overloads. --- spacy/tokens/doc.pyi | 8 ++++++-- spacy/tokens/span.pyi | 8 ++++++-- spacy/tokens/token.pyi | 8 ++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/spacy/tokens/doc.pyi b/spacy/tokens/doc.pyi index f0b68862c..62a20279c 100644 --- a/spacy/tokens/doc.pyi +++ b/spacy/tokens/doc.pyi @@ -28,8 +28,12 @@ from .underscore import Underscore DOCBIN_ALL_ATTRS: Tuple[str, ...] -class DocMethod(Protocol): - def __call__(self: Doc, *args: Any, **kwargs: Any) -> Any: ... # type: ignore[misc] +DocMethod = Union[ + Callable[[Doc], Any], + Callable[[Doc, Any], Any], + Callable[[Doc, Any, Any], Any], + Callable[[Doc, Any, Any, Any], Any], +] class Doc: vocab: Vocab diff --git a/spacy/tokens/span.pyi b/spacy/tokens/span.pyi index b982eb810..1714f732d 100644 --- a/spacy/tokens/span.pyi +++ b/spacy/tokens/span.pyi @@ -8,8 +8,12 @@ from .doc import Doc from .token import Token from .underscore import Underscore -class SpanMethod(Protocol): - def __call__(self: Span, *args: Any, **kwargs: Any) -> Any: ... # type: ignore[misc] +SpanMethod = Union[ + Callable[[Span], Any], + Callable[[Span, Any], Any], + Callable[[Span, Any, Any], Any], + Callable[[Span, Any, Any, Any], Any], +] class Span: @classmethod diff --git a/spacy/tokens/token.pyi b/spacy/tokens/token.pyi index 435ace527..4bc41d517 100644 --- a/spacy/tokens/token.pyi +++ b/spacy/tokens/token.pyi @@ -9,8 +9,12 @@ from .morphanalysis import MorphAnalysis from .span import Span from .underscore import Underscore -class TokenMethod(Protocol): - def __call__(self: Token, *args: Any, **kwargs: Any) -> Any: ... # type: ignore[misc] +TokenMethod = Union[ + Callable[[Token], Any], + Callable[[Token, Any], Any], + Callable[[Token, Any, Any], Any], + Callable[[Token, Any, Any, Any], Any], +] class Token: i: int