2 """Publication bundle: bridge evidence. 4 Assembles the delivered bridge evidence into a single publication-oriented 5 manifest plus completeness checks. 8 python benchmarks/density_matrix/bridge_scope/bridge_publication_bundle.py --output-dir <dir> 11 from __future__
import annotations
16 from pathlib
import Path
18 REPO_ROOT = Path(__file__).resolve().parents[3]
19 if str(REPO_ROOT)
not in sys.path:
20 sys.path.insert(0, str(REPO_ROOT))
22 from benchmarks.density_matrix.workflow_evidence.exact_density_vqe_validation
import (
23 FIXED_PARAMETER_QUBITS,
26 OPTIMIZATION_TRACE_ARTIFACT_FILENAME,
27 EXACT_REGIME_WORKFLOW_BUNDLE_FILENAME,
28 build_software_metadata,
29 build_exact_regime_workflow_bundle,
32 run_fixed_parameter_case,
33 run_optimization_trace,
34 run_exact_regime_workflow_matrix,
36 write_exact_regime_workflow_bundle,
38 from benchmarks.density_matrix.bridge_scope.bridge_validation
import (
39 ARTIFACT_FILENAME
as BRIDGE_MICRO_VALIDATION_BUNDLE_FILENAME,
40 build_artifact_bundle
as build_bridge_micro_validation_bundle,
41 run_validation
as run_bridge_micro_validation,
42 write_artifact_bundle
as write_bridge_micro_validation_bundle,
44 from benchmarks.density_matrix.bridge_scope.unsupported_bridge_validation
import (
45 ARTIFACT_FILENAME
as UNSUPPORTED_BRIDGE_BUNDLE_FILENAME,
46 build_artifact_bundle
as build_unsupported_bridge_bundle,
47 run_validation
as run_unsupported_bridge_validation,
48 write_artifact_bundle
as write_unsupported_bridge_bundle,
51 BRIDGE_PUBLICATION_BUNDLE_FILENAME =
"bridge_publication_bundle.json" 52 BRIDGE_PUBLICATION_BUNDLE_FIELDS = (
65 return json.loads(path.read_text(encoding=
"utf-8"))
81 "artifact_id": artifact_id,
82 "artifact_class": artifact_class,
83 "mandatory": mandatory,
86 "expected_statuses": list(expected_statuses),
88 "generation_command": generation_command,
89 "summary": {}
if summary
is None else dict(summary),
98 bridge_micro_validation_bundle,
99 unsupported_bridge_bundle,
102 output_dir = Path(output_dir)
103 supported_fixed_parameter_command = (
104 f
"python benchmarks/density_matrix/workflow_evidence/exact_density_vqe_validation.py " 105 f
"--output-dir {output_dir}" 107 bridge_micro_validation_command = (
108 f
"python benchmarks/density_matrix/bridge_scope/bridge_validation.py " 109 f
"--output-dir {output_dir}" 111 unsupported_bridge_command = (
112 f
"python benchmarks/density_matrix/bridge_scope/unsupported_bridge_validation.py " 113 f
"--output-dir {output_dir}" 116 f
"python benchmarks/density_matrix/workflow_evidence/exact_density_vqe_validation.py " 117 f
"--workflow-bundle --output-dir {output_dir}" 119 publication_bundle_command = (
120 f
"python benchmarks/density_matrix/bridge_scope/bridge_publication_bundle.py " 121 f
"--output-dir {output_dir}" 126 artifact_id=
"bridge_fixed_parameters_4q",
127 artifact_class=
"supported_positive_bridge_case",
129 path=
"fixed_parameters_4q.json",
130 status=fixed_results[0][
"status"],
131 expected_statuses=[
"completed"],
132 purpose=
"Supported positive 4-qubit bridge artifact for the generated-HEA anchor workflow.",
133 generation_command=supported_fixed_parameter_command,
135 "qbit_num": fixed_results[0][
"qbit_num"],
136 "absolute_energy_error": fixed_results[0].get(
"absolute_energy_error"),
137 "bridge_source_type": fixed_results[0].get(
"bridge_source_type"),
138 "bridge_operation_count": fixed_results[0].get(
"bridge_operation_count"),
139 "bridge_noise_count": fixed_results[0].get(
"bridge_noise_count"),
143 artifact_id=
"bridge_fixed_parameters_6q",
144 artifact_class=
"supported_positive_bridge_case",
146 path=
"fixed_parameters_6q.json",
147 status=fixed_results[1][
"status"],
148 expected_statuses=[
"completed"],
149 purpose=
"Supported positive 6-qubit bridge artifact for the generated-HEA anchor workflow.",
150 generation_command=supported_fixed_parameter_command,
152 "qbit_num": fixed_results[1][
"qbit_num"],
153 "absolute_energy_error": fixed_results[1].get(
"absolute_energy_error"),
154 "bridge_source_type": fixed_results[1].get(
"bridge_source_type"),
155 "bridge_operation_count": fixed_results[1].get(
"bridge_operation_count"),
156 "bridge_noise_count": fixed_results[1].get(
"bridge_noise_count"),
160 artifact_id=
"bridge_micro_validation_bundle",
161 artifact_class=
"bridge_micro_validation_bundle",
163 path=BRIDGE_MICRO_VALIDATION_BUNDLE_FILENAME,
164 status=bridge_micro_validation_bundle[
"status"],
165 expected_statuses=[
"pass"],
166 purpose=
"Canonical local bridge-support validation bundle for 1 to 3 qubit generated-HEA microcases.",
167 generation_command=bridge_micro_validation_command,
169 "total_cases": bridge_micro_validation_bundle[
"summary"][
"total_cases"],
170 "passed_cases": bridge_micro_validation_bundle[
"summary"][
173 "pass_rate": bridge_micro_validation_bundle[
"summary"][
"pass_rate"],
174 "microcase_qubits": bridge_micro_validation_bundle[
"requirements"][
180 artifact_id=
"bridge_exact_regime_workflow_bundle",
181 artifact_class=
"workflow_exact_regime_bundle",
183 path=EXACT_REGIME_WORKFLOW_BUNDLE_FILENAME,
184 status=workflow_bundle[
"status"],
185 expected_statuses=[
"pass"],
186 purpose=
"Canonical workflow-scale bridge bundle across the mandatory 4/6/8/10 exact regime.",
187 generation_command=workflow_command,
189 "total_cases": workflow_bundle[
"summary"][
"total_cases"],
190 "passed_cases": workflow_bundle[
"summary"][
"passed_cases"],
191 "pass_rate": workflow_bundle[
"summary"][
"pass_rate"],
192 "unsupported_cases": workflow_bundle[
"summary"][
"unsupported_cases"],
193 "bridge_supported_cases": workflow_bundle[
"summary"][
"bridge_supported_cases"],
194 "documented_10q_anchor_present": workflow_bundle[
"summary"][
195 "documented_10q_anchor_present" 197 "supported_trace_completed": workflow_bundle[
"summary"][
198 "supported_trace_completed" 200 "supported_trace_case_name": workflow_bundle[
"summary"][
201 "supported_trace_case_name" 206 artifact_id=
"bridge_optimization_trace_4q",
207 artifact_class=
"supported_optimization_trace",
209 path=OPTIMIZATION_TRACE_ARTIFACT_FILENAME,
210 status=trace_result[
"status"],
211 expected_statuses=[
"completed"],
212 purpose=
"Supported bounded 4-qubit optimization trace proving the full workflow crosses the bridge.",
213 generation_command=workflow_command,
215 "case_name": trace_result.get(
"case_name"),
216 "optimizer": trace_result.get(
"optimizer"),
217 "parameter_count": trace_result.get(
"parameter_count"),
218 "workflow_completed": trace_result.get(
"workflow_completed"),
219 "bridge_supported_pass": trace_result.get(
"bridge_supported_pass"),
220 "initial_energy": trace_result.get(
"initial_energy"),
221 "final_energy": trace_result.get(
"final_energy"),
225 artifact_id=
"unsupported_bridge_bundle",
226 artifact_class=
"unsupported_bridge_bundle",
228 path=UNSUPPORTED_BRIDGE_BUNDLE_FILENAME,
229 status=unsupported_bridge_bundle[
"status"],
230 expected_statuses=[
"pass"],
231 purpose=
"Canonical representative unsupported-bridge bundle covering source, lowering, insertion, and noise-type failures.",
232 generation_command=unsupported_bridge_command,
234 "required_categories": unsupported_bridge_bundle[
"requirements"][
235 "required_categories" 237 "total_cases": unsupported_bridge_bundle[
"summary"][
"total_cases"],
238 "unsupported_cases": unsupported_bridge_bundle[
"summary"][
241 "error_match_count": unsupported_bridge_bundle[
"summary"][
244 "required_case_count": unsupported_bridge_bundle[
"summary"][
245 "required_case_count" 251 mandatory_artifacts = [artifact
for artifact
in artifacts
if artifact[
"mandatory"]]
253 status_match_count = 0
254 for artifact
in mandatory_artifacts:
255 if (output_dir / artifact[
"path"]).exists():
257 if artifact[
"status"]
in artifact[
"expected_statuses"]:
258 status_match_count += 1
262 if present_count == len(mandatory_artifacts)
263 and status_match_count == len(mandatory_artifacts)
268 "suite_name":
"bridge_publication_evidence",
269 "status": bundle_status,
270 "backend": PRIMARY_BACKEND,
271 "reference_backend": REFERENCE_BACKEND,
274 "generation_command": publication_bundle_command,
275 "working_directory": str(REPO_ROOT),
279 "mandatory_artifact_count": len(mandatory_artifacts),
280 "present_artifact_count": present_count,
281 "status_match_count": status_match_count,
282 "missing_artifact_count": len(mandatory_artifacts) - present_count,
283 "mismatched_status_count": len(mandatory_artifacts) - status_match_count,
285 "artifacts": artifacts,
293 field
for field
in BRIDGE_PUBLICATION_BUNDLE_FIELDS
if field
not in bundle
297 "Bridge-publication bundle is missing required fields: {}".format(
298 ", ".join(missing_fields)
302 artifact_ids = {artifact[
"artifact_id"]
for artifact
in bundle[
"artifacts"]}
304 "bridge_fixed_parameters_4q",
305 "bridge_fixed_parameters_6q",
306 "bridge_micro_validation_bundle",
307 "bridge_exact_regime_workflow_bundle",
308 "bridge_optimization_trace_4q",
309 "unsupported_bridge_bundle",
311 if required_ids - artifact_ids:
313 "Bridge-publication bundle is missing required artifact IDs: {}".format(
314 ", ".join(sorted(required_ids - artifact_ids))
318 required_summary_keys = {
319 "bridge_micro_validation_bundle": {
325 "bridge_exact_regime_workflow_bundle": {
330 "bridge_supported_cases",
331 "documented_10q_anchor_present",
332 "supported_trace_completed",
333 "supported_trace_case_name",
335 "bridge_optimization_trace_4q": {
339 "workflow_completed",
340 "bridge_supported_pass",
342 "unsupported_bridge_bundle": {
343 "required_categories",
347 "required_case_count",
351 for artifact
in bundle[
"artifacts"]:
352 artifact_path = bundle_dir / artifact[
"path"]
353 if artifact[
"mandatory"]
and not artifact_path.exists():
355 f
"Bridge-publication bundle is missing artifact file: {artifact['path']}" 357 if artifact[
"status"]
not in artifact[
"expected_statuses"]:
359 "Bridge-publication artifact {} has unexpected status {}".format(
360 artifact[
"artifact_id"], artifact[
"status"]
363 expected_summary_keys = required_summary_keys.get(artifact[
"artifact_id"])
364 if expected_summary_keys
and expected_summary_keys - set(artifact[
"summary"].
keys()):
366 "Bridge-publication artifact {} is missing summary keys: {}".format(
367 artifact[
"artifact_id"],
368 ", ".join(sorted(expected_summary_keys - set(artifact[
"summary"].
keys()))),
375 output_path.parent.mkdir(parents=
True, exist_ok=
True)
376 output_path.write_text(json.dumps(bundle, indent=2) +
"\n", encoding=
"utf-8")
380 print(
"\n" +
"=" * 78)
382 " Bridge Publication Bundle [{} vs {}]".format(
383 bundle[
"backend"], bundle[
"reference_backend"]
388 " Mandatory artifacts present: {}/{}".format(
389 bundle[
"summary"][
"present_artifact_count"],
390 bundle[
"summary"][
"mandatory_artifact_count"],
394 " Status matches: {}/{}".format(
395 bundle[
"summary"][
"status_match_count"],
396 bundle[
"summary"][
"mandatory_artifact_count"],
399 print(
" Git revision:", bundle[
"provenance"][
"git_revision"])
403 output_dir = Path(output_dir)
404 output_dir.mkdir(parents=
True, exist_ok=
True)
407 output_dir /
"fixed_parameters_4q.json",
408 output_dir /
"fixed_parameters_6q.json",
410 if all(path.exists()
for path
in fixed_paths):
411 fixed_results = [
_load_json(path)
for path
in fixed_paths]
415 f
"fixed_parameters_{qbit_num}q",
418 for qbit_num
in FIXED_PARAMETER_QUBITS
420 for result
in fixed_results:
421 write_json(output_dir / f
"{result['case_name']}.json", result)
423 trace_path = output_dir / OPTIMIZATION_TRACE_ARTIFACT_FILENAME
424 if trace_path.exists():
427 trace_result =
capture_case(
"optimization_trace_4q", run_optimization_trace)
430 bridge_micro_validation_path = output_dir / BRIDGE_MICRO_VALIDATION_BUNDLE_FILENAME
431 if bridge_micro_validation_path.exists():
432 bridge_micro_validation_bundle =
_load_json(bridge_micro_validation_path)
434 bridge_micro_validation_results = run_bridge_micro_validation(verbose=
False)
435 bridge_micro_validation_bundle = build_bridge_micro_validation_bundle(
436 bridge_micro_validation_results
438 write_bridge_micro_validation_bundle(
439 bridge_micro_validation_path, bridge_micro_validation_bundle
442 unsupported_bridge_path = output_dir / UNSUPPORTED_BRIDGE_BUNDLE_FILENAME
443 if unsupported_bridge_path.exists():
444 unsupported_bridge_bundle =
_load_json(unsupported_bridge_path)
446 unsupported_bridge_results = run_unsupported_bridge_validation(verbose=
False)
447 unsupported_bridge_bundle = build_unsupported_bridge_bundle(
448 unsupported_bridge_results
450 write_unsupported_bridge_bundle(
451 unsupported_bridge_path, unsupported_bridge_bundle
454 workflow_path = output_dir / EXACT_REGIME_WORKFLOW_BUNDLE_FILENAME
455 if workflow_path.exists():
460 workflow_results, trace_result=trace_result
466 fixed_results=fixed_results,
467 trace_result=trace_result,
468 bridge_micro_validation_bundle=bridge_micro_validation_bundle,
469 unsupported_bridge_bundle=unsupported_bridge_bundle,
470 workflow_bundle=workflow_bundle,
477 parser = argparse.ArgumentParser(description=__doc__)
482 help=
"Directory where bridge publication artifacts will be written.",
484 args = parser.parse_args()
489 if bundle[
"status"] !=
"pass":
493 if __name__ ==
"__main__":
def _build_artifact_entry(artifact_id, artifact_class, mandatory, path, status, expected_statuses, purpose, generation_command, summary=None)
def run_fixed_parameter_case
def validate_bridge_publication_bundle
def run_exact_regime_workflow_matrix
def write_bridge_publication_bundle
def build_exact_regime_workflow_bundle
def build_bridge_publication_bundle
def generate_bridge_publication_bundle
def print_bridge_publication_bundle_summary(bundle)
def build_software_metadata()
def write_exact_regime_workflow_bundle