Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
legacy_exact_lowering_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Legacy exact lowering validation.
3 
4 Builds representative legacy `qgd_Circuit` inputs and verifies that exact
5 in-bounds cases lower into the canonical planner surface while unsupported gate
6 families and malformed attached noise schedules fail before planner entry.
7 
8 Run with:
9  python benchmarks/density_matrix/planner_surface/legacy_exact_lowering_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 build_software_metadata
24 from squander import Circuit
25 from squander.partitioning.noisy_planner import (
26  build_canonical_planner_surface_from_qgd_circuit,
27  build_planner_audit_record,
28 )
29 
30 SUITE_NAME = "phase3_planner_surface_legacy_exact_lowering"
31 ARTIFACT_FILENAME = "legacy_exact_lowering_bundle.json"
32 DEFAULT_OUTPUT_DIR = (
33  REPO_ROOT / "benchmarks" / "density_matrix" / "artifacts" / "planner_surface"
34 )
35 ARTIFACT_CORE_FIELDS = (
36  "suite_name",
37  "status",
38  "software",
39  "summary",
40  "cases",
41 )
42 
43 
45  circuit = Circuit(2)
46  circuit.add_U3(0)
47  circuit.add_U3(1)
48  circuit.add_CNOT(1, 0)
49  circuit.add_U3(0)
50 
52  circuit,
53  workload_id="legacy_manual_u3_cnot",
54  )
55  record = build_planner_audit_record(surface, metadata={"case_kind": "positive"})
56  record.update({"case_name": surface.workload_id, "status": "pass"})
57  return record
58 
59 
61  circuit = Circuit(2)
62  circuit.add_U3(0)
63  circuit.add_CNOT(1, 0)
64 
66  circuit,
67  workload_id="legacy_manual_with_noise",
68  density_noise=[
69  {
70  "channel": "local_depolarizing",
71  "target": 1,
72  "after_gate_index": 1,
73  "error_rate": 0.1,
74  }
75  ],
76  )
78  surface, metadata={"case_kind": "positive", "has_attached_noise": True}
79  )
80  record.update({"case_name": surface.workload_id, "status": "pass"})
81  return record
82 
83 
85  circuit = Circuit(1)
86  circuit.add_H(0)
87  try:
89  circuit,
90  workload_id="legacy_manual_with_h",
91  )
92  except Exception as err:
93  return {
94  "case_name": "legacy_manual_with_h",
95  "status": "unsupported",
96  "metadata": {"case_kind": "negative"},
97  "error": err.to_dict() if hasattr(err, "to_dict") else {"reason": str(err)},
98  }
99  raise RuntimeError("Unsupported legacy gate case unexpectedly passed")
100 
101 
103  circuit = Circuit(2)
104  circuit.add_U3(0)
105  circuit.add_CNOT(1, 0)
106  try:
108  circuit,
109  workload_id="legacy_manual_bad_noise_index",
110  density_noise=[
111  {
112  "channel": "phase_damping",
113  "target": 0,
114  "after_gate_index": 99,
115  "lambda": 0.07,
116  }
117  ],
118  )
119  except Exception as err:
120  return {
121  "case_name": "legacy_manual_bad_noise_index",
122  "status": "unsupported",
123  "metadata": {"case_kind": "negative"},
124  "error": err.to_dict() if hasattr(err, "to_dict") else {"reason": str(err)},
125  }
126  raise RuntimeError("Invalid legacy noise schedule case unexpectedly passed")
127 
128 
129 def build_cases() -> list[dict]:
130  return [
135  ]
136 
137 
138 def build_artifact_bundle(cases: list[dict]) -> dict:
139  positive_cases = [case for case in cases if case["status"] == "pass"]
140  negative_cases = [case for case in cases if case["status"] == "unsupported"]
141  bundle = {
142  "suite_name": SUITE_NAME,
143  "status": "pass"
144  if len(positive_cases) == 2 and len(negative_cases) == 2
145  else "fail",
146  "software": build_software_metadata(),
147  "summary": {
148  "total_cases": len(cases),
149  "positive_cases": len(positive_cases),
150  "negative_cases": len(negative_cases),
151  },
152  "cases": cases,
153  }
154  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
155  if missing:
156  raise ValueError(
157  "Legacy exact lowering bundle missing required fields: {}".format(
158  ", ".join(missing)
159  )
160  )
161  return bundle
162 
163 
164 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
165  output_dir.mkdir(parents=True, exist_ok=True)
166  output_path = output_dir / ARTIFACT_FILENAME
167  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
168  return output_path
169 
170 
171 def main(argv: list[str] | None = None) -> int:
172  parser = argparse.ArgumentParser(description=__doc__)
173  parser.add_argument(
174  "--output-dir",
175  type=Path,
176  default=DEFAULT_OUTPUT_DIR,
177  help="Directory to write the legacy exact lowering bundle into.",
178  )
179  parser.add_argument(
180  "--quiet",
181  action="store_true",
182  help="Suppress per-case console output.",
183  )
184  args = parser.parse_args(argv)
185 
186  cases = build_cases()
187  bundle = build_artifact_bundle(cases)
188  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
189 
190  if not args.quiet:
191  for case in cases:
192  print("{case_name}: {status}".format(**case))
193  print("Wrote {}".format(output_path))
194 
195  return 0 if bundle["status"] == "pass" else 1
196 
197 
198 if __name__ == "__main__":
199  raise SystemExit(main())
def build_software_metadata()