2 """Validation: Phase 3 planner-calibration workload-matrix surface. 4 Builds the full candidate-by-workload inventory and records stable workload 5 provenance for the mandatory continuity, microcase, and structured workload 9 python benchmarks/density_matrix/planner_calibration/calibration_workload_matrix_validation.py 12 from __future__
import annotations
17 from pathlib
import Path
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))
23 from benchmarks.density_matrix.planner_calibration.common
import (
24 PLANNER_CALIBRATION_CANDIDATE_SCHEMA_VERSION,
25 PLANNER_CALIBRATION_SUPPORTED_CANDIDATE_PARTITION_QUBITS,
27 from benchmarks.density_matrix.planner_calibration.case_selection
import (
28 PLANNER_CALIBRATION_CASE_KIND_CONTINUITY,
29 PLANNER_CALIBRATION_CASE_KIND_MICROCASE,
30 PLANNER_CALIBRATION_CASE_KIND_STRUCTURED,
31 PLANNER_CALIBRATION_CONTINUITY_QUBITS,
32 iter_planner_calibration_candidate_cases,
34 from benchmarks.density_matrix.planner_surface.common
import build_software_metadata
35 from benchmarks.density_matrix.planner_surface.workloads
import (
36 MANDATORY_NOISE_PATTERNS,
37 STRUCTURED_FAMILY_NAMES,
39 mandatory_microcase_definitions,
42 SUITE_NAME =
"phase3_planner_calibration_workload_matrix" 43 ARTIFACT_FILENAME =
"calibration_workload_matrix_bundle.json" 44 DEFAULT_OUTPUT_DIR = (
49 /
"planner_calibration" 50 /
"calibration_workload_matrix" 52 ARTIFACT_CORE_FIELDS = (
55 "candidate_schema_version",
63 payload = descriptor_set.to_dict()
65 "candidate_id": metadata[
"candidate_id"],
66 "planner_family": metadata[
"planner_family"],
67 "planner_variant": metadata[
"planner_variant"],
68 "max_partition_qubits": metadata[
"max_partition_qubits"],
69 "case_kind": metadata[
"case_kind"],
70 "source_type": payload[
"source_type"],
71 "workload_id": payload[
"workload_id"],
72 "qbit_num": payload[
"qbit_num"],
73 "family_name": metadata[
"family_name"],
74 "noise_pattern": metadata[
"noise_pattern"],
75 "seed": metadata[
"seed"],
76 "planning_time_ms": metadata[
"planning_time_ms"],
77 "partition_count": payload[
"partition_count"],
78 "descriptor_member_count": payload[
"descriptor_member_count"],
79 "max_partition_span": payload[
"max_partition_span"],
80 "partition_member_counts": payload[
"partition_member_counts"],
81 "workload_matrix_pass": (
82 metadata[
"max_partition_qubits"]
in PLANNER_CALIBRATION_SUPPORTED_CANDIDATE_PARTITION_QUBITS
83 and payload[
"partition_count"] > 0
84 and payload[
"workload_id"] == metadata[
"workload_id"]
97 candidate_ids = sorted({case[
"candidate_id"]
for case
in cases})
99 case
for case
in cases
if case[
"case_kind"] == PLANNER_CALIBRATION_CASE_KIND_CONTINUITY
101 microcase_cases = [case
for case
in cases
if case[
"case_kind"] == PLANNER_CALIBRATION_CASE_KIND_MICROCASE]
103 case
for case
in cases
if case[
"case_kind"] == PLANNER_CALIBRATION_CASE_KIND_STRUCTURED
105 microcase_workload_ids = {
108 expected_structured_combinations = {
109 (family_name, qbit_num, noise_pattern)
110 for family_name
in STRUCTURED_FAMILY_NAMES
111 for qbit_num
in STRUCTURED_QUBITS
112 for noise_pattern
in MANDATORY_NOISE_PATTERNS
114 observed_structured_combinations = {
115 (case[
"family_name"], case[
"qbit_num"], case[
"noise_pattern"])
116 for case
in structured_cases
118 workload_matrix_passes = sum(case[
"workload_matrix_pass"]
for case
in cases)
120 "suite_name": SUITE_NAME,
122 if workload_matrix_passes == len(cases)
123 and {case[
"qbit_num"]
for case
in continuity_cases} == set(PLANNER_CALIBRATION_CONTINUITY_QUBITS)
124 and {case[
"workload_id"]
for case
in microcase_cases} == microcase_workload_ids
125 and observed_structured_combinations == expected_structured_combinations
127 "candidate_schema_version": PLANNER_CALIBRATION_CANDIDATE_SCHEMA_VERSION,
130 "total_cases": len(cases),
131 "workload_matrix_passes": workload_matrix_passes,
132 "candidate_ids": candidate_ids,
133 "continuity_cases": len(continuity_cases),
134 "microcases": len(microcase_cases),
135 "structured_cases": len(structured_cases),
136 "continuity_qubits": sorted({case[
"qbit_num"]
for case
in continuity_cases}),
137 "microcase_workload_ids": sorted({case[
"workload_id"]
for case
in microcase_cases}),
138 "structured_family_names": sorted(
139 {case[
"family_name"]
for case
in structured_cases}
141 "structured_noise_patterns": sorted(
142 {case[
"noise_pattern"]
for case
in structured_cases}
147 missing = [field
for field
in ARTIFACT_CORE_FIELDS
if field
not in bundle]
150 "Calibration workload-matrix bundle missing required fields: {}".format(
158 output_dir.mkdir(parents=
True, exist_ok=
True)
159 output_path = output_dir / ARTIFACT_FILENAME
160 output_path.write_text(json.dumps(bundle, indent=2, sort_keys=
True) +
"\n")
164 def main(argv: list[str] |
None =
None) -> int:
165 parser = argparse.ArgumentParser(description=__doc__)
169 default=DEFAULT_OUTPUT_DIR,
170 help=
"Directory to write the calibration workload-matrix bundle into.",
175 help=
"Suppress per-case console output.",
177 args = parser.parse_args(argv)
185 "cases={total_cases}, continuity={continuity_cases}, microcases={microcases}, structured={structured_cases}".format(
189 print(
"Wrote {}".format(output_path))
191 return 0
if bundle[
"status"] ==
"pass" else 1
194 if __name__ ==
"__main__":
195 raise SystemExit(
main())
def iter_planner_calibration_candidate_cases
def mandatory_microcase_definitions()
def write_artifact_bundle
def build_artifact_bundle
def build_software_metadata()
def _case_from_descriptor