code: def wrap_targets(self, targets, topological_order=False):
      
      def vt_iter():
        if topological_order:
          target_set = set(targets)
          sorted_targets = [t for t in reversed(sort_targets(targets)) if t in target_set]
        else:
          sorted_targets = sorted(targets)
        for target in sorted_targets:
          target_key = self._key_for(target)
          if target_key is not None:
            yield VersionedTarget(self, target, target_key)
      return list(vt_iter())
docs: Wrap targets and their computed cache keys in VersionedTargets.
  
      If the FingerprintStrategy opted out of providing a fingerprint for a target, that target will not
      have an associated VersionedTarget returned.
  
      Returns a list of VersionedTargets, each representing one input target.