def changed_target_addresses(self):
    # Find changed targets (and maybe their dependees).
    changed = self._find_changed_targets()

    # Remove any that match the exclude_target_regexp list.
    excludes = [re.compile(pattern) for pattern in self._exclude_target_regexp]
    return set([
      t for t in changed if not any(exclude.search(t.spec) is not None for exclude in excludes)
    ])
TODO do we really need data types???
dataset/ETHPy150Open pantsbuild/pants/src/python/pants/task/changed_file_task_mixin.py/ChangeCalculator.changed_target_addresses--crossover with--dataset/ETHPy150Open verbosemode/confplate/confplate/confplate.py/ConfPlate.parse_var_types