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()
      visible_vars = self._visible_vars_from_enclosing_block()
      _, visible_vars_in_block = self._visible_vars_in_block()
      visible_vars.update(visible_vars_in_block)
      for ov in outputs:
          if ov not in visible_vars:
              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 ov in 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 ov in outputs:
          ov.consuming_blocks.append(self)
  
imports: from collections import Counter, OrderedDict
  import copy
  import logging
  import numpy
  from six import string_types
  from .None import SPACES, types
  from .var import Var, InternalVar, ListVar
  from .visitors.dot_visitor import DotVisitor
  from .types.symbolic import k_used_symbols, k_num_internal_syms, any_symbolic, is_symbolic
  from .input_type import TupleInputType
label_desc: Use image node_id 9 for calling the Block obj's underlying member method code with example usage: obj.set_outputs(outputs) without return types