Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
correctness_evidence/common.py
Go to the documentation of this file.
1 from __future__ import annotations
2 
3 import json
4 import sys
5 from functools import lru_cache
6 from pathlib import Path
7 from typing import Any
8 
9 from benchmarks.density_matrix.evidence_io import write_artifact_bundle
10 
11 REPO_ROOT = Path(__file__).resolve().parents[3]
12 if str(REPO_ROOT) not in sys.path:
13  sys.path.insert(0, str(REPO_ROOT))
14 
15 from benchmarks.density_matrix.partitioned_runtime.common import ( # noqa: E402
16  PHASE3_RUNTIME_DENSITY_TOL,
17  PHASE3_RUNTIME_ENERGY_TOL,
18 )
19 from benchmarks.density_matrix.planner_calibration.claim_selection import ( # noqa: E402
20  build_claim_selection_payload,
21 )
22 from benchmarks.density_matrix.planner_calibration.common import ( # noqa: E402
23  PLANNER_CANDIDATE_SCHEMA_VERSION,
24  build_planner_candidates,
25 )
26 from benchmarks.density_matrix.planner_surface.common import ( # noqa: E402
27  build_software_metadata,
28 )
29 
30 CORRECTNESS_EVIDENCE_CASE_SCHEMA_VERSION = "correctness_evidence_case_record_v2"
31 CORRECTNESS_EVIDENCE_NEGATIVE_RECORD_SCHEMA_VERSION = "correctness_evidence_negative_record_v2"
32 CORRECTNESS_PACKAGE_SCHEMA_VERSION = "correctness_evidence_package_v1"
33 CORRECTNESS_EVIDENCE_SUMMARY_SCHEMA_VERSION = "correctness_evidence_summary_v1"
34 
35 # Stage-A bounded Phase 3.1 sibling package (fourth vertical slice); does not replace v2 defaults.
36 CORRECTNESS_EVIDENCE_PHASE31_CASE_SCHEMA_VERSION = "correctness_evidence_phase31_case_record_v1"
37 CORRECTNESS_EVIDENCE_PHASE31_PACKAGE_SCHEMA_VERSION = "correctness_evidence_phase31_package_v1"
38 CORRECTNESS_EVIDENCE_PHASE31_SUMMARY_SCHEMA_VERSION = "correctness_evidence_phase31_summary_v1"
39 PHASE31_CORRECTNESS_EVIDENCE_STAGE_A_ROOT = "phase31_stage_a"
40 
41 CORRECTNESS_EVIDENCE_VALIDATION_SLICE_INTERNAL_ONLY = "internal_only"
42 CORRECTNESS_EVIDENCE_VALIDATION_SLICE_INTERNAL_PLUS_EXTERNAL = "internal_plus_external"
43 CORRECTNESS_EVIDENCE_REFERENCE_BACKEND_INTERNAL = "sequential_density_descriptor_reference"
44 CORRECTNESS_EVIDENCE_REFERENCE_BACKEND_EXTERNAL = "qiskit_aer_density_matrix"
45 CORRECTNESS_EVIDENCE_RUNTIME_CLASS_BASELINE = "plain_partitioned_baseline"
46 
47 DEFAULT_OUTPUT_ROOT = (
48  REPO_ROOT / "benchmarks" / "density_matrix" / "artifacts" / "correctness_evidence"
49 )
50 PLANNER_CALIBRATION_CLAIM_SELECTION_BUNDLE_PATH = (
51  REPO_ROOT
52  / "benchmarks"
53  / "density_matrix"
54  / "artifacts"
55  / "planner_calibration"
56  / "claim_selection"
57  / "claim_selection_bundle.json"
58 )
59 
60 
61 def correctness_evidence_output_dir(slice_dir_name: str) -> Path:
62  return DEFAULT_OUTPUT_ROOT / slice_dir_name
63 
64 
65 def phase31_correctness_evidence_output_dir(slice_dir_name: str) -> Path:
66  """Artifact subdirectory for Stage-A Phase 3.1 sibling bundles (isolated from default Phase 3)."""
67  return DEFAULT_OUTPUT_ROOT / PHASE31_CORRECTNESS_EVIDENCE_STAGE_A_ROOT / slice_dir_name
68 
69 
70 @lru_cache(maxsize=1)
71 def build_selected_candidate() -> dict[str, Any]:
72  if PLANNER_CALIBRATION_CLAIM_SELECTION_BUNDLE_PATH.exists():
73  claim_payload = json.loads(
74  PLANNER_CALIBRATION_CLAIM_SELECTION_BUNDLE_PATH.read_text(encoding="utf-8")
75  )
76  else:
77  claim_payload = build_claim_selection_payload()
78  selected = dict(claim_payload["selected_candidate"])
79  candidates_by_id = {
80  candidate.candidate_id: candidate for candidate in build_planner_candidates()
81  }
82  candidate = candidates_by_id[selected["candidate_id"]]
83  selected["candidate_schema_version"] = PLANNER_CANDIDATE_SCHEMA_VERSION
84  selected["planner_settings"] = candidate.planner_settings
85  selected["claim_selection_schema_version"] = claim_payload.get(
86  "schema_version", claim_payload.get("claim_selection_schema_version")
87  )
88  selected["claim_selection_rule"] = claim_payload.get(
89  "claim_selection_rule",
90  claim_payload.get("summary", {}).get("claim_selection_rule"),
91  )
92  selected["selected_candidate_id"] = selected["candidate_id"]
93  return selected
94 
95 
96 def build_package_software_metadata() -> dict[str, Any]:
97  metadata = build_software_metadata()
98  metadata["planner_calibration_selected_candidate_id"] = build_selected_candidate()["candidate_id"]
99  return metadata
100 
101 
103  return build_selected_candidate()
104 
105 
108 
109 
110 def base_case_name(workload_id: str) -> str:
111  return workload_id
112 
113 
114 def build_validation_slice(*, external_reference_required: bool) -> str:
115  return (
116  CORRECTNESS_EVIDENCE_VALIDATION_SLICE_INTERNAL_PLUS_EXTERNAL
117  if external_reference_required
118  else CORRECTNESS_EVIDENCE_VALIDATION_SLICE_INTERNAL_ONLY
119  )
def build_package_software_metadata()
def build_software_metadata()
def build_correctness_evidence_selected_candidate()
def build_correctness_evidence_software_metadata()
def phase31_correctness_evidence_output_dir
def build_claim_selection_payload()