code: def _find_name_version_sep(egg_info, canonical_name):
      # type: (str, str) -> int
      
      # Project name and version must be separated by one single dash. Find all
      # occurrences of dashes; if the string in front of it matches the canonical
      # name, this is the one separating the name and version parts.
      for i, c in enumerate(egg_info):
          if c != "-":
              continue
          if canonicalize_name(egg_info[:i]) == canonical_name:
              return i
      raise ValueError("{} does not match {}".format(egg_info, canonical_name))
docs: Find the separator's index based on the package's canonical name.
  
      `egg_info` must be an egg info string for the given package, and
      `canonical_name` must be the package's canonical name.
  
      This function is needed since the canonicalized name does not necessarily
      have the same length as the egg info's name part. An example::
  
      >>> egg_info = 'foo__bar-1.0'
      >>> canonical_name = 'foo-bar'
      >>> _find_name_version_sep(egg_info, canonical_name)
      8