class_docstr: Concatenates the Tensors passed into it along the channels dimension.
class_docstr_tok: ["Concatenates","the","Tensors","passed","into","it","along","the","channels","dimension","."]
code: def __call__(self, inputs, **kwargs):
      if len(inputs) == 1:
          return inputs
  
      input_shapes = [input_t.shape for input_t in inputs]
      with tf.compat.v1.name_scope("combiner_" + self.name):
          # Fully connected case
          if all(len(shape) <= 2 for shape in input_shapes):
              return [tf.concat(inputs, axis=-1)]
  
          # CNN case
          if all(len(shape) == 4 for shape in input_shapes):
              if "data_format" in kwargs and kwargs[
                  "data_format"
              ].lower() in ["nchw", "channels_first"]:
                  concat_axis = 1
                  patch_axes = [2, 3]
              else:
                  concat_axis = -1
                  patch_axes = [1, 2]
  
              padded_inputs = _pad_to_match(inputs, patch_axes)
              return [tf.concat(padded_inputs, axis=concat_axis)]
  
      raise NotImplementedError(
          "ConcatCombiner does not know how to deal with inputs of these shapes. "
          "Input shapes: {}".format(input_shapes)
      )
  
imports: import abc
  import collections
  import enum
  import time
  from absl import logging
  from model_search import block_builder
  from model_search import utils
  from model_search.architecture import architecture_utils
  from model_search.proto import phoenix_spec_pb2
  import tensorflow.compat.v2
label_desc: Use image node_id 2 for calling the ConcatCombiner obj's underlying member method code with example usage: obj.__call__(inputs) and returns: inputs, list, list