code: def testFindInputNodes(self):
      input_x = resolver_op.InputNode(DummyChannel(X))
      input_y = resolver_op.InputNode(DummyChannel(Y))
      input_z = resolver_op.InputNode(DummyChannel(Z))
      input_xz = resolver_op.DictNode({"x": input_x, "z": input_z})
  
      op_x_plus_y = resolver_op.OpNode(
          op_type="add",
          output_data_type=resolver_op.DataType.ARTIFACT_LIST,
          args=(input_x, input_y),
      )
      dict_x_plus_y = resolver_op.DictNode({"x+y": op_x_plus_y})
      result = resolver_op.OpNode(
          op_type="merge",
          output_data_type=resolver_op.DataType.ARTIFACT_MULTIMAP,
          args=(input_xz, dict_x_plus_y),
      )
  
      self.assertCountEqual(
          resolver_op.get_input_nodes(result),
          [input_x, input_y, input_z],
      )
  
imports: import copy
  from typing import Optional, Mapping, Set
  import tensorflow
  from tfx.dsl.input_resolution import resolver_op
  import tfx.types
  from tfx.types import standard_artifacts
label_desc: Use image node_id 4 for calling the NodeTest obj's underlying member method code with example usage: obj.testFindInputNodes() without return types