docstr: outputs: list[Var]
docstr_tok: ["outputs",":","list","[","Var","]"]
code: def set_outputs(self, outputs):
      """
      outputs: list[Var]
      """
      if not isinstance(outputs, list):
          raise ValueError("Outputs must be list of Vars")
  
      self.validate()
      for ov in outputs:
          if not self.is_var_visible_in_block(ov):
              msg = (
                  "Var {} is not visible in block {} and thus cannot "
                  + "be a block output.\n{}"
              )
              raise ValueError(msg.format(ov.name, self.name, self))
  
      # For duplicate vars in self._outputs, only remove block once.
      for ov in set(self._outputs):
          ov.consuming_blocks.remove(self)
  
      # Need to copy, or block's output would be completely tied to a var's
      # output and we cannot replace a block output with another var's
      # output.
      self._outputs = copy.copy(outputs)
      # For duplicate vars in outputs, only add consuming_blocks once.
      for ov in set(outputs):
          ov.consuming_blocks.append(self)
  
imports: import copy
  from collections import Counter, OrderedDict
  from typing import Tuple
  from coremltools import _OPSET
  from coremltools import _logger
  from coremltools.converters.mil._deployment_compatibility import AvailableTarget
  from .None import SPACES, types
  from .operation import Operation
  from .types.symbolic import is_symbolic, k_used_symbols
  from .var import ComplexVar, InternalVar, Var
  from .visitors.dot_visitor import DotVisitor
label_desc: Use image node_id 11 for calling the Block obj's underlying member method code with example usage: obj.set_outputs(outputs) without return types