code: def schedule_reduce(outs):
      """X86 schedule for reduction op.
  
      Parameters
      ----------
      outs: Array of Tensor
            The computation graph description of injective in the format
            of an array of tensors.
  
      Returns
      -------
      sch: Schedule
          The computation schedule for the op.
      """
      outs = [outs] if isinstance(outs, te.tensor.Tensor) else outs
      sch = te.create_schedule([x.op for x in outs])
      scheduled_ops = []
  
      def traverse_before_reduce(operator):
          """Internal traverse function"""
          if isinstance(operator, tvm.te.PlaceholderOp):
              return
          if tag.is_injective(operator.tag):
              sch[operator].compute_inline()
              for tensor in operator.input_tensors:
                  if tensor.op not in scheduled_ops:
                      traverse_before_reduce(tensor.op)
          else:
              raise RuntimeError(
                  f"Unsupported operator: {operator.tag}"
              )
  
          scheduled_ops.append(operator)
  
      def traverse_after_reduce(operator):
          """Internal traverse function"""
          if tag.is_broadcast(operator.tag):
              if operator not in scheduled_ops:
                  schedule_injective_from_existing(sch, operator)
              for tensor in operator.input_tensors:
                  traverse_after_reduce(tensor.op)
          elif operator.tag == "comm_reduce":
              _schedule_reduce(sch, operator, is_idx_reduce=False)
              for tensor in operator.input_tensors:
                  if tensor.op not in scheduled_ops:
                      traverse_before_reduce(tensor.op)
          elif operator.tag == "comm_reduce_idx":
              _schedule_reduce(sch, operator, is_idx_reduce=True)
              input_tensors = operator.input_tensors[0].op.input_tensors
              for tensor in input_tensors:
                  if tensor.op not in scheduled_ops:
                      traverse_before_reduce(tensor.op)
          elif isinstance(operator, tvm.te.PlaceholderOp):
              pass
          else:
              raise RuntimeError(
                  f"Unsupported operator: {operator} (tag: {operator.tag})"
              )
  
          scheduled_ops.append(operator)
  
      traverse_after_reduce(outs[0].op)
      return sch
  
imports: import tvm
  from tvm import te
  from .injective import schedule_injective_from_existing
  from ..None import tag
  from ..utils import get_const_tuple
label_desc: Use image node_id 2 for calling a global function with example usage: schedule_reduce(outs) and returns: sch