<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def check(self, targets, topological_order=False):
 """Checks whether each of the targets has changed and invalidates it if so. Returns a list of VersionedTargetSet objects (either valid or invalid). The returned sets 'cover' the input targets, with one caveat: if the FingerprintStrategy opted out of fingerprinting a target because it doesn't contribute to invalidation, then that target will be excluded from all_vts and invalid_vts. Callers can inspect these vts and rebuild the invalid ones, for example. """

    all_vts = self.wrap_targets(targets, topological_order=topological_order)
    invalid_vts = [vt for vt in all_vts if not vt.valid]
    return InvalidationCheck(all_vts, invalid_vts)