Skip to content

Display typevar bounds, constraints, and defaults in foralls#2189

Closed
Adist319 wants to merge 1 commit intofacebook:mainfrom
Adist319:issue-2179-keyword-only-arguments
Closed

Display typevar bounds, constraints, and defaults in foralls#2189
Adist319 wants to merge 1 commit intofacebook:mainfrom
Adist319:issue-2179-keyword-only-arguments

Conversation

@Adist319
Copy link
Contributor

Summary

Display type variable bounds, constraints, and defaults when formatting forall types. Previously, reveal_type showed identical signatures for functions with different type variable restrictions:

def f[T: str](x: T) -> T: ...
def g[T: int](x: T) -> T: ...
reveal_type(f)  # Before: [T](x: T) -> T
reveal_type(g)  # Before: [T](x: T) -> T  (identical!)

Now the bounds are shown:

reveal_type(f)  # After: [T: str](x: T) -> T
reveal_type(g)  # After: [T: int](x: T) -> T

Also supports:

  • Constraints: [T: (str, int)]
  • Defaults: [T = int]
  • Combined: [T: str = str]

Fixes #2179

Test Plan

  • Added 6 new test cases covering bounds, constraints, defaults, and combinations
  • Updated 4 existing tests to reflect the new display format
  • Verified locally using the sandbox
image

@github-actions
Copy link

Diff from mypy_primer, showing the effect of this PR on open source code:

pip (https://github.com/pypa/pip)
-   [AnyStr](s: PathLike[AnyStr]) -> AnyStr
+   [AnyStr: (str, bytes)](s: PathLike[AnyStr]) -> AnyStr
-   [AnyOrLiteralStr](s: AnyOrLiteralStr) -> AnyOrLiteralStr
+   [AnyOrLiteralStr: (str, bytes, LiteralString)](s: AnyOrLiteralStr) -> AnyOrLiteralStr
- ::error file=src/pip/_internal/req/req_uninstall.py,line=168,col=31,endLine=168,endColumn=56,title=Pyrefly no-matching-overload::No matching overload found for function `map.__new__` called with arguments: (type[map[_S]], Overload[%0A  [AnyStr](s: PathLike[AnyStr]) -> AnyStr%0A  [AnyOrLiteralStr](s: AnyOrLiteralStr) -> AnyOrLiteralStr%0A], set[str])%0A  Possible overloads:%0A  (cls: type[map[_S]], func: (_T1) -> _S, iterable: Iterable[_T1], /) -> map[_S] [closest match]%0A  (cls: type[map[_S]], func: (_T1, _T2) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3, _T4) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3, _T4, _T5) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], iter5: Iterable[_T5], /) -> map[_S]%0A  (cls: type[map[_S]], func: (...) -> _S, iterable: Iterable[Any], iter2: Iterable[Any], iter3: Iterable[Any], iter4: Iterable[Any], iter5: Iterable[Any], iter6: Iterable[Any], /, *iterables: Iterable[Any]) -> map[_S]
+ ::error file=src/pip/_internal/req/req_uninstall.py,line=168,col=31,endLine=168,endColumn=56,title=Pyrefly no-matching-overload::No matching overload found for function `map.__new__` called with arguments: (type[map[_S]], Overload[%0A  [AnyStr: (str, bytes)](s: PathLike[AnyStr]) -> AnyStr%0A  [AnyOrLiteralStr: (str, bytes, LiteralString)](s: AnyOrLiteralStr) -> AnyOrLiteralStr%0A], set[str])%0A  Possible overloads:%0A  (cls: type[map[_S]], func: (_T1) -> _S, iterable: Iterable[_T1], /) -> map[_S] [closest match]%0A  (cls: type[map[_S]], func: (_T1, _T2) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3, _T4) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], /) -> map[_S]%0A  (cls: type[map[_S]], func: (_T1, _T2, _T3, _T4, _T5) -> _S, iterable: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], iter4: Iterable[_T4], iter5: Iterable[_T5], /) -> map[_S]%0A  (cls: type[map[_S]], func: (...) -> _S, iterable: Iterable[Any], iter2: Iterable[Any], iter3: Iterable[Any], iter4: Iterable[Any], iter5: Iterable[Any], iter6: Iterable[Any], /, *iterables: Iterable[Any]) -> map[_S]

bokeh (https://github.com/bokeh/bokeh)
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ArrayT](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: _ArrayT, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ArrayT](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
+   [_ArrayT: ndarray[tuple[Any, ...], dtype[Any]]](object: numpy._core.multiarray._SupportsArray[_ArrayT], dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: Literal[True], ndmin: Literal[0] = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> _ArrayT
-   [_ScalarT](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
+   [_ScalarT: generic[Any]](object: _ArrayLike, dtype: None = None, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]
-   [_ScalarT](object: Any, dtype: _DTypeLike, *, copy: _CopyMode | bool | None = True, order: _OrderKACF = 'K', subok: bool = False, ndmin: int = 0, ndmax: int = 0, like: _SupportsArrayFunc | None = None) -> ndarray[tuple[Any, ...], dtype[_ScalarT]]

... (truncated 17 lines) ...

openlibrary (https://github.com/internetarchive/openlibrary)
- ERROR openlibrary/plugins/openlibrary/lists.py:811:43-813:18: Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]` [unsupported-operation]
- ERROR openlibrary/plugins/openlibrary/lists.py:818:40-88: Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]` [unsupported-operation]
- ERROR openlibrary/plugins/openlibrary/lists.py:823:42-825:18: Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]` [unsupported-operation]
- ERROR openlibrary/plugins/upstream/tests/test_merge_authors.py:142:12-52: Object of class `NoneType` has no attribute `key` [missing-attribute]
- ::error file=openlibrary/plugins/openlibrary/lists.py,line=811,col=43,endLine=813,endColumn=18,title=Pyrefly unsupported-operation::Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]`%0A  Argument `list[Thing | Unknown]` is not assignable to parameter `value` with type `list[dict[Unknown, Unknown]]` in function `dict.__setitem__`
- ::error file=openlibrary/plugins/openlibrary/lists.py,line=818,col=40,endLine=818,endColumn=88,title=Pyrefly unsupported-operation::Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]`%0A  Argument `list[Thing | Unknown]` is not assignable to parameter `value` with type `list[dict[Unknown, Unknown]]` in function `dict.__setitem__`
- ::error file=openlibrary/plugins/openlibrary/lists.py,line=823,col=42,endLine=825,endColumn=18,title=Pyrefly unsupported-operation::Cannot set item in `dict[str, list[dict[Unknown, Unknown]]]`%0A  Argument `list[Thing | Unknown]` is not assignable to parameter `value` with type `list[dict[Unknown, Unknown]]` in function `dict.__setitem__`
- ::error file=openlibrary/plugins/upstream/tests/test_merge_authors.py,line=37,col=9,endLine=37,endColumn=12,title=Pyrefly bad-override::Class member `MockSite.get` overrides parent class `Site` in an inconsistent manner%0A  `MockSite.get` has type `BoundMethod[MockSite, (self: MockSite, key: Unknown) -> Thing | Unknown]`, which is not assignable to `BoundMethod[MockSite, (self: MockSite, key: Unknown, revision: Unknown | None = None, lazy: bool | Unknown = False) -> Thing | Unknown | None]`, the type of `Site.get`
+ ::error file=openlibrary/plugins/upstream/tests/test_merge_authors.py,line=37,col=9,endLine=37,endColumn=12,title=Pyrefly bad-override::Class member `MockSite.get` overrides parent class `Site` in an inconsistent manner%0A  `MockSite.get` has type `BoundMethod[MockSite, (self: MockSite, key: Unknown) -> Unknown]`, which is not assignable to `BoundMethod[MockSite, (self: MockSite, key: Unknown, revision: Unknown | None = None, lazy: bool | Unknown = False) -> Unknown | None]`, the type of `Site.get`
- ::error file=openlibrary/plugins/upstream/tests/test_merge_authors.py,line=142,col=12,endLine=142,endColumn=52,title=Pyrefly missing-attribute::Object of class `NoneType` has no attribute `key`

materialize (https://github.com/MaterializeInc/materialize)
-   [_T_conn](dsn: str | None, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn
+   [_T_conn: connection](dsn: str | None, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn
-   [_T_conn](dsn: str | None = None, *, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn
+   [_T_conn: connection](dsn: str | None = None, *, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn
- ::error file=misc/dbt-materialize/dbt/adapters/materialize/connections.py,line=70,col=20,endLine=70,endColumn=27,title=Pyrefly bad-assignment::`(**kwargs: Unknown) -> connection` is not assignable to attribute `connect` with type `Overload[%0A  [_T_conn](dsn: str | None, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn%0A  [_T_conn](dsn: str | None = None, *, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn%0A  (dsn: str | None = None, connection_factory: ((...) -> connection) | None = None, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> connection%0A]`
+ ::error file=misc/dbt-materialize/dbt/adapters/materialize/connections.py,line=70,col=20,endLine=70,endColumn=27,title=Pyrefly bad-assignment::`(**kwargs: Unknown) -> connection` is not assignable to attribute `connect` with type `Overload[%0A  [_T_conn: connection](dsn: str | None, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn%0A  [_T_conn: connection](dsn: str | None = None, *, connection_factory: (...) -> _T_conn, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> _T_conn%0A  (dsn: str | None = None, connection_factory: ((...) -> connection) | None = None, cursor_factory: ((connection, bytes | str | None) -> cursor) | None = None, **kwargs: Any) -> connection%0A]`

egglog-python (https://github.com/egraphs-good/egglog-python)
- ERROR python/egglog/egraph.py:206:5-11: Overload return type `[P]((ParamSpec(P)) -> BaseExpr) -> (ParamSpec(P)) -> BaseExpr` is not assignable to implementation return type `[P, BASE_EXPR_NONE]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE` [inconsistent-overload]
+ ERROR python/egglog/egraph.py:206:5-11: Overload return type `[P]((ParamSpec(P)) -> BaseExpr) -> (ParamSpec(P)) -> BaseExpr` is not assignable to implementation return type `[P, BASE_EXPR_NONE: BaseExpr | None]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE` [inconsistent-overload]
- ERROR python/egglog/egraph.py:216:5-11: Overload return type `[P, EXPR_NONE]((ParamSpec(P)) -> EXPR_NONE) -> (ParamSpec(P)) -> EXPR_NONE` is not assignable to implementation return type `[P, BASE_EXPR_NONE]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE` [inconsistent-overload]
+ ERROR python/egglog/egraph.py:216:5-11: Overload return type `[P, EXPR_NONE: Expr | None]((ParamSpec(P)) -> EXPR_NONE) -> (ParamSpec(P)) -> EXPR_NONE` is not assignable to implementation return type `[P, BASE_EXPR_NONE: BaseExpr | None]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE` [inconsistent-overload]
- ::error file=python/egglog/egraph.py,line=206,col=5,endLine=206,endColumn=11,title=Pyrefly inconsistent-overload::Overload return type `[P]((ParamSpec(P)) -> BaseExpr) -> (ParamSpec(P)) -> BaseExpr` is not assignable to implementation return type `[P, BASE_EXPR_NONE]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE`
+ ::error file=python/egglog/egraph.py,line=206,col=5,endLine=206,endColumn=11,title=Pyrefly inconsistent-overload::Overload return type `[P]((ParamSpec(P)) -> BaseExpr) -> (ParamSpec(P)) -> BaseExpr` is not assignable to implementation return type `[P, BASE_EXPR_NONE: BaseExpr | None]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE`
- ::error file=python/egglog/egraph.py,line=216,col=5,endLine=216,endColumn=11,title=Pyrefly inconsistent-overload::Overload return type `[P, EXPR_NONE]((ParamSpec(P)) -> EXPR_NONE) -> (ParamSpec(P)) -> EXPR_NONE` is not assignable to implementation return type `[P, BASE_EXPR_NONE]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE`
+ ::error file=python/egglog/egraph.py,line=216,col=5,endLine=216,endColumn=11,title=Pyrefly inconsistent-overload::Overload return type `[P, EXPR_NONE: Expr | None]((ParamSpec(P)) -> EXPR_NONE) -> (ParamSpec(P)) -> EXPR_NONE` is not assignable to implementation return type `[P, BASE_EXPR_NONE: BaseExpr | None]((ParamSpec(P)) -> BASE_EXPR_NONE) -> (ParamSpec(P)) -> BASE_EXPR_NONE`

ibis (https://github.com/ibis-project/ibis)
- ERROR ibis/common/deferred.py:579:5-15: Overload return type `[F](F) -> F` is not assignable to implementation return type `((func: Unknown) -> (*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown) | ((*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown)` [inconsistent-overload]
+ ERROR ibis/common/deferred.py:579:5-15: Overload return type `[F: (...) -> Unknown](F) -> F` is not assignable to implementation return type `((func: Unknown) -> (*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown) | ((*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown)` [inconsistent-overload]
- ERROR ibis/expr/operations/udf.py:155:20-71: No matching overload found for function `type.__new__` called with arguments: (type[type], str, tuple[[B](self: Self@_UDF) -> type[B]], dict[str, Argument]) [no-matching-overload]
+ ERROR ibis/expr/operations/udf.py:155:20-71: No matching overload found for function `type.__new__` called with arguments: (type[type], str, tuple[[B: Value[Unknown, Any]](self: Self@_UDF) -> type[B]], dict[str, Argument]) [no-matching-overload]
- ::error file=ibis/common/deferred.py,line=579,col=5,endLine=579,endColumn=15,title=Pyrefly inconsistent-overload::Overload return type `[F](F) -> F` is not assignable to implementation return type `((func: Unknown) -> (*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown) | ((*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown)`
+ ::error file=ibis/common/deferred.py,line=579,col=5,endLine=579,endColumn=15,title=Pyrefly inconsistent-overload::Overload return type `[F: (...) -> Unknown](F) -> F` is not assignable to implementation return type `((func: Unknown) -> (*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown) | ((*args: Unknown, **kwargs: Unknown) -> Deferred | Unknown)`
- ::error file=ibis/expr/operations/udf.py,line=155,col=20,endLine=155,endColumn=71,title=Pyrefly no-matching-overload::No matching overload found for function `type.__new__` called with arguments: (type[type], str, tuple[[B](self: Self@_UDF) -> type[B]], dict[str, Argument])%0A  Possible overloads:%0A  (cls: type[type], o: object, /) -> type[Any]%0A  (cls: type[Self], name: str, bases: tuple[type[Any], ...], namespace: dict[str, Any], /, **kwds: Any) -> Self [closest match]
+ ::error file=ibis/expr/operations/udf.py,line=155,col=20,endLine=155,endColumn=71,title=Pyrefly no-matching-overload::No matching overload found for function `type.__new__` called with arguments: (type[type], str, tuple[[B: Value[Unknown, Any]](self: Self@_UDF) -> type[B]], dict[str, Argument])%0A  Possible overloads:%0A  (cls: type[type], o: object, /) -> type[Any]%0A  (cls: type[Self], name: str, bases: tuple[type[Any], ...], namespace: dict[str, Any], /, **kwds: Any) -> Self [closest match]
- ::error file=ibis/expr/operations/udf.py,line=179,col=5,endLine=179,endColumn=10,title=Pyrefly bad-override::Class member `scalar._base` overrides parent class `_UDF` in an inconsistent manner%0A  `scalar._base` has type `type[ScalarUDF]`, which is not assignable to `BoundMethod[scalar, [B](self: scalar) -> type[B]]`, the property getter for `_UDF._base`
+ ::error file=ibis/expr/operations/udf.py,line=179,col=5,endLine=179,endColumn=10,title=Pyrefly bad-override::Class member `scalar._base` overrides parent class `_UDF` in an inconsistent manner%0A  `scalar._base` has type `type[ScalarUDF]`, which is not assignable to `BoundMethod[scalar, [B: Value[Unknown, Any]](self: scalar) -> type[B]]`, the property getter for `_UDF._base`
- ::error file=ibis/expr/operations/udf.py,line=681,col=5,endLine=681,endColumn=10,title=Pyrefly bad-override::Class member `agg._base` overrides parent class `_UDF` in an inconsistent manner%0A  `agg._base` has type `type[AggUDF]`, which is not assignable to `BoundMethod[agg, [B](self: agg) -> type[B]]`, the property getter for `_UDF._base`
+ ::error file=ibis/expr/operations/udf.py,line=681,col=5,endLine=681,endColumn=10,title=Pyrefly bad-override::Class member `agg._base` overrides parent class `_UDF` in an inconsistent manner%0A  `agg._base` has type `type[AggUDF]`, which is not assignable to `BoundMethod[agg, [B: Value[Unknown, Any]](self: agg) -> type[B]]`, the property getter for `_UDF._base`

paasta (https://github.com/yelp/paasta)
- ERROR paasta_tools/cli/fsm_cmd.py:44:23-45: `(*args: Unknown, **kwargs: Unknown) -> None` is not assignable to attribute `copyfile` with type `[_StrOrBytesPathT](src: StrOrBytesPath, dst: _StrOrBytesPathT, *, follow_symlinks: bool = True) -> _StrOrBytesPathT` [bad-assignment]
+ ERROR paasta_tools/cli/fsm_cmd.py:44:23-45: `(*args: Unknown, **kwargs: Unknown) -> None` is not assignable to attribute `copyfile` with type `[_StrOrBytesPathT: PathLike[bytes] | PathLike[str] | bytes | str](src: StrOrBytesPath, dst: _StrOrBytesPathT, *, follow_symlinks: bool = True) -> _StrOrBytesPathT` [bad-assignment]
- ::error file=paasta_tools/cli/fsm_cmd.py,line=44,col=23,endLine=44,endColumn=45,title=Pyrefly bad-assignment::`(*args: Unknown, **kwargs: Unknown) -> None` is not assignable to attribute `copyfile` with type `[_StrOrBytesPathT](src: StrOrBytesPath, dst: _StrOrBytesPathT, *, follow_symlinks: bool = True) -> _StrOrBytesPathT`
+ ::error file=paasta_tools/cli/fsm_cmd.py,line=44,col=23,endLine=44,endColumn=45,title=Pyrefly bad-assignment::`(*args: Unknown, **kwargs: Unknown) -> None` is not assignable to attribute `copyfile` with type `[_StrOrBytesPathT: PathLike[bytes] | PathLike[str] | bytes | str](src: StrOrBytesPath, dst: _StrOrBytesPathT, *, follow_symlinks: bool = True) -> _StrOrBytesPathT`

strawberry (https://github.com/strawberry-graphql/strawberry)
- ERROR strawberry/federation/object_type.py:128:5-9: Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
+ ERROR strawberry/federation/object_type.py:128:5-9: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
- ERROR strawberry/federation/object_type.py:199:5-10: Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
+ ERROR strawberry/federation/object_type.py:199:5-10: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
- ERROR strawberry/federation/object_type.py:259:5-14: Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
+ ERROR strawberry/federation/object_type.py:259:5-14: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
- ERROR strawberry/federation/object_type.py:328:5-21: Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
+ ERROR strawberry/federation/object_type.py:328:5-21: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]` [inconsistent-overload]
- ERROR strawberry/types/object_type.py:331:5-10: Overload return type `[T](T) -> T` is not assignable to implementation return type `type | Unknown` [inconsistent-overload]
+ ERROR strawberry/types/object_type.py:331:5-10: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type | Unknown` [inconsistent-overload]
- ERROR strawberry/types/object_type.py:409:5-14: Overload return type `[T](T) -> T` is not assignable to implementation return type `type | Unknown` [inconsistent-overload]
+ ERROR strawberry/types/object_type.py:409:5-14: Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type | Unknown` [inconsistent-overload]
- ::error file=strawberry/federation/object_type.py,line=128,col=5,endLine=128,endColumn=9,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]`
+ ::error file=strawberry/federation/object_type.py,line=128,col=5,endLine=128,endColumn=9,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]`
- ::error file=strawberry/federation/object_type.py,line=199,col=5,endLine=199,endColumn=10,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]`
+ ::error file=strawberry/federation/object_type.py,line=199,col=5,endLine=199,endColumn=10,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]`
- ::error file=strawberry/federation/object_type.py,line=259,col=5,endLine=259,endColumn=14,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]`
+ ::error file=strawberry/federation/object_type.py,line=259,col=5,endLine=259,endColumn=14,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]`
- ::error file=strawberry/federation/object_type.py,line=328,col=5,endLine=328,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type[Any]`
+ ::error file=strawberry/federation/object_type.py,line=328,col=5,endLine=328,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type[Any]`
- ::error file=strawberry/types/object_type.py,line=331,col=5,endLine=331,endColumn=10,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type | Unknown`
+ ::error file=strawberry/types/object_type.py,line=331,col=5,endLine=331,endColumn=10,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type | Unknown`
- ::error file=strawberry/types/object_type.py,line=409,col=5,endLine=409,endColumn=14,title=Pyrefly inconsistent-overload::Overload return type `[T](T) -> T` is not assignable to implementation return type `type | Unknown`
+ ::error file=strawberry/types/object_type.py,line=409,col=5,endLine=409,endColumn=14,title=Pyrefly inconsistent-overload::Overload return type `[T: type[Any]](T) -> T` is not assignable to implementation return type `type | Unknown`

Expression (https://github.com/cognitedata/Expression)
- ERROR expression/extra/result/catch.py:16:5-10: Implementation signature `(f: ((...) -> _TSource) | None = None, *, exception: type[_TError]) -> ((...) -> _TSource) -> ((...) -> Result[_TSource, _TError]) | Result[_TSource, _TError]` does not accept all arguments that overload signature `(exception: type[_TError_]) -> [_TSource, _TError]((...) -> Result[_TSource, _TError] | _TSource) -> (...) -> Result[_TSource, _TError | _TError_]` accepts [inconsistent-overload]
+ ERROR expression/extra/result/catch.py:16:5-10: Implementation signature `(f: ((...) -> _TSource) | None = None, *, exception: type[_TError]) -> ((...) -> _TSource) -> ((...) -> Result[_TSource, _TError]) | Result[_TSource, _TError]` does not accept all arguments that overload signature `(exception: type[_TError_]) -> [_TSource, _TError: Exception]((...) -> Result[_TSource, _TError] | _TSource) -> (...) -> Result[_TSource, _TError | _TError_]` accepts [inconsistent-overload]
- ::error file=expression/extra/result/catch.py,line=16,col=5,endLine=16,endColumn=10,title=Pyrefly inconsistent-overload::Implementation signature `(f: ((...) -> _TSource) | None = None, *, exception: type[_TError]) -> ((...) -> _TSource) -> ((...) -> Result[_TSource, _TError]) | Result[_TSource, _TError]` does not accept all arguments that overload signature `(exception: type[_TError_]) -> [_TSource, _TError]((...) -> Result[_TSource, _TError] | _TSource) -> (...) -> Result[_TSource, _TError | _TError_]` accepts%0A  Positional parameter name mismatch: got `f`, want `exception`
+ ::error file=expression/extra/result/catch.py,line=16,col=5,endLine=16,endColumn=10,title=Pyrefly inconsistent-overload::Implementation signature `(f: ((...) -> _TSource) | None = None, *, exception: type[_TError]) -> ((...) -> _TSource) -> ((...) -> Result[_TSource, _TError]) | Result[_TSource, _TError]` does not accept all arguments that overload signature `(exception: type[_TError_]) -> [_TSource, _TError: Exception]((...) -> Result[_TSource, _TError] | _TSource) -> (...) -> Result[_TSource, _TError | _TError_]` accepts%0A  Positional parameter name mismatch: got `f`, want `exception`

hydpy (https://github.com/hydpy-dev/hydpy)
- ERROR hydpy/core/importtools.py:361:5-21: Overload return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` [inconsistent-overload]
+ ERROR hydpy/core/importtools.py:361:5-21: Overload return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` [inconsistent-overload]
- ERROR hydpy/core/importtools.py:377:5-21: Overload return type `[TM_contra](PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` [inconsistent-overload]
+ ERROR hydpy/core/importtools.py:377:5-21: Overload return type `[TM_contra: Model](PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` [inconsistent-overload]
- ::error file=hydpy/core/importtools.py,line=361,col=5,endLine=361,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]`%0A  `PrepSub1D[TM_contra, SubmodelInterface].__call__` has type `BoundMethod[PrepSub1D[TM_contra, @_], (self: PrepSub1D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, position: int, refresh: bool) -> None]`, which is not assignable to `BoundMethod[PrepSub1D[TM_contra, @_], (self: PrepSub1D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, refresh: bool) -> None]`, the type of `PrepSub0D.__call__`
+ ::error file=hydpy/core/importtools.py,line=361,col=5,endLine=361,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[0], TM_contra, SubmodelInterface]`%0A  `PrepSub1D[TM_contra, SubmodelInterface].__call__` has type `BoundMethod[PrepSub1D[TM_contra, @_], (self: PrepSub1D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, position: int, refresh: bool) -> None]`, which is not assignable to `BoundMethod[PrepSub1D[TM_contra, @_], (self: PrepSub1D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, refresh: bool) -> None]`, the type of `PrepSub0D.__call__`
- ::error file=hydpy/core/importtools.py,line=377,col=5,endLine=377,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[TM_contra](PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]`%0A  `PrepSub0D[TM_contra, SubmodelInterface].__call__` has type `BoundMethod[PrepSub0D[TM_contra, @_], (self: PrepSub0D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, refresh: bool) -> None]`, which is not assignable to `BoundMethod[PrepSub0D[TM_contra, @_], (self: PrepSub0D[TM_contra, SubmodelInterface], model: @_, submodel: SubmodelInterface, /, *, position: int, refresh: bool) -> None]`, the type of `PrepSub1D.__call__`
+ ::error file=hydpy/core/importtools.py,line=377,col=5,endLine=377,endColumn=21,title=Pyrefly inconsistent-overload::Overload return type `[TM_contra: Model](PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]` is not assignable to implementation return type `[TM_contra: Model](PrepSub0D[TM_contra, SubmodelInterface] | PrepSub1D[TM_contra, SubmodelInterface]) -> SubmodelAdder[Literal[1], TM_contra, SubmodelInterface]`%0A  `PrepSub0D[TM_contra, SubmodelInterface].__call__` has type `BoundMethod[PrepSub0D[TM_contra, @_], (self: PrepSub0D[TM_contra, SubmodelInterface], model: TM_contra, submodel: SubmodelInterface, /, *, refresh: bool) -> None]`, which is not assignable to `BoundMethod[PrepSub0D[TM_contra, @_], (self: PrepSub0D[TM_contra, SubmodelInterface], model: @_, submodel: SubmodelInterface, /, *, position: int, refresh: bool) -> None]`, the type of `PrepSub1D.__call__`

xarray (https://github.com/pydata/xarray)
-   [T_DataArray](darray: T_DataArray, x: Hashable | None = None, y: Hashable | None = None, *, figsize: Iterable[float] | None = None, size: float | None = None, aspect: AspectOptions = None, ax: Unknown | None = None, row: Hashable | None = None, col: Hashable, col_wrap: int | None = None, xincrease: bool | None = True, yincrease: bool | None = True, add_colorbar: bool | None = None, add_labels: bool = True, vmin: float | None = None, vmax: float | None = None, cmap: str | Unknown | None = None, center: Literal[False] | float | None = None, robust: bool = False, extend: ExtendOptions = None, levels: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, infer_intervals: Unknown | None = None, colors: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, subplot_kws: dict[str, Any] | None = None, cbar_ax: Unknown | None = None, cbar_kwargs: dict[str, Any] | None = None, xscale: ScaleOptions = None, yscale: ScaleOptions = None, xticks: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, yticks: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, xlim: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, ylim: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, norm: Unknown | None = None, **kwargs: Any) -> FacetGrid[T_DataArray]
+   [T_DataArray: DataArray](darray: T_DataArray, x: Hashable | None = None, y: Hashable | None = None, *, figsize: Iterable[float] | None = None, size: float | None = None, aspect: AspectOptions = None, ax: Unknown | None = None, row: Hashable | None = None, col: Hashable, col_wrap: int | None = None, xincrease: bool | None = True, yincrease: bool | None = True, add_colorbar: bool | None = None, add_labels: bool = True, vmin: float | None = None, vmax: float | None = None, cmap: str | Unknown | None = None, center: Literal[False] | float | None = None, robust: bool = False, extend: ExtendOptions = None, levels: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, infer_intervals: Unknown | None = None, colors: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, subplot_kws: dict[str, Any] | None = None, cbar_ax: Unknown | None = None, cbar_kwargs: dict[str, Any] | None = None, xscale: ScaleOptions = None, yscale: ScaleOptions = None, xticks: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, yticks: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, xlim: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, ylim: Buffer | _NestedSequence[bytes | complex | str] | _NestedSequence[_SupportsArray[dtype[Any]]] | _SupportsArray[dtype[Any]] | bytes | complex | str | None = None, norm: Unknown | None = None, **kwargs: Any) -> FacetGrid[T_DataArray]

... (truncated 183 lines) ...```

@yangdanny97 yangdanny97 requested a review from rchen152 January 22, 2026 14:38
@yangdanny97 yangdanny97 self-assigned this Jan 22, 2026
@meta-codesync
Copy link

meta-codesync bot commented Jan 22, 2026

@yangdanny97 has imported this pull request. If you are a Meta employee, you can view this in D91234823.

Copy link
Contributor

@stroxler stroxler left a comment

Choose a reason for hiding this comment

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

Review automatically exported from Phabricator review in Meta.

@yangdanny97
Copy link
Contributor

Thanks Adrian!

@meta-codesync
Copy link

meta-codesync bot commented Jan 22, 2026

@yangdanny97 merged this pull request in a557539.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: display typevar bounds, constraints, and defaults in foralls

4 participants