2 """Validation: publication-ready validation bundle. 4 Builds the top-level validation-evidence manifest by assembling the delivered 5 artifacts into one reproducible, machine-checkable package. The bundle 6 preserves the canonical raw trace artifact explicitly while keeping the other 7 validation-evidence bundles as first-class top-level evidence layers. 10 python benchmarks/density_matrix/validation_evidence/validation_evidence_publication_bundle.py 13 from __future__
import annotations
18 from pathlib
import Path
20 REPO_ROOT = Path(__file__).resolve().parents[3]
21 if str(REPO_ROOT)
not in sys.path:
22 sys.path.insert(0, str(REPO_ROOT))
24 from benchmarks.density_matrix.workflow_evidence.exact_density_vqe_validation
import (
25 EXACT_REGIME_PARAMETER_SET_COUNT,
26 EXACT_REGIME_WORKFLOW_QUBITS,
27 build_software_metadata,
30 run_optimization_trace,
33 from benchmarks.density_matrix.validation_evidence.local_correctness_validation
import (
34 ARTIFACT_FILENAME
as LOCAL_CORRECTNESS_ARTIFACT_FILENAME,
35 run_validation
as run_local_correctness_validation,
36 write_artifact_bundle
as write_local_correctness_bundle_file,
38 from benchmarks.density_matrix.validation_evidence.workflow_baseline_validation
import (
39 ARTIFACT_FILENAME
as WORKFLOW_BASELINE_ARTIFACT_FILENAME,
40 run_validation
as run_workflow_baseline_validation,
41 write_artifact_bundle
as write_workflow_baseline_bundle_file,
43 from benchmarks.density_matrix.validation_evidence.trace_anchor_validation
import (
44 ARTIFACT_FILENAME
as TRACE_ANCHOR_ARTIFACT_FILENAME,
46 TRACE_ARTIFACT_FILENAME
as TRACE_ARTIFACT_FILENAME,
47 build_artifact_bundle
as build_trace_anchor_bundle,
48 write_artifact_bundle
as write_trace_anchor_bundle_file,
50 from benchmarks.density_matrix.validation_evidence.metric_completeness_validation
import (
51 ARTIFACT_FILENAME
as METRIC_COMPLETENESS_ARTIFACT_FILENAME,
52 build_artifact_bundle
as build_metric_completeness_bundle,
53 write_artifact_bundle
as write_metric_completeness_bundle_file,
55 from benchmarks.density_matrix.validation_evidence.interpretation_validation
import (
56 ARTIFACT_FILENAME
as INTERPRETATION_ARTIFACT_FILENAME,
57 build_artifact_bundle
as build_validation_interpretation_bundle,
58 write_artifact_bundle
as write_validation_interpretation_bundle_file,
60 from benchmarks.density_matrix.noise_support.optional_noise_classification_validation
import (
61 build_artifact_bundle
as build_optional_noise_bundle,
62 run_validation
as run_optional_noise_validation,
64 from benchmarks.density_matrix.noise_support.unsupported_noise_validation
import (
65 build_artifact_bundle
as build_unsupported_noise_bundle,
66 run_validation
as run_unsupported_noise_validation,
69 SUITE_NAME =
"validation_evidence_publication" 70 ARTIFACT_FILENAME =
"validation_evidence_publication_bundle.json" 71 DEFAULT_OUTPUT_DIR = (
72 REPO_ROOT /
"benchmarks" /
"density_matrix" /
"artifacts" /
"validation_evidence" 99 "artifact_id": artifact_id,
100 "artifact_class": artifact_class,
101 "mandatory": mandatory,
104 "expected_statuses": list(expected_statuses),
106 "generation_command": generation_command,
107 "summary": dict(summary),
112 return json.loads(path.read_text(encoding=
"utf-8"))
118 local_correctness_bundle,
119 workflow_baseline_bundle,
122 metric_completeness_bundle,
123 interpretation_bundle,
125 output_dir = Path(output_dir)
126 local_correctness_command = (
127 f
"python benchmarks/density_matrix/validation_evidence/local_correctness_validation.py " 128 f
"--output-dir {output_dir}" 130 workflow_baseline_command = (
131 f
"python benchmarks/density_matrix/validation_evidence/workflow_baseline_validation.py " 132 f
"--output-dir {output_dir}" 134 trace_anchor_command = (
135 f
"python benchmarks/density_matrix/validation_evidence/trace_anchor_validation.py " 136 f
"--output-dir {output_dir}" 138 metric_completeness_command = (
139 f
"python benchmarks/density_matrix/validation_evidence/metric_completeness_validation.py " 140 f
"--output-dir {output_dir}" 142 interpretation_command = (
143 f
"python benchmarks/density_matrix/validation_evidence/interpretation_validation.py " 144 f
"--output-dir {output_dir}" 146 publication_bundle_command = (
147 f
"python benchmarks/density_matrix/validation_evidence/validation_evidence_publication_bundle.py " 148 f
"--output-dir {output_dir}" 153 artifact_id=
"local_correctness_bundle",
154 artifact_class=
"local_correctness_baseline_bundle",
156 path=LOCAL_CORRECTNESS_ARTIFACT_FILENAME,
157 status=local_correctness_bundle[
"status"],
158 expected_statuses=[
"pass"],
159 purpose=
"Phase-level local correctness gate for the mandatory 1 to 3 qubit micro-validation matrix.",
160 generation_command=local_correctness_command,
162 "required_cases": local_correctness_bundle[
"summary"][
"required_cases"],
163 "required_passed_cases": local_correctness_bundle[
"summary"][
164 "required_passed_cases" 166 "required_pass_rate": local_correctness_bundle[
"summary"][
169 "stable_case_ids_present": local_correctness_bundle[
"summary"][
170 "stable_case_ids_present" 175 artifact_id=
"workflow_baseline_bundle",
176 artifact_class=
"workflow_exact_regime_baseline_bundle",
178 path=WORKFLOW_BASELINE_ARTIFACT_FILENAME,
179 status=workflow_baseline_bundle[
"status"],
180 expected_statuses=[
"pass"],
181 purpose=
"Phase-level 4/6/8/10 workflow-scale exact-regime baseline.",
182 generation_command=workflow_baseline_command,
184 "required_cases": workflow_baseline_bundle[
"summary"][
"required_cases"],
185 "required_passed_cases": workflow_baseline_bundle[
"summary"][
186 "required_passed_cases" 188 "required_pass_rate": workflow_baseline_bundle[
"summary"][
191 "documented_10q_anchor_present": workflow_baseline_bundle[
"summary"][
192 "documented_10q_anchor_present" 194 "stable_case_ids_present": workflow_baseline_bundle[
"summary"][
195 "stable_case_ids_present" 197 "stable_parameter_set_ids_present": workflow_baseline_bundle[
"summary"][
198 "stable_parameter_set_ids_present" 203 artifact_id=
"trace_anchor_bundle",
204 artifact_class=
"trace_and_anchor_bundle",
206 path=TRACE_ANCHOR_ARTIFACT_FILENAME,
207 status=trace_anchor_bundle[
"status"],
208 expected_statuses=[
"pass"],
209 purpose=
"Phase-level bounded trace plus documented 10-qubit anchor package.",
210 generation_command=trace_anchor_command,
212 "documented_10q_anchor_present": trace_anchor_bundle[
"summary"][
213 "documented_10q_anchor_present" 215 "required_trace_case_name": trace_anchor_bundle[
"summary"][
216 "required_trace_case_name" 218 "required_trace_present": trace_anchor_bundle[
"summary"][
219 "required_trace_present" 221 "required_trace_completed": trace_anchor_bundle[
"summary"][
222 "required_trace_completed" 224 "required_trace_bridge_supported": trace_anchor_bundle[
"summary"][
225 "required_trace_bridge_supported" 230 artifact_id=
"optimization_trace_4q",
231 artifact_class=
"raw_trace_artifact",
233 path=TRACE_ARTIFACT_FILENAME,
234 status=trace_artifact[
"status"],
235 expected_statuses=[
"completed"],
236 purpose=
"Canonical raw bounded optimization trace linked from the trace-and-anchor bundle.",
237 generation_command=trace_anchor_command,
239 "case_name": trace_artifact[
"case_name"],
240 "workflow_completed": trace_artifact[
"workflow_completed"],
241 "bridge_supported_pass": trace_artifact[
"bridge_supported_pass"],
242 "required_validation_trace": trace_artifact[
"required_validation_trace"],
246 artifact_id=
"metric_completeness_bundle",
247 artifact_class=
"metric_completeness_bundle",
249 path=METRIC_COMPLETENESS_ARTIFACT_FILENAME,
250 status=metric_completeness_bundle[
"status"],
251 expected_statuses=[
"pass"],
252 purpose=
"Phase-level metric-completeness gate for mandatory supported evidence.",
253 generation_command=metric_completeness_command,
255 "micro_cases_missing_required_metrics": metric_completeness_bundle[
258 "micro_cases_missing_required_metrics" 260 "workflow_cases_missing_required_metrics": metric_completeness_bundle[
263 "workflow_cases_missing_required_metrics" 265 "trace_artifacts_missing_required_metrics": metric_completeness_bundle[
268 "trace_artifacts_missing_required_metrics" 270 "metric_completeness_gate_completed": metric_completeness_bundle[
273 "metric_completeness_gate_completed" 278 artifact_id=
"interpretation_bundle",
279 artifact_class=
"interpretation_guardrail_bundle",
281 path=INTERPRETATION_ARTIFACT_FILENAME,
282 status=interpretation_bundle[
"status"],
283 expected_statuses=[
"pass"],
284 purpose=
"Phase-level interpretation guardrails preventing optional, unsupported, or incomplete evidence from inflating the main claim.",
285 generation_command=interpretation_command,
287 "mandatory_artifacts_complete": interpretation_bundle[
"summary"][
288 "mandatory_artifacts_complete" 290 "optional_evidence_supplemental": interpretation_bundle[
"summary"][
291 "optional_evidence_supplemental" 293 "unsupported_evidence_negative_only": interpretation_bundle[
"summary"][
294 "unsupported_evidence_negative_only" 296 "main_validation_claim_completed": interpretation_bundle[
"summary"][
297 "main_validation_claim_completed" 303 mandatory_artifacts = [artifact
for artifact
in artifacts
if artifact[
"mandatory"]]
305 status_match_count = 0
306 for artifact
in mandatory_artifacts:
307 if (output_dir / artifact[
"path"]).exists():
309 if artifact[
"status"]
in artifact[
"expected_statuses"]:
310 status_match_count += 1
314 if present_count == len(mandatory_artifacts)
315 and status_match_count == len(mandatory_artifacts)
319 "suite_name": SUITE_NAME,
320 "status": bundle_status,
321 "backend": local_correctness_bundle[
"backend"],
322 "reference_backend": local_correctness_bundle[
"reference_backend"],
325 "generation_command": publication_bundle_command,
326 "working_directory": str(REPO_ROOT),
330 "mandatory_artifact_count": len(mandatory_artifacts),
331 "present_artifact_count": present_count,
332 "status_match_count": status_match_count,
333 "missing_artifact_count": len(mandatory_artifacts) - present_count,
334 "mismatched_status_count": len(mandatory_artifacts) - status_match_count,
335 "raw_trace_reference_pass": trace_anchor_bundle[
"summary"][
336 "required_trace_case_name" 338 == trace_artifact[
"case_name"],
340 "artifacts": artifacts,
347 missing_fields = [field
for field
in BUNDLE_FIELDS
if field
not in bundle]
350 "Validation-evidence publication bundle is missing required fields: {}".format(
351 ", ".join(missing_fields)
355 artifact_ids = {artifact[
"artifact_id"]
for artifact
in bundle[
"artifacts"]}
357 "local_correctness_bundle",
358 "workflow_baseline_bundle",
359 "trace_anchor_bundle",
360 "optimization_trace_4q",
361 "metric_completeness_bundle",
362 "interpretation_bundle",
364 missing_ids = required_ids - artifact_ids
367 "Validation-evidence publication bundle is missing required artifact IDs: {}".format(
368 ", ".join(sorted(missing_ids))
372 required_summary_fields = {
373 "local_correctness_bundle": {
375 "required_passed_cases",
376 "required_pass_rate",
377 "stable_case_ids_present",
379 "workflow_baseline_bundle": {
381 "required_passed_cases",
382 "required_pass_rate",
383 "documented_10q_anchor_present",
384 "stable_case_ids_present",
385 "stable_parameter_set_ids_present",
387 "trace_anchor_bundle": {
388 "documented_10q_anchor_present",
389 "required_trace_case_name",
390 "required_trace_present",
391 "required_trace_completed",
392 "required_trace_bridge_supported",
394 "optimization_trace_4q": {
396 "workflow_completed",
397 "bridge_supported_pass",
398 "required_validation_trace",
400 "metric_completeness_bundle": {
401 "micro_cases_missing_required_metrics",
402 "workflow_cases_missing_required_metrics",
403 "trace_artifacts_missing_required_metrics",
404 "metric_completeness_gate_completed",
406 "interpretation_bundle": {
407 "mandatory_artifacts_complete",
408 "optional_evidence_supplemental",
409 "unsupported_evidence_negative_only",
410 "main_validation_claim_completed",
414 for artifact
in bundle[
"artifacts"]:
415 artifact_path = bundle_dir / artifact[
"path"]
416 if artifact[
"mandatory"]
and not artifact_path.exists():
418 f
"Validation-evidence publication bundle is missing artifact file: {artifact['path']}" 420 if artifact[
"status"]
not in artifact[
"expected_statuses"]:
422 "Validation-evidence publication artifact {} has unexpected status {}".format(
423 artifact[
"artifact_id"], artifact[
"status"]
428 required_fields = required_summary_fields[artifact[
"artifact_id"]]
429 target = payload.get(
"summary", payload)
430 missing_summary_fields = [
431 field
for field
in required_fields
if field
not in target
433 if missing_summary_fields:
435 "Artifact {} is missing required summary fields: {}".format(
436 artifact[
"artifact_id"],
", ".join(missing_summary_fields)
443 output_path.parent.mkdir(parents=
True, exist_ok=
True)
444 output_path.write_text(
445 json.dumps(bundle, indent=2, sort_keys=
True) +
"\n", encoding=
"utf-8" 452 qubit_sizes=EXACT_REGIME_WORKFLOW_QUBITS,
453 parameter_set_count: int = EXACT_REGIME_PARAMETER_SET_COUNT,
456 output_dir = Path(output_dir)
457 output_dir.mkdir(parents=
True, exist_ok=
True)
459 _, _, local_correctness_bundle = run_local_correctness_validation(verbose=verbose)
460 write_local_correctness_bundle_file(
461 output_dir / LOCAL_CORRECTNESS_ARTIFACT_FILENAME,
462 local_correctness_bundle,
465 _, workflow_baseline_bundle = run_workflow_baseline_validation(
466 qubit_sizes=qubit_sizes,
467 parameter_set_count=parameter_set_count,
470 write_workflow_baseline_bundle_file(
471 output_dir / WORKFLOW_BASELINE_ARTIFACT_FILENAME,
472 workflow_baseline_bundle,
475 trace_artifact =
capture_case(TRACE_CASE_NAME, run_optimization_trace)
476 trace_anchor_bundle = build_trace_anchor_bundle(
477 workflow_baseline_bundle,
479 qubit_sizes=qubit_sizes,
480 parameter_set_count=parameter_set_count,
482 write_trace_anchor_bundle_file(
483 output_dir / TRACE_ANCHOR_ARTIFACT_FILENAME,
486 write_json(output_dir / TRACE_ARTIFACT_FILENAME, trace_artifact)
488 metric_completeness_bundle = build_metric_completeness_bundle(
489 local_correctness_bundle,
490 workflow_baseline_bundle,
493 write_metric_completeness_bundle_file(
494 output_dir / METRIC_COMPLETENESS_ARTIFACT_FILENAME,
495 metric_completeness_bundle,
498 required_local_noise_bundle, required_local_noise_micro_bundle, optional_results = (
499 run_optional_noise_validation(verbose=verbose)
501 optional_bundle = build_optional_noise_bundle(
502 required_local_noise_bundle,
503 required_local_noise_micro_bundle,
506 unsupported_results = run_unsupported_noise_validation(verbose=verbose)
507 unsupported_bundle = build_unsupported_noise_bundle(unsupported_results)
508 interpretation_bundle = build_validation_interpretation_bundle(
509 metric_completeness_bundle,
513 write_validation_interpretation_bundle_file(
514 output_dir / INTERPRETATION_ARTIFACT_FILENAME,
515 interpretation_bundle,
520 local_correctness_bundle=local_correctness_bundle,
521 workflow_baseline_bundle=workflow_baseline_bundle,
522 trace_anchor_bundle=trace_anchor_bundle,
523 trace_artifact=trace_artifact,
524 metric_completeness_bundle=metric_completeness_bundle,
525 interpretation_bundle=interpretation_bundle,
532 parser = argparse.ArgumentParser(description=__doc__)
536 default=DEFAULT_OUTPUT_DIR,
537 help=
"Directory for the validation-evidence publication JSON artifacts.",
540 "--parameter-set-count",
542 default=EXACT_REGIME_PARAMETER_SET_COUNT,
543 help=
"Number of fixed parameter vectors per workflow qubit size.",
549 default=list(EXACT_REGIME_WORKFLOW_QUBITS),
550 help=
"Workflow qubit sizes to include in the mandatory baseline.",
555 help=
"Suppress progress output.",
557 return parser.parse_args()
564 qubit_sizes=tuple(args.qubit_sizes),
565 parameter_set_count=args.parameter_set_count,
566 verbose=
not args.quiet,
569 "Wrote {} with status {} ({}/{})".format(
570 args.output_dir / ARTIFACT_FILENAME,
572 bundle[
"summary"][
"status_match_count"],
573 bundle[
"summary"][
"mandatory_artifact_count"],
576 if bundle[
"status"] !=
"pass":
580 if __name__ ==
"__main__":
def write_validation_evidence_publication_bundle
def build_validation_evidence_publication_bundle
def _build_artifact_entry(artifact_id, artifact_class, mandatory, path, status, expected_statuses, purpose, generation_command, summary)
def generate_validation_evidence_publication_bundle
def build_software_metadata()
def validate_validation_evidence_publication_bundle