Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
performance_evidence/common.py
Go to the documentation of this file.
1 from __future__ import annotations
2 
3 import resource
4 import sys
5 import time
6 from dataclasses import dataclass
7 from functools import lru_cache
8 from pathlib import Path
9 from typing import Any, Iterable
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.correctness_evidence.common import ( # noqa: E402
16  CORRECTNESS_PACKAGE_SCHEMA_VERSION,
17  build_selected_candidate,
18 )
19 from benchmarks.density_matrix.evidence_io import write_artifact_bundle # noqa: E402
20 from benchmarks.density_matrix.planner_surface.common import ( # noqa: E402
21  build_software_metadata,
22 )
23 from benchmarks.density_matrix.planner_surface.workloads import ( # noqa: E402
24  DEFAULT_STRUCTURED_SEED,
25 )
26 from squander.density_matrix import DensityMatrix # noqa: E402
27 from squander.partitioning.noisy_runtime import ( # noqa: E402
28  execute_sequential_density_reference,
29 )
30 
31 PERFORMANCE_EVIDENCE_CASE_SCHEMA_VERSION = "performance_evidence_record_v1"
32 PERFORMANCE_EVIDENCE_BENCHMARK_PACKAGE_SCHEMA_VERSION = "performance_evidence_package_v1"
33 PERFORMANCE_EVIDENCE_SUMMARY_SCHEMA_VERSION = "performance_evidence_summary_v1"
34 PERFORMANCE_EVIDENCE_PHASE31_CASE_SCHEMA_VERSION = "performance_evidence_phase31_record_v1"
35 
36 PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_CONTINUITY = "continuity_anchor"
37 PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_STRUCTURED = "structured_performance"
38 
39 PERFORMANCE_EVIDENCE_REFERENCE_BACKEND_INTERNAL = "sequential_density_descriptor_reference"
40 PERFORMANCE_EVIDENCE_REFERENCE_BACKEND_EXTERNAL = "qiskit_aer_density_matrix"
41 
42 PERFORMANCE_EVIDENCE_STATUS_COUNTED = "counted_supported"
43 PERFORMANCE_EVIDENCE_STATUS_DIAGNOSIS_ONLY = "diagnosis_only"
44 PERFORMANCE_EVIDENCE_STATUS_EXCLUDED = "excluded"
45 PERFORMANCE_EVIDENCE_STATUS_NOT_REVIEW_CASE = "not_review_case"
46 
47 PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED = DEFAULT_STRUCTURED_SEED
48 PERFORMANCE_EVIDENCE_ADDITIONAL_STRUCTURED_SEEDS = (
49  DEFAULT_STRUCTURED_SEED + 1,
50  DEFAULT_STRUCTURED_SEED + 2,
51 )
52 PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN = "sparse"
53 PERFORMANCE_EVIDENCE_REPETITIONS = 3
54 
55 PHASE31_COUNTED_BUILD_POLICY_ID = "phase31_scalar_only_v1"
56 PHASE31_COUNTED_BUILD_FLAVOR = "scalar"
57 PHASE31_COUNTED_SIMD_ENABLED = False
58 PHASE31_COUNTED_TBB_ENABLED = False
59 PHASE31_COUNTED_THREAD_COUNT = 1
60 PHASE31_COUNTED_CLAIM_BUILD = True
61 
62 DEFAULT_OUTPUT_ROOT = (
63  REPO_ROOT / "benchmarks" / "density_matrix" / "artifacts" / "performance_evidence"
64 )
65 
66 # Story 6: performance evidence uses correctness_evidence.common.build_selected_candidate
67 # and the functions below directly—no build_performance_evidence_* thin wrappers.
68 
69 
70 def performance_evidence_output_dir(slice_dir_name: str) -> Path:
71  return DEFAULT_OUTPUT_ROOT / slice_dir_name
72 
73 
74 def build_phase31_counted_build_metadata() -> dict[str, Any]:
75  return {
76  "build_policy_id": PHASE31_COUNTED_BUILD_POLICY_ID,
77  "build_flavor": PHASE31_COUNTED_BUILD_FLAVOR,
78  "simd_enabled": PHASE31_COUNTED_SIMD_ENABLED,
79  "tbb_enabled": PHASE31_COUNTED_TBB_ENABLED,
80  "thread_count": PHASE31_COUNTED_THREAD_COUNT,
81  "counted_claim_build": PHASE31_COUNTED_CLAIM_BUILD,
82  }
83 
84 
85 def build_package_software_metadata() -> dict[str, Any]:
86  metadata = build_software_metadata()
87  metadata["planner_calibration_selected_candidate_id"] = build_selected_candidate()["candidate_id"]
88  metadata["correctness_evidence_package_schema_version"] = CORRECTNESS_PACKAGE_SCHEMA_VERSION
89  return metadata
90 
91 
92 @lru_cache(maxsize=1)
93 def build_correctness_reference_index() -> dict[str, dict[str, Any]]:
94  from benchmarks.density_matrix.correctness_evidence.bundle import (
95  build_correctness_package_payload,
96  )
97 
99  return {case["workload_id"]: dict(case) for case in payload["cases"]}
100 
101 
102 @lru_cache(maxsize=1)
103 def build_boundary_evidence() -> tuple[dict[str, Any], ...]:
104  from benchmarks.density_matrix.correctness_evidence.bundle import (
105  build_correctness_package_payload,
106  )
107 
109  return tuple(dict(case) for case in payload["negative_cases"])
110 
111 
112 def _peak_rss_kb() -> int:
113  return int(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss)
114 
115 
116 @dataclass(frozen=True)
118  density_matrix: DensityMatrix
119  runtime_ms: float
120  peak_rss_kb: int
121  trace_deviation: float
122  rho_is_valid: bool
123 
124 
126  descriptor_set, parameters: Iterable[float]
127 ) -> SequentialReferenceMeasurement:
128  start = time.perf_counter()
129  density_matrix = execute_sequential_density_reference(descriptor_set, parameters)
130  runtime_ms = (time.perf_counter() - start) * 1000.0
131  trace = complex(density_matrix.trace())
133  density_matrix=density_matrix,
134  runtime_ms=runtime_ms,
135  peak_rss_kb=_peak_rss_kb(),
136  trace_deviation=float(abs(trace - 1.0)),
137  rho_is_valid=bool(density_matrix.is_valid(tol=1e-10)),
138  )
def build_package_software_metadata()
def build_phase31_counted_build_metadata()
def build_correctness_package_payload()
def execute_sequential_density_reference
Execute a sequential density reference.
def build_correctness_reference_index()
def build_software_metadata()
def measure_sequential_density_reference