Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
calibration_correctness_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Validation: Phase 3 planner-calibration correctness-gated surface.
3 
4 Builds the full calibration matrix, applies the internal exactness gate to every
5 candidate-workload case, and applies the external Aer gate on the required
6 microcase and representative small continuity slice.
7 
8 Run with:
9  python benchmarks/density_matrix/planner_calibration/calibration_correctness_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_calibration.calibration_records import (
24  PLANNER_CALIBRATION_CALIBRATION_RECORD_SCHEMA_VERSION,
25  PLANNER_CALIBRATION_REFERENCE_BACKEND,
26  build_planner_calibration_calibration_records,
27 )
28 from benchmarks.density_matrix.planner_surface.common import build_software_metadata
29 
30 SUITE_NAME = "phase3_planner_calibration_correctness_gate"
31 ARTIFACT_FILENAME = "calibration_correctness_bundle.json"
32 DEFAULT_OUTPUT_DIR = (
33  REPO_ROOT
34  / "benchmarks"
35  / "density_matrix"
36  / "artifacts"
37  / "planner_calibration"
38  / "calibration_correctness"
39 )
40 ARTIFACT_CORE_FIELDS = (
41  "suite_name",
42  "status",
43  "record_schema_version",
44  "software",
45  "summary",
46  "cases",
47 )
48 
49 
50 def build_cases() -> list[dict]:
52 
53 
54 def build_artifact_bundle(cases: list[dict]) -> dict:
55  internal_correctness_passes = sum(case["internal_correctness_pass"] for case in cases)
56  external_reference_cases = sum(case["external_reference_required"] for case in cases)
57  external_reference_passes = sum(
58  case["external_reference_required"] and case["external_reference_pass"]
59  for case in cases
60  )
61  counted_calibration_cases = sum(case["counted_calibration_case"] for case in cases)
62  continuity_energy_cases = sum(
63  case["continuity_energy_error"] is not None for case in cases
64  )
65  continuity_energy_passes = sum(
66  (case["continuity_energy_error"] is not None) and case["continuity_energy_pass"]
67  for case in cases
68  )
69  bundle = {
70  "suite_name": SUITE_NAME,
71  "status": "pass"
72  if internal_correctness_passes == len(cases)
73  and external_reference_passes == external_reference_cases
74  and counted_calibration_cases == len(cases)
75  and continuity_energy_passes == continuity_energy_cases
76  else "fail",
77  "record_schema_version": PLANNER_CALIBRATION_CALIBRATION_RECORD_SCHEMA_VERSION,
78  "software": build_software_metadata(),
79  "summary": {
80  "total_cases": len(cases),
81  "internal_correctness_passes": internal_correctness_passes,
82  "external_reference_cases": external_reference_cases,
83  "external_reference_passes": external_reference_passes,
84  "counted_calibration_cases": counted_calibration_cases,
85  "continuity_energy_cases": continuity_energy_cases,
86  "continuity_energy_passes": continuity_energy_passes,
87  "reference_backend": PLANNER_CALIBRATION_REFERENCE_BACKEND,
88  },
89  "cases": cases,
90  }
91  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
92  if missing:
93  raise ValueError(
94  "Calibration correctness bundle missing required fields: {}".format(
95  ", ".join(missing)
96  )
97  )
98  return bundle
99 
100 
101 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
102  output_dir.mkdir(parents=True, exist_ok=True)
103  output_path = output_dir / ARTIFACT_FILENAME
104  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
105  return output_path
106 
107 
108 def main(argv: list[str] | None = None) -> int:
109  parser = argparse.ArgumentParser(description=__doc__)
110  parser.add_argument(
111  "--output-dir",
112  type=Path,
113  default=DEFAULT_OUTPUT_DIR,
114  help="Directory to write the calibration correctness bundle into.",
115  )
116  parser.add_argument(
117  "--quiet",
118  action="store_true",
119  help="Suppress per-case console output.",
120  )
121  args = parser.parse_args(argv)
122 
123  cases = build_cases()
124  bundle = build_artifact_bundle(cases)
125  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
126 
127  if not args.quiet:
128  print(
129  "cases={total_cases}, internal={internal_correctness_passes}, external={external_reference_passes}/{external_reference_cases}, counted={counted_calibration_cases}".format(
130  **bundle["summary"]
131  )
132  )
133  print("Wrote {}".format(output_path))
134 
135  return 0 if bundle["status"] == "pass" else 1
136 
137 
138 if __name__ == "__main__":
139  raise SystemExit(main())
def build_planner_calibration_calibration_records()
def build_software_metadata()