@@ -69,22 +69,41 @@ def add(self, element):
69
69
core .ax (lambda x : x .dispatch (e ._data ()))
70
70
return e
71
71
72
+ def remove (self , element ):
73
+ """Removes the specified element (either a Node or an Edge object) from the graph."""
74
+ elem_type = type (element )
75
+ if elem_type == Node :
76
+ for edge in element ._incident_edges :
77
+ self .remove (edge )
78
+
79
+ del self ._nodes [element ._id ]
80
+ core .ax (lambda x : x .node (str (element ._id )).remove ())
81
+
82
+ return element
83
+ elif elem_type == Edge :
84
+ element ._source ._incident_edges .remove (element )
85
+ element ._target ._incident_edges .remove (element )
86
+
87
+ self ._edges .remove (element )
88
+ del self ._has_edge_cache [element ]
89
+
90
+ core .ax (
91
+ lambda x : x .dispatch (
92
+ {"attrs" : {"edges" : {str (element ._internal_id ): {"remove" : True }}}}
93
+ )
94
+ )
95
+
96
+ return element
97
+
72
98
def add_node (self , id , value = None ):
73
99
"""Adds a node to the graph using an id."""
74
100
if value is None :
75
101
value = id
76
102
return self .add (Node (id , value ))
77
103
78
104
def remove_node (self , node ):
79
- """Removes the specified node from the graph"""
80
- n = self .node (node )
81
-
82
- for edge in n ._incident_edges :
83
- self .remove_edge (edge )
84
-
85
- del self ._nodes [n ._id ]
86
- core .ax (lambda x : x .node (str (n ._id )).remove ())
87
- return n
105
+ """Removes the specified node id from the graph"""
106
+ return self .remove (self .node (node ))
88
107
89
108
def node (self , node ):
90
109
"""Returns the node specified"""
@@ -106,32 +125,15 @@ def add_edge(self, source, target, weight="", directed: bool = False):
106
125
"""Adds an edge by defining it's relation to other nodes."""
107
126
return self .add (Edge (source , target , weight , directed ))
108
127
109
- @overloaded
110
128
def remove_edge (self , nodeA , nodeB , directed : bool = False ):
129
+ """Removes the specified edge(s) between two nodes from the graph"""
111
130
edges_between = self .edges_between (nodeA , nodeB , directed )
112
131
edge_list = []
113
132
for edge in edges_between :
114
133
edge_list .append (edge_list )
115
- self .remove_edge (edge )
134
+ self .remove (edge )
116
135
return edge_list
117
136
118
- @overloads (remove_edge )
119
- def remove_edge (self , edge : Edge ):
120
- """Removes an edge object from the graph"""
121
- edge ._source ._incident_edges .remove (edge )
122
- edge ._target ._incident_edges .remove (edge )
123
-
124
- self ._edges .remove (edge )
125
- del self ._has_edge_cache [edge ]
126
-
127
- core .ax (
128
- lambda x : x .dispatch (
129
- {"attrs" : {"edges" : {str (edge ._internal_id ): {"remove" : True }}}}
130
- )
131
- )
132
-
133
- return edge
134
-
135
137
def has_node (self , node ):
136
138
"""Checks if a node exists in the graph."""
137
139
return self .node (node ) is not None
0 commit comments