Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
fused_semantics_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Fused semantics validation: fused runtime vs sequential reference exactness.
3 
4 Checks representative fused cases against the sequential density reference using
5 the frozen exactness thresholds.
6 
7 Run with:
8  python benchmarks/density_matrix/partitioned_runtime/fused_semantics_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.partitioned_runtime.common import (
23  PHASE3_RUNTIME_DENSITY_TOL,
24  execute_fused_with_reference,
25 )
26 from benchmarks.density_matrix.partitioned_runtime.fusion_case_selection import (
27  iter_fusion_microcase_cases,
28  iter_fusion_structured_cases,
29 )
30 from benchmarks.density_matrix.planner_surface.common import build_software_metadata
31 
32 SUITE_NAME = "phase3_partitioned_runtime_fused_semantics"
33 ARTIFACT_FILENAME = "fused_semantics_bundle.json"
34 DEFAULT_OUTPUT_DIR = (
35  REPO_ROOT
36  / "benchmarks"
37  / "density_matrix"
38  / "artifacts"
39  / "partitioned_runtime"
40  / "fused_semantics"
41 )
42 ARTIFACT_CORE_FIELDS = (
43  "suite_name",
44  "status",
45  "software",
46  "summary",
47  "cases",
48 )
49 
50 
51 def _semantics_case(metadata: dict, descriptor_set, parameters) -> dict:
52  runtime_result, _, density_metrics = execute_fused_with_reference(
53  descriptor_set, parameters
54  )
55  payload = runtime_result.to_dict(include_density_matrix=False)
56  return {
57  "case_name": metadata["workload_id"],
58  "case_kind": metadata["case_kind"],
59  "qbit_num": metadata["qbit_num"],
60  "runtime_path": payload["runtime_path"],
61  "actual_fused_execution": payload["summary"]["actual_fused_execution"],
62  "fused_region_count": payload["summary"]["fused_region_count"],
63  "supported_unfused_region_count": payload["summary"][
64  "supported_unfused_region_count"
65  ],
66  "deferred_region_count": payload["summary"]["deferred_region_count"],
67  "frobenius_norm_diff": density_metrics["frobenius_norm_diff"],
68  "max_abs_diff": density_metrics["max_abs_diff"],
69  "rho_is_valid": payload["summary"]["rho_is_valid"],
70  "trace_deviation": payload["summary"]["trace_deviation"],
71  "fused_semantics_pass": (
72  payload["summary"]["actual_fused_execution"] is True
73  and density_metrics["frobenius_norm_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
74  and density_metrics["max_abs_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
75  and payload["summary"]["rho_is_valid"] is True
76  ),
77  "metadata": dict(metadata),
78  }
79 
80 
81 def build_cases() -> list[dict]:
82  selected_structured: dict[int, dict] = {}
83  optional_microcase: dict | None = None
84  for metadata, descriptor_set, parameters in iter_fusion_structured_cases():
85  if metadata["qbit_num"] in selected_structured:
86  continue
87  case = _semantics_case(metadata, descriptor_set, parameters)
88  if case["fused_semantics_pass"]:
89  selected_structured[metadata["qbit_num"]] = case
90  if set(selected_structured) == {8, 10}:
91  break
92  if set(selected_structured) != {8, 10}:
93  raise RuntimeError("Missing representative structured fused semantics cases")
94  for metadata, descriptor_set, parameters in iter_fusion_microcase_cases():
95  case = _semantics_case(metadata, descriptor_set, parameters)
96  if case["fused_semantics_pass"]:
97  optional_microcase = case
98  break
99  cases = [selected_structured[8], selected_structured[10]]
100  if optional_microcase is not None:
101  cases.append(optional_microcase)
102  return cases
103 
104 
105 def build_artifact_bundle(cases: list[dict]) -> dict:
106  passes = sum(case["fused_semantics_pass"] for case in cases)
107  bundle = {
108  "suite_name": SUITE_NAME,
109  "status": "pass" if passes == len(cases) and len(cases) >= 2 else "fail",
110  "software": build_software_metadata(),
111  "summary": {
112  "total_cases": len(cases),
113  "fused_semantics_passes": passes,
114  "required_structured_cases": 2,
115  "optional_microcase_cases": sum(
116  case["case_kind"] == "microcase" for case in cases
117  ),
118  },
119  "cases": cases,
120  }
121  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
122  if missing:
123  raise ValueError(
124  "Fused semantics bundle missing required fields: {}".format(
125  ", ".join(missing)
126  )
127  )
128  return bundle
129 
130 
131 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
132  output_dir.mkdir(parents=True, exist_ok=True)
133  output_path = output_dir / ARTIFACT_FILENAME
134  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
135  return output_path
136 
137 
138 def main(argv: list[str] | None = None) -> int:
139  parser = argparse.ArgumentParser(description=__doc__)
140  parser.add_argument(
141  "--output-dir",
142  type=Path,
143  default=DEFAULT_OUTPUT_DIR,
144  help="Directory to write the fused semantics bundle into.",
145  )
146  parser.add_argument(
147  "--quiet",
148  action="store_true",
149  help="Suppress per-case console output.",
150  )
151  args = parser.parse_args(argv)
152 
153  cases = build_cases()
154  bundle = build_artifact_bundle(cases)
155  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
156 
157  if not args.quiet:
158  for case in cases:
159  print(
160  "{case_name}: fused={actual_fused_execution}, dRho={frobenius_norm_diff:.3e}, pass={fused_semantics_pass}".format(
161  **case
162  )
163  )
164  print("Wrote {}".format(output_path))
165 
166  return 0 if bundle["status"] == "pass" else 1
167 
168 
169 if __name__ == "__main__":
170  raise SystemExit(main())
def build_software_metadata()