code: 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.get_clients(var1) == [(var3.owner, 0)]
      assert fg.get_clients(var2) == [(var4.owner, 1)]
      assert fg.get_clients(var3) == [("output", 0), (var4.owner, 0)]
      assert fg.get_clients(var4) == [("output", 1)]
  
      varC = MyConstant("varC")
      var5 = op1(var1, varC)
      fg = FunctionGraph(outputs=[var3, var4, var5], clone=False)
      assert fg.inputs == [var1, var2]
  
      memo = {}
      fg = FunctionGraph(outputs=[var3, var4], clone=True, memo=memo)
  
      assert memo[var1].type == var1.type
      assert memo[var1].name == var1.name
      assert memo[var2].type == var2.type
      assert memo[var2].name == var2.name
      assert var3 in memo
      assert var4 in memo
  
imports: import pickle
  import numpy
  import pytest
  from pytensor.configdefaults import config
  from pytensor.graph.basic import NominalVariable
  from pytensor.graph.fg import FunctionGraph
  from pytensor.graph.utils import MissingInputError
  from tests.graph.utils import MyConstant, MyOp, MyType, MyVariable, MyVariable2, op1, op2, op3
label_desc: Use image node_id 3 for calling the TestFunctionGraph obj's underlying member method code with example usage: obj.test_init() without return types