parameters: (package_set, should_ignore=None)
return_statement: return missing, conflicting
docstring: Check if a package set is consistent
  
      If should_ignore is passed, it should be a callable that takes a
      package name and returns a boolean.
docstring_summary: Check if a package set is consistent
docstring_tokens: Check if a package set is consistent
function: def check_package_set(package_set, should_ignore=None):
      # type: (PackageSet, Optional[Callable[[str], bool]]) -> CheckResult
      """Check if a package set is consistent
  
      If should_ignore is passed, it should be a callable that takes a
      package name and returns a boolean.
      """
      if should_ignore is None:
          def should_ignore(name):
              return False
  
      missing = dict()
      conflicting = dict()
  
      for package_name in package_set:
          # Info about dependencies of package_name
          missing_deps = set()  # type: Set[Missing]
          conflicting_deps = set()  # type: Set[Conflicting]
  
          if should_ignore(package_name):
              continue
  
          for req in package_set[package_name].requires:
              name = canonicalize_name(req.project_name)  # type: str
  
              # Check if it's missing
              if name not in package_set:
                  missed = True
                  if req.marker is not None:
                      missed = req.marker.evaluate()
                  if missed:
                      missing_deps.add((name, req))
                  continue
  
              # Check if there's a conflict
              version = package_set[name].version  # type: str
              if not req.specifier.contains(version, prereleases=True):
                  conflicting_deps.add((name, version, req))
  
          if missing_deps:
              missing[package_name] = sorted(missing_deps, key=str)
          if conflicting_deps:
              conflicting[package_name] = sorted(conflicting_deps, key=str)
  
      return missing, conflicting
function_tokens: def check_package_set ( package_set , should_ignore = None ) : # type: (PackageSet, Optional[Callable[[str], bool]]) -> CheckResult if should_ignore is None : def should_ignore ( name ) : return False missing = dict ( ) conflicting = dict ( ) for package_name in package_set : # Info about dependencies of package_name missing_deps = set ( ) # type: Set[Missing] conflicting_deps = set ( ) # type: Set[Conflicting] if should_ignore ( package_name ) : continue for req in package_set [ package_name ] . requires : name = canonicalize_name ( req . project_name ) # type: str # Check if it's missing if name not in package_set : missed = True if req . marker is not None : missed = req . marker . evaluate ( ) if missed : missing_deps . add ( ( name , req ) ) continue # Check if there's a conflict version = package_set [ name ] . version # type: str if not req . specifier . contains ( version , prereleases = True ) : conflicting_deps . add ( ( name , version , req ) ) if missing_deps : missing [ package_name ] = sorted ( missing_deps , key = str ) if conflicting_deps : conflicting [ package_name ] = sorted ( conflicting_deps , key = str ) return missing , conflicting