code: def _group_installed_names(packages):
      
      groupcoll = GroupCollection(set(), set(), set(), set())
  
      for distro in pkg_resources.working_set:
          name = distro.key
          try:
              package = packages[name]
          except KeyError:
              groupcoll.unneeded.add(name)
              continue
  
          r = requirementslib.Requirement.from_pipfile(name, package)
          if not r.is_named:
              # Always mark non-named. I think pip does something similar?
              groupcoll.outdated.add(name)
          elif not _is_up_to_date(distro, r.get_version()):
              groupcoll.outdated.add(name)
          else:
              groupcoll.uptodate.add(name)
  
      return groupcoll
docs: Group locally installed packages based on given specifications.
  
      `packages` is a name-package mapping that are used as baseline to
      determine how the installed package should be grouped.
  
      Returns a 3-tuple of disjoint sets, all containing names of installed
      packages:
  
      * `uptodate`: These match the specifications.
      * `outdated`: These installations are specified, but don't match the
          specifications in `packages`.
      * `unneeded`: These are installed, but not specified in `packages`.