Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
planner_audit_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Planner audit surface validation.
3 
4 Emits audit-oriented planner records for one continuity-anchor case, one
5 microcase, and one structured-family case. Validates that the shared canonical
6 planner schema carries explicit provenance and qubit-support audit metadata.
7 
8 Run with:
9  python benchmarks/density_matrix/planner_surface/planner_audit_validation.py
10 """
11 
12 from __future__ import annotations
13 
14 import argparse
15 import json
16 import sys
17 from pathlib import Path
18 
19 REPO_ROOT = Path(__file__).resolve().parents[3]
20 if str(REPO_ROOT) not in sys.path:
21  sys.path.insert(0, str(REPO_ROOT))
22 
23 from benchmarks.density_matrix.planner_surface.common import (
24  build_phase2_continuity_vqe,
25  build_software_metadata,
26 )
27 from benchmarks.density_matrix.planner_surface.workloads import (
28  iter_microcase_surfaces,
29  iter_structured_surfaces,
30 )
31 from squander.partitioning.noisy_planner import (
32  build_bridge_overlap_report,
33  build_phase3_continuity_planner_surface,
34  build_planner_audit_record,
35 )
36 
37 SUITE_NAME = "phase3_planner_surface_planner_audit"
38 ARTIFACT_FILENAME = "planner_audit_bundle.json"
39 DEFAULT_OUTPUT_DIR = (
40  REPO_ROOT / "benchmarks" / "density_matrix" / "artifacts" / "planner_surface"
41 )
42 ARTIFACT_CORE_FIELDS = (
43  "suite_name",
44  "status",
45  "software",
46  "summary",
47  "cases",
48 )
49 
50 
51 def build_cases() -> list[dict]:
52  continuity_vqe, _, _ = build_phase2_continuity_vqe(4)
53  continuity_surface = build_phase3_continuity_planner_surface(continuity_vqe)
54  continuity_audit = build_planner_audit_record(
55  continuity_surface, metadata={"case_kind": "continuity"}
56  )
57  continuity_audit.update(
58  build_bridge_overlap_report(continuity_surface, continuity_vqe.describe_density_bridge())
59  )
60  continuity_audit["case_name"] = continuity_surface.workload_id
61 
62  micro_metadata, micro_surface = next(iter(iter_microcase_surfaces()))
63  micro_audit = build_planner_audit_record(micro_surface, metadata=micro_metadata)
64  micro_audit["case_name"] = micro_surface.workload_id
65 
66  structured_metadata, structured_surface = next(iter(iter_structured_surfaces()))
67  structured_audit = build_planner_audit_record(
68  structured_surface, metadata=structured_metadata
69  )
70  structured_audit["case_name"] = structured_surface.workload_id
71 
72  return [continuity_audit, micro_audit, structured_audit]
73 
74 
75 def build_artifact_bundle(cases: list[dict]) -> dict:
76  passed_cases = sum(bool(case["summary"]["operation_count"] > 0) for case in cases)
77  bridge_overlap_passes = sum(case.get("bridge_overlap_pass", True) for case in cases)
78  bundle = {
79  "suite_name": SUITE_NAME,
80  "status": "pass"
81  if passed_cases == len(cases) and bridge_overlap_passes == len(cases)
82  else "fail",
83  "software": build_software_metadata(),
84  "summary": {
85  "total_cases": len(cases),
86  "passed_cases": passed_cases,
87  "bridge_overlap_passes": bridge_overlap_passes,
88  "continuity_cases": sum(
89  case["metadata"].get("case_kind") == "continuity" for case in cases
90  ),
91  "methods_cases": sum(
92  case["metadata"].get("case_kind") != "continuity" for case in cases
93  ),
94  },
95  "cases": cases,
96  }
97  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
98  if missing:
99  raise ValueError(
100  "Planner audit bundle missing required fields: {}".format(", ".join(missing))
101  )
102  return bundle
103 
104 
105 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
106  output_dir.mkdir(parents=True, exist_ok=True)
107  output_path = output_dir / ARTIFACT_FILENAME
108  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
109  return output_path
110 
111 
112 def main(argv: list[str] | None = None) -> int:
113  parser = argparse.ArgumentParser(description=__doc__)
114  parser.add_argument(
115  "--output-dir",
116  type=Path,
117  default=DEFAULT_OUTPUT_DIR,
118  help="Directory to write the planner audit bundle into.",
119  )
120  parser.add_argument(
121  "--quiet",
122  action="store_true",
123  help="Suppress per-case console output.",
124  )
125  args = parser.parse_args(argv)
126 
127  cases = build_cases()
128  bundle = build_artifact_bundle(cases)
129  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
130 
131  if not args.quiet:
132  for case in cases:
133  print(
134  "{case_name}: ops={operation_count}, source_type={source_type}".format(
135  case_name=case["case_name"],
136  operation_count=case["summary"]["operation_count"],
137  source_type=case["provenance"]["source_type"],
138  )
139  )
140  print("Wrote {}".format(output_path))
141 
142  return 0 if bundle["status"] == "pass" else 1
143 
144 
145 if __name__ == "__main__":
146  raise SystemExit(main())
def build_bridge_overlap_report
Build a bridge overlap report from a canonical planner surface and a bridge metadata.
def build_phase2_continuity_vqe
def build_phase3_continuity_planner_surface
Build a canonical planner surface from a Phase 2 continuity VQE instance.
def build_software_metadata()