class_docstr: Class representing an IPP cluster
  
  i.e. one controller and one or more groups of engines
  
  Can start/stop/monitor/poll cluster resources
  
  All async methods can be called synchronously with a `_sync` suffix,
  e.g. `cluster.start_cluster_sync()`
  
  .. versionchanged:: 8.0
      controller and engine launcher classes can be specified via
      `Cluster(controller='ssh', engines='mpi')`
      without the `_launcher_class` suffix.
docstr: Load config from our profile
docstr_tok: ["Load","config","from","our","profile"]
code: def _profile_config_default(self):
      """Load config from our profile"""
      if not self.load_profile or not os.path.isdir(self.profile_dir):
          # no profile dir, nothing to load
          return Config()
  
      from .app import BaseParallelApplication, IPClusterStart
  
      # look up if we are descended from an 'ipcluster' app
      # avoids repeated load of the current profile dir
      parents = []
      parent = self.parent
      while parent is not None:
          parents.append(parent)
          parent = parent.parent
  
      app_parents = list(
          filter(
              lambda p: isinstance(p, BaseParallelApplication), parents
          )
      )
      if app_parents:
          app_parent = app_parents[0]
      else:
          app_parent = None
  
      if (
          app_parent
          and app_parent.name == "ipcluster"
          and app_parent.profile_dir.location == self.profile_dir
      ):
          # profile config already loaded by parent, nothing new to load
          return Config()
  
      self.log.debug(f"Loading profile {self.profile_dir}")
      # set profile dir via config
      config = Config()
      config.ProfileDir.location = self.profile_dir
  
      # load profile config via IPCluster
      app = IPClusterStart(config=config, log=self.log)
      # adds profile dir to config_files_path
      app.init_profile_dir()
      # adds system to config_files_path
      app.init_config_files()
      # actually load the config
      app.load_config_file(suppress_errors=False)
      return app.config
  
imports: import asyncio
  import atexit
  import glob
  import inspect
  import json
  import logging
  import os
  import random
  import string
  import sys
  import time
  import traceback
  from functools import partial
  from multiprocessing import cpu_count
  from weakref import WeakSet
  import IPython
  from traitlets import Any, Bool, Dict, Float, Instance, Integer, List, Unicode, default, import_item, validate
  from traitlets.config import Application, Config, LoggingConfigurable
  from .._async import AsyncFirst
  from ..traitlets import Launcher
  from ..util import _all_profile_dirs, _default_profile_dir, _locate_profiles, _traitlet_signature, abbreviate_profile_dir
  from .None import launcher
label_desc: Use image node_id 8 for calling the Cluster obj's underlying member method code with example usage: obj._profile_config_default() and returns: app, Config, Config