Spaces:
Running
Running
| """Sanity-check the synthetic mutator by running it across many seeds | |
| and confirming each produced ground-truth change can be re-detected | |
| by the DiffSpecialist.""" | |
| import random | |
| import sys | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[1] | |
| sys.path.insert(0, str(ROOT)) | |
| from scenarios.layer2_synthetic.mutator import synth_mutate | |
| from scenarios.library import REAL_SCENARIOS | |
| from server.specialists.diff_specialist import DiffSpecialist | |
| def main(): | |
| differ = DiffSpecialist() | |
| base = REAL_SCENARIOS["stripe_v18_invoice_field_rename"]() | |
| n = 200 | |
| matched = 0 | |
| total = 0 | |
| for s in range(n): | |
| rng = random.Random(s) | |
| v2, gt = synth_mutate(base.v1_spec, rng, "medium") | |
| if not gt: | |
| continue | |
| detected = differ.diff(base.v1_spec, v2) | |
| gt_locations = {(g["location"], g["change_type"]) for g in gt} | |
| det_locations = {(d.location, d.change_type) for d in detected} | |
| matched += len(gt_locations & det_locations) | |
| total += len(gt_locations) | |
| rate = matched / total if total else 0.0 | |
| print(f"Mutator-vs-DiffSpecialist agreement: {matched}/{total} ({rate:.2%})") | |
| if __name__ == "__main__": | |
| main() | |