code: def testBuildGraphFn_ComplexCase(self, raw_inputs, expected):
      # (a + b) * (c + ((++d) * e))
      input_graph = self.parse_input_graph(
          """
        nodes {
          key: "a"
          value {
            input_node {
              input_key: "a"
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "b"
          value {
            input_node {
              input_key: "b"
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "c"
          value {
            input_node {
              input_key: "c"
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "d"
          value {
            input_node {
              input_key: "d"
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "e"
          value {
            input_node {
              input_key: "e"
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "(a + b)"
          value {
            op_node {
              op_type: "Add"
              args {
                node_id: "a"
              }
              args {
                node_id: "b"
              }
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "++d"
          value {
            op_node {
              op_type: "Inc"
              args {
                node_id: "d"
              }
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "(++d * e)"
          value {
            op_node {
              op_type: "Dot"
              args {
                node_id: "++d"
              }
              args {
                node_id: "e"
              }
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "(c + (++d * e))"
          value {
            op_node {
              op_type: "Add"
              args {
                node_id: "c"
              }
              args {
                node_id: "(++d * e)"
              }
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        nodes {
          key: "result"
          value {
            op_node {
              op_type: "Dot"
              args {
                node_id: "(a + b)"
              }
              args {
                node_id: "(c + (++d * e))"
              }
            }
            output_data_type: ARTIFACT_LIST
          }
        }
        result_node: "result"
      """
      )
  
      graph_fn, input_keys = input_graph_resolver.build_graph_fn(
          self._mlmd_handle, input_graph
      )
  
      self.assertCountEqual(input_keys, ["a", "b", "c", "d", "e"])
      inputs = {k: [Integer(v)] for k, v in raw_inputs.items()}
      result = graph_fn(inputs)
      self.assertEqual(result, [Integer(expected)])
  
imports: from unittest import mock
  from absl.testing import parameterized
  import tensorflow
  from tfx.dsl.components.common import resolver
  from tfx.dsl.input_resolution import resolver_op
  from tfx.dsl.input_resolution.ops import ops
  from tfx.orchestration.portable.input_resolution import exceptions
  from tfx.orchestration.portable.input_resolution import input_graph_resolver
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import standard_artifacts
  from google.protobuf import text_format
label_desc: Use image node_id 9 for calling the InputGraphResolverTest obj's underlying member method code with example usage: obj.testBuildGraphFn_ComplexCase(raw_inputs, expected) without return types