@@ -26,8 +26,8 @@ def __new__(cls, *vertices):
2626 @classmethod
2727 def methods (self ):
2828 return ['is_adjacent' , 'neighbors' ,
29- 'add_vertex' , 'remove_vertex' , 'add_edge' ,
30- 'get_edge' , 'remove_edge' , '__new__' ]
29+ 'add_vertex' , 'remove_vertex' , 'add_edge' ,
30+ 'get_edge' , 'remove_edge' , '__new__' ]
3131
3232 def is_adjacent (self , node1 , node2 ):
3333 node1 = self .__getattribute__ (node1 )
@@ -52,8 +52,21 @@ def remove_vertex(self, name):
5252 node_obj .adjacent .remove (name )
5353
5454 def add_edge (self , source , target , cost = None ):
55+ source , target = str (source ), str (target )
56+ error_msg = ("Vertex %s is not present in the graph."
57+ "Call Graph.add_vertex to add a new"
58+ "vertex. Graph.add_edge is only responsible"
59+ "for adding edges and it will not add new"
60+ "vertices on its own. This is done to maintain"
61+ "clear separation between the functionality of"
62+ "these two methods." )
63+ if not hasattr (self , source ):
64+ raise ValueError (error_msg % (source ))
65+ if not hasattr (self , target ):
66+ raise ValueError (error_msg % (target ))
67+
5568 source , target = self .__getattribute__ (source ), \
56- self .__getattribute__ (target )
69+ self .__getattribute__ (target )
5770 source .add_adjacent_node (target .name )
5871 if cost is not None :
5972 self .edge_weights [source .name + "_" + target .name ] = \
0 commit comments