Source code for scpn_fusion.core.quantum_bridge

# SPDX-License-Identifier: AGPL-3.0-or-later
# Commercial license available
# © Concepts 1996–2026 Miroslav Šotek. All rights reserved.
# © Code 2020–2026 Miroslav Šotek. All rights reserved.
# ORCID: 0009-0009-3560-0851
# Contact: www.anulum.li | protoscience@anulum.li
# SCPN Fusion Core — Quantum Bridge
"""Runtime integration wrapper for the optional local Quantum Lab scripts."""

from __future__ import annotations

import logging
import math
import subprocess
import sys
from pathlib import Path

logger = logging.getLogger(__name__)

_QUANTUM_SCRIPT_NAMES = (
    "14_quantum_plasma_simulation.py",
    "15_vqe_grad_shafranov.py",
    "16_knm_vqe_fusion.py",
)
_QUANTUM_STEP_LABELS = (
    "[1] Quantum Transport Simulation (Trotterization)",
    "[2] Quantum Equilibrium Solver (VQE)",
    "[3] Physics-Informed Knm-VQE (Topology Ansatz)",
)
_QUANTUM_SCRIPT_TIMEOUT_SECONDS = 1800.0


def _resolve_quantum_lab_path(base_path: str | Path | None = None) -> Path:
    """Resolve the Quantum Lab root directory for suite execution."""
    if base_path is not None:
        return Path(base_path).expanduser().resolve()
    return Path(__file__).resolve().parents[4] / "QUANTUM_LAB"


def _normalize_script_timeout_seconds(timeout_s: float) -> float:
    """Validate and normalise a finite, positive script timeout in seconds."""
    timeout = float(timeout_s)
    if not math.isfinite(timeout) or timeout <= 0.0:
        raise ValueError("script_timeout_seconds must be finite and > 0.")
    return timeout


[docs] def run_quantum_suite( *, base_path: str | Path | None = None, script_timeout_seconds: float = _QUANTUM_SCRIPT_TIMEOUT_SECONDS, ) -> dict[str, object]: """Execute the staged Quantum Lab workflow scripts in sequence. Parameters ---------- base_path Optional explicit path to the Quantum Lab directory. If omitted, the default repository-local path is used. script_timeout_seconds Per-script timeout in seconds. Must be finite and strictly positive. Returns ------- dict[str, object] Execution report with success flag, resolved base path, and script names. Raises ------ FileNotFoundError If the Quantum Lab directory or required scripts are missing. RuntimeError If any script fails or times out. ValueError If the timeout value is invalid. """ logger.info("SCPN quantum fusion bridge start") logger.info("Executing staged Quantum Lab plasma-physics scripts") timeout_seconds = _normalize_script_timeout_seconds(script_timeout_seconds) lab_path = _resolve_quantum_lab_path(base_path) if not lab_path.is_dir(): raise FileNotFoundError(f"Quantum Lab not found at {lab_path}") script_paths = [lab_path / name for name in _QUANTUM_SCRIPT_NAMES] missing = [p for p in script_paths if not p.is_file()] if missing: missing_text = ", ".join(p.name for p in missing) raise FileNotFoundError(f"Quantum Lab missing required scripts: {missing_text}") for step_label, script_path in zip(_QUANTUM_STEP_LABELS, script_paths): logger.info("Quantum bridge step: %s", step_label) try: subprocess.run( [sys.executable, str(script_path)], check=True, timeout=timeout_seconds, ) except subprocess.TimeoutExpired as exc: raise RuntimeError( f"Quantum script timed out: {script_path.name} (timeout={timeout_seconds:.1f}s)" ) from exc except subprocess.CalledProcessError as exc: raise RuntimeError( f"Quantum script failed: {script_path.name} (exit={exc.returncode})" ) from exc logger.info("Quantum bridge integration complete") return { "ok": True, "base_path": str(lab_path), "scripts": [p.name for p in script_paths], }
if __name__ == "__main__": run_quantum_suite()