code: def reduce(
      fn,
      sequences,
      outputs_info,
      non_sequences=None,
      go_backwards=False,
      mode=None,
      name=None,
  ):
      """Construct a `Scan` `Op` that functions like `reduce`.
  
      Parameters
      ----------
      fn
          The function that ``reduce`` applies at each iteration step
          (see ``scan``  for more info).
      sequences
          List of sequences over which ``reduce`` iterates
          (see ``scan`` for more info).
      outputs_info
          List of dictionaries describing the outputs of
          reduce (see ``scan`` for more info).
      non_sequences
          List of arguments passed to ``fn``. ``reduce`` will
                            not iterate over these arguments (see ``scan`` for
                            more info).
      go_backwards : bool
          Decides the direction of iteration. True means that sequences are parsed
          from the end towards the beginning, while False is the other way around.
      mode
          See ``scan``.
      name
          See ``scan``.
  
      """
      rval = scan(
          fn=fn,
          sequences=sequences,
          outputs_info=outputs_info,
          non_sequences=non_sequences,
          go_backwards=go_backwards,
          truncate_gradient=-1,
          mode=mode,
          name=name,
      )
      if isinstance(rval[0], (list, tuple)):
          return [x[-1] for x in rval[0]], rval[1]
      else:
          return rval[0][-1], rval[1]
  
imports: import logging
  from pytensor.scan import scan
label_desc: Use image node_id 2 for calling a global function with example usage: reduce(fn, sequences, outputs_info, non_sequences, go_backwards, mode, name) and returns: unknown,  rval, rval,  rval