class_docstr: Remove cond op and it's sub-graphs that produces identity on both then and
  else branch. One example use case is the TensorListReverse op, in Core ML,
  we dynamically resize in write operations, and thus, both branches of the
  cond op will be a skip (identity) op.
  
  Given:
  
      main(%a: (1, bool),
       %b: (2, 3, fp32)) {
        block0() {
          %squeeze_0: (bool) = squeeze(x=%a, name="squeeze_0")
          %cond_0: (2, 3, fp32) = cond(pred=%squeeze_0, name="cond_0")
            cond_0_true() {
              %identity_0: (2, 3, fp32) = identity(x=%b, name="identity_0")
            } -> (%identity_0)
            cond_0_false() {
              %identity_1: (2, 3, fp32) = identity(x=%b, name="identity_1")
            } -> (%identity_1)
        } -> (%cond_0)
      }
  
  Result:
  
      main(%a: (1, bool),
           %b: (2, 3, fp32)) {
        block0() {
          %squeeze_0: (bool) = squeeze(x=%a, name="squeeze_0")
          %cond_0: (2, 3, fp32) = identity(x=%b, name="cond_0")
        } -> (%cond_0)
      }
code: def apply(self, prog):
      for f_name, f in prog.functions.items():
          num_changes = _remove_vacuous_cond_block(f)
          msg = "remove_vacuous_cond: changed {} ops in function '{}'"
          logger.info(msg.format(num_changes, f_name))
  
file_path: coremltools/coremltools/converters/mil/frontend/tensorflow2/ssa_passes/remove_vacuous_cond.py
imports: from coremltools import _logger
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil.passes.graph_pass import AbstractGraphPass
  from coremltools.converters.mil.mil.passes.helper import block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
label_desc: Use image node_id 1 for calling the remove_vacuous_cond obj's underlying member method code with example usage: obj.apply(prog) without return types