2 """Validation: trace-and-anchor package. 4 Builds the phase-level trace-and-anchor gate from: 5 - the already passing workflow baseline, which must contain the documented 6 10-qubit anchor evidence, 7 - and the canonical bounded 4-qubit optimization trace, kept as a stable raw 8 artifact rather than renamed into a second trace identity. 10 The resulting bundle is intentionally a thin validation-evidence layer: 11 - it keeps the workflow baseline and the bounded trace as separate evidence 13 - it requires both the supported trace and the documented 10-qubit anchor, 14 - it preserves trace identity and supported-path attribution explicitly, 15 - and it makes missing trace-or-anchor evidence fail explicitly. 18 python benchmarks/density_matrix/validation_evidence/trace_anchor_validation.py 21 from __future__
import annotations
26 from pathlib
import Path
28 REPO_ROOT = Path(__file__).resolve().parents[3]
29 if str(REPO_ROOT)
not in sys.path:
30 sys.path.insert(0, str(REPO_ROOT))
32 from benchmarks.density_matrix.workflow_evidence.exact_density_vqe_validation
import (
33 EXACT_REGIME_PARAMETER_SET_COUNT,
34 EXACT_REGIME_WORKFLOW_QUBITS,
36 run_optimization_trace,
39 from benchmarks.density_matrix.validation_evidence.workflow_baseline_validation
import (
42 run_validation
as run_workflow_baseline_validation,
45 SUITE_NAME =
"trace_anchor_validation" 46 ARTIFACT_FILENAME =
"trace_anchor_bundle.json" 47 TRACE_CASE_NAME =
"optimization_trace_4q" 48 TRACE_ARTIFACT_FILENAME =
"optimization_trace_4q.json" 49 DEFAULT_OUTPUT_DIR = (
50 REPO_ROOT /
"benchmarks" /
"density_matrix" /
"artifacts" /
"validation_evidence" 52 ARTIFACT_CORE_FIELDS = (
67 workflow_baseline_bundle,
69 qubit_sizes=EXACT_REGIME_WORKFLOW_QUBITS,
70 parameter_set_count: int = EXACT_REGIME_PARAMETER_SET_COUNT,
71 required_trace_case_name: str = TRACE_CASE_NAME,
74 "mandatory_workflow_qubits": list(qubit_sizes),
75 "fixed_parameter_sets_per_size": parameter_set_count,
76 "documented_anchor_qubit": 10,
77 "required_trace_case_name": required_trace_case_name,
78 "required_bundle_sources": [
79 "workflow_baseline_validation",
80 "canonical_bounded_optimization_trace",
82 "workflow_baseline_status": workflow_baseline_bundle[
"status"],
91 "bridge_supported_pass",
94 "counts_toward_mandatory_baseline",
95 "required_validation_trace",
98 "total_trace_runtime_ms",
99 "process_peak_rss_kb",
101 missing_fields = [field
for field
in required_fields
if field
not in trace_artifact]
104 "Trace-anchor artifact is missing required fields: {}".format(
105 ", ".join(missing_fields)
111 workflow_baseline_bundle,
114 qubit_sizes=EXACT_REGIME_WORKFLOW_QUBITS,
115 parameter_set_count: int = EXACT_REGIME_PARAMETER_SET_COUNT,
117 trace_artifact = dict(trace_result)
120 documented_10q_anchor_case_names = sorted(
122 for case
in workflow_baseline_bundle[
"cases"]
123 if case[
"qbit_num"] == 10
125 workflow_baseline_completed =
bool(
126 workflow_baseline_bundle[
"summary"][
"workflow_baseline_completed"]
128 documented_10q_anchor_present =
bool(
129 workflow_baseline_bundle[
"summary"][
"documented_10q_anchor_present"]
131 required_trace_present =
bool(trace_artifact.get(
"required_validation_trace"))
132 required_trace_completed =
bool(
133 trace_artifact[
"status"] ==
"completed" 134 and trace_artifact.get(
"workflow_completed",
False)
136 required_trace_bridge_supported =
bool(
137 trace_artifact.get(
"bridge_supported_pass",
False)
139 trace_and_anchor_gate_completed =
bool(
140 workflow_baseline_completed
141 and documented_10q_anchor_present
142 and required_trace_present
143 and required_trace_completed
144 and required_trace_bridge_supported
148 "suite_name": SUITE_NAME,
149 "status":
"pass" if trace_and_anchor_gate_completed
else "fail",
150 "backend": PRIMARY_BACKEND,
151 "reference_backend": REFERENCE_BACKEND,
153 workflow_baseline_bundle,
154 qubit_sizes=qubit_sizes,
155 parameter_set_count=parameter_set_count,
156 required_trace_case_name=trace_artifact[
"case_name"],
158 "thresholds": dict(workflow_baseline_bundle[
"thresholds"]),
159 "software": dict(workflow_baseline_bundle[
"software"]),
161 "workflow_baseline_completed": workflow_baseline_completed,
162 "documented_10q_anchor_present": documented_10q_anchor_present,
163 "documented_10q_anchor_case_names": documented_10q_anchor_case_names,
164 "required_trace_case_name": trace_artifact[
"case_name"],
165 "required_trace_present": required_trace_present,
166 "required_trace_completed": required_trace_completed,
167 "required_trace_bridge_supported": required_trace_bridge_supported,
168 "required_trace_counts_toward_mandatory_baseline": trace_artifact.get(
169 "counts_toward_mandatory_baseline" 171 "trace_and_anchor_gate_completed": trace_and_anchor_gate_completed,
173 "required_artifacts": {
174 "workflow_baseline_reference": {
175 "suite_name": workflow_baseline_bundle[
"suite_name"],
176 "status": workflow_baseline_bundle[
"status"],
177 "summary": workflow_baseline_bundle[
"summary"],
180 "trace_artifact": trace_artifact,
187 missing_fields = [field
for field
in ARTIFACT_CORE_FIELDS
if field
not in bundle]
190 "Trace-anchor bundle is missing required fields: {}".format(
191 ", ".join(missing_fields)
198 output_path.parent.mkdir(parents=
True, exist_ok=
True)
199 output_path.write_text(
200 json.dumps(bundle, indent=2, sort_keys=
True) +
"\n", encoding=
"utf-8" 206 qubit_sizes=EXACT_REGIME_WORKFLOW_QUBITS,
207 parameter_set_count: int = EXACT_REGIME_PARAMETER_SET_COUNT,
210 _, workflow_baseline_bundle = run_workflow_baseline_validation(
211 qubit_sizes=qubit_sizes,
212 parameter_set_count=parameter_set_count,
215 trace_result =
capture_case(TRACE_CASE_NAME, run_optimization_trace)
217 workflow_baseline_bundle,
219 qubit_sizes=qubit_sizes,
220 parameter_set_count=parameter_set_count,
224 "{} [{}] 10q_anchor={} trace={}".format(
225 bundle[
"suite_name"],
227 bundle[
"summary"][
"documented_10q_anchor_present"],
228 bundle[
"summary"][
"required_trace_completed"],
231 return workflow_baseline_bundle, trace_result, bundle
235 parser = argparse.ArgumentParser(description=__doc__)
239 default=DEFAULT_OUTPUT_DIR,
240 help=
"Directory for the trace-and-anchor JSON artifacts.",
243 "--parameter-set-count",
245 default=EXACT_REGIME_PARAMETER_SET_COUNT,
246 help=
"Number of fixed parameter vectors per qubit size.",
252 default=list(EXACT_REGIME_WORKFLOW_QUBITS),
253 help=
"Workflow qubit sizes to include.",
258 help=
"Suppress progress output.",
260 return parser.parse_args()
266 qubit_sizes=tuple(args.qubit_sizes),
267 parameter_set_count=args.parameter_set_count,
268 verbose=
not args.quiet,
270 args.output_dir.mkdir(parents=
True, exist_ok=
True)
272 write_json(args.output_dir / TRACE_ARTIFACT_FILENAME, trace_result)
274 "Wrote {} and {} with status {}".format(
275 args.output_dir / ARTIFACT_FILENAME,
276 args.output_dir / TRACE_ARTIFACT_FILENAME,
280 if bundle[
"status"] !=
"pass":
284 if __name__ ==
"__main__":
def validate_artifact_bundle(bundle)
def build_artifact_bundle
def write_artifact_bundle
def build_requirement_metadata
def validate_trace_artifact(trace_artifact)