package to manipulate graphs

# graphpy

This is a package for the manipulation of graphs made for a class of graphs in the Brazilian university 'Universidade Tecnologica Federal do Paraná'

## Installation

``````pip install graphpython
``````

## Complete Documentation

### Graph

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 graph
• `directed`: Defaults to False. tells if the graph is directed or not

#### Code example

```# Create a new graph
from graphpy.graph import Graph

gp = Graph()

# to get the create vertex, you can use the [] operator
vertex1 = gp['vertex1']
```

### Vertex operations

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 graph

• `name`: Unique identification to the vertex inside the graph
• `value`: optional value to the vertex
• `gp.get_vertex(name)` or `gp[name]`: return the vertex from the graph

• `name`: 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 vertex

• `vtx`: vertex you want to know the adjacent
• `gp.remove_vertex(vertex_to_remove)`: Remove a vertex and all the connections he have

• `vertex_to_remove`: vertex you want to remove

#### Code example

```from graphpy.graph import Graph

gp = Graph()
gp.remove_vertex(gp['01'])
```

## Search in the graph

The main class has a search method and to use, you need to pass a by params an strategy to make the search.

#### Implement a new search strategy

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)

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
# set color for all vertices to white
key.set_color(0)
self.__predecessors[key] = None
self.__time = 0
if key.get_color() == 0:
self.__dfs_visit(key)

return self.__firstSee, self.__close, self.__predecessors
```

## Project details

This version 0.83