class_docstr: Execute workflow with ipython
docstr: Executes a pre-defined pipeline is distributed approaches
  based on IPython's ipyparallel processing interface
code: def run(self, graph, config, updatehash=False):
      """Executes a pre-defined pipeline is distributed approaches
      based on IPython's ipyparallel processing interface
      """
      # retrieve clients again
      try:
          name = "ipyparallel"
          __import__(name)
          self.iparallel = sys.modules[name]
      except ImportError as e:
          raise ImportError(
              "ipyparallel not found. Parallel execution will be unavailable"
          ) from e
      try:
          self.taskclient = self.iparallel.Client(**self.client_args)
      except Exception as e:
          if isinstance(e, TimeoutError):
              raise Exception("No IPython clients found.") from e
          if isinstance(e, IOError):
              raise Exception(
                  "ipcluster/ipcontroller has not been started"
              ) from e
          if isinstance(e, ValueError):
              raise Exception("Ipython kernel not installed") from e
          else:
              raise e
      return super().run(graph, config, updatehash=updatehash)
  
file_path: nipype/nipype/pipeline/plugins/ipython.py
imports: from pickle import dumps
  import sys
  from .base import DistributedPluginBase, logger, report_crash
label_desc: Use image node_id 2 for calling the IPythonPlugin obj's underlying member method code with example usage: obj.run(graph, config, updatehash) and returns: super