示例#1
0
 def test_init(self):
     var1 = MyVariable("var1")
     var2 = MyVariable("var2")
     var3 = op1(var1)
     var4 = op2(var3, var2)
     fg = FunctionGraph([var1, var2], [var3, var4], clone=False)
     assert fg.inputs == [var1, var2]
     assert fg.outputs == [var3, var4]
     assert fg.apply_nodes == {var3.owner, var4.owner}
     assert fg.update_mapping is None
     assert fg.check_integrity() is None
     assert fg.variables == {var1, var2, var3, var4}
     assert fg.clients(var1) == [(var3.owner, 0)]
     assert fg.clients(var2) == [(var4.owner, 1)]
     assert fg.clients(var3) == [(var4.owner, 0), ("output", 0)]
     assert fg.clients(var4) == [("output", 1)]
示例#2
0
    def test_check_integrity(self):

        var1 = MyVariable("var1")
        var2 = MyVariable("var2")
        var3 = op1(var2, var1)
        var4 = op2(var3, var2)
        var5 = op3(var4, var2, var2)
        fg = FunctionGraph([var1, var2], [var3, var5], clone=False)

        with pytest.raises(Exception, match="The nodes are .*"):
            fg.apply_nodes.remove(var5.owner)

            fg.check_integrity()

        with pytest.raises(Exception, match="Inconsistent clients.*"):
            fg.apply_nodes.add(var5.owner)
            var2.clients.remove((var5.owner, 1))

            fg.check_integrity()

        var2.clients.append((var5.owner, 1))

        with pytest.raises(Exception, match="The variables are.*"):
            fg.variables.remove(var4)

            fg.check_integrity()

        fg.variables.add(var4)

        with pytest.raises(Exception, match="Undeclared input.*"):
            var6 = MyVariable2("var6")
            var6.fgraph = fg
            var6.clients = [(var5.owner, 3)]
            fg.variables.add(var6)
            var5.owner.inputs.append(var6)

            fg.check_integrity()

        fg.variables.remove(var6)
        var5.owner.inputs.remove(var6)

        # TODO: What if the index value is greater than 1?  It will throw an
        # `IndexError`, but that doesn't sound like anything we'd want.
        with pytest.raises(Exception, match="Inconsistent clients list.*"):
            var4.clients.append(("output", 1))

            fg.check_integrity()

        var4.clients.remove(("output", 1))

        with pytest.raises(Exception, match="Client not in FunctionGraph.*"):
            var4.clients.append((var6.owner, 0))

            fg.check_integrity()

        var4.clients.remove((var6.owner, 0))

        with pytest.raises(Exception, match="Inconsistent clients list.*"):
            var4.clients.append((var3.owner, 0))

            fg.check_integrity()