Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
correctness_evidence/summary_consistency_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """Summary consistency validation for the correctness-evidence package.
3 
4 Interprets the shared correctness package bundle and verifies that downstream
5 rollups and closure flags stay consistent with the underlying per-case evidence.
6 
7 Run with:
8  python benchmarks/density_matrix/correctness_evidence/summary_consistency_validation.py
9 """
10 
11 from __future__ import annotations
12 
13 import argparse
14 from pathlib import Path
15 
16 from benchmarks.density_matrix.correctness_evidence.correctness_bundle_validation import (
17  build_artifact_bundle as build_correctness_package_bundle,
18 )
19 from benchmarks.density_matrix.correctness_evidence.common import (
20  CORRECTNESS_EVIDENCE_SUMMARY_SCHEMA_VERSION,
21  build_correctness_evidence_software_metadata,
22  correctness_evidence_output_dir,
23  write_artifact_bundle,
24 )
25 from benchmarks.density_matrix.correctness_evidence.records import (
26  correctness_evidence_counted_supported_case,
27 )
28 from benchmarks.density_matrix.validation_scaffold import require_bundle_fields
29 
30 SUITE_NAME = "correctness_evidence_summary_consistency"
31 ARTIFACT_FILENAME = "summary_consistency_bundle.json"
32 DEFAULT_OUTPUT_DIR = correctness_evidence_output_dir("summary_consistency")
33 ARTIFACT_CORE_FIELDS = (
34  "suite_name",
35  "status",
36  "schema_version",
37  "software",
38  "selected_candidate",
39  "requirements",
40  "summary",
41  "required_artifacts",
42 )
43 
44 
45 def build_artifact_bundle() -> dict:
46  correctness_package = build_correctness_package_bundle()
47  cases = correctness_package["cases"]
48  negative_cases = correctness_package["negative_cases"]
49  counted_supported_cases = sum(correctness_evidence_counted_supported_case(case) for case in cases)
50  summary_consistency_pass = (
51  correctness_package["summary"]["total_cases"] == len(cases)
52  and correctness_package["summary"]["counted_supported_cases"] == counted_supported_cases
53  and correctness_package["summary"]["unsupported_boundary_cases"] == len(negative_cases)
54  )
55  main_correctness_claim_completed = (
56  counted_supported_cases == len(cases)
57  and len(negative_cases) > 0
58  and all(case["status"] == "unsupported" for case in negative_cases)
59  )
60  bundle = {
61  "suite_name": SUITE_NAME,
62  "status": "pass" if summary_consistency_pass else "fail",
63  "schema_version": CORRECTNESS_EVIDENCE_SUMMARY_SCHEMA_VERSION,
65  "selected_candidate": correctness_package["selected_candidate"],
66  "requirements": {
67  "main_claim_rule": (
68  "Only mandatory, complete, supported evidence may close the main "
69  "correctness claim for this package."
70  ),
71  "boundary_visibility_rule": (
72  "Excluded, unsupported, or deferred evidence must remain visible "
73  "as claim-boundary evidence in downstream summaries."
74  ),
75  },
76  "summary": {
77  "summary_consistency_pass": summary_consistency_pass,
78  "main_correctness_claim_completed": main_correctness_claim_completed,
79  "counted_supported_cases": counted_supported_cases,
80  "excluded_supported_cases": len(cases) - counted_supported_cases,
81  "unsupported_boundary_cases": len(negative_cases),
82  "planner_entry_boundary_cases": sum(
83  case["boundary_stage"] == "planner_entry" for case in negative_cases
84  ),
85  "descriptor_generation_boundary_cases": sum(
86  case["boundary_stage"] == "descriptor_generation"
87  for case in negative_cases
88  ),
89  "runtime_stage_boundary_cases": sum(
90  case["boundary_stage"] == "runtime_stage" for case in negative_cases
91  ),
92  },
93  "required_artifacts": [
94  {
95  "artifact_id": "correctness_package",
96  "suite_name": correctness_package["suite_name"],
97  "status": correctness_package["status"],
98  "schema_version": correctness_package["schema_version"],
99  }
100  ],
101  }
102  require_bundle_fields(bundle, ARTIFACT_CORE_FIELDS, "Summary consistency bundle")
103  return bundle
104 
105 
106 def main(argv: list[str] | None = None) -> int:
107  parser = argparse.ArgumentParser(description=__doc__)
108  parser.add_argument(
109  "--output-dir",
110  type=Path,
111  default=DEFAULT_OUTPUT_DIR,
112  help="Directory to write the summary consistency bundle into.",
113  )
114  parser.add_argument(
115  "--quiet",
116  action="store_true",
117  help="Suppress console output.",
118  )
119  args = parser.parse_args(argv)
120 
121  bundle = build_artifact_bundle()
122  output_path = write_artifact_bundle(bundle, args.output_dir, ARTIFACT_FILENAME)
123 
124  if not args.quiet:
125  print(
126  "summary_consistency_pass={summary_consistency_pass}, main_correctness_claim_completed={main_correctness_claim_completed}".format(
127  **bundle["summary"]
128  )
129  )
130  print("Wrote {}".format(output_path))
131 
132  return 0 if bundle["status"] == "pass" else 1
133 
134 
135 if __name__ == "__main__":
136  raise SystemExit(main())
def correctness_evidence_counted_supported_case
def build_correctness_evidence_software_metadata()