From b9a065213bbb3ca57c57c3d5315df19dbb6b489c Mon Sep 17 00:00:00 2001 From: Samuel Grayson Date: Tue, 19 Aug 2025 15:55:55 -0500 Subject: [PATCH 1/3] Fix nx_pydot.pyi --- stubs/networkx/networkx/drawing/nx_pydot.pyi | 22 ++++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/stubs/networkx/networkx/drawing/nx_pydot.pyi b/stubs/networkx/networkx/drawing/nx_pydot.pyi index 34f6d29afdec..af2b2714f080 100644 --- a/stubs/networkx/networkx/drawing/nx_pydot.pyi +++ b/stubs/networkx/networkx/drawing/nx_pydot.pyi @@ -1,16 +1,20 @@ -from _typeshed import Incomplete +from os import PathLike +from typing import IO, Any +from typing_extensions import TypeAlias +from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable - -from ..classes.graph import Graph +from pydot import Dot # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] __all__ = ["write_dot", "read_dot", "graphviz_layout", "pydot_layout", "to_pydot", "from_pydot"] -def write_dot(G, path) -> None: ... +_File: TypeAlias = str | PathLike[Any] | IO[str] + +def write_dot(G: Graph[_Node], path: _File) -> None: ... @_dispatchable -def read_dot(path) -> Graph[Incomplete]: ... +def read_dot(path: _File) -> Graph[str]: ... @_dispatchable -def from_pydot(P): ... -def to_pydot(N): ... -def graphviz_layout(G, prog: str = "neato", root=None): ... -def pydot_layout(G, prog: str = "neato", root=None): ... +def from_pydot(P: Dot): ... +def to_pydot(N: Graph[_Node]) -> Dot: ... +def graphviz_layout(G: Graph[_Node], prog: str = "neato", root: _Node | None = None): ... +def pydot_layout(G: Graph[_Node], prog: str = "neato", root: _Node | None = None): ... From f322f4411ca72030768f1d806a45434e9fa3bf92 Mon Sep 17 00:00:00 2001 From: Samuel Grayson Date: Wed, 20 Aug 2025 12:47:51 -0500 Subject: [PATCH 2/3] Replace IO with Protocol --- stubs/networkx/networkx/drawing/nx_pydot.pyi | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/stubs/networkx/networkx/drawing/nx_pydot.pyi b/stubs/networkx/networkx/drawing/nx_pydot.pyi index af2b2714f080..424c76cc58ad 100644 --- a/stubs/networkx/networkx/drawing/nx_pydot.pyi +++ b/stubs/networkx/networkx/drawing/nx_pydot.pyi @@ -1,18 +1,16 @@ +from _typeshed import SupportsRead, SupportsWrite from os import PathLike -from typing import IO, Any -from typing_extensions import TypeAlias +from typing import Any from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -from pydot import Dot # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] +from pydot import Dot # type: ignore[import-not-found] __all__ = ["write_dot", "read_dot", "graphviz_layout", "pydot_layout", "to_pydot", "from_pydot"] -_File: TypeAlias = str | PathLike[Any] | IO[str] - -def write_dot(G: Graph[_Node], path: _File) -> None: ... +def write_dot(G: Graph[_Node], path: str | PathLike[Any] | SupportsWrite[str]) -> None: ... @_dispatchable -def read_dot(path: _File) -> Graph[str]: ... +def read_dot(path: str | PathLike[Any] | SupportsRead[str]) -> Graph[str]: ... @_dispatchable def from_pydot(P: Dot): ... def to_pydot(N: Graph[_Node]) -> Dot: ... From f5864bbef7ba04d09036de0f70bd91c7af46c31c Mon Sep 17 00:00:00 2001 From: Samuel Grayson Date: Wed, 20 Aug 2025 12:57:53 -0500 Subject: [PATCH 3/3] pyright ignore missing imports --- stubs/networkx/networkx/drawing/nx_pydot.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/networkx/networkx/drawing/nx_pydot.pyi b/stubs/networkx/networkx/drawing/nx_pydot.pyi index 424c76cc58ad..03c4d6e12ee8 100644 --- a/stubs/networkx/networkx/drawing/nx_pydot.pyi +++ b/stubs/networkx/networkx/drawing/nx_pydot.pyi @@ -4,7 +4,7 @@ from typing import Any from networkx.classes.graph import Graph, _Node from networkx.utils.backends import _dispatchable -from pydot import Dot # type: ignore[import-not-found] +from pydot import Dot # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] __all__ = ["write_dot", "read_dot", "graphviz_layout", "pydot_layout", "to_pydot", "from_pydot"]