docs: def _get_implied_apps(self, detected_apps):
          """
          Get the set of apps implied by `detected_apps`.
          """
          def __get_implied_apps(apps):
              _implied_apps = set()
              for app in apps:
                  try:
                      _implied_apps.update(set(self.apps[app]['implies']))
                  except KeyError:
                      pass
              return _implied_apps
  
          implied_apps = __get_implied_apps(detected_apps)
          all_implied_apps = set()
  
          # Descend recursively until we've found all implied apps
          while not all_implied_apps.issuperset(implied_apps):
              all_implied_apps.update(implied_apps)
              implied_apps = __get_implied_apps(all_implied_apps)
  
          return all_implied_apps