<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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