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)]
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()