Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
calibration_bundle_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Validation: Phase 3 planner-calibration integrated bundle (shared artifact).
3 
4 Packages the selected supported claim, comparison baselines, and all calibrated
5 case records into one stable machine-reviewable bundle for later validation,
6 benchmark, and publication consumers.
7 
8 Run with:
9  python benchmarks/density_matrix/planner_calibration/calibration_bundle_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.bundle import (
24  PLANNER_CALIBRATION_CALIBRATION_BUNDLE_SCHEMA_VERSION,
25  build_planner_calibration_calibration_bundle_payload,
26 )
27 from benchmarks.density_matrix.planner_surface.common import build_software_metadata
28 
29 SUITE_NAME = "phase3_planner_calibration_calibration_bundle"
30 ARTIFACT_FILENAME = "calibration_bundle.json"
31 DEFAULT_OUTPUT_DIR = (
32  REPO_ROOT
33  / "benchmarks"
34  / "density_matrix"
35  / "artifacts"
36  / "planner_calibration"
37  / "calibration_bundle"
38 )
39 ARTIFACT_CORE_FIELDS = (
40  "suite_name",
41  "status",
42  "calibration_bundle_schema_version",
43  "software",
44  "summary",
45  "candidate_summaries",
46  "cases",
47 )
48 
49 
50 def build_artifact_bundle() -> dict:
52  bundle = {
53  "suite_name": SUITE_NAME,
54  "status": "pass"
55  if payload["summary"]["supported_claim_cases"] > 0
56  and payload["summary"]["comparison_cases"] > 0
57  and payload["summary"]["counted_calibration_cases"] == payload["summary"]["total_cases"]
58  else "fail",
59  "calibration_bundle_schema_version": PLANNER_CALIBRATION_CALIBRATION_BUNDLE_SCHEMA_VERSION,
60  "software": build_software_metadata(),
61  "summary": payload["summary"],
62  "claim_selection_rule": payload["claim_selection_rule"],
63  "selected_candidate": payload["selected_candidate"],
64  "comparison_candidate_ids": payload["comparison_candidate_ids"],
65  "candidate_summaries": payload["candidate_summaries"],
66  "cases": payload["cases"],
67  }
68  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
69  if missing:
70  raise ValueError(
71  "Integrated calibration bundle missing required fields: {}".format(
72  ", ".join(missing)
73  )
74  )
75  return bundle
76 
77 
78 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
79  output_dir.mkdir(parents=True, exist_ok=True)
80  output_path = output_dir / ARTIFACT_FILENAME
81  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
82  return output_path
83 
84 
85 def main(argv: list[str] | None = None) -> int:
86  parser = argparse.ArgumentParser(description=__doc__)
87  parser.add_argument(
88  "--output-dir",
89  type=Path,
90  default=DEFAULT_OUTPUT_DIR,
91  help="Directory to write the integrated calibration bundle into.",
92  )
93  parser.add_argument(
94  "--quiet",
95  action="store_true",
96  help="Suppress per-case console output.",
97  )
98  args = parser.parse_args(argv)
99 
100  bundle = build_artifact_bundle()
101  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
102 
103  if not args.quiet:
104  print(
105  "selected_candidate={candidate_id}, cases={total_cases}".format(
106  candidate_id=bundle["selected_candidate"]["candidate_id"],
107  total_cases=bundle["summary"]["total_cases"],
108  )
109  )
110  print("Wrote {}".format(output_path))
111 
112  return 0 if bundle["status"] == "pass" else 1
113 
114 
115 if __name__ == "__main__":
116  raise SystemExit(main())
def build_planner_calibration_calibration_bundle_payload()
def build_software_metadata()