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)
예제 #2
0
    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])