docs: def SearchDependencies(self,
                           os_name,
                           artifact_name_list,
                           existing_artifact_deps=None,
                           existing_expansion_deps=None):
      """Return a set of artifact names needed to fulfill dependencies.
  
      Search the path dependency tree for all artifacts that can fulfill
      dependencies of artifact_name_list.  If multiple artifacts provide a
      dependency, they are all included.
  
      Args:
        os_name: operating system string
        artifact_name_list: list of artifact names to find dependencies for.
        existing_artifact_deps: existing dependencies to add to, for recursion,
          e.g. set(["WindowsRegistryProfiles", "WindowsEnvironmentVariablePath"])
        existing_expansion_deps: existing expansion dependencies to add to, for
          recursion, e.g. set(["users.userprofile", "users.homedir"])
  
      Returns:
        (artifact_names, expansion_names): a tuple of sets, one with artifact
            names, the other expansion names
      """
      artifact_deps = existing_artifact_deps or set()
      expansion_deps = existing_expansion_deps or set()
  
      artifact_objs = self.GetArtifacts(
          os_name=os_name, name_list=artifact_name_list)
      artifact_deps = artifact_deps.union([a.name for a in artifact_objs])
  
      for artifact in artifact_objs:
        expansions = GetArtifactPathDependencies(artifact)
        if expansions:
          expansion_deps = expansion_deps.union(set(expansions))
          # Get the names of the artifacts that provide those expansions
          new_artifact_names = self.GetArtifactNames(
              os_name=os_name, provides=expansions)
          missing_artifacts = new_artifact_names - artifact_deps
  
          if missing_artifacts:
            # Add those artifacts and any child dependencies
            new_artifacts, new_expansions = self.SearchDependencies(
                os_name,
                new_artifact_names,
                existing_artifact_deps=artifact_deps,
                existing_expansion_deps=expansion_deps)
            artifact_deps = artifact_deps.union(new_artifacts)
            expansion_deps = expansion_deps.union(new_expansions)
  
      return artifact_deps, expansion_deps