docs: def ExpandGlobs(path, opts = None):
    """Performs glob expansion on a given path.
  
    Path can contain regular glob elements (such as `**`, `*`, `?`, `[a-z]`). For
    example, having files `foo`, `bar`, `baz` glob expansion of `ba?` will yield
    `bar` and `baz`.
  
    Args:
      path: A path to expand.
      opts: A `PathOpts` object.
  
    Returns:
      Generator over all possible glob expansions of a given path.
  
    Raises:
      ValueError: If given path is empty or relative.
    """
    precondition.AssertType(path, Text)
    if not path:
      raise ValueError("Path is empty")
  
    if not _IsAbsolutePath(path, opts):
      raise ValueError("Path '%s' is not absolute" % path)
  
    if opts is not None and opts.pathtype == rdf_paths.PathSpec.PathType.REGISTRY:
      # Handle HKLM\Foo and /HKLM/Foo identically.
      root_dir, tail = path.replace("\\", "/").lstrip("/").split("/", 1)
      components = list(ParsePath(tail, opts=opts))
    else:
      drive, tail = os.path.splitdrive(path)
      root_dir = os.path.join(drive, os.path.sep).upper()
      components = list(ParsePath(tail[1:], opts=opts))
  
    return _ExpandComponents(root_dir, components)