Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
external_correctness_validation.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 """External correctness validation (bounded Qiskit Aer reference slice).
3 
4 Checks the required external-reference slice against Qiskit Aer while keeping
5 the slice explicitly bounded to mandatory microcases plus the selected small
6 continuity subset.
7 
8 Run with:
9  python benchmarks/density_matrix/correctness_evidence/external_correctness_validation.py
10 """
11 
12 from __future__ import annotations
13 
14 from benchmarks.density_matrix.correctness_evidence.common import (
15  correctness_evidence_output_dir,
16 )
17 from benchmarks.density_matrix.correctness_evidence.records import (
18  build_correctness_evidence_positive_records,
19 )
20 from benchmarks.density_matrix.correctness_evidence.validation_support import (
21  assemble_positive_case_bundle,
22 )
23 from benchmarks.density_matrix.validation_scaffold import (
24  require_bundle_fields,
25  run_case_slice_cli,
26 )
27 
28 SUITE_NAME = "correctness_evidence_external_correctness"
29 ARTIFACT_FILENAME = "external_correctness_bundle.json"
30 DEFAULT_OUTPUT_DIR = correctness_evidence_output_dir("external_correctness")
31 ARTIFACT_CORE_FIELDS = (
32  "suite_name",
33  "status",
34  "record_schema_version",
35  "software",
36  "selected_candidate",
37  "summary",
38  "cases",
39 )
40 
41 
42 def build_cases() -> list[dict]:
43  return [
44  case
46  if case["external_reference_required"]
47  ]
48 
49 
50 def build_artifact_bundle(cases: list[dict]) -> dict:
51  external_passes = sum(case["external_reference_pass"] for case in cases)
52  status = "pass" if len(cases) == 4 and external_passes == len(cases) else "fail"
53  summary = {
54  "total_cases": len(cases),
55  "external_reference_passes": external_passes,
56  "microcases": sum(case["case_kind"] == "microcase" for case in cases),
57  "continuity_cases": sum(case["case_kind"] == "continuity" for case in cases),
58  }
59  bundle = assemble_positive_case_bundle(SUITE_NAME, status, summary, cases)
60  require_bundle_fields(bundle, ARTIFACT_CORE_FIELDS, "External correctness bundle")
61  return bundle
62 
63 
64 def main(argv: list[str] | None = None) -> int:
65  return run_case_slice_cli(
66  argv,
67  build_cases=build_cases,
68  build_artifact_bundle=build_artifact_bundle,
69  artifact_filename=ARTIFACT_FILENAME,
70  default_output_dir=DEFAULT_OUTPUT_DIR,
71  description=__doc__ or "",
72  output_dir_help="Directory to write the external correctness bundle into.",
73  quiet_report=lambda b: print(
74  "external_reference_passes={external_reference_passes}, total_cases={total_cases}".format(
75  **b["summary"]
76  )
77  ),
78  )
79 
80 
81 if __name__ == "__main__":
82  raise SystemExit(main())
def build_correctness_evidence_positive_records()