code: def _callback(self, job_info: SubmittedJobInfo, future):
      try:
          ex = future.exception()
          if ex is not None:
              raise ex
          self.report_job_success(job_info)
      except _ProcessPoolExceptions:
          self.handle_job_error(job_info.job)
          # no error callback, just silently ignore the interrupt as the main scheduler is also killed
      except SpawnedJobError:
          # don't print error message, this is done by the spawned subprocess
          self.report_job_error(job_info)
      except Exception as ex:
          if self.workflow.output_settings.verbose or (
              not job_info.job.is_group() and not job_info.job.is_shell
          ):
              print_exception(ex, self.workflow.linemaps)
          self.report_job_error(job_info)
  
imports: import os
  from pathlib import Path
  import sys
  import time
  import shlex
  import concurrent.futures
  import subprocess
  from functools import partial
  from snakemake.common import async_run
  from snakemake.executors import change_working_directory
  from snakemake.settings import DeploymentMethod
  from snakemake_interface_executor_plugins.executors.base import SubmittedJobInfo
  from snakemake_interface_executor_plugins.executors.real import RealExecutor
  from snakemake_interface_executor_plugins.dag import DAGExecutorInterface
  from snakemake_interface_executor_plugins.workflow import WorkflowExecutorInterface
  from snakemake_interface_executor_plugins.logging import LoggerExecutorInterface
  from snakemake_interface_executor_plugins.jobs import JobExecutorInterface, SingleJobExecutorInterface, GroupJobExecutorInterface
  from snakemake_interface_executor_plugins.settings import ExecMode, CommonSettings
  from snakemake.shell import shell
  from snakemake.logging import logger
  from snakemake.exceptions import print_exception, get_exception_origin
  from snakemake.exceptions import format_error, RuleException, log_verbose_traceback
  from snakemake.exceptions import WorkflowError, SpawnedJobError, CacheMissException
label_desc: Use image node_id 16 for calling the Executor obj's underlying member method code with example usage: obj._callback(job_info, future) without return types