code: func getPodsToPreempt(pod *v1.Pod, pods []*v1.Pod, requirements admissionRequirementList) ([]*v1.Pod, error) {
  	bestEffortPods, burstablePods, guaranteedPods := sortPodsByQOS(pod, pods)
  
  	// make sure that pods exist to reclaim the requirements
  	unableToMeetRequirements := requirements.subtract(append(append(bestEffortPods, burstablePods...), guaranteedPods...)...)
  	if len(unableToMeetRequirements) > 0 {
  		return nil, fmt.Errorf("no set of running pods found to reclaim resources: %v", unableToMeetRequirements.toString())
  	}
  	// find the guaranteed pods we would need to evict if we already evicted ALL burstable and besteffort pods.
  	guarateedToEvict, err := getPodsToPreemptByDistance(guaranteedPods, requirements.subtract(append(bestEffortPods, burstablePods...)...))
  	if err != nil {
  		return nil, err
  	}
  	// Find the burstable pods we would need to evict if we already evicted ALL besteffort pods, and the required guaranteed pods.
  	burstableToEvict, err := getPodsToPreemptByDistance(burstablePods, requirements.subtract(append(bestEffortPods, guarateedToEvict...)...))
  	if err != nil {
  		return nil, err
  	}
  	// Find the besteffort pods we would need to evict if we already evicted the required guaranteed and burstable pods.
  	bestEffortToEvict, err := getPodsToPreemptByDistance(bestEffortPods, requirements.subtract(append(burstableToEvict, guarateedToEvict...)...))
  	if err != nil {
  		return nil, err
  	}
  	return append(append(bestEffortToEvict, burstableToEvict...), guarateedToEvict...), nil
  }
docs: // getPodsToPreempt returns a list of pods that could be preempted to free requests >= requirements