예제 #1
0
    def test_graph_references(self):
        graph = ObjectGraph()
        n1 = graph.createNode(Node, "n1")
        n2 = graph.createNode(Node, "n2")

        graph.createReference(None, n1, None)
        graph.createReference(None, n2, "hello")

        self.assertEqual(graph.edgeData(None, n1), None)
        self.assertEqual(graph.edgeData(None, n2), "hello")

        graph.updateEdgeData(None, n1, "world")
        self.assertEqual(graph.edgeData(None, n1), "world")

        out, inc = graph.get_edges(None)
        out = list(out)
        inc = list(inc)

        self.assertEqual(out, [n1, n2])
        self.assertEqual(len(out), 2)
        self.assertTrue(n1 in out)
        self.assertTrue(n2 in out)
        self.assertEqual(inc, [])

        graph.removeReference(None, n2)
        out, inc = graph.get_edges(None)
        out = list(out)
        inc = list(inc)

        self.assertTrue(n2 not in out)
예제 #2
0
    def test_edge_data(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 2)
        n3 = graph.createNode(ArgNode, "n3", 3)

        graph.createReference(n1, n2)
        graph.createReference(n1, n3, "foo")

        self.assertIs(graph.edgeData(n1, n2), None)
        self.assertIs(graph.edgeData(n1, n3), "foo")

        graph.updateEdgeData(n1, n2, "bar")
        self.assertIs(graph.edgeData(n1, n2), "bar")
예제 #3
0
    def test_reference_oddity(self):
        # Not sure if I actually like this, cannot change for now...
        graph = ObjectGraph()
        n1 = graph.createNode(Node, "n1")
        n2 = graph.createNode(Node, "n2")

        graph.createReference("n1", "n2")
        graph.createReference("n1", "n3")
        graph.createReference("n3", "n1")

        nodes = list(graph.nodes())
        self.assertEqual(len(nodes), 2)
        self.assertTrue(n1 in nodes)
        self.assertTrue(n2 in nodes)

        out, inc = graph.get_edges(n1)
        out = list(out)
        inc = list(inc)

        self.assertEqual(out, [n2])
        self.assertEqual(inc, [])
예제 #4
0
    def testEdges(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 1)
        n3 = graph.createNode(ArgNode, "n3", 1)
        n4 = graph.createNode(ArgNode, "n4", 1)

        graph.createReference(n1, n2, "n1-n2")
        graph.createReference("n1", "n3", "n1-n3")
        graph.createReference("n2", n3)

        g = graph.graph
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "n1-n2")

        e = g.edge_by_node("n1", "n3")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "n1-n3")

        e = g.edge_by_node("n2", "n3")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), None)

        e = g.edge_by_node("n1", "n4")
        self.assertTrue(e is None)

        graph.removeReference(n1, n2)
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is None)

        graph.removeReference("n1", "n3")
        e = g.edge_by_node("n1", "n3")
        self.assertTrue(e is None)

        graph.createReference(n1, n2, "foo")
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "foo")

        graph.removeReference("A", "B")  # neither node exists, shouldn't fail
예제 #5
0
    def test_get_edges(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 2)
        n3 = graph.createNode(ArgNode, "n3", 3)
        n4 = graph.createNode(ArgNode, "n4", 4)
        n5 = graph.createNode(ArgNode, "n5", 5)
        n6 = graph.createNode(ArgNode, "n6", 5)

        graph.createReference(n1, n2)
        graph.createReference(n1, n3)
        graph.createReference(n3, n1)
        graph.createReference(n5, n1)
        graph.createReference(n2, n4)
        graph.createReference(n2, n5)
        graph.createReference(n6, n2)

        outs, ins = graph.get_edges(n1)

        self.assertFalse(isinstance(outs, list))
        self.assertFalse(isinstance(ins, list))

        ins = list(ins)
        outs = list(outs)


        self.assertTrue(n1 not in outs)
        self.assertTrue(n2 in outs)
        self.assertTrue(n3 in outs)
        self.assertTrue(n4 not in outs)
        self.assertTrue(n5 not in outs)
        self.assertTrue(n6 not in outs)

        self.assertTrue(n1 not in ins)
        self.assertTrue(n2 not in ins)
        self.assertTrue(n3 in ins)
        self.assertTrue(n4 not in ins)
        self.assertTrue(n5 in ins)
        self.assertTrue(n6 not in ins)
예제 #6
0
    def testEdges(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 1)
        n3 = graph.createNode(ArgNode, "n3", 1)
        n4 = graph.createNode(ArgNode, "n4", 1)

        graph.createReference(n1, n2, "n1-n2")
        graph.createReference("n1", "n3", "n1-n3")
        graph.createReference("n2", n3)

        g = graph.graph
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "n1-n2")

        e = g.edge_by_node("n1", "n3")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "n1-n3")

        e = g.edge_by_node("n2", "n3")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), None)

        e = g.edge_by_node("n1", "n4")
        self.assertTrue(e is None)

        graph.removeReference(n1, n2)
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is None)

        graph.removeReference("n1", "n3")
        e = g.edge_by_node("n1", "n3")
        self.assertTrue(e is None)

        graph.createReference(n1, n2, "foo")
        e = g.edge_by_node("n1", "n2")
        self.assertTrue(e is not None)
        self.assertEqual(g.edge_data(e), "foo")
예제 #7
0
    def test_get_edges(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 2)
        n3 = graph.createNode(ArgNode, "n3", 3)
        n4 = graph.createNode(ArgNode, "n4", 4)
        n5 = graph.createNode(ArgNode, "n5", 5)
        n6 = graph.createNode(ArgNode, "n6", 5)

        graph.createReference(n1, n2)
        graph.createReference(n1, n3)
        graph.createReference(n3, n1)
        graph.createReference(n5, n1)
        graph.createReference(n2, n4)
        graph.createReference(n2, n5)
        graph.createReference(n6, n2)

        outs, ins = graph.get_edges(n1)

        self.assertFalse(isinstance(outs, list))
        self.assertFalse(isinstance(ins, list))

        ins = list(ins)
        outs = list(outs)

        self.assertTrue(n1 not in outs)
        self.assertTrue(n2 in outs)
        self.assertTrue(n3 in outs)
        self.assertTrue(n4 not in outs)
        self.assertTrue(n5 not in outs)
        self.assertTrue(n6 not in outs)

        self.assertTrue(n1 not in ins)
        self.assertTrue(n2 not in ins)
        self.assertTrue(n3 in ins)
        self.assertTrue(n4 not in ins)
        self.assertTrue(n5 in ins)
        self.assertTrue(n6 not in ins)
예제 #8
0
    def test_filterStack(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 0)
        n11 = graph.createNode(ArgNode, "n1.1", 1)
        n12 = graph.createNode(ArgNode, "n1.2", 0)
        n111 = graph.createNode(ArgNode, "n1.1.1", 0)
        n112 = graph.createNode(ArgNode, "n1.1.2", 2)
        n2 = graph.createNode(ArgNode, "n2", 0)
        n3 = graph.createNode(ArgNode, "n2", 0)

        graph.createReference(None, n1)
        graph.createReference(None, n2)
        graph.createReference(n1, n11)
        graph.createReference(n1, n12)
        graph.createReference(n11, n111)
        graph.createReference(n11, n112)

        self.assertTrue(n1 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n11 in graph)
        self.assertTrue(n12 in graph)
        self.assertTrue(n111 in graph)
        self.assertTrue(n112 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n3 in graph)

        visited, removes, orphans = graph.filterStack(
            [lambda n: n.args[0] != 1, lambda n: n.args[0] != 2]
        )

        self.assertEqual(visited, 6)
        self.assertEqual(removes, 2)
        self.assertEqual(orphans, 1)

        e = graph.graph.edge_by_node(n1.graphident, n111.graphident)
        self.assertEqual(graph.graph.edge_data(e), "orphan")

        self.assertTrue(n1 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n11 not in graph)
        self.assertTrue(n12 in graph)
        self.assertTrue(n111 in graph)
        self.assertTrue(n112 not in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n3 in graph)
예제 #9
0
    def test_filterStack(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 0)
        n11 = graph.createNode(ArgNode, "n1.1", 1)
        n12 = graph.createNode(ArgNode, "n1.2", 0)
        n111 = graph.createNode(ArgNode, "n1.1.1", 0)
        n112 = graph.createNode(ArgNode, "n1.1.2",2)
        n2 = graph.createNode(ArgNode, "n2", 0)
        n3 = graph.createNode(ArgNode, "n2", 0)

        graph.createReference(None, n1)
        graph.createReference(None, n2)
        graph.createReference(n1, n11)
        graph.createReference(n1, n12)
        graph.createReference(n11, n111)
        graph.createReference(n11, n112)

        self.assertTrue(n1 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n11 in graph)
        self.assertTrue(n12 in graph)
        self.assertTrue(n111 in graph)
        self.assertTrue(n112 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n3 in graph)

        visited, removes, orphans = graph.filterStack(
                [lambda n: n.args[0] != 1, lambda n: n.args[0] != 2])

        self.assertEqual(visited, 6)
        self.assertEqual(removes, 2)
        self.assertEqual(orphans, 1)

        e = graph.graph.edge_by_node(n1.graphident, n111.graphident)
        self.assertEqual(graph.graph.edge_data(e), "orphan")

        self.assertTrue(n1 in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n11 not in graph)
        self.assertTrue(n12 in graph)
        self.assertTrue(n111 in graph)
        self.assertTrue(n112 not in graph)
        self.assertTrue(n2 in graph)
        self.assertTrue(n3 in graph)
예제 #10
0
    def test_flatten(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 2)
        n3 = graph.createNode(ArgNode, "n3", 3)
        n4 = graph.createNode(ArgNode, "n4", 4)
        n5 = graph.createNode(ArgNode, "n5", 5)
        n6 = graph.createNode(ArgNode, "n6", 6)
        n7 = graph.createNode(ArgNode, "n7", 7)
        n8 = graph.createNode(ArgNode, "n8", 8)

        graph.createReference(graph, n1)
        graph.createReference(graph, n7)
        graph.createReference(n1, n2)
        graph.createReference(n1, n4)
        graph.createReference(n2, n3)
        graph.createReference(n2, n5)
        graph.createReference(n5, n6)
        graph.createReference(n4, n6)
        graph.createReference(n4, n2)

        self.assertFalse(isinstance(graph.flatten(), list))

        fl = list(graph.flatten())
        self.assertTrue(n1 in fl)
        self.assertTrue(n2 in fl)
        self.assertTrue(n3 in fl)
        self.assertTrue(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertTrue(n6 in fl)
        self.assertTrue(n7 in fl)
        self.assertFalse(n8 in fl)

        fl = list(graph.flatten(start=n2))
        self.assertFalse(n1 in fl)
        self.assertTrue(n2 in fl)
        self.assertTrue(n3 in fl)
        self.assertFalse(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertTrue(n6 in fl)
        self.assertFalse(n7 in fl)
        self.assertFalse(n8 in fl)

        graph.createReference(n1, n5)
        fl = list(graph.flatten(lambda n: n.args[0] % 2 != 0))
        self.assertTrue(n1 in fl)
        self.assertFalse(n2 in fl)
        self.assertFalse(n3 in fl)
        self.assertFalse(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertFalse(n6 in fl)
        self.assertTrue(n7 in fl)
        self.assertFalse(n8 in fl)
예제 #11
0
    def test_flatten(self):
        graph = ObjectGraph()
        n1 = graph.createNode(ArgNode, "n1", 1)
        n2 = graph.createNode(ArgNode, "n2", 2)
        n3 = graph.createNode(ArgNode, "n3", 3)
        n4 = graph.createNode(ArgNode, "n4", 4)
        n5 = graph.createNode(ArgNode, "n5", 5)
        n6 = graph.createNode(ArgNode, "n6", 6)
        n7 = graph.createNode(ArgNode, "n7", 7)
        n8 = graph.createNode(ArgNode, "n8", 8)

        graph.createReference(graph, n1)
        graph.createReference(graph, n7)
        graph.createReference(n1, n2)
        graph.createReference(n1, n4)
        graph.createReference(n2, n3)
        graph.createReference(n2, n5)
        graph.createReference(n5, n6)
        graph.createReference(n4, n6)
        graph.createReference(n4, n2)

        self.assertFalse(isinstance(graph.flatten(), list))

        fl = list(graph.flatten())
        self.assertTrue(n1 in fl)
        self.assertTrue(n2 in fl)
        self.assertTrue(n3 in fl)
        self.assertTrue(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertTrue(n6 in fl)
        self.assertTrue(n7 in fl)
        self.assertFalse(n8 in fl)

        fl = list(graph.flatten(start=n2))
        self.assertFalse(n1 in fl)
        self.assertTrue(n2 in fl)
        self.assertTrue(n3 in fl)
        self.assertFalse(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertTrue(n6 in fl)
        self.assertFalse(n7 in fl)
        self.assertFalse(n8 in fl)

        graph.createReference(n1, n5)
        fl = list(graph.flatten(lambda n: n.args[0] % 2 != 0))
        self.assertTrue(n1 in fl)
        self.assertFalse(n2 in fl)
        self.assertFalse(n3 in fl)
        self.assertFalse(n4 in fl)
        self.assertTrue(n5 in fl)
        self.assertFalse(n6 in fl)
        self.assertTrue(n7 in fl)
        self.assertFalse(n8 in fl)