11
11
12
12
import numpy as np
13
13
from .iterators import *
14
- from .graph import PyGraph
15
14
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
17
19
18
20
__all__ = ["PyDiGraph" ]
19
21
20
22
S = TypeVar ("S" )
21
23
T = TypeVar ("T" )
22
24
23
25
class PyDiGraph (Generic [S , T ]):
26
+ attrs : Any
24
27
check_cycle : bool = ...
25
28
multigraph : bool = ...
26
29
def __init__ (
@@ -44,6 +47,8 @@ class PyDiGraph(Generic[S, T]):
44
47
def add_parent (self , child : int , obj : S , edge : T , / ) -> int : ...
45
48
def adj (self , node : int , / ) -> dict [int , T ]: ...
46
49
def adj_direction (self , node : int , direction : bool , / ) -> dict [int , T ]: ...
50
+ def clear (self ) -> None : ...
51
+ def clear_edges (self ) -> None : ...
47
52
def compose (
48
53
self ,
49
54
other : PyDiGraph [S , T ],
@@ -52,11 +57,20 @@ class PyDiGraph(Generic[S, T]):
52
57
node_map_func : Callable [[S ], int ] | None = ...,
53
58
edge_map_func : Callable [[T ], int ] | None = ...,
54
59
) -> 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 : ...
55
68
def copy (self ) -> PyDiGraph [S , T ]: ...
56
69
def edge_index_map (self ) -> EdgeIndexMap [T ]: ...
57
70
def edge_indices (self ) -> EdgeIndices : ...
58
71
def edge_list (self ) -> EdgeList : ...
59
72
def edges (self ) -> list [T ]: ...
73
+ def edge_subgraph (self , edge_list : Sequence [tuple [int , int ]], / ) -> PyDiGraph [S , T ]: ...
60
74
def extend_from_edge_list (
61
75
self : PyDiGraph [S | None , T | None ], edge_list : Sequence [tuple [int , int ]], /
62
76
) -> None : ...
@@ -65,6 +79,8 @@ class PyDiGraph(Generic[S, T]):
65
79
edge_list : Sequence [tuple [int , int , T ]],
66
80
/ ,
67
81
) -> None : ...
82
+ def filter_edges (self , filter_function : Callable [[T ], bool ]) -> EdgeIndices : ...
83
+ def filter_nodes (self , filter_function : Callable [[S ], bool ]) -> NodeIndices : ...
68
84
def find_adjacent_node_by_edge (self , node : int , predicate : Callable [[T ], bool ], / ) -> S : ...
69
85
def find_node_by_weight (
70
86
self ,
@@ -74,6 +90,7 @@ class PyDiGraph(Generic[S, T]):
74
90
def find_predecessors_by_edge (
75
91
self , node : int , filter_fn : Callable [[T ], bool ], /
76
92
) -> list [S ]: ...
93
+ def find_predecessor_node_by_edge (self , node : int , predicate : Callable [[T ], bool ], / ) -> S : ...
77
94
def find_successors_by_edge (self , node : int , filter_fn : Callable [[T ], bool ], / ) -> list [S ]: ...
78
95
@staticmethod
79
96
def from_adjacency_matrix (
@@ -86,17 +103,24 @@ class PyDiGraph(Generic[S, T]):
86
103
def get_all_edge_data (self , node_a : int , node_b : int , / ) -> list [T ]: ...
87
104
def get_edge_data (self , node_a : int , node_b : int , / ) -> T : ...
88
105
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 ]: ...
89
108
def has_edge (self , node_a : int , node_b : int , / ) -> bool : ...
109
+ def has_parallel_edges (self ) -> bool : ...
90
110
def in_degree (self , node : int , / ) -> int : ...
91
111
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 : ...
92
114
def insert_node_on_in_edges (self , node : int , ref_node : int , / ) -> None : ...
93
115
def insert_node_on_in_edges_multiple (self , node : int , ref_nodes : Sequence [int ], / ) -> None : ...
94
116
def insert_node_on_out_edges (self , node : int , ref_node : int , / ) -> None : ...
95
117
def insert_node_on_out_edges_multiple (self , node : int , ref_nodes : Sequence [int ], / ) -> None : ...
96
118
def is_symmetric (self ) -> bool : ...
119
+ def make_symmetric (self , edge_payload_fn : Callable [[T ], T ] | None = ...) -> None : ...
97
120
def merge_nodes (self , u : int , v : int , / ) -> None : ...
98
121
def neighbors (self , node : int , / ) -> NodeIndices : ...
99
122
def node_indexes (self ) -> NodeIndices : ...
123
+ def node_indices (self ) -> NodeIndices : ...
100
124
def nodes (self ) -> list [S ]: ...
101
125
def num_edges (self ) -> int : ...
102
126
def num_nodes (self ) -> int : ...
0 commit comments