8000 Add missing methods in PyGraph and PyDiGraph stubs (#967) · Qiskit/rustworkx@f75291d · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f75291d

Browse files
Add missing methods in PyGraph and PyDiGraph stubs (#967)
* Add missing methods in PyGraph and PyDiGraph stubs * Remove TODOs * Add new methods * Add comments from review --------- Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
1 parent 6d82a11 commit f75291d

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

rustworkx/digraph.pyi

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@
1111

1212
import numpy as np
1313
from .iterators import *
14-
from .graph import PyGraph
1514

16-
from typing import Any, Callable, Generic, TypeVar, Sequence
15+
from typing import Any, Callable, Generic, TypeVar, Sequence, TYPE_CHECKING
16+
17+
if TYPE_CHECKING:
18+
from .graph import PyGraph
1719

1820
__all__ = ["PyDiGraph"]
1921

2022
S = TypeVar("S")
2123
T = TypeVar("T")
2224

2325
class PyDiGraph(Generic[S, T]):
26+
attrs: Any
2427
check_cycle: bool = ...
2528
multigraph: bool = ...
2629
def __init__(
@@ -44,6 +47,8 @@ class PyDiGraph(Generic[S, T]):
4447
def add_parent(self, child: int, obj: S, edge: T, /) -> int: ...
4548
def adj(self, node: int, /) -> dict[int, T]: ...
4649
def adj_direction(self, node: int, direction: bool, /) -> dict[int, T]: ...
50+
def clear(self) -> None: ...
51+
def clear_edges(self) -> None: ...
4752
def compose(
4853
self,
4954
other: PyDiGraph[S, T],
@@ -52,11 +57,20 @@ class PyDiGraph(Generic[S, T]):
5257
node_map_func: Callable[[S], int] | None = ...,
5358
edge_map_func: Callable[[T], int] | None = ...,
5459
) -> dict[int, int]: ...
60+
def contract_nodes(
61+
self,
62+
nodes: Sequence[int],
63+
obj: S,
64+
/,
65+
check_cycle: bool | None = ...,
66+
weight_combo_fn: Callable[[T, T], T] | None = ...,
67+
) -> int: ...
5568
def copy(self) -> PyDiGraph[S, T]: ...
5669
def edge_index_map(self) -> EdgeIndexMap[T]: ...
5770
def edge_indices(self) -> EdgeIndices: ...
5871
def edge_list(self) -> EdgeList: ...
5972
def edges(self) -> list[T]: ...
73+
def edge_subgraph(self, edge_list: Sequence[tuple[int, int]], /) -> PyDiGraph[S, T]: ...
6074
def extend_from_edge_list(
6175
self: PyDiGraph[S | None, T | None], edge_list: Sequence[tuple[int, int]], /
6276
) -> None: ...
@@ -65,6 +79,8 @@ class PyDiGraph(Generic[S, T]):
6579
edge_list: Sequence[tuple[int, int, T]],
6680
/,
6781
) -> None: ...
82+
def filter_edges(self, filter_function: Callable[[T], bool]) -> EdgeIndices: ...
83+
def filter_nodes(self, filter_function: Callable[[S], bool]) -> NodeIndices: ...
6884
def find_adjacent_node_by_edge(self, node: int, predicate: Callable[[T], bool], /) -> S: ...
6985
def find_node_by_weight(
7086
self,
@@ -74,6 +90,7 @@ class PyDiGraph(Generic[S, T]):
7490
def find_predecessors_by_edge(
7591
self, node: int, filter_fn: Callable[[T], bool], /
7692
) -> list[S]: ...
93+
def find_predecessor_node_by_edge(self, node: int, predicate: Callable[[T], bool], /) -> S: ...
7794
def find_successors_by_edge(self, node: int, filter_fn: Callable[[T], bool], /) -> list[S]: ...
7895
@staticmethod
7996
def from_adjacency_matrix(
@@ -86,17 +103,24 @@ class PyDiGraph(Generic[S, T]):
86103
def get_all_edge_data(self, node_a: int, node_b: int, /) -> list[T]: ...
87104
def get_edge_data(self, node_a: int, node_b: int, /) -> T: ...
88105
def get_node_data(self, node: int, /) -> S: ...
106+
def get_edge_data_by_index(self, edge_index: int, /) -> T: ...
107+
def get_edge_endpoints_by_index(self, edge_index: int, /) -> tuple[int, int]: ...
89108
def has_edge(self, node_a: int, node_b: int, /) -> bool: ...
109+
def has_parallel_edges(self) -> bool: ...
90110
def in_degree(self, node: int, /) -> int: ...
91111
def in_edges(self, node: int, /) -> WeightedEdgeList[T]: ...
112+
def incident_edge_index_map(self, node: int, /, all_edges: bool = ...) -> EdgeIndexMap: ...
113+
def incident_edges(self, node: int, /, all_edges: bool = ...) -> EdgeIndices: ...
92114
def insert_node_on_in_edges(self, node: int, ref_node: int, /) -> None: ...
93115
def insert_node_on_in_edges_multiple(self, node: int, ref_nodes: Sequence[int], /) -> None: ...
94116
def insert_node_on_out_edges(self, node: int, ref_node: int, /) -> None: ...
95117
def insert_node_on_out_edges_multiple(self, node: int, ref_nodes: Sequence[int], /) -> None: ...
96118
def is_symmetric(self) -> bool: ...
119+
def make_symmetric(self, edge_payload_fn: Callable[[T], T] | None = ...) -> None: ...
97120
def merge_nodes(self, u: int, v: int, /) -> None: ...
98121
def neighbors(self, node: int, /) -> NodeIndices: ...
99122
def node_indexes(self) -> NodeIndices: ...
123+
def node_indices(self) -> NodeIndices: ...
100124
def nodes(self) -> list[S]: ...
101125
def num_edges(self) -> int: ...
102126
def num_nodes(self) -> int: ...

rustworkx/graph.pyi

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,19 @@ from typing import (
1818
Generic,
1919
TypeVar,
2020
Sequence,
21+
TYPE_CHECKING,
2122
)
2223

24+
if TYPE_CHECKING:
25+
from .digraph import PyDiGraph
26+
2327
__all__ = ["PyGraph"]
2428

2529
S = TypeVar("S")
2630
T = TypeVar("T")
2731

2832
class PyGraph(Generic[S, T]):
33+
attrs: Any
2934
multigraph: bool = ...
3035
def __init__(self, /, multigraph: bool = ...) -> None: ...
3136
def add_edge(self, node_a: int, node_b: int, edge: T, /) -> int: ...
@@ -40,6 +45,8 @@ class PyGraph(Generic[S, T]):
4045
def add_node(self, obj: S, /) -> int: ...
4146
def add_nodes_from(self, obj_list: Sequence[S], /) -> NodeIndices: ...
4247
def adj(self, node: int, /) -> dict[int, T]: ...
48+
def clear(self) -> None: ...
49+
def clear_edges(self) -> None: ...
4350
def compose(
4451
self,
4552
other: PyGraph[S, T],
@@ -48,12 +55,20 @@ class PyGraph(Generic[S, T]):
4855
node_map_func: Callable[[S], int] | None = ...,
4956
edge_map_func: Callable[[T], int] | None = ...,
5057
) -> dict[int, int]: ...
58+
def contract_nodes(
59+
self,
60+
nodes: Sequence[int],
61+
obj: S,
62+
/,
63+
weight_combo_fn: Callable[[T, T], T] | None = ...,
64+
) -> int: ...
5165
def copy(self) -> PyGraph[S, T]: ...
5266
def degree(self, node: int, /) -> int: ...
5367
def edge_index_map(self) -> EdgeIndexMap[T]: ...
5468
def edge_indices(self) -> EdgeIndices: ...
5569
def edge_list(self) -> EdgeList: ...
5670
def edges(self) -> list[T]: ...
71+
def edge_subgraph(self, edge_list: Sequence[tuple[int, int]], /) -> PyGraph[S, T]: ...
5772
def extend_from_edge_list(
5873
self: PyGraph[S | None, T | None], edge_list: Sequence[tuple[int, int]], /
5974
) -> None: ...
@@ -62,6 +77,13 @@ class PyGraph(Generic[S, T]):
6277
edge_list: Sequence[tuple[int, int, T]],
6378
/,
6479
) -> None: ...
80+
def filter_edges(self, filter_function: Callable[[T], bool]) -> EdgeIndices: ...
81+
def filter_nodes(self, filter_function: Callable[[S], bool]) -> NodeIndices: ...
82+
def find_node_by_weight(
83+
self,
84+
obj: Callable[[S], bool],
85+
/,
86+
) -> int | None: ...
6587
@staticmethod
6688
def from_adjacency_matrix(
6789
matrix: np.ndarray, /, null_value: float = ...
@@ -72,13 +94,21 @@ class PyGraph(Generic[S, T]):
7294
) -> PyGraph[int, complex]: ...
7395
def get_all_edge_data(self, node_a: int, node_b: int, /) -> list[T]: ...
7496
def get_edge_data(self, node_a: int, node_b: int, /) -> T: ...
97+
def get_edge_data_by_index(self, edge_index: int, /) -> T: ...
98+
def get_edge_endpoints_by_index(self, edge_index: int, /) -> tuple[int, int]: ...
7599
def get_node_data(self, node: int, /) -> S: ...
76100
def has_edge(self, node_a: int, node_b: int, /) -> bool: ...
101+
def has_parallel_edges(self) -> bool: ...
102+
def in_edges(self, node: int, /) -> WeightedEdgeList[T]: ...
103+
def incident_edge_index_map(self, node: int, /) -> EdgeIndexMap: ...
104+
def incident_edges(self, node: int, /) -> EdgeIndices: ...
77105
def neighbors(self, node: int, /) -> NodeIndices: ...
78106
def node_indexes(self) -> NodeIndices: ...
107+
def node_indices(self) -> NodeIndices: ...
79108
def nodes(self) -> list[S]: ...
80109
def num_edges(self) -> int: ...
81110
def num_nodes(self) -> int: ...
111+
def out_edges(self, node: int, /) -> WeightedEdgeList[T]: ...
82112
@staticmethod
83113
def read_edge_list(
84114
path: str,
@@ -110,6 +140,7 @@ class PyGraph(Generic[S, T]):
110140
graph_attr: dict[str, str] | None = ...,
111141
filename: str | None = ...,
112142
) -> str | None: ...
143+
def to_directed(self) -> PyDiGraph[S, T]: ...
113144
def update_edge(
114145
self,
115146
source: int,

0 commit comments

Comments
 (0)
0