def apply_cacheable_combine_operation(
    combiner: analyzer_nodes.Combiner,
    *tensor_inputs: common_types.TensorType) -> Tuple[nodes.ValueNode, ...]:
  """Applies combine operation nodes over the whole dataset.

  Applied nodes are subject to analyzer cache optimization.

  Args:
    combiner: Combiner to be applied.
    *tensor_inputs: Tensors representing inputs to the combiner.

  Returns:
    A tuple of ValueNodes representing outputs of the combiner.
  """
  input_values_node = analyzer_nodes.get_input_tensors_value_nodes(
      tensor_inputs)

  accumulate_outputs_value_nodes = nodes.apply_multi_output_operation(
      analyzer_nodes.CacheableCombineAccumulate,
      input_values_node,
      combiner=combiner)

  merge_outputs_value_nodes = nodes.apply_multi_output_operation(
      analyzer_nodes.CacheableCombineMerge,
      *accumulate_outputs_value_nodes,
      combiner=combiner)

  return nodes.apply_multi_output_operation(
      analyzer_nodes.ExtractCombineMergeOutputs,
      *merge_outputs_value_nodes,
      output_tensor_info_list=combiner.output_tensor_infos())
Applies combine operation nodes over the whole dataset.

  Applied nodes are subject to analyzer cache optimization.

  Args:
    combiner: Combiner to be applied.
    *tensor_inputs: Tensors representing inputs to the combiner.

  Returns:
    A tuple of ValueNodes representing outputs of the combiner.
  
tensorflow_transform/analyzers.py