Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
runtime_output_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Runtime output validation: exact-output schema and comparison-ready payloads.
3 
4 Emits supported runtime outputs in the shared comparison-ready shape used by
5 later exact-baseline checks. Small cases include the explicit density matrix in
6 the emitted exact-output record; larger cases keep the same schema but omit the
7 full matrix payload.
8 
9 Run with:
10  python benchmarks/density_matrix/partitioned_runtime/runtime_output_validation.py
11 """
12 
13 from __future__ import annotations
14 
15 import argparse
16 import json
17 import sys
18 from pathlib import Path
19 
20 REPO_ROOT = Path(__file__).resolve().parents[3]
21 if str(REPO_ROOT) not in sys.path:
22  sys.path.insert(0, str(REPO_ROOT))
23 
24 from benchmarks.density_matrix.partitioned_runtime.common import (
25  PHASE3_RUNTIME_ENERGY_TOL,
26  build_initial_parameters,
27  density_energy,
28  execute_partitioned_with_reference,
29 )
30 from benchmarks.density_matrix.planner_surface.common import (
31  build_phase2_continuity_vqe,
32  build_software_metadata,
33 )
34 from benchmarks.density_matrix.planner_surface.workloads import (
35  build_microcase_descriptor_set,
36  build_structured_descriptor_set,
37 )
38 from squander.partitioning.noisy_planner import build_phase3_continuity_partition_descriptor_set
39 
40 SUITE_NAME = "phase3_partitioned_runtime_runtime_output"
41 ARTIFACT_FILENAME = "runtime_output_bundle.json"
42 DEFAULT_OUTPUT_DIR = (
43  REPO_ROOT
44  / "benchmarks"
45  / "density_matrix"
46  / "artifacts"
47  / "partitioned_runtime"
48  / "runtime_output"
49 )
50 ARTIFACT_CORE_FIELDS = (
51  "suite_name",
52  "status",
53  "software",
54  "summary",
55  "cases",
56 )
57 
58 
59 def _include_density_matrix(qbit_num: int) -> bool:
60  return qbit_num <= 4
61 
62 
63 def _output_case(
64  *,
65  case_name: str,
66  case_kind: str,
67  descriptor_set,
68  hamiltonian=None,
69  continuity_energy_real: float | None = None,
70 ) -> dict:
71  parameters = build_initial_parameters(descriptor_set.parameter_count)
72  runtime_result, _, _ = execute_partitioned_with_reference(descriptor_set, parameters)
73  runtime_payload = runtime_result.to_dict(
74  include_density_matrix=_include_density_matrix(descriptor_set.qbit_num)
75  )
76  case = {
77  "case_name": case_name,
78  "case_kind": case_kind,
79  "status": "pass",
80  "workload_id": runtime_payload["workload_id"],
81  "qbit_num": runtime_payload["qbit_num"],
82  "runtime_path": runtime_payload["runtime_path"],
83  "exact_output_present": runtime_payload["summary"]["exact_output_present"],
84  "matrix_included": runtime_payload["exact_output"]["matrix_included"],
85  "exact_output": runtime_payload["exact_output"],
86  "result_output_pass": (
87  runtime_payload["summary"]["exact_output_present"] is True
88  and "shape" in runtime_payload["exact_output"]
89  and "trace_real" in runtime_payload["exact_output"]
90  and "trace_imag" in runtime_payload["exact_output"]
91  and "rho_is_valid" in runtime_payload["exact_output"]
92  ),
93  }
94  if hamiltonian is not None:
95  partitioned_energy_real, partitioned_energy_imag = density_energy(
96  hamiltonian, runtime_result.density_matrix_numpy()
97  )
98  case.update(
99  {
100  "partitioned_energy_real": partitioned_energy_real,
101  "partitioned_energy_imag": partitioned_energy_imag,
102  "continuity_energy_real": continuity_energy_real,
103  "absolute_energy_error": float(
104  abs(partitioned_energy_real - continuity_energy_real)
105  ),
106  "continuity_output_pass": (
107  float(abs(partitioned_energy_real - continuity_energy_real))
108  <= PHASE3_RUNTIME_ENERGY_TOL
109  ),
110  }
111  )
112  return case
113 
114 
115 def build_cases() -> list[dict]:
116  continuity_vqe, hamiltonian, _ = build_phase2_continuity_vqe(4)
117  continuity_parameters = build_initial_parameters(continuity_vqe.get_Parameter_Num())
118  continuity_case = _output_case(
119  case_name="phase2_xxz_hea_q4_continuity",
120  case_kind="continuity",
121  descriptor_set=build_phase3_continuity_partition_descriptor_set(continuity_vqe),
122  hamiltonian=hamiltonian,
123  continuity_energy_real=float(continuity_vqe.Optimization_Problem(continuity_parameters)),
124  )
125  microcase_case = _output_case(
126  case_name="microcase_4q_partition_boundary_triplet",
127  case_kind="microcase",
128  descriptor_set=build_microcase_descriptor_set(
129  "microcase_4q_partition_boundary_triplet"
130  ),
131  )
132  structured_case = _output_case(
133  case_name="layered_nearest_neighbor_q8_sparse_seed20260318",
134  case_kind="structured_family",
135  descriptor_set=build_structured_descriptor_set(
136  "layered_nearest_neighbor",
137  qbit_num=8,
138  noise_pattern="sparse",
139  ),
140  )
141  return [continuity_case, microcase_case, structured_case]
142 
143 
144 def build_artifact_bundle(cases: list[dict]) -> dict:
145  output_passes = sum(case["result_output_pass"] for case in cases)
146  continuity_output_passes = sum(
147  case.get("continuity_output_pass", False) for case in cases
148  )
149  exact_output_key_sets = {frozenset(case["exact_output"].keys()) for case in cases}
150  bundle = {
151  "suite_name": SUITE_NAME,
152  "status": "pass"
153  if output_passes == len(cases)
154  and continuity_output_passes == 1
155  and len(exact_output_key_sets) == 1
156  else "fail",
157  "software": build_software_metadata(),
158  "summary": {
159  "total_cases": len(cases),
160  "result_output_passes": output_passes,
161  "continuity_output_passes": continuity_output_passes,
162  "matrix_payload_cases": sum(case["matrix_included"] for case in cases),
163  "exact_output_schema_count": len(exact_output_key_sets),
164  },
165  "cases": cases,
166  }
167  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
168  if missing:
169  raise ValueError(
170  "Runtime output bundle missing required fields: {}".format(
171  ", ".join(missing)
172  )
173  )
174  return bundle
175 
176 
177 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
178  output_dir.mkdir(parents=True, exist_ok=True)
179  output_path = output_dir / ARTIFACT_FILENAME
180  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
181  return output_path
182 
183 
184 def main(argv: list[str] | None = None) -> int:
185  parser = argparse.ArgumentParser(description=__doc__)
186  parser.add_argument(
187  "--output-dir",
188  type=Path,
189  default=DEFAULT_OUTPUT_DIR,
190  help="Directory to write the runtime output bundle into.",
191  )
192  parser.add_argument(
193  "--quiet",
194  action="store_true",
195  help="Suppress per-case console output.",
196  )
197  args = parser.parse_args(argv)
198 
199  cases = build_cases()
200  bundle = build_artifact_bundle(cases)
201  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
202 
203  if not args.quiet:
204  for case in cases:
205  print(
206  "{case_name}: matrix_included={matrix_included}, output_pass={result_output_pass}".format(
207  **case
208  )
209  )
210  print("Wrote {}".format(output_path))
211 
212  return 0 if bundle["status"] == "pass" else 1
213 
214 
215 if __name__ == "__main__":
216  raise SystemExit(main())
def build_phase2_continuity_vqe
def build_phase3_continuity_partition_descriptor_set
def build_software_metadata()
def execute_partitioned_with_reference