Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
descriptor_audit_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Partition-descriptor audit surface validation.
3 
4 Emits audit-oriented descriptor records for one continuity case, one microcase,
5 one structured-family case, and one supported legacy exact-lowering case.
6 Validates that the shared descriptor audit surface carries stable provenance
7 and summary metadata across supported workload classes.
8 
9 Run with:
10  python benchmarks/density_matrix/planner_surface/descriptor_audit_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.planner_surface.common import (
25  build_phase2_continuity_vqe,
26  build_software_metadata,
27 )
28 from benchmarks.density_matrix.planner_surface.workloads import (
29  iter_microcase_descriptor_sets,
30  iter_structured_descriptor_sets,
31 )
32 from squander import Circuit
33 from squander.partitioning.noisy_planner import (
34  build_canonical_planner_surface_from_qgd_circuit,
35  build_descriptor_audit_record,
36  build_partition_descriptor_set,
37  build_phase3_continuity_partition_descriptor_set,
38 )
39 
40 SUITE_NAME = "phase3_planner_surface_descriptor_audit"
41 ARTIFACT_FILENAME = "descriptor_audit_bundle.json"
42 DEFAULT_OUTPUT_DIR = (
43  REPO_ROOT
44  / "benchmarks"
45  / "density_matrix"
46  / "artifacts"
47  / "planner_surface"
48  / "descriptor_audit"
49 )
50 ARTIFACT_CORE_FIELDS = (
51  "suite_name",
52  "status",
53  "software",
54  "summary",
55  "cases",
56 )
57 
58 
59 def build_cases() -> list[dict]:
60  continuity_vqe, _, _ = build_phase2_continuity_vqe(4)
61  continuity_audit = build_descriptor_audit_record(
63  metadata={"case_kind": "continuity"},
64  )
65  continuity_audit["case_name"] = continuity_audit["provenance"]["workload_id"]
66 
67  micro_metadata, micro_descriptor_set = next(iter(iter_microcase_descriptor_sets()))
68  micro_audit = build_descriptor_audit_record(
69  micro_descriptor_set, metadata=micro_metadata
70  )
71  micro_audit["case_name"] = micro_audit["provenance"]["workload_id"]
72 
73  structured_metadata, structured_descriptor_set = next(
75  )
76  structured_audit = build_descriptor_audit_record(
77  structured_descriptor_set, metadata=structured_metadata
78  )
79  structured_audit["case_name"] = structured_audit["provenance"]["workload_id"]
80 
81  legacy_circuit = Circuit(2)
82  legacy_circuit.add_U3(0)
83  legacy_circuit.add_CNOT(1, 0)
84  legacy_descriptor_set = build_partition_descriptor_set(
86  legacy_circuit, workload_id="legacy_descriptor_audit"
87  )
88  )
89  legacy_audit = build_descriptor_audit_record(
90  legacy_descriptor_set, metadata={"case_kind": "legacy_exact"}
91  )
92  legacy_audit["case_name"] = legacy_audit["provenance"]["workload_id"]
93 
94  return [continuity_audit, micro_audit, structured_audit, legacy_audit]
95 
96 
97 def build_artifact_bundle(cases: list[dict]) -> dict:
98  summary_key_sets = {frozenset(case["summary"].keys()) for case in cases}
99  partition_key_sets = {
100  frozenset(case["partitions"][0].keys()) for case in cases if case["partitions"]
101  }
102  passed_cases = sum(case["summary"]["partition_count"] > 0 for case in cases)
103  bundle = {
104  "suite_name": SUITE_NAME,
105  "status": "pass"
106  if passed_cases == len(cases)
107  and len(summary_key_sets) == 1
108  and len(partition_key_sets) == 1
109  else "fail",
110  "software": build_software_metadata(),
111  "summary": {
112  "total_cases": len(cases),
113  "passed_cases": passed_cases,
114  "summary_schema_count": len(summary_key_sets),
115  "partition_schema_count": len(partition_key_sets),
116  "continuity_cases": sum(
117  case["metadata"].get("case_kind") == "continuity" for case in cases
118  ),
119  "methods_cases": sum(
120  case["metadata"].get("case_kind") in {"microcase", "structured_family"}
121  for case in cases
122  ),
123  "legacy_cases": sum(
124  case["metadata"].get("case_kind") == "legacy_exact" for case in cases
125  ),
126  },
127  "cases": cases,
128  }
129  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
130  if missing:
131  raise ValueError(
132  "Descriptor audit bundle missing required fields: {}".format(
133  ", ".join(missing)
134  )
135  )
136  return bundle
137 
138 
139 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
140  output_dir.mkdir(parents=True, exist_ok=True)
141  output_path = output_dir / ARTIFACT_FILENAME
142  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
143  return output_path
144 
145 
146 def main(argv: list[str] | None = None) -> int:
147  parser = argparse.ArgumentParser(description=__doc__)
148  parser.add_argument(
149  "--output-dir",
150  type=Path,
151  default=DEFAULT_OUTPUT_DIR,
152  help="Directory to write the descriptor audit bundle into.",
153  )
154  parser.add_argument(
155  "--quiet",
156  action="store_true",
157  help="Suppress per-case console output.",
158  )
159  args = parser.parse_args(argv)
160 
161  cases = build_cases()
162  bundle = build_artifact_bundle(cases)
163  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
164 
165  if not args.quiet:
166  for case in cases:
167  print(
168  "{case_name}: partitions={partition_count}, source_type={source_type}".format(
169  case_name=case["case_name"],
170  partition_count=case["summary"]["partition_count"],
171  source_type=case["provenance"]["source_type"],
172  )
173  )
174  print("Wrote {}".format(output_path))
175 
176  return 0 if bundle["status"] == "pass" else 1
177 
178 
179 if __name__ == "__main__":
180  raise SystemExit(main())
def build_phase2_continuity_vqe
def build_phase3_continuity_partition_descriptor_set
def build_software_metadata()