diff --git a/noxfile.py b/noxfile.py index c0f08ff968..942e118dee 100644 --- a/noxfile.py +++ b/noxfile.py @@ -20,7 +20,7 @@ stubs_deps = [ "mypy==1.11.2", - "typing-extensions", + "typing-extensions>=4.4", ] def install_rustworkx(session): diff --git a/releasenotes/notes/pyright-compatibility-f78cafca4a95696d.yaml b/releasenotes/notes/pyright-compatibility-f78cafca4a95696d.yaml new file mode 100644 index 0000000000..d6e4403d9b --- /dev/null +++ b/releasenotes/notes/pyright-compatibility-f78cafca4a95696d.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Enhanced the compatibility of the type annotations with `pyright` in strict + mode. See `issue 1242 `__ for + more details. \ No newline at end of file diff --git a/rustworkx/__init__.pyi b/rustworkx/__init__.pyi index 5952e177e1..047952de54 100644 --- a/rustworkx/__init__.pyi +++ b/rustworkx/__init__.pyi @@ -9,11 +9,17 @@ # This file contains only type annotations for PyO3 functions and classes # For implementation details, see __init__.py and src/lib.rs +import sys import numpy as np -from typing import Generic, TypeVar, Any, Callable, overload +from typing import Generic, Any, Callable, overload from collections.abc import Iterator, Sequence +if sys.version_info >= (3, 13): + from typing import TypeVar +else: + from typing_extensions import TypeVar + # Re-Exports of rust native functions in rustworkx.rustworkx # To workaround limitations in mypy around re-exporting objects from the inner # rustworkx module we need to explicitly re-export every inner function from @@ -270,8 +276,8 @@ from .rustworkx import AllPairsMultiplePathMapping as AllPairsMultiplePathMappin from .rustworkx import PyGraph as PyGraph from .rustworkx import PyDiGraph as PyDiGraph -_S = TypeVar("_S") -_T = TypeVar("_T") +_S = TypeVar("_S", default=Any) +_T = TypeVar("_T", default=Any) _BFSVisitor = TypeVar("_BFSVisitor", bound=visit.BFSVisitor) _DFSVisitor = TypeVar("_DFSVisitor", bound=visit.DFSVisitor) _DijkstraVisitor = TypeVar("_DijkstraVisitor", bound=visit.DijkstraVisitor) diff --git a/rustworkx/rustworkx.pyi b/rustworkx/rustworkx.pyi index 5d42197064..d02d0ce5e0 100644 --- a/rustworkx/rustworkx.pyi +++ b/rustworkx/rustworkx.pyi @@ -11,7 +11,6 @@ from .visit import BFSVisitor, DFSVisitor, DijkstraVisitor from typing import ( - TypeVar, Callable, final, Any, @@ -35,9 +34,15 @@ from rustworkx import generators # noqa from typing_extensions import Self import numpy as np +import sys -_S = TypeVar("_S") -_T = TypeVar("_T") +if sys.version_info >= (3, 13): + from typing import TypeVar +else: + from typing_extensions import TypeVar + +_S = TypeVar("_S", default=Any) +_T = TypeVar("_T", default=Any) class DAGHasCycle(Exception): ... class DAGWouldCycle(Exception): ... @@ -1059,7 +1064,7 @@ def dominance_frontiers(graph: PyDiGraph[_S, _T], start_node: int, /) -> dict[in # Iterators -_T_co = TypeVar("_T_co", covariant=True) +_T_co = TypeVar("_T_co", covariant=True, default=Any) class _RustworkxCustomVecIter(Generic[_T_co], Sequence[_T_co], ABC): def __init__(self) -> None: ...