Beispiel #1
0
    def _getStepsInProdDAG(self,
                           prodDict,
                           stepsListDict,
                           stepsOrder='sequential'):
        """ Builds the DAG of steps in a production

        :params dict prodDict: dictionary representing one production
        :params list stepsListDict: list of steps (which are dictionaries) that should be in the production

        :returns: stepsInProd (DAG)
    """
        stepsInProd = DAG()

        inserted = None
        for stepID in prodDict['stepsInProd-ProdName']:
            for step in stepsListDict:
                if step['prodStepID'] == stepID:
                    ind = stepsListDict.index(step)
                    step = stepsListDict.pop(ind)
                    stepsInProd.addNode(step)
                    if inserted and stepsOrder == 'sequential':
                        stepsInProd.addEdge(inserted, step)
                    inserted = step

        return stepsInProd
Beispiel #2
0
    def test_getList(self):
        """test dag to list"""
        dag = DAG()
        dag.addNode("A")
        l = dag.getList()
        self.assertEqual(l, ["A"])

        dag.addNode("C")
        dag.addEdge("A", "C")
        l = dag.getList()
        self.assertEqual(l, ["A", "C"])

        dag.addNode("B")
        dag.addEdge("C", "B")
        l = dag.getList()
        self.assertEqual(l, ["A", "C", "B"])

        d = dict(zip("ab", range(2)))
        dag.addNode(d)
        dag.addEdge("B", d)
        l = dag.getList()
        self.assertEqual(l, ["A", "C", "B", d])

        l1 = list(range(2))
        dag.addNode(l1)
        dag.addEdge(d, l1)
        l = dag.getList()
        self.assertEqual(l, ["A", "C", "B", d, l1])

        dag.addNode("E")
        dag.addEdge(l1, "E")
        l = dag.getList()
        self.assertEqual(l, ["A", "C", "B", d, l1, "E"])

        dag1 = DAG()
        dag1.addNode(d)
        dag1.addNode(l1)
        dag1.addEdge(d, l1)
        l = dag1.getList()
        self.assertEqual(l, [d, l1])
Beispiel #3
0
    def test_full(self):
        """test dag creation and more"""
        dag = DAG()
        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, [])
        dag.addNode("A")
        self.assertEqual(dag.graph, {"A": set()})
        dag.addNode("A")
        self.assertEqual(dag.graph, {"A": set()})
        dag.addNode("B")
        self.assertEqual(dag.graph, {"A": set(), "B": set()})
        l = dag.getList()
        self.assertEqual(l, [])
        dag.addEdge("A", "B")
        self.assertEqual(dag.graph, {"A": {"B"}, "B": set()})
        l = dag.getList()
        self.assertEqual(set(l), {"A", "B"})
        dag.addEdge("A", "B")
        self.assertEqual(dag.graph, {"A": {"B"}, "B": set()})
        dag.addEdge("A", "C")
        self.assertEqual(dag.graph, {"A": {"B"}, "B": set()})
        dag.addNode("C")
        dag.addEdge("A", "C")
        self.assertEqual(dag.graph, {"A": {"B", "C"}, "B": set(), "C": set()})
        l = dag.getList()
        self.assertEqual(l, ["A"])
        dag.addEdge("C", "A")  # this would be cyclic, so it should not change the graph
        self.assertEqual(dag.graph, {"A": {"B", "C"}, "B": set(), "C": set()})
        dag.addNode("D")
        i_n = dag.getIndexNodes()
        self.assertEqual(set(i_n), {"A", "D"})
        dag.addNode("E")
        i_n = dag.getIndexNodes()
        self.assertEqual(listToSet(i_n), listToSet(["A", "D", "E"]))
        dag.addEdge("A", "D")
        dag.addEdge("D", "E")
        self.assertEqual(dag.graph, {"A": {"B", "C", "D"}, "B": set(), "C": set(), "D": {"E"}, "E": set()})
        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, ["A"])
        dag.addEdge("E", "A")
        self.assertEqual(dag.graph, {"A": {"B", "C", "D"}, "B": set(), "C": set(), "D": {"E"}, "E": {"A"}})

        # now an object
        class forTest(object):
            pass

        ft = forTest()
        dag.addNode(ft)
        self.assertEqual(dag.graph, {"A": {"B", "C", "D"}, "B": set(), "C": set(), "D": {"E"}, "E": {"A"}, ft: set()})
        dag.addEdge("B", ft)
        self.assertEqual(dag.graph, {"A": {"B", "C", "D"}, "B": {ft}, "C": set(), "D": {"E"}, "E": {"A"}, ft: set()})

        # now sets, dicts and lists as nodes
        d = dict(zip("ab", range(2)))
        dag.addNode(d)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C", "D"},
                "B": {ft},
                "C": set(),
                "D": {"E"},
                "E": {"A"},
                ft: set(),
                frozenset({("a", 0), ("b", 1)}): set(),
            },
        )
        dag.addEdge(ft, d)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C", "D"},
                "B": {ft},
                "C": set(),
                "D": {"E"},
                "E": {"A"},
                ft: set([frozenset({("a", 0), ("b", 1)})]),
                frozenset({("a", 0), ("b", 1)}): set(),
            },
        )

        l = list(range(2))
        dag.addNode(l)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C", "D"},
                "B": {ft},
                "C": set(),
                "D": {"E"},
                "E": {"A"},
                ft: set([frozenset({("a", 0), ("b", 1)})]),  # ft -> d
                frozenset({("a", 0), ("b", 1)}): set(),  # d
                frozenset({0, 1}): set(),  # l
            },
        )
        dag.addEdge(d, l)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C", "D"},
                "B": {ft},
                "C": set(),
                "D": {"E"},
                "E": {"A"},
                ft: set([frozenset({("a", 0), ("b", 1)})]),  # ft -> d
                frozenset({("a", 0), ("b", 1)}): set([frozenset({0, 1})]),  # d->l
                frozenset({0, 1}): set(),  # l
            },
        )

        del dag.graph["E"]
        del dag.graph["D"]
        del dag.graph[ft]
        del dag.graph[frozenset({("a", 0), ("b", 1)})]
        dag.graph["A"] = {"B", "C"}

        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C"},
                "B": {ft},
                "C": set(),
                frozenset({0, 1}): set(),  # l
            },
        )

        i_n = dag.getIndexNodes()
        self.assertEqual(listToSet(i_n), listToSet(["A", l]))

        d1 = {"a": "b"}
        dag.addNode(d1)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C"},
                "B": {ft},
                "C": set(),
                frozenset({0, 1}): set(),  # l
                frozenset({("a", "b")}): set(),  # d1
            },
        )

        l1 = ["a", "b"]
        dag.addNode(l1)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C"},
                "B": {ft},
                "C": set(),
                frozenset({0, 1}): set(),  # l
                frozenset({("a", "b")}): set(),  # d1
                frozenset({"a", "b"}): set(),  # l1
            },
        )

        i_n = dag.getIndexNodes()
        self.assertEqual(listToSet(i_n, recursive=True), listToSet(["A", l, d1, l1], recursive=True))

        s1 = set()
        dag.addNode(s1)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C"},
                "B": {ft},
                "C": set(),
                frozenset({0, 1}): set(),  # l
                frozenset({("a", "b")}): set(),  # d1
                frozenset({"a", "b"}): set(),  # l1
                frozenset({}): set(),  # s1
            },
        )

        # dict with frozenset in
        dFSet1 = {"a": frozenset()}
        dag.addNode(dFSet1)
        self.assertEqual(
            dag.graph,
            {
                "A": {"B", "C"},
                "B": {ft},
                "C": set(),
                frozenset({0, 1}): set(),  # l
                frozenset({("a", "b")}): set(),  # d1
                frozenset({"a", "b"}): set(),  # l1
                frozenset({}): set(),  # s1
                frozenset([("a", frozenset([]))]): set(),  # dFSet1
            },
        )
Beispiel #4
0
    def test_getList(self):
        """ test dag to list
    """
        dag = DAG()
        dag.addNode('A')
        l = dag.getList()
        self.assertEqual(l, ['A'])

        dag.addNode('C')
        dag.addEdge('A', 'C')
        l = dag.getList()
        self.assertEqual(l, ['A', 'C'])

        dag.addNode('B')
        dag.addEdge('C', 'B')
        l = dag.getList()
        self.assertEqual(l, ['A', 'C', 'B'])

        d = dict(zip('ab', range(2)))
        dag.addNode(d)
        dag.addEdge('B', d)
        l = dag.getList()
        self.assertEqual(l, ['A', 'C', 'B', d])

        l1 = list(range(2))
        dag.addNode(l1)
        dag.addEdge(d, l1)
        l = dag.getList()
        self.assertEqual(l, ['A', 'C', 'B', d, l1])

        dag.addNode('E')
        dag.addEdge(l1, 'E')
        l = dag.getList()
        self.assertEqual(l, ['A', 'C', 'B', d, l1, 'E'])

        dag1 = DAG()
        dag1.addNode(d)
        dag1.addNode(l1)
        dag1.addEdge(d, l1)
        l = dag1.getList()
        self.assertEqual(l, [d, l1])
Beispiel #5
0
    def test_full(self):
        """ test dag creation and more
    """
        dag = DAG()
        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, [])
        dag.addNode('A')
        self.assertEqual(dag.graph, {'A': set()})
        dag.addNode('A')
        self.assertEqual(dag.graph, {'A': set()})
        dag.addNode('B')
        self.assertEqual(dag.graph, {'A': set(), 'B': set()})
        l = dag.getList()
        self.assertEqual(l, [])
        dag.addEdge('A', 'B')
        self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
        l = dag.getList()
        self.assertEqual(l, ['A', 'B'])
        dag.addEdge('A', 'B')
        self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
        dag.addEdge('A', 'C')
        self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
        dag.addNode('C')
        dag.addEdge('A', 'C')
        self.assertEqual(dag.graph, {'A': {'B', 'C'}, 'B': set(), 'C': set()})
        l = dag.getList()
        self.assertEqual(l, ['A'])
        dag.addEdge(
            'C', 'A')  #this would be cyclic, so it should not change the graph
        self.assertEqual(dag.graph, {'A': {'B', 'C'}, 'B': set(), 'C': set()})
        dag.addNode('D')
        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, ['A', 'D'])
        dag.addNode('E')
        i_n = dag.getIndexNodes()
        self.assertEqual(sorted(i_n), sorted(['A', 'D', 'E']))
        dag.addEdge('A', 'D')
        dag.addEdge('D', 'E')
        self.assertEqual(dag.graph, {
            'A': {'B', 'C', 'D'},
            'B': set(),
            'C': set(),
            'D': {'E'},
            'E': set()
        })
        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, ['A'])
        dag.addEdge('E', 'A')
        self.assertEqual(dag.graph, {
            'A': {'B', 'C', 'D'},
            'B': set(),
            'C': set(),
            'D': {'E'},
            'E': {'A'}
        })

        #now an object
        class forTest(object):
            pass

        ft = forTest()
        dag.addNode(ft)
        self.assertEqual(
            dag.graph, {
                'A': {'B', 'C', 'D'},
                'B': set(),
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set()
            })
        dag.addEdge('B', ft)
        self.assertEqual(
            dag.graph, {
                'A': {'B', 'C', 'D'},
                'B': {ft},
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set()
            })

        #now sets, dicts and lists as nodes
        d = dict(zip('ab', range(2)))
        dag.addNode(d)
        self.assertEqual(
            dag.graph, {
                'A': {'B', 'C', 'D'},
                'B': {ft},
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set(),
                frozenset({('a', 0), ('b', 1)}): set()
            })
        dag.addEdge(ft, d)
        self.assertEqual(
            dag.graph, {
                'A': {'B', 'C', 'D'},
                'B': {ft},
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set([frozenset({('a', 0), ('b', 1)})]),
                frozenset({('a', 0), ('b', 1)}): set()
            })

        l = list(range(2))
        dag.addNode(l)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C', 'D'},
                'B': {ft},
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set([frozenset({('a', 0), ('b', 1)})]),  #ft -> d
                frozenset({('a', 0), ('b', 1)}): set(),  #d
                frozenset({0, 1}): set()  #l
            })
        dag.addEdge(d, l)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C', 'D'},
                'B': {ft},
                'C': set(),
                'D': {'E'},
                'E': {'A'},
                ft: set([frozenset({('a', 0), ('b', 1)})]),  #ft -> d
                frozenset({('a', 0), ('b', 1)}): set([frozenset({0, 1})
                                                      ]),  #d->l
                frozenset({0, 1}): set()  #l
            })

        del dag.graph['E']
        del dag.graph['D']
        del dag.graph[ft]
        del dag.graph[frozenset({('a', 0), ('b', 1)})]
        dag.graph['A'] = {'B', 'C'}

        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C'},
                'B': {ft},
                'C': set(),
                frozenset({0, 1}): set(),  #l
            })

        i_n = dag.getIndexNodes()
        self.assertEqual(i_n, ['A', l])

        d1 = {'a': 'b'}
        dag.addNode(d1)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C'},
                'B': {ft},
                'C': set(),
                frozenset({0, 1}): set(),  #l
                frozenset({('a', 'b')}): set(),  #d1
            })

        l1 = ['a', 'b']
        dag.addNode(l1)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C'},
                'B': {ft},
                'C': set(),
                frozenset({0, 1}): set(),  #l
                frozenset({('a', 'b')}): set(),  #d1
                frozenset({'a', 'b'}): set()  #l1
            })

        i_n = dag.getIndexNodes()
        self.assertEqual(sorted(i_n), sorted(['A', l, d1, l1]))

        s1 = set()
        dag.addNode(s1)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C'},
                'B': {ft},
                'C': set(),
                frozenset({0, 1}): set(),  #l
                frozenset({('a', 'b')}): set(),  #d1
                frozenset({'a', 'b'}): set(),  #l1
                frozenset({}): set()  # s1
            })

        #dict with frozenset in
        dFSet1 = {'a': frozenset()}
        dag.addNode(dFSet1)
        self.assertEqual(
            dag.graph,
            {
                'A': {'B', 'C'},
                'B': {ft},
                'C': set(),
                frozenset({0, 1}): set(),  #l
                frozenset({('a', 'b')}): set(),  #d1
                frozenset({'a', 'b'}): set(),  #l1
                frozenset({}): set(),  # s1
                frozenset([('a', frozenset([]))]): set()  #dFSet1
            })
Beispiel #6
0
  def test_getList(self):
    """ test dag to list
    """
    dag = DAG()
    dag.addNode('A')
    l = dag.getList()
    self.assertEqual(l, ['A'])

    dag.addNode('C')
    dag.addEdge('A', 'C')
    l = dag.getList()
    self.assertEqual(l, ['A', 'C'])

    dag.addNode('B')
    dag.addEdge('C', 'B')
    l = dag.getList()
    self.assertEqual(l, ['A', 'C', 'B'])

    d = dict(zip('ab', range(2)))
    dag.addNode(d)
    dag.addEdge('B', d)
    l = dag.getList()
    self.assertEqual(l, ['A', 'C', 'B', d])

    l1 = list(range(2))
    dag.addNode(l1)
    dag.addEdge(d, l1)
    l = dag.getList()
    self.assertEqual(l, ['A', 'C', 'B', d, l1])

    dag.addNode('E')
    dag.addEdge(l1, 'E')
    l = dag.getList()
    self.assertEqual(l, ['A', 'C', 'B', d, l1, 'E'])

    dag1 = DAG()
    dag1.addNode(d)
    dag1.addNode(l1)
    dag1.addEdge(d, l1)
    l = dag1.getList()
    self.assertEqual(l, [d, l1])
Beispiel #7
0
  def test_full(self):
    """ test dag creation and more
    """
    dag = DAG()
    i_n = dag.getIndexNodes()
    self.assertEqual(i_n, [])
    dag.addNode('A')
    self.assertEqual(dag.graph, {'A': set()})
    dag.addNode('A')
    self.assertEqual(dag.graph, {'A': set()})
    dag.addNode('B')
    self.assertEqual(dag.graph, {'A': set(), 'B': set()})
    l = dag.getList()
    self.assertEqual(l, [])
    dag.addEdge('A', 'B')
    self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
    l = dag.getList()
    self.assertEqual(l, ['A', 'B'])
    dag.addEdge('A', 'B')
    self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
    dag.addEdge('A', 'C')
    self.assertEqual(dag.graph, {'A': {'B'}, 'B': set()})
    dag.addNode('C')
    dag.addEdge('A', 'C')
    self.assertEqual(dag.graph, {'A': {'B', 'C'}, 'B': set(), 'C': set()})
    l = dag.getList()
    self.assertEqual(l, ['A'])
    dag.addEdge('C', 'A') #this would be cyclic, so it should not change the graph
    self.assertEqual(dag.graph, {'A': {'B', 'C'}, 'B': set(), 'C': set()})
    dag.addNode('D')
    i_n = dag.getIndexNodes()
    self.assertEqual(i_n, ['A', 'D'])
    dag.addNode('E')
    i_n = dag.getIndexNodes()
    self.assertEqual(sorted(i_n), sorted(['A', 'D', 'E']))
    dag.addEdge('A', 'D')
    dag.addEdge('D', 'E')
    self.assertEqual(dag.graph, {'A': {'B', 'C', 'D'}, 'B': set(), 'C': set(), 'D': {'E'}, 'E': set()} )
    i_n = dag.getIndexNodes()
    self.assertEqual(i_n, ['A'])
    dag.addEdge('E', 'A')
    self.assertEqual(dag.graph, {'A': {'B', 'C', 'D'}, 'B': set(), 'C': set(), 'D': {'E'}, 'E': {'A'}} )

    #now an object
    class forTest(object):
      pass
    ft = forTest()
    dag.addNode(ft)
    self.assertEqual(dag.graph, {'A': {'B', 'C', 'D'}, 'B': set(), 'C': set(), 'D': {'E'}, 'E': {'A'}, ft: set()} )
    dag.addEdge('B', ft)
    self.assertEqual( dag.graph,
                      {'A': {'B', 'C', 'D'}, 'B': {ft}, 'C': set(), 'D': {'E'}, 'E': {'A'}, ft: set()}
                    )

    #now sets, dicts and lists as nodes
    d = dict(zip('ab', range(2)))
    dag.addNode(d)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C', 'D'},
                        'B': {ft},
                        'C': set(),
                        'D': {'E'},
                        'E': {'A'},
                        ft: set(),
                        frozenset({('a',0), ('b',1)}): set()})
    dag.addEdge(ft, d)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C', 'D'},
                        'B': {ft},
                        'C': set(),
                        'D': {'E'},
                        'E': {'A'},
                        ft: set([frozenset({('a',0), ('b',1)})]),
                        frozenset({('a',0), ('b',1)}): set()
                      }
                    )

    l = list(range(2))
    dag.addNode(l)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C', 'D'},
                        'B': {ft},
                        'C': set(),
                        'D': {'E'},
                        'E': {'A'},
                        ft: set([frozenset({('a',0), ('b',1)})]), #ft -> d
                        frozenset({('a',0), ('b',1)}): set(), #d
                        frozenset({0,1}): set() #l
                      }
                    )
    dag.addEdge(d, l)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C', 'D'},
                        'B': {ft},
                        'C': set(),
                        'D': {'E'},
                        'E': {'A'},
                        ft: set([frozenset({('a',0), ('b',1)})]), #ft -> d
                        frozenset({('a',0), ('b',1)}): set([frozenset({0,1})]), #d->l
                        frozenset({0,1}): set() #l
                      }
                    )

    del dag.graph['E']
    del dag.graph['D']
    del dag.graph[ft]
    del dag.graph[frozenset({('a',0), ('b',1)})]
    dag.graph['A'] = {'B', 'C'}

    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C'},
                        'B': {ft},
                        'C': set(),
                        frozenset({0,1}): set(), #l
                      }
                    )

    i_n = dag.getIndexNodes()
    self.assertEqual(i_n, ['A', l])

    d1 = {'a':'b'}
    dag.addNode(d1)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C'},
                        'B': {ft},
                        'C': set(),
                        frozenset({0,1}): set(), #l
                        frozenset({('a','b')}): set(), #d1
                      }
                    )

    l1 = ['a', 'b']
    dag.addNode(l1)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C'},
                        'B': {ft},
                        'C': set(),
                        frozenset({0,1}): set(), #l
                        frozenset({('a', 'b')}): set(), #d1
                        frozenset({'a', 'b'}): set() #l1
                      }
                    )

    i_n = dag.getIndexNodes()
    self.assertEqual(sorted(i_n), sorted(['A', l, d1, l1]))

    s1 = set()
    dag.addNode(s1)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C'},
                        'B': {ft},
                        'C': set(),
                        frozenset({0,1}): set(), #l
                        frozenset({('a', 'b')}): set(), #d1
                        frozenset({'a', 'b'}): set(), #l1
                        frozenset({}): set() # s1
                      }
                    )

    #dict with frozenset in
    dFSet1 = {'a':frozenset()}
    dag.addNode(dFSet1)
    self.assertEqual( dag.graph,
                      { 'A': {'B', 'C'},
                        'B': {ft},
                        'C': set(),
                        frozenset({0,1}): set(), #l
                        frozenset({('a', 'b')}): set(), #d1
                        frozenset({'a', 'b'}): set(), #l1
                        frozenset({}): set(), # s1
                        frozenset([('a', frozenset([]))]): set() #dFSet1
                      }
                    )