code: def _run(  # type:ignore
      self,
      *args,
      body=None,
      num_scan_inputs=None,
      scan_input_axes=None,
      scan_input_directions=None,
      scan_output_axes=None,
      scan_output_directions=None,
      attributes=None,
  ):
      # TODO: support overridden attributes.
      (
          num_loop_state_vars,
          num_scan_outputs,
          output_directions,
          max_dir_out,
          output_axes,
          max_axe_out,
          state_names_in,
          state_names_out,
          scan_names_in,
          scan_names_out,
          scan_values,
          states,
      ) = self._common_run_shape(*args)
  
      max_iter = args[num_loop_state_vars].shape[self.input_axes_[0]]
      results = [[] for _ in scan_names_out]  # type: ignore
  
      for it in range(max_iter):
          inputs = {}
          for name, value in zip(state_names_in, states):
              inputs[name] = value
          for name, value in zip(scan_names_in, scan_values):
              inputs[name] = value[it]
  
          try:
              outputs_list = self._run_body(inputs)  # type: ignore
          except TypeError as e:
              raise TypeError(
                  f"Unable to call 'run' for type '{type(self.body)}'."  # type: ignore
              ) from e
  
          outputs = dict(zip(self.output_names, outputs_list))
          states = [outputs[name] for name in state_names_out]
          for i, name in enumerate(scan_names_out):
              results[i].append(np.expand_dims(outputs[name], axis=0))
  
      for res in results:
          conc = np.vstack(res)
          states.append(conc)
      return self._check_and_fix_outputs(tuple(states))
  
imports: import numpy
  from onnx.reference.op_run import OpRun
label_desc: Use image node_id 3 for calling the Scan obj's underlying member method code with example usage: obj._run() and returns: self