docs: def _swap(vas, vas_location, vbs, vbs_location, l2v, vertices_resources,
            placements, machine):
      """Swap the positions of two sets of vertices.
  
      Parameters
      ----------
      vas : [vertex, ...]
          A set of vertices currently at vas_location.
      vas_location : (x, y)
      vbs : [vertex, ...]
          A set of vertices currently at vbs_location.
      vbs_location : (x, y)
      l2v : {(x, y): [vertex, ...], ...}
      vertices_resources : {vertex: {resource: value, ...}, ...}
      placements : {vertex: (x, y), ...}
      machine : :py:class:`rig.place_and_route.Machine`
      """
      # Get the lists of vertices at either location
      vas_location2v = l2v[vas_location]
      vbs_location2v = l2v[vbs_location]
  
      # Get the resource availability at either location
      vas_resources = machine[vas_location]
      vbs_resources = machine[vbs_location]
  
      # Move all the vertices in vas into vbs.
      for va in vas:
          # Update the placements
          placements[va] = vbs_location
  
          # Update the location-to-vertex lookup
          vas_location2v.remove(va)
          vbs_location2v.append(va)
  
          # Update the resource consumption after the move
          resources = vertices_resources[va]
          vas_resources = add_resources(vas_resources, resources)
          vbs_resources = subtract_resources(vbs_resources, resources)
  
      for vb in vbs:
          # Update the placements
          placements[vb] = vas_location
  
          # Update the location-to-vertex lookup
          vbs_location2v.remove(vb)
          vas_location2v.append(vb)
  
          # Update the resource consumption after the move
          resources = vertices_resources[vb]
          vas_resources = subtract_resources(vas_resources, resources)
          vbs_resources = add_resources(vbs_resources, resources)
  
      # Update the resources in the machine
      machine[vas_location] = vas_resources
      machine[vbs_location] = vbs_resources