This is a package for the manipulation of graphs made for a class of graphs in the Brazilian university 'Universidade Tecnologica Federal do Paraná'
pip install graphpython
to use this class, the main element is Graph class
. With this class, you will be able to fill the graph with vertex and edges and do all the necessary operations
Graph([directed])
: create a graphdirected
: Defaults to False. tells if the graph is directed or not
# Create a new graph
from graphpy.graph import Graph
gp = Graph()
# add a new vertex
gp.add_vertex('vertex1')
# to get the create vertex, you can use the [] operator
vertex1 = gp['vertex1']
The base of all graph is the vertex, to create a new vertex you got to use the follow functions
-
gp.add_vertex(name, [value])
: create a new vertex and insert to the graphname
: Unique identification to the vertex inside the graphvalue
: optional value to the vertex
-
gp.get_vertex(name)
orgp[name]
: return the vertex from the graphname
: Unique identification to the vertex inside the graph
-
gp.get_all_vertex()
: get a list with all vertex from the graph -
gp.adjacents_vertex(vtx)
: get all adjacent vertex from one vertexvtx
: vertex you want to know the adjacent
-
gp.remove_vertex(vertex_to_remove)
: Remove a vertex and all the connections he havevertex_to_remove
: vertex you want to remove
from graphpy.graph import Graph
gp = Graph()
gp.add_vertex('01')
gp.remove_vertex(gp['01'])
The main class has a search method and to use, you need to pass a by params an strategy to make the search.
In the class has two class strategies already implemented:
- BFSstrategy
- DFSstrategy
from graphpy.graph import Graph
from graphpy.BFSstrategy import BFSstrategy
graph = Graph()
graph.search(BFSstrategy(INITIAL_VERTEX))
To extend all the search types you can create a new strategy extending the SearchStrategy class from search_strategy.
from graphpy.search_strategy import SearchStrategy
class DFSstrategy(SearchStrategy):
def __init__(self):
self.__predecessors = {}
self.__firstSee = {}
self.__close = {}
self.__time = 0
def __dfs_visit(self, vertex):
self.__time = self.__time + 1
self.__firstSee[vertex] = self.__time
vertex.set_color(1)
for adjacent in self.get_adjacent_list()[vertex]:
if adjacent.get_color() == 0:
self.__predecessors[adjacent] = vertex
self.__dfs_visit(adjacent)
vertex.set_color(2)
self.__time += 1
self.__close[vertex] = self.__time
def search(self):
# colors:
# white: not visited
# grey: in the queue
# black: nothing more to do
for key in self.get_adjacent_list():
# set color for all vertices to white
key.set_color(0)
self.__predecessors[key] = None
self.__time = 0
for key in self.get_adjacent_list():
if key.get_color() == 0:
self.__dfs_visit(key)
return self.__firstSee, self.__close, self.__predecessors