Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
sensitivity_matrix_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Sensitivity matrix validation for performance evidence.
3 
4 Records bounded sensitivity across planner-setting identity, noise placement, and
5 workload identity through one machine-reviewable benchmark surface.
6 
7 Run with:
8  python benchmarks/density_matrix/performance_evidence/sensitivity_matrix_validation.py
9 """
10 
11 from __future__ import annotations
12 
13 import sys
14 from collections import defaultdict
15 from pathlib import Path
16 
17 REPO_ROOT = Path(__file__).resolve().parents[3]
18 if str(REPO_ROOT) not in sys.path:
19  sys.path.insert(0, str(REPO_ROOT))
20 
21 from benchmarks.density_matrix.performance_evidence.common import (
22  performance_evidence_output_dir,
23 )
24 from benchmarks.density_matrix.performance_evidence.records import (
25  build_performance_evidence_core_benchmark_records,
26 )
27 from benchmarks.density_matrix.performance_evidence.validation_support import (
28  assemble_record_schema_case_bundle,
29 )
30 from benchmarks.density_matrix.validation_scaffold import (
31  require_bundle_fields,
32  run_case_slice_cli,
33 )
34 
35 SUITE_NAME = "performance_evidence_sensitivity_matrix"
36 ARTIFACT_FILENAME = "sensitivity_matrix_bundle.json"
37 DEFAULT_OUTPUT_DIR = performance_evidence_output_dir("sensitivity_matrix")
38 ARTIFACT_CORE_FIELDS = (
39  "suite_name",
40  "status",
41  "record_schema_version",
42  "software",
43  "selected_candidate",
44  "summary",
45  "cases",
46 )
47 
48 
49 def build_sensitivity_matrix_cases() -> list[dict]:
50  return [
51  case
53  if case["case_kind"] == "structured_family"
54  ]
55 
56 
57 def build_sensitivity_matrix_bundle(cases: list[dict]) -> dict:
58  grouped: dict[str, list[dict]] = defaultdict(list)
59  for case in cases:
60  grouped[case["review_group_id"]].append(case)
61 
62  full_noise_groups = sum(
63  {entry["noise_pattern"] for entry in entries} == {"sparse", "periodic", "dense"}
64  for entries in grouped.values()
65  )
66  full_seed_groups = sum(
67  len({entry["seed"] for entry in entries}) >= 3 for entries in grouped.values()
68  )
69  sensitivity_surface_pass = all(
70  len({entry["seed"] for entry in entries}) >= 3
71  and {entry["noise_pattern"] for entry in entries} == {"sparse", "periodic", "dense"}
72  for entries in grouped.values()
73  )
74  status = "pass" if sensitivity_surface_pass and len(cases) > 0 else "fail"
75  summary = {
76  "total_cases": len(cases),
77  "review_groups": sorted(grouped),
78  "full_noise_groups": full_noise_groups,
79  "full_seed_groups": full_seed_groups,
80  "family_names": sorted({case["family_name"] for case in cases}),
81  "structured_qbits": sorted({case["qbit_num"] for case in cases}),
82  }
83  bundle = assemble_record_schema_case_bundle(SUITE_NAME, status, summary, cases)
84  require_bundle_fields(bundle, ARTIFACT_CORE_FIELDS, "Sensitivity matrix bundle")
85  return bundle
86 
87 
88 def main(argv: list[str] | None = None) -> int:
89  return run_case_slice_cli(
90  argv,
91  build_cases=build_sensitivity_matrix_cases,
92  build_artifact_bundle=build_sensitivity_matrix_bundle,
93  artifact_filename=ARTIFACT_FILENAME,
94  default_output_dir=DEFAULT_OUTPUT_DIR,
95  description=__doc__ or "",
96  output_dir_help="Directory to write the sensitivity matrix bundle into.",
97  quiet_report=lambda b: print(
98  "full_noise_groups={full_noise_groups}, full_seed_groups={full_seed_groups}".format(
99  **b["summary"]
100  )
101  ),
102  )
103 
104 
105 if __name__ == "__main__":
106  raise SystemExit(main())
def build_performance_evidence_core_benchmark_records()