Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
calibration_boundary_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Validation: Phase 3 planner-calibration explicit claim-boundary surface.
3 
4 Packages the supported calibration claim together with explicit approximation
5 areas, comparison-baseline visibility, and deferred follow-on branches.
6 
7 Run with:
8  python benchmarks/density_matrix/planner_calibration/calibration_boundary_validation.py
9 """
10 
11 from __future__ import annotations
12 
13 import argparse
14 import json
15 import sys
16 from pathlib import Path
17 
18 REPO_ROOT = Path(__file__).resolve().parents[3]
19 if str(REPO_ROOT) not in sys.path:
20  sys.path.insert(0, str(REPO_ROOT))
21 
22 from benchmarks.density_matrix.planner_calibration.boundary import (
23  PLANNER_CALIBRATION_BOUNDARY_SCHEMA_VERSION,
24  build_planner_calibration_boundary_payload,
25 )
26 from benchmarks.density_matrix.planner_surface.common import build_software_metadata
27 
28 SUITE_NAME = "phase3_planner_calibration_claim_boundary"
29 ARTIFACT_FILENAME = "claim_boundary_bundle.json"
30 DEFAULT_OUTPUT_DIR = (
31  REPO_ROOT
32  / "benchmarks"
33  / "density_matrix"
34  / "artifacts"
35  / "planner_calibration"
36  / "claim_boundary"
37 )
38 ARTIFACT_CORE_FIELDS = (
39  "suite_name",
40  "status",
41  "boundary_schema_version",
42  "software",
43  "summary",
44 )
45 
46 
47 def build_artifact_bundle() -> dict:
49  bundle = {
50  "suite_name": SUITE_NAME,
51  "status": "pass"
52  if payload["summary"]["comparison_baseline_case_count"] > 0
53  and payload["summary"]["approximation_area_count"] > 0
54  and payload["summary"]["deferred_follow_on_branch_count"] > 0
55  else "fail",
56  "boundary_schema_version": PLANNER_CALIBRATION_BOUNDARY_SCHEMA_VERSION,
57  "software": build_software_metadata(),
58  "summary": payload["summary"],
59  "supported_claim": payload["supported_claim"],
60  "comparison_baselines": payload["comparison_baselines"],
61  "comparison_baseline_cases": payload["comparison_baseline_cases"],
62  "diagnosis_only_cases": payload["diagnosis_only_cases"],
63  "approximation_areas": payload["approximation_areas"],
64  "deferred_follow_on_branches": payload["deferred_follow_on_branches"],
65  }
66  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
67  if missing:
68  raise ValueError(
69  "Claim-boundary validation bundle missing required fields: {}".format(
70  ", ".join(missing)
71  )
72  )
73  return bundle
74 
75 
76 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
77  output_dir.mkdir(parents=True, exist_ok=True)
78  output_path = output_dir / ARTIFACT_FILENAME
79  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
80  return output_path
81 
82 
83 def main(argv: list[str] | None = None) -> int:
84  parser = argparse.ArgumentParser(description=__doc__)
85  parser.add_argument(
86  "--output-dir",
87  type=Path,
88  default=DEFAULT_OUTPUT_DIR,
89  help="Directory to write the claim-boundary validation bundle into.",
90  )
91  parser.add_argument(
92  "--quiet",
93  action="store_true",
94  help="Suppress per-case console output.",
95  )
96  args = parser.parse_args(argv)
97 
98  bundle = build_artifact_bundle()
99  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
100 
101  if not args.quiet:
102  print(
103  "selected_candidate={selected_candidate_id}, comparison_cases={comparison_baseline_case_count}, deferred={deferred_follow_on_branch_count}".format(
104  **bundle["summary"]
105  )
106  )
107  print("Wrote {}".format(output_path))
108 
109  return 0 if bundle["status"] == "pass" else 1
110 
111 
112 if __name__ == "__main__":
113  raise SystemExit(main())
def build_software_metadata()
def build_planner_calibration_boundary_payload()
Definition: boundary.py:84