code: def testTraverserComplexGraph(self):
      a = nodes.apply_operation(
          _Constant, value="a", label="Constant[a]"
      )
      b = nodes.apply_operation(
          _Constant, value="b", label="Constant[b]"
      )
      c = nodes.apply_operation(
          _Constant, value="c", label="Constant[c]"
      )
      b_copy, a_copy = nodes.apply_multi_output_operation(
          _Swap, a, b, label="Swap"
      )
      b_a = nodes.apply_operation(
          _Concat, b_copy, a_copy, label="Concat[0]"
      )
      b_a_c = nodes.apply_operation(_Concat, b_a, c, label="Concat[1]")
  
      mock_visitor = mock.MagicMock()
      mock_visitor.visit.side_effect = [
          ("a",),
          ("b",),
          ("b", "a"),
          ("ba",),
          ("c",),
          ("bac",),
      ]
  
      nodes.Traverser(mock_visitor).visit_value_node(b_a_c)
  
      mock_visitor.assert_has_calls(
          [
              mock.call.visit(_Constant("a", "Constant[a]"), ()),
              mock.call.validate_value("a"),
              mock.call.visit(_Constant("b", "Constant[b]"), ()),
              mock.call.validate_value("b"),
              mock.call.visit(_Swap("Swap"), ("a", "b")),
              mock.call.validate_value("b"),
              mock.call.validate_value("a"),
              mock.call.visit(_Concat("Concat[0]"), ("b", "a")),
              mock.call.validate_value("ba"),
              mock.call.visit(_Constant("c", "Constant[c]"), ()),
              mock.call.validate_value("c"),
              mock.call.visit(_Concat("Concat[1]"), ("ba", "c")),
              mock.call.validate_value("bac"),
          ]
      )
  
imports: import tensorflow
  from tensorflow_transform import nodes
  from tensorflow_transform import test_case
  from tfx_bsl.types import tfx_namedtuple
label_desc: Use image node_id 6 for calling the NodesTest obj's underlying member method code with example usage: obj.testTraverserComplexGraph() without return types