Пример #1
0
    def test_float(self):
        # Initialize with float
        i = random.random() * time.time()
        j = Timestamp(i)
        k = Timestamp(_float=i)
        l = Timestamp.from_float(k._float)
        self.assertEqual(float(j), i)
        self.assertEqual(float(j), k._float)
        self.assertEqual(float(l), float(j))

        del i, j, k, l
Пример #2
0
    def test_datetime(self):
        # Initialize with datetime
        d = datetime.datetime.now()
        timestamp = d.timestamp()
        t1 = Timestamp(timestamp)
        t2 = Timestamp(_datetime=d)
        t3 = Timestamp.from_datetime(d)

        self.assertEqual(float(t1), float(t2))
        self.assertEqual(float(t3), timestamp)

        del d, timestamp, t1, t2, t3
Пример #3
0
    def test_hex(self):
        # Initialize with hex
        t1 = Timestamp('0xff')
        t2 = Timestamp.from_hex(' ff ')
        t3 = Timestamp(_hex='#FF ')
        t4 = Timestamp('00fF')

        self.assertEqual(float(t1), float(t2))
        self.assertEqual(float(t2), float(t3))
        self.assertEqual(float(t3), float(t4))
        self.assertEqual(float(t4), float(t1))

        del t1, t2, t3, t4
Пример #4
0
    def test_now(self):
        for a, b in ((Timestamp.now(), Timestamp.now()), (Timestamp(' 0xff'),
                                                          Timestamp.now()),
                     (0.0, Timestamp('ff')), (Timestamp.now(), time.time()),
                     (Timestamp(Timestamp.now()), time.time())):

            self.assertGreater(b, a)
            self.assertLess(a, b)

            self.assertGreaterEqual(b, a)
            self.assertLessEqual(a, b)

            self.assertEqual(a, a)
            self.assertEqual(b, b)

            self.assertNotEqual(a, b)
Пример #5
0
    def test_pos(self):
        t = Timestamp.now()
        assert t is +t

        t = Timestamp('0x01')
        assert t is +t
Пример #6
0
 def test_failure_1(self):
     with self.assertRaises(ValueError) as cm:
         Timestamp('x')
Пример #7
0
 def test_now(self):
     now = Timestamp.now()
Пример #8
0
 def test_failure_3(self):
     with self.assertRaises(ValueError):
         Timestamp('-0x1')
Пример #9
0
 def test_failure_2(self):
     with self.assertRaises(ValueError) as cm:
         Timestamp(1.0, _float=1)
Пример #10
0
class Graph(Timestamp):

    stamps = Timestamp()

    def __init__(self, N):
        self.size = N
        self.distance: list = [0] * self.size
        self.parents: list = [0] * self.size
        self.colors: list = [0] * self.size
        # self.stamps:Timestamp = []
        self.stamplist: list = [Graph.stamps] * self.size  #= list()

        self.Adj = defaultdict(list)

    def addEdge(self, u: int, v: int) -> None:
        '''
        > Add an edge to our Graph G from U->V
        '''
        self.Adj[u].append(Edge(v, 0))

    #end-AddEdge

    def BFS(self, s) -> None:
        for i in range(self.size):
            self.distance[i] = INT_MAX
            self.parents[i] = i

        self.distance[s] = 0
        aQ = Queue()
        aQ.put(s)

        while (aQ.empty() == False):
            u = aQ.get()
            # print("U", u)

            for i in range(len(self.Adj[u])):
                v = self.Adj[u][i].neighbor
                # print("(u,v) \t",u, "->", v)
                if self.distance[v] == INT_MAX:
                    # set distance, parents and push into queue
                    self.distance[v] = self.distance[u] + 1
                    self.parents[v] = u
                    aQ.put(v)
                #end-if(reachable)
            #end-for (edge)
        #end-while(items in Q)

    #end-BFS

    def printParents(self) -> None:
        # for i in range(self.size):
        print('Parents: ')
        print(type(self.parents))
        print(len(self.parents))
        for v in range(len(self.parents)):
            print(self.parents[v])
        #end-for

    #end-printParents

    def printDistance(self) -> None:
        print('Distance: ')
        for v in range(len(self.distance)):
            print(self.distance[v])
        #end-for

    #end-printDistance

    def printColors(self) -> None:
        print('Colors: ')
        for v in range(len(self.colors)):
            print(self.colors[v])
        #end-for

    #end-printColors
    def printStamps(self) -> None:
        print('TimeStamps: ')
        for v in range(len(self.stamplist)):
            print(self.stamplist[v].disc, self.stamplist[v].final)
        #end-for

    #end-print-timeStamps

    def bfsPrint(self, s):
        pass

    def printGraph(self):
        for u in range(self.size):
            # print()
            for i in range(len(self.Adj[u])):
                v = self.Adj[u][i].neighbor
                # print
                print(u, v)
            # print(v, '\n')

    #end-print_graph

    def printPath(self, s, r):
        '''
        > Recursive algorithm to 'backtrack' shortest path given by BFS algorithm and parents(ancestors) array
            > s is the source
            > r is the target Vertex
        '''
        print('PrintPath...')
        if r == self.parents[r]:  # we've made it back to the source
            print(r)
            return
        self.printPath(s, self.parents[r])
        print(r)

    #end-printPath

    def DFS(self) -> None:
        '''
        > Depth First Search algorithm used to traverse a graph G and visit each vertex V
        '''
        for i in range(self.size):
            self.parents[i] = i
            self.colors[i] = 'W'

        t = 0

        for i in range(self.size):
            if self.colors[i] == 'W':

                self.DFS_Visit(i, t)
            # end-if
        #end-for

    #end-DFS

    def DFS_Visit(self, u, t):

        self.colors[u] = 'G'
        self.stamplist[u].disc = t
        # self.stamps[u] = t
        t = t + 1

        for i in range(len(self.Adj[u])):
            v = self.Adj[u][i].neighbor  # get U's neighbor
            if self.colors[v] == 'W':  # we still need to visit the Node
                # Mark the Node information as we visit
                self.parents[v] = u
                self.distance[v] = self.distance[u] + 1
                self.colors[
                    v] = 'G'  # Mark the Node as visited. Could also use a boolean value here called 'found' to mark each Node.found=True
                self.DFS_Visit(v, t)
            # end-if
        # end-for

        # if it makes it any further set the finishing time of the node and set color to 'Black'
        self.colors[u] = 'B'
        self.stamplist[u].final = t
        # self.stamps[u] = t
        t = t + 1