Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
mandatory_workload_descriptor_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Mandatory workload partition-descriptor validation.
3 
4 Builds one continuity-reference descriptor case plus the required 2 to 4 qubit
5 microcases and structured noisy `U3` / `CNOT` workload families, then verifies
6 that all of them emit the same partition-descriptor schema.
7 
8 Run with:
9  python benchmarks/density_matrix/planner_surface/mandatory_workload_descriptor_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.planner_surface.common import (
24  build_phase2_continuity_vqe,
25  build_software_metadata,
26 )
27 from benchmarks.density_matrix.planner_surface.workloads import (
28  MANDATORY_NOISE_PATTERNS,
29  STRUCTURED_FAMILY_NAMES,
30  STRUCTURED_QUBITS,
31  iter_microcase_descriptor_sets,
32  iter_structured_descriptor_sets,
33 )
34 from squander.partitioning.noisy_planner import build_phase3_continuity_partition_descriptor_set
35 
36 SUITE_NAME = "phase3_planner_surface_workload_descriptors"
37 ARTIFACT_FILENAME = "mandatory_workload_descriptor_bundle.json"
38 DEFAULT_OUTPUT_DIR = (
39  REPO_ROOT
40  / "benchmarks"
41  / "density_matrix"
42  / "artifacts"
43  / "planner_surface"
44  / "mandatory_workload"
45 )
46 ARTIFACT_CORE_FIELDS = (
47  "suite_name",
48  "status",
49  "requested_mode",
50  "software",
51  "summary",
52  "cases",
53 )
54 
55 
56 def _descriptor_case(case_kind: str, metadata: dict, descriptor_set) -> dict:
57  payload = descriptor_set.to_dict()
58  return {
59  "case_kind": case_kind,
60  "case_name": payload["workload_id"],
61  "status": "pass",
62  "requested_mode": payload["requested_mode"],
63  "source_type": payload["source_type"],
64  "workload_id": payload["workload_id"],
65  "qbit_num": payload["qbit_num"],
66  "partition_count": payload["partition_count"],
67  "descriptor_member_count": payload["descriptor_member_count"],
68  "gate_count": payload["gate_count"],
69  "noise_count": payload["noise_count"],
70  "max_partition_qubits": payload["max_partition_qubits"],
71  "max_partition_span": payload["max_partition_span"],
72  "partition_member_counts": payload["partition_member_counts"],
73  "descriptor_partitions": payload["partitions"],
74  "metadata": metadata,
75  }
76 
77 
78 def run_validation(verbose: bool = True) -> list[dict]:
79  cases: list[dict] = []
80 
81  continuity_vqe, _, _ = build_phase2_continuity_vqe(4)
82  continuity_descriptor_set = build_phase3_continuity_partition_descriptor_set(
83  continuity_vqe
84  )
85  cases.append(
87  "continuity_reference",
88  {"qbit_num": 4, "workload_id": continuity_descriptor_set.workload_id},
89  continuity_descriptor_set,
90  )
91  )
92 
93  for metadata, descriptor_set in iter_microcase_descriptor_sets():
94  cases.append(_descriptor_case("microcase", metadata, descriptor_set))
95  for metadata, descriptor_set in iter_structured_descriptor_sets():
96  cases.append(_descriptor_case("structured_family", metadata, descriptor_set))
97 
98  if verbose:
99  print("Mandatory workload partition descriptors:")
100  for case in cases:
101  print(
102  " {case_name}: q={qbit_num}, partitions={partition_count}, members={descriptor_member_count}".format(
103  **case
104  )
105  )
106  return cases
107 
108 
109 def build_artifact_bundle(cases: list[dict]) -> dict:
110  payload_key_sets = {frozenset(case.keys()) for case in cases}
111  partition_key_sets = {
112  frozenset(case["descriptor_partitions"][0].keys())
113  for case in cases
114  if case["descriptor_partitions"]
115  }
116  member_key_sets = {
117  frozenset(case["descriptor_partitions"][0]["members"][0].keys())
118  for case in cases
119  if case["descriptor_partitions"] and case["descriptor_partitions"][0]["members"]
120  }
121  passed_cases = sum(case["status"] == "pass" for case in cases)
122  bundle = {
123  "suite_name": SUITE_NAME,
124  "status": "pass"
125  if passed_cases == len(cases)
126  and len(payload_key_sets) == 1
127  and len(partition_key_sets) == 1
128  and len(member_key_sets) == 1
129  else "fail",
130  "requested_mode": "partitioned_density",
131  "software": build_software_metadata(),
132  "summary": {
133  "total_cases": len(cases),
134  "passed_cases": passed_cases,
135  "continuity_reference_count": sum(
136  case["case_kind"] == "continuity_reference" for case in cases
137  ),
138  "microcase_count": sum(case["case_kind"] == "microcase" for case in cases),
139  "structured_family_count": sum(
140  case["case_kind"] == "structured_family" for case in cases
141  ),
142  "required_structured_families": list(STRUCTURED_FAMILY_NAMES),
143  "required_structured_qubits": list(STRUCTURED_QUBITS),
144  "required_noise_patterns": list(MANDATORY_NOISE_PATTERNS),
145  "payload_schema_count": len(payload_key_sets),
146  "partition_schema_count": len(partition_key_sets),
147  "member_schema_count": len(member_key_sets),
148  },
149  "cases": cases,
150  }
151  missing = [field for field in ARTIFACT_CORE_FIELDS if field not in bundle]
152  if missing:
153  raise ValueError(
154  "Mandatory workload descriptor bundle missing required fields: {}".format(
155  ", ".join(missing)
156  )
157  )
158  return bundle
159 
160 
161 def write_artifact_bundle(bundle: dict, output_dir: Path = DEFAULT_OUTPUT_DIR) -> Path:
162  output_dir.mkdir(parents=True, exist_ok=True)
163  output_path = output_dir / ARTIFACT_FILENAME
164  output_path.write_text(json.dumps(bundle, indent=2, sort_keys=True) + "\n")
165  return output_path
166 
167 
168 def main(argv: list[str] | None = None) -> int:
169  parser = argparse.ArgumentParser(description=__doc__)
170  parser.add_argument(
171  "--output-dir",
172  type=Path,
173  default=DEFAULT_OUTPUT_DIR,
174  help="Directory to write the mandatory workload descriptor bundle into.",
175  )
176  parser.add_argument(
177  "--quiet",
178  action="store_true",
179  help="Suppress per-case console output.",
180  )
181  args = parser.parse_args(argv)
182 
183  results = run_validation(verbose=not args.quiet)
184  bundle = build_artifact_bundle(results)
185  output_path = write_artifact_bundle(bundle, output_dir=args.output_dir)
186 
187  if not args.quiet:
188  print("Wrote {}".format(output_path))
189 
190  return 0 if bundle["status"] == "pass" else 1
191 
192 
193 if __name__ == "__main__":
194  raise SystemExit(main())
def build_phase2_continuity_vqe
def build_phase3_continuity_partition_descriptor_set
def build_software_metadata()