Module dalpy.graphs
This module holds classes related to graphs.
This module contains the Vertex, VertexAttributeError, Graph, and GraphVertexError classes. Vertex represents
a graph vertex. VertexAttributeError is an error raised by Vertex. Graph represents a directed graph.
GraphVertexError is an error raised by Graph.
Examples
Initializing a Graph as well as adding colored vertices and edges:
g = Graph()
a = Vertex('a', color='red')
b = Vertex('b', color='blue')
g.add_vertex(a)
g.add_vertex(b)
g.add_edge(a, b)
The following code will raise a VertexAttributeError because 'colour' is not an attribute of the Vertex a:
x = a['colour']
Classes
class Graph-
Represents a directed graph.
A
Graphrepresents a directed graph object whose edges can be assigned weights. TheVertexobjects in theGraphshould have unique names. For more information on this, see the class docstring ofVertex.Examples
To initialize a
Graph:g = Graph()In order to add edges to a
Graph, one must first add theVertexobjects that will make up that edge.a = Vertex('a') b = Vertex('b') g.add_vertex(a) g.add_vertex(b)Now that
aandbhave been added tog, one can add an edge between them. Note that there is no edge object.g.add_edge(a, b)When adding an edge, one can specify a weight (by default it is
None):g.add_edge(a, b, 1)One can get a
Setof the adjacent edges of a Vertex:s = g.adj(a)Initializes an empty
GraphinO(1)time.Methods
def add_edge(self, source, dest, weight=None)-
Adds an edge between 2
Vertexobjects in thisGraph.This creates an edge from the source
Vertexto the destinationVertex.Graphis directed so the edge is in only one direction. That is, an edge from the destinationVertexto the sourceVertexwill not exist. One can additionally provide a weight for this edge. One may assume that this operation runs inO(1)time with respect to the number of vertices and edges in thisGraph.Args
source- The source
Vertex. dest- The destination
Vertex. weight- The weight for this edge (floating point, integer). By default this is
None.
Raises
GraphVertexError- If
sourceordestis not in thisGraph.
def add_vertex(self, vertex)def adj(self, vertex)-
Gets the
Vertexobjects that are adjacent to aVertex.This gets a
Setof theVertexobjects that are adjacent to the vertex. SinceSetobjects preserve insertion order (seeSetdocumentation), theSetwill be ordered according to the order in which edges starting from the inputVertexwere created. This method runs inO(n)time wherenis the number of edges going out of the inputVertex.Args
vertex- A
Vertex.
Returns
A
Setcontaining the vertices adjacent tovertex.Raises
GraphVertexError- If
vertexis not in thisGraph.
Examples
To illustrate the nature of the
Setreturned by this method, first set up aGraphand add some vertices and edges:g = Graph() a = Vertex('a') b = Vertex('b') c = Vertex('c') g.add_vertex(a) g.add_vertex(b) g.add_vertex(c) g.add_edge(a, b) g.add_edge(a, c)The
Setreturned byg.adj(a)will always havebprecedingcsince the edge fromatobwas created before the edge fromatoc. def vertices(self)-
Gets the vertices in this
Graph.This method runs in
O(V)time whereVis the number of vertices added to thisGraph.Returns
A
Setcontaining theVertexobjects in thisGraph. The order of the vertices in thisSetwill always be the order in which the vertices were added to thisGraphviaadd_vertex. def weight(self, source, dest)-
Gets the weight of an edge defined by two vertices.
This method runs in
O(1)time with respect to the number of vertices and edges in thisGraph.Args
source- The source
Vertexof the edge in question. dest- The destination
Vertexof the edge in question.
Returns
The integer or floating point weight associated with the edge from
sourcetodest. This will beNoneif no weight was specified when the edge was created.Raises
GraphVertexError- If
sourceordestis not in thisGraph. GraphEdgeError- If an edge from
sourcetodestdoes not exist.
class GraphEdgeError (source, dest)-
This class is used by
Graphto raise errors regarding invalid edges.Initializes a
GraphEdgeErrorthat will be raised associated with a particularVertex.Args
source- The source
Vertexof the edge thisGraphVertexErroris being raised in association with. dest- The destination
Vertexof the edge thisGraphVertexErroris being raised in association with.
Ancestors
- builtins.Exception
- builtins.BaseException
class GraphVertexError (vertex_name)-
This class is used by
Graphto raise errors regarding invalid vertices.Initializes a
GraphVertexErrorthat will be raised associated with a particularVertex.Args
vertex_name- The string name of the
VertexthisGraphVertexErroris being raised in association with.
Ancestors
- builtins.Exception
- builtins.BaseException
class Vertex (name, **attributes)-
Represents a graph vertex.
A
Vertexhas a name and a collection of customizable attributes. The name should be used to identify it in aGraph.Vertexobjects are compared with==and via hash code based on their name. The attributes you can use in graph algorithms. For example, you could set colors or time steps as in DFS. One should assume all operations that can be performed on aVertexare done inO(1)time.Examples
To initialize a
Vertexwith a name:v = Vertex('a')To initialize a
Vertexwith some starting attributes, use keyword arguments following the name:v = Vertex('a', color='red', time=1)To add additional attributes to an existing
Vertexusing[]with=:v['seen'] = FalseTo update or view existing attributes, use the same idea:
x = v['color'] v['time'] = 3If you try to get the value of an attribute that does not exist, a
VertexAttributeErrorwill be raised (e.g. callingprint(v['colour']). If you try to add a new attribute to an existingVertexwhere the attribute's type is notstr, aTypeErrorwill be raised (e.g. callingv[1] = 'blue').Initializes a
Vertex.Args
Methods
def get_name(self)-
Returns the name of this
Vertex.
class VertexAttributeError (name, wrong_attribute, attributes)-
This class is used by
Vertexto raise errors regarding invalid attributes.Initializes a
VertexAttributeError.Args
Ancestors
- builtins.Exception
- builtins.BaseException