Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
continuity_runtime_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Continuity runtime validation for Phase 3 partitioned density execution.
3 
4 Builds the required 4-, 6-, 8-, and 10-qubit Phase 2 continuity-anchor workloads
5 and verifies that each executes through the baseline partitioned density runtime
6 path using validated planner-surface descriptors.
7 
8 Run with:
9  python benchmarks/density_matrix/partitioned_runtime/continuity_runtime_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.partitioned_runtime.common import (
24  PHASE3_RUNTIME_DENSITY_TOL,
25  PHASE3_RUNTIME_ENERGY_TOL,
26  build_density_comparison_metrics,
27  build_initial_parameters,
28  density_energy,
29  execute_partitioned_with_reference,
30 )
31 from benchmarks.density_matrix.planner_surface.common import (
32  build_case_metadata,
33  build_phase2_continuity_vqe,
34  build_software_metadata,
35 )
36 from squander.partitioning.noisy_planner import (
37  PARTITIONED_DENSITY_MODE,
38  build_phase3_continuity_partition_descriptor_set,
39 )
40 from squander.partitioning.noisy_runtime import PHASE3_RUNTIME_PATH_BASELINE
41 
42 SUITE_NAME = "phase3_partitioned_runtime_continuity_runtime"
43 ARTIFACT_FILENAME = "continuity_runtime_bundle.json"
44 DEFAULT_OUTPUT_DIR = (
45  REPO_ROOT
46  / "benchmarks"
47  / "density_matrix"
48  / "artifacts"
49  / "partitioned_runtime"
50  / "continuity_runtime"
51 )
52 REQUIRED_QUBITS = (4, 6, 8, 10)
53 ARTIFACT_CORE_FIELDS = (
54  "suite_name",
55  "status",
56  "software",
57  "summary",
58  "cases",
59 )
60 
61 
62 def build_case_result(qbit_num: int) -> dict:
63  vqe, hamiltonian, topology = build_phase2_continuity_vqe(qbit_num)
65  parameters = build_initial_parameters(vqe.get_Parameter_Num())
66  runtime_result, reference_density, density_metrics = execute_partitioned_with_reference(
67  descriptor_set, parameters
68  )
69  runtime_payload = runtime_result.to_dict(include_density_matrix=False)
70  partitioned_energy_real, partitioned_energy_imag = density_energy(
71  hamiltonian, runtime_result.density_matrix_numpy()
72  )
73  reference_energy_real, reference_energy_imag = density_energy(
74  hamiltonian, reference_density.to_numpy()
75  )
76  continuity_energy = float(vqe.Optimization_Problem(parameters))
77  absolute_energy_error = float(abs(partitioned_energy_real - continuity_energy))
78  energy_pass = absolute_energy_error <= PHASE3_RUNTIME_ENERGY_TOL
79  density_pass = (
80  density_metrics["frobenius_norm_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
81  and density_metrics["max_abs_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
82  )
83  case = build_case_metadata(
84  qbit_num=qbit_num,
85  topology=topology,
86  density_noise=[dict(item) for item in vqe.density_noise],
87  )
88  case.update(
89  {
90  "case_name": f"phase2_xxz_hea_q{qbit_num}_continuity",
91  "case_kind": "phase3_partitioned_runtime_continuity_runtime",
92  "status": "pass" if energy_pass and density_pass and runtime_result.rho_is_valid else "fail",
93  "requested_mode": runtime_payload["requested_mode"],
94  "source_type": runtime_payload["source_type"],
95  "workload_id": runtime_payload["workload_id"],
96  "parameter_count": runtime_payload["parameter_count"],
97  "runtime_path": runtime_payload["runtime_path"],
98  "partition_count": runtime_payload["summary"]["partition_count"],
99  "descriptor_member_count": runtime_payload["summary"]["descriptor_member_count"],
100  "gate_count": runtime_payload["summary"]["gate_count"],
101  "noise_count": runtime_payload["summary"]["noise_count"],
102  "max_partition_span": runtime_payload["summary"]["max_partition_span"],
103  "partition_member_counts": runtime_payload["summary"]["partition_member_counts"],
104  "remapped_partition_count": runtime_payload["summary"]["remapped_partition_count"],
105  "parameter_routing_segment_count": runtime_payload["summary"][
106  "parameter_routing_segment_count"
107  ],
108  "exact_output_present": runtime_payload["summary"]["exact_output_present"],
109  "rho_is_valid": runtime_payload["summary"]["rho_is_valid"],
110  "trace_deviation": runtime_payload["summary"]["trace_deviation"],
111  "partitioned_energy_real": partitioned_energy_real,
112  "partitioned_energy_imag": partitioned_energy_imag,
113  "reference_energy_real": reference_energy_real,
114  "reference_energy_imag": reference_energy_imag,
115  "continuity_energy_real": continuity_energy,
116  "absolute_energy_error": absolute_energy_error,
117  "energy_pass": energy_pass,
118  "frobenius_norm_diff": density_metrics["frobenius_norm_diff"],
119  "max_abs_diff": density_metrics["max_abs_diff"],
120  "density_pass": density_pass,
121  "runtime_ms": runtime_payload["summary"]["runtime_ms"],
122  "peak_rss_kb": runtime_payload["summary"]["peak_rss_kb"],
123  "runtime_partitions": runtime_payload["partitions"],
124  "continuity_runtime_pass": (
125  runtime_payload["requested_mode"] == PARTITIONED_DENSITY_MODE
126  and runtime_payload["runtime_path"] == PHASE3_RUNTIME_PATH_BASELINE
127  and runtime_payload["summary"]["partition_count"] > 0
128  and runtime_payload["summary"]["exact_output_present"] is True
129  and energy_pass
130  and density_pass
131  ),
132  }
133  )
134  return case
135 
136 
137 def build_artifact_bundle(cases: list[dict]) -> dict:
138  passed_cases = sum(case["status"] == "pass" for case in cases)
139  continuity_runtime_passes = sum(case["continuity_runtime_pass"] for case in cases)
140  bundle = {
141  "suite_name": SUITE_NAME,
142  "status": "pass"
143  if passed_cases == len(cases) and continuity_runtime_passes == len(cases)
144  else "fail",
145  "software": build_software_metadata(),
146  "summary": {
147  "total_cases": len(cases),
148  "passed_cases": passed_cases,
149  "continuity_runtime_passes": continuity_runtime_passes,
150  "required_qubits": list(REQUIRED_QUBITS),
151  "required_pass_rate": 1.0,
152  "actual_pass_rate": passed_cases / len(cases) if cases else 0.0,
153  },
154  "cases": cases,
155  }
156  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
157  if missing:
158  raise ValueError(
159  "Continuity runtime bundle missing required fields: {}".format(
160  ", ".join(missing)
161  )
162  )
163  return bundle
164 
165 
166 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
167  output_dir.mkdir(parents=True, exist_ok=True)
168  output_path = output_dir / ARTIFACT_FILENAME
169  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
170  return output_path
171 
172 
173 def run_validation(verbose: bool = True) -> list[dict]:
174  results = [build_case_result(qbit_num) for qbit_num in REQUIRED_QUBITS]
175  if verbose:
176  print("Continuity partitioned runtime:")
177  for case in results:
178  print(
179  " q={qbit_num}: partitions={partition_count}, runtime_path={runtime_path}, dE={absolute_energy_error:.3e}, dRho={frobenius_norm_diff:.3e}, pass={continuity_runtime_pass}".format(
180  **case
181  )
182  )
183  return results
184 
185 
186 def main(argv: list[str] | None = None) -> int:
187  parser = argparse.ArgumentParser(description=__doc__)
188  parser.add_argument(
189  "--output-dir",
190  type=Path,
191  default=DEFAULT_OUTPUT_DIR,
192  help="Directory to write the continuity runtime bundle into.",
193  )
194  parser.add_argument(
195  "--quiet",
196  action="store_true",
197  help="Suppress per-case console output.",
198  )
199  args = parser.parse_args(argv)
200 
201  results = run_validation(verbose=not args.quiet)
202  bundle = build_artifact_bundle(results)
203  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
204 
205  if not args.quiet:
206  print("Wrote {}".format(output_path))
207 
208  return 0 if bundle["status"] == "pass" else 1
209 
210 
211 if __name__ == "__main__":
212  raise SystemExit(main())
def build_phase2_continuity_vqe
def build_phase3_continuity_partition_descriptor_set
def build_software_metadata()
def execute_partitioned_with_reference