class SQLConflictSerializable: graph = None userInput = None operations = [] def __init__(self): self.getUserInput() self.initOperations() verticesList = self.getVerticesList() self.graph = DirectedGraph(verticesList) self.addEdgesToGraph() self.graph.topologicalSort() # self.graph.print() def initOperations(self): splittedInput = self.userInput.split(";") for command in splittedInput: indexOfP = command.find("(") operand = command[0] transactionsNumber = int(command[1:indexOfP]) variable = command[indexOfP + 1:-1] operationToAdd = operation(operand, transactionsNumber, variable) self.operations.append(operationToAdd) def getVerticesList(self): listOfTransactions = [] for operation in self.operations: if operation.transactionId not in listOfTransactions: listOfTransactions.append(operation.transactionId) return listOfTransactions def getUserInput(self): print("Please type your transactions list") self.userInput = input() def addEdgesToGraph(self): numberOfOperand = len(self.operations) for i in range(numberOfOperand): currentOperand = self.operations[i] for j in range(i + 1, numberOfOperand): if self.operations[j].variable == currentOperand.variable and self.operations[j].transactionId != currentOperand.transactionId: if currentOperand.operand == 'R' and self.operations[j].operand == 'W': self.graph.addEdge(currentOperand.transactionId, self.operations[j].transactionId) elif currentOperand.operand == 'W' and self.operations[j].operand == 'R': self.graph.addEdge(currentOperand.transactionId, self.operations[j].transactionId) elif currentOperand.operand == 'W' and self.operations[j].operand == 'W': self.graph.addEdge(currentOperand.transactionId, self.operations[j].transactionId)
def test_get_graph_from_file(self): with open("graph.txt", "r") as f: firstLine = f.readline() firstLine = firstLine.split() nrVertices = int(firstLine[0]) nrEdges = int(firstLine[1]) graph = DirectedGraph(nrVertices, nrEdges) graph.getGraphFromFile("graph.txt") graph.writeGraphToFile("graphOut.txt") vertices = graph.parseVertices() for vertex in vertices: print(vertex) print(graph.parseNin(vertex)) print(graph.parseNout(vertex)) print("\n") edges = graph.parseEdges() for edge in edges: print(str(edge) + " - " + str(edges[edge])) self.assertEqual(nrVertices, 5) self.assertEqual(graph.isEdge(1, 2), 1) self.assertEqual(graph.isEdge(0, 4), 0) self.assertEqual(graph.getInDegree(1), 2) self.assertEqual(graph.getOutDegree(3), 0) self.assertEqual(graph.parseOutboundEdges(0), [(0, 0), (0, 1)]) self.assertEqual(graph.parseInboundEdges(1), [(0, 1), (2, 1)]) graph.removeEdge((0, 1)) self.assertEqual(graph.getNrEdges(), 5) self.assertEqual(graph.parseOutboundEdges(0), [(0, 0)]) self.assertEqual(graph.parseInboundEdges(1), [(2, 1)]) graph.addEdge(0, 1, 7) graph.removeVertex(2) self.assertEqual(graph.getNrEdges(), 3) self.assertEqual(graph.getNrVertices(), 4) print("\n") for vertex in vertices: print(vertex) print(graph.parseNin(vertex)) print(graph.parseNout(vertex)) print("\n") edges = graph.parseEdges() for edge in edges: print(str(edge) + " - " + str(edges[edge])) self.assertEqual(graph.getCost((0, 1)), 7) graph.modifyCost((0, 1), 5) self.assertEqual(graph.getCost((0, 1)), 5) copyOfGraph = graph.copyGraph() copyOfGraph.modifyCost((0, 1), 7) self.assertEqual(copyOfGraph.getCost((0, 1)), 7) self.assertEqual(graph.getCost((0, 1)), 5) randomGraph = graph.randomGraph(10, 14) randomGraph.writeGraphToFile("randomgraph.txt")
# -*- coding: utf-8 -*- """ Created on Tue Jan 7 23:02:05 2020 @author: erick """ from DirectedGraph import DirectedGraph graph = DirectedGraph(8) graph.addEdge(0, 1, 1) graph.addEdge(1, 2, 4) graph.addEdge(1, 3, 3) graph.addEdge(2, 3, 3) graph.addEdge(2, 4, 2) graph.addEdge(2, 5, 5) graph.addEdge(4, 5, 2) graph.addEdge(4, 6, 6) graph.addEdge(5, 6, 1) graph.addEdge(7, 0, 2) graph.addEdge(7, 1, 4) graph.addEdge(7, 3, 8) distances = graph.altDijkstra(7) for i in range(len(distances)): print("node:", i, "distance", distances[i])