{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2d5bcdc5-5fe1-48be-8049-af6e69909762",
   "metadata": {},
   "source": [
    "## Notebook written for Qiskit version: 2.2.2 and Jupyter Notebook Core version: 7.3.2\n",
    "Before execution, check your enviroment:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "090cbe91-cea2-4e6e-b8ea-bdb554f03497",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Qiskit version: 2.2.2\n",
      "Jupyter Notebook Core version: 7.3.2\n"
     ]
    }
   ],
   "source": [
    "import notebook\n",
    "import qiskit\n",
    "print(\"Qiskit version:\", qiskit.__version__)\n",
    "print(\"Jupyter Notebook Core version:\", notebook.__version__)    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fa2193b-49d4-4ad5-94e2-04513ac798a5",
   "metadata": {},
   "source": [
    "# Parameter-Resolved Trainability Warning (PRTW) for Quantum Neural Networks\n",
    "\n",
    "**Designed by:** Zornitza Genova Prodanoff (zprodano@unf.edu)  \n",
    "**Generated with the help of:** GPT-5.6  \n",
    "\n",
    "This notebook contains the complete experimental suite for validating parameter-resolved trainability warnings in quantum neural networks. It builds, runs, and evaluates the modular quantum simulations across varying system sizes to analyze the precision-recall profiles of diagnostic alternatives: Weak Barren Plateaus $(WBP)^1$, and our proposed Parameter-Resolved Trainability Warning (PRTW) method family.\n",
    "\n",
    "***\n",
    "$^1$ Sack, S. H., Medina, R. A., Michailidis, A. A., Kueng, R., & Serbyn, M. (2022). Avoiding Barren Plateaus Using Classical Shadows. *PRX Quantum*, 3(2), 020365.  \n",
    "**DOI:** [10.1103/PRXQuantum.3.020365](https://doi.org) | **Persistent URL:** [https://link.aps.org/doi/10.1103/PRXQuantum.3.020365](https://link.aps.org/doi/10.1103/PRXQuantum.3.020365)\n",
    "***\n",
    "\n",
    "### Method Execution Roadmap\n",
    "\n",
    "| Method | Qiskit Execution Strategy Used Here |\n",
    "| :--- | :--- |\n",
    "| **PRTW** | Binds the parameterized `QuantumCircuit`, executes the plus/minus parameter shifts using exact `Statevector` simulations, and evaluates the declared `SparsePauliOp` costs. |\n",
    "| **H–PRTW** | Reuses the base PRTW activities and applies empirical group shrinkage as a purely classical postprocessing step, requiring zero additional quantum runtime. |\n",
    "| **Shadow–PRTW** | Executes the same parameter-shifted `QuantumCircuit` paths but drops exact state tracking, drawing finite Born-rule samples from the statevectors. Two independent local-Pauli-shadow records are generated to form the unbiased cross-replica activity estimator. |\n",
    "| **WBP-style** | Evaluates the unshifted `QuantumCircuit` base states and uses Qiskit partial tracing to compute exact one-qubit subsystem purities as a state-level baseline. |\n",
    "\n",
    "<ul style=\"list-style-type: none; padding-left: 0;\">\n",
    "  <li><strong>Shadow–PRTW Execution Mode (simulated shots $M = 1024$ and classical loop):</strong> Unlike the statevector methods, Shadow–PRTW draws finite Born-rule samples from the statevectors to replicate the physical sample budget allocated on a real quantum device. It tracks a classical Monte Carlo loop on your local machine, where a pseudo-random number generator mimics nature by choosing random bitstrings based on quantum amplitudes. Consequently, the fluctuations in the generated output do not originate from hardware noise channels (such as $T_1$/$T_2$ relaxation or gate crosstalk); they stem entirely from the statistical shot noise of drawing a finite $M=1024$ samples from an ideal quantum state.</li><br>\n",
    "\n",
    "  <li><strong>Exact methods:</strong> All other diagnostic methods use exact quantum state vectors as simulated by an ideal, noiseless Qiskit execution setup.</li>\n",
    "</ul>\n",
    "\n",
    "### Simulation Architecture \n",
    "* **Scale & Modular Factorization:** The full $n$-qubit `QuantumCircuit` is fully constructed and structurally audited up to $n=128$. Because the target architecture evaluates an exact tensor product of disconnected 8-qubit modules, numerical state evolution is computed module by module. This matches the algebraic results of a full-circuit execution for local operators identically while avoiding a $2^{128}$ classical memory allocation. A full-circuit comparison at $n=16$ explicitly verifies this numerical factorization.\n",
    "* **Visual Output:** Execution generates the three-panel comparative figure featured in the main paper manuscript. All remaining diagnostic statistics are output as structured arrays and markdown tables.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4ba2b572",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Qiskit version: 2.2.2\n",
      "Configuration fingerprint: 73d6d3334176\n",
      "System sizes: (16, 24, 32, 48, 64, 96, 128)\n",
      "Primary activity threshold: tau(n) = 0.125 / n^2\n",
      "\n",
      "✅ CELL COMPLETE — Qiskit imports and declared experiment\n"
     ]
    }
   ],
   "source": [
    "from __future__ import annotations\n",
    "\n",
    "import hashlib\n",
    "import json\n",
    "import math\n",
    "import time\n",
    "from functools import lru_cache\n",
    "from pathlib import Path\n",
    "from typing import Dict, Iterable, List, Tuple\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "try:\n",
    "    import qiskit\n",
    "    from qiskit import QuantumCircuit\n",
    "    from qiskit.circuit import ParameterVector\n",
    "    from qiskit.quantum_info import SparsePauliOp, Statevector, partial_trace\n",
    "except ImportError as exc:\n",
    "    raise ImportError(\n",
    "        \"Qiskit is required. Install it in this kernel with `%pip install 'qiskit>=2,<3'`, \"\n",
    "        \"restart the kernel if requested, and rerun from the top.\"\n",
    "    ) from exc\n",
    "\n",
    "try:\n",
    "    from IPython.display import display\n",
    "except ImportError:\n",
    "    display = print\n",
    "\n",
    "np.set_printoptions(precision=6, suppress=True, linewidth=150)\n",
    "pd.set_option(\"display.max_columns\", 120)\n",
    "pd.set_option(\"display.width\", 220)\n",
    "\n",
    "\n",
    "def cell_ok(name: str):\n",
    "    print(f\"\\n✅ CELL COMPLETE — {name}\", flush=True)\n",
    "\n",
    "\n",
    "def milestone(message: str, started: float | None = None):\n",
    "    suffix = \"\" if started is None else f\" | elapsed={(time.time() - started) / 60:.2f} min\"\n",
    "    print(f\"[MILESTONE] {message}{suffix}\", flush=True)\n",
    "\n",
    "\n",
    "BASE_SEED = 20260911\n",
    "OUTPUT_DIR = Path(\"prtw_qiskit_outputs\")\n",
    "OUTPUT_DIR.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "# Full requested experiment. Every size is a multiple of the constant module width.\n",
    "N_VALUES = (16, 24, 32, 48, 64, 96, 128)\n",
    "MODULE_WIDTH = 8\n",
    "ARCHITECTURES_PER_N = 2\n",
    "TRAIN_DRAWS = 8\n",
    "REFERENCE_DRAWS = 24\n",
    "\n",
    "COST_NAMES = (\"mean_Z\", \"staggered_Z\")\n",
    "ACTIVITY_THRESHOLD_FACTOR = 0.125       # tau(n) = c / n^2\n",
    "SENSITIVITY_FACTORS = (0.0625, 0.125, 0.25)\n",
    "HIERARCHICAL_PSEUDO_DRAWS = 4.0\n",
    "\n",
    "# Exact state-only comparator used in the manuscript experiment.\n",
    "WBP_SCORE_THRESHOLD = 0.50\n",
    "WBP_DRAW_FRACTION_THRESHOLD = 0.50\n",
    "\n",
    "CONFIG = {\n",
    "    \"implementation\": \"qiskit\",\n",
    "    \"qiskit_version\": qiskit.__version__,\n",
    "    \"base_seed\": BASE_SEED,\n",
    "    \"n_values\": N_VALUES,\n",
    "    \"module_width\": MODULE_WIDTH,\n",
    "    \"architectures_per_n\": ARCHITECTURES_PER_N,\n",
    "    \"train_draws\": TRAIN_DRAWS,\n",
    "    \"reference_draws\": REFERENCE_DRAWS,\n",
    "    \"cost_names\": COST_NAMES,\n",
    "    \"activity_threshold_factor\": ACTIVITY_THRESHOLD_FACTOR,\n",
    "    \"hierarchical_pseudo_draws\": HIERARCHICAL_PSEUDO_DRAWS,\n",
    "    \"wbp_score_threshold\": WBP_SCORE_THRESHOLD,\n",
    "    \"wbp_draw_fraction_threshold\": WBP_DRAW_FRACTION_THRESHOLD,\n",
    "}\n",
    "CONFIG_FINGERPRINT = hashlib.sha256(\n",
    "    json.dumps(CONFIG, sort_keys=True, default=str).encode(\"utf-8\")\n",
    ").hexdigest()[:12]\n",
    "RUN_PREFIX = f\"prtw_qiskit_{CONFIG_FINGERPRINT}\"\n",
    "\n",
    "print(\"Qiskit version:\", qiskit.__version__)\n",
    "print(\"Configuration fingerprint:\", CONFIG_FINGERPRINT)\n",
    "print(\"System sizes:\", N_VALUES)\n",
    "print(\"Primary activity threshold: tau(n) =\", ACTIVITY_THRESHOLD_FACTOR, \"/ n^2\")\n",
    "cell_ok(\"Qiskit imports and declared experiment\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9b467b9-8397-4f4b-b545-19f71f3d3ee5",
   "metadata": {},
   "source": [
    "## Parameterized sparse modular QNN in Qiskit\n",
    "\n",
    "Each eight-qubit module contains Qiskit `ry`/`rz` data-encoding gates, eight trainable Qiskit\n",
    "`rx`/`ry` gates, and eleven locked `cx`/`cz` entanglers. Modules do not interact. The cost is either\n",
    "the mean (Z) expectation or its staggered version, normalized by the total number of qubits.\n",
    "\n",
    "Qiskit numbers qubits little-endian. `physical_wire` reverses the eight wires within a module. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3cc90ec1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>qiskit_version</th>\n",
       "      <th>full_validation_qubits</th>\n",
       "      <th>parameter_shift_max_abs_error</th>\n",
       "      <th>full_vs_modular_cost_max_abs_error</th>\n",
       "      <th>full_vs_modular_wbp_abs_error</th>\n",
       "      <th>module_state_amplitudes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.2.2</td>\n",
       "      <td>16</td>\n",
       "      <td>3.278350e-11</td>\n",
       "      <td>2.050443e-15</td>\n",
       "      <td>3.330669e-16</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  qiskit_version  full_validation_qubits  parameter_shift_max_abs_error  full_vs_modular_cost_max_abs_error  full_vs_modular_wbp_abs_error  module_state_amplitudes\n",
       "0          2.2.2                      16                   3.278350e-11                        2.050443e-15                   3.330669e-16                      256"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Example bound Qiskit module operations: OrderedDict({'ry': 13, 'cx': 9, 'rz': 8, 'rx': 3, 'cz': 2})\n",
      "\n",
      "✅ CELL COMPLETE — Qiskit circuits, parameter-shift check, and full-circuit factorization check\n"
     ]
    }
   ],
   "source": [
    "FIRST_EDGES = ((0, 1), (2, 3), (4, 5), (6, 7))\n",
    "BRIDGE_EDGES = ((1, 2), (3, 4), (5, 6))\n",
    "FINAL_EDGES = ((0, 1), (2, 3), (4, 5), (6, 7))\n",
    "ALL_EDGE_ROUNDS = (FIRST_EDGES, BRIDGE_EDGES, FINAL_EDGES)\n",
    "STAGGERED = np.array([1.0 if q % 2 == 0 else -1.0 for q in range(MODULE_WIDTH)])\n",
    "\n",
    "\n",
    "def stable_seed(*parts) -> int:\n",
    "    payload = \"|\".join(map(str, (BASE_SEED,) + parts)).encode(\"utf-8\")\n",
    "    return int.from_bytes(hashlib.sha256(payload).digest()[:8], \"little\") % (2**32)\n",
    "\n",
    "\n",
    "def physical_wire(logical_qubit: int, module_start: int = 0) -> int:\n",
    "    \"\"\"Map a logical module qubit to Qiskit's little-endian wire convention.\"\"\"\n",
    "    return module_start + MODULE_WIDTH - 1 - (logical_qubit % MODULE_WIDTH)\n",
    "\n",
    "\n",
    "def apply_entangler(\n",
    "    circuit: QuantumCircuit,\n",
    "    name: str,\n",
    "    left: int,\n",
    "    right: int,\n",
    "    module_start: int = 0,\n",
    "):\n",
    "    q_left = physical_wire(left, module_start)\n",
    "    q_right = physical_wire(right, module_start)\n",
    "    if name == \"CX_LR\":\n",
    "        circuit.cx(q_left, q_right)\n",
    "    elif name == \"CX_RL\":\n",
    "        circuit.cx(q_right, q_left)\n",
    "    elif name == \"CZ\":\n",
    "        circuit.cz(q_left, q_right)\n",
    "    else:\n",
    "        raise ValueError(f\"Unknown entangler {name!r}\")\n",
    "\n",
    "\n",
    "def make_architecture(n: int, architecture_draw: int) -> dict:\n",
    "    assert n % MODULE_WIDTH == 0\n",
    "    rng = np.random.default_rng(stable_seed(\"architecture\", n, architecture_draw))\n",
    "    parameter_axes = rng.choice(np.array([\"X\", \"Y\"]), size=n).tolist()\n",
    "    entanglers = []\n",
    "    for _ in range(n // MODULE_WIDTH):\n",
    "        module_rounds = []\n",
    "        for edges in ALL_EDGE_ROUNDS:\n",
    "            names = rng.choice(\n",
    "                np.array([\"CX_LR\", \"CX_RL\", \"CZ\"]), size=len(edges)\n",
    "            ).tolist()\n",
    "            module_rounds.append(names)\n",
    "        entanglers.append(module_rounds)\n",
    "    digest = hashlib.sha256(\n",
    "        json.dumps({\"axes\": parameter_axes, \"entanglers\": entanglers}).encode(\"utf-8\")\n",
    "    ).hexdigest()[:16]\n",
    "    return {\n",
    "        \"architecture_id\": f\"qiskit_n{n}_a{architecture_draw}_{digest}\",\n",
    "        \"architecture_draw\": architecture_draw,\n",
    "        \"n\": n,\n",
    "        \"axes\": parameter_axes,\n",
    "        \"entanglers\": entanglers,\n",
    "    }\n",
    "\n",
    " \n",
    "def append_module(\n",
    "    circuit: QuantumCircuit,\n",
    "    x_parameters,\n",
    "    theta_parameters,\n",
    "    axes: List[str],\n",
    "    entangler_rounds: List[List[str]],\n",
    "    module_start: int = 0,\n",
    "):\n",
    "    \"\"\"Append one complete parameterized eight-qubit module to a Qiskit circuit.\"\"\"\n",
    "    for q in range(MODULE_WIDTH):\n",
    "        wire = physical_wire(q, module_start)\n",
    "        circuit.ry(x_parameters[q], wire)\n",
    "        circuit.rz(x_parameters[q] / 2.0, wire)\n",
    "\n",
    "    for parameter, q in enumerate((0, 2, 4, 6)):\n",
    "        wire = physical_wire(q, module_start)\n",
    "        getattr(circuit, f\"r{axes[parameter].lower()}\")(\n",
    "            theta_parameters[parameter], wire\n",
    "        )\n",
    "    for edge, name in zip(FIRST_EDGES, entangler_rounds[0]):\n",
    "        apply_entangler(circuit, name, *edge, module_start)\n",
    "    for edge, name in zip(BRIDGE_EDGES, entangler_rounds[1]):\n",
    "        apply_entangler(circuit, name, *edge, module_start)\n",
    "\n",
    "    for parameter, q in enumerate((1, 3, 5, 7), start=4):\n",
    "        wire = physical_wire(q, module_start)\n",
    "        getattr(circuit, f\"r{axes[parameter].lower()}\")(\n",
    "            theta_parameters[parameter], wire\n",
    "        )\n",
    "    for edge, name in zip(FINAL_EDGES, entangler_rounds[2]):\n",
    "        apply_entangler(circuit, name, *edge, module_start)\n",
    "\n",
    "\n",
    "def build_parameterized_module(architecture: dict, module_index: int):\n",
    "    tag = f\"n{architecture['n']}_a{architecture['architecture_draw']}_m{module_index}\"\n",
    "    x_parameters = ParameterVector(f\"x_{tag}\", MODULE_WIDTH)\n",
    "    theta_parameters = ParameterVector(f\"theta_{tag}\", MODULE_WIDTH)\n",
    "    circuit = QuantumCircuit(MODULE_WIDTH, name=f\"module_{tag}\")\n",
    "    lo = module_index * MODULE_WIDTH\n",
    "    hi = lo + MODULE_WIDTH\n",
    "    append_module(\n",
    "        circuit,\n",
    "        x_parameters,\n",
    "        theta_parameters,\n",
    "        architecture[\"axes\"][lo:hi],\n",
    "        architecture[\"entanglers\"][module_index],\n",
    "    )\n",
    "    return circuit, x_parameters, theta_parameters\n",
    "\n",
    "\n",
    "MODULE_CIRCUIT_CACHE = {}\n",
    "\n",
    "\n",
    "def module_spec(architecture: dict, module_index: int):\n",
    "    key = (architecture[\"architecture_id\"], module_index)\n",
    "    if key not in MODULE_CIRCUIT_CACHE:\n",
    "        MODULE_CIRCUIT_CACHE[key] = build_parameterized_module(architecture, module_index)\n",
    "    return MODULE_CIRCUIT_CACHE[key]\n",
    "\n",
    "\n",
    "def bind_module(spec, features: np.ndarray, theta: np.ndarray) -> QuantumCircuit:\n",
    "    circuit, x_parameters, theta_parameters = spec\n",
    "    bindings = {x_parameters[q]: float(features[q]) for q in range(MODULE_WIDTH)}\n",
    "    bindings.update({theta_parameters[q]: float(theta[q]) for q in range(MODULE_WIDTH)})\n",
    "    bound = circuit.assign_parameters(bindings, inplace=False)\n",
    "    assert not bound.parameters\n",
    "    return bound\n",
    "\n",
    "\n",
    "def module_state(spec, features: np.ndarray, theta: np.ndarray) -> Statevector:\n",
    "    \"\"\"Execute one bound Qiskit module exactly as a noiseless statevector.\"\"\"\n",
    "    return Statevector.from_instruction(bind_module(spec, features, theta))\n",
    "\n",
    "\n",
    "def pauli_z_label(logical_qubit: int, width: int, module_start: int = 0) -> str:\n",
    "    label = [\"I\"] * width\n",
    "    wire = physical_wire(logical_qubit, module_start)\n",
    "    label[width - 1 - wire] = \"Z\"\n",
    "    return \"\".join(label)\n",
    "\n",
    "\n",
    "@lru_cache(maxsize=None)\n",
    "def module_cost_operators(global_n: int):\n",
    "    mean_terms = [\n",
    "        (pauli_z_label(q, MODULE_WIDTH), 1.0 / global_n)\n",
    "        for q in range(MODULE_WIDTH)\n",
    "    ]\n",
    "    staggered_terms = [\n",
    "        (pauli_z_label(q, MODULE_WIDTH), float(STAGGERED[q]) / global_n)\n",
    "        for q in range(MODULE_WIDTH)\n",
    "    ]\n",
    "    return tuple(\n",
    "        SparsePauliOp.from_list(terms)\n",
    "        for terms in (mean_terms, staggered_terms)\n",
    "    )\n",
    "\n",
    "\n",
    "def module_costs(state: Statevector, global_n: int) -> np.ndarray:\n",
    "    return np.array([\n",
    "        float(np.real(state.expectation_value(operator)))\n",
    "        for operator in module_cost_operators(global_n)\n",
    "    ])\n",
    "\n",
    "\n",
    "def module_wbp_score(state: Statevector) -> float:\n",
    "    \"\"\"Mean one-qubit linear entropy computed with Qiskit partial traces.\"\"\"\n",
    "    scores = []\n",
    "    for logical_q in range(MODULE_WIDTH):\n",
    "        keep = physical_wire(logical_q)\n",
    "        traced_wires = [wire for wire in range(MODULE_WIDTH) if wire != keep]\n",
    "        reduced = partial_trace(state, traced_wires).data\n",
    "        purity = float(np.real(np.trace(reduced @ reduced)))\n",
    "        scores.append(float(np.clip(2.0 * (1.0 - purity), 0.0, 1.0)))\n",
    "    return float(np.mean(scores))\n",
    "\n",
    "\n",
    "def module_gradients_and_wbp(\n",
    "    spec,\n",
    "    features: np.ndarray,\n",
    "    theta: np.ndarray,\n",
    "    global_n: int,\n",
    ") -> Tuple[np.ndarray, float]:\n",
    "    base_state = module_state(spec, features, theta)\n",
    "    gradients = np.empty((len(COST_NAMES), MODULE_WIDTH), dtype=float)\n",
    "    for local_parameter in range(MODULE_WIDTH):\n",
    "        theta_plus = theta.copy()\n",
    "        theta_minus = theta.copy()\n",
    "        theta_plus[local_parameter] += np.pi / 2\n",
    "        theta_minus[local_parameter] -= np.pi / 2\n",
    "        costs_plus = module_costs(module_state(spec, features, theta_plus), global_n)\n",
    "        costs_minus = module_costs(module_state(spec, features, theta_minus), global_n)\n",
    "        gradients[:, local_parameter] = 0.5 * (costs_plus - costs_minus)\n",
    "    return gradients, module_wbp_score(base_state)\n",
    "\n",
    "\n",
    "def build_full_qiskit_circuit(architecture: dict):\n",
    "    \"\"\"Construct the genuine full-n parameterized Qiskit circuit used for resource audits.\"\"\"\n",
    "    n = architecture[\"n\"]\n",
    "    tag = f\"full_n{n}_a{architecture['architecture_draw']}\"\n",
    "    x_parameters = ParameterVector(f\"x_{tag}\", n)\n",
    "    theta_parameters = ParameterVector(f\"theta_{tag}\", n)\n",
    "    circuit = QuantumCircuit(n, name=tag)\n",
    "    for module_index in range(n // MODULE_WIDTH):\n",
    "        lo = module_index * MODULE_WIDTH\n",
    "        hi = lo + MODULE_WIDTH\n",
    "        append_module(\n",
    "            circuit,\n",
    "            x_parameters[lo:hi],\n",
    "            theta_parameters[lo:hi],\n",
    "            architecture[\"axes\"][lo:hi],\n",
    "            architecture[\"entanglers\"][module_index],\n",
    "            module_start=lo,\n",
    "        )\n",
    "    return circuit, x_parameters, theta_parameters\n",
    "\n",
    "\n",
    "def bind_full(spec, features: np.ndarray, theta: np.ndarray) -> QuantumCircuit:\n",
    "    circuit, x_parameters, theta_parameters = spec\n",
    "    bindings = {x_parameters[q]: float(features[q]) for q in range(len(x_parameters))}\n",
    "    bindings.update({theta_parameters[q]: float(theta[q]) for q in range(len(theta_parameters))})\n",
    "    return circuit.assign_parameters(bindings, inplace=False)\n",
    "\n",
    "\n",
    "def full_cost_operators(n: int):\n",
    "    terms_by_cost = [[], []]\n",
    "    for logical_global in range(n):\n",
    "        module_start = (logical_global // MODULE_WIDTH) * MODULE_WIDTH\n",
    "        local_q = logical_global % MODULE_WIDTH\n",
    "        label = pauli_z_label(local_q, n, module_start)\n",
    "        terms_by_cost[0].append((label, 1.0 / n))\n",
    "        terms_by_cost[1].append((label, float(STAGGERED[local_q]) / n))\n",
    "    return tuple(SparsePauliOp.from_list(terms) for terms in terms_by_cost)\n",
    "\n",
    "\n",
    "def sample_features(n: int, rng: np.random.Generator) -> np.ndarray:\n",
    "    return rng.uniform(-np.pi, np.pi, size=n)\n",
    "\n",
    "\n",
    "# Qiskit-only numerical checks: parameter shift and exact module factorization.\n",
    "test_architecture = make_architecture(16, 0)\n",
    "test_rng = np.random.default_rng(stable_seed(\"qiskit_unit_test\"))\n",
    "test_features = sample_features(16, test_rng)\n",
    "test_theta = test_rng.uniform(-np.pi, np.pi, size=16)\n",
    "\n",
    "test_module_spec = module_spec(test_architecture, 0)\n",
    "test_gradients, test_module_wbp = module_gradients_and_wbp(\n",
    "    test_module_spec, test_features[:8], test_theta[:8], 16\n",
    ")\n",
    "epsilon = 1e-6\n",
    "theta_plus = test_theta[:8].copy(); theta_plus[0] += epsilon\n",
    "theta_minus = test_theta[:8].copy(); theta_minus[0] -= epsilon\n",
    "finite_difference = (\n",
    "    module_costs(module_state(test_module_spec, test_features[:8], theta_plus), 16)\n",
    "    - module_costs(module_state(test_module_spec, test_features[:8], theta_minus), 16)\n",
    ") / (2 * epsilon)\n",
    "parameter_shift_error = float(np.max(np.abs(finite_difference - test_gradients[:, 0])))\n",
    "assert parameter_shift_error < 2e-7\n",
    "\n",
    "full_spec = build_full_qiskit_circuit(test_architecture)\n",
    "full_state = Statevector.from_instruction(bind_full(full_spec, test_features, test_theta))\n",
    "full_cost = np.array([\n",
    "    float(np.real(full_state.expectation_value(operator)))\n",
    "    for operator in full_cost_operators(16)\n",
    "])\n",
    "module_cost_sum = np.zeros(len(COST_NAMES))\n",
    "module_wbp_values = []\n",
    "for module_index in range(2):\n",
    "    lo = module_index * MODULE_WIDTH\n",
    "    hi = lo + MODULE_WIDTH\n",
    "    state = module_state(\n",
    "        module_spec(test_architecture, module_index),\n",
    "        test_features[lo:hi],\n",
    "        test_theta[lo:hi],\n",
    "    )\n",
    "    module_cost_sum += module_costs(state, 16)\n",
    "    module_wbp_values.append(module_wbp_score(state))\n",
    "\n",
    "factorization_cost_error = float(np.max(np.abs(full_cost - module_cost_sum)))\n",
    "full_wbp_values = []\n",
    "for logical_global in range(16):\n",
    "    module_start = (logical_global // MODULE_WIDTH) * MODULE_WIDTH\n",
    "    keep = physical_wire(logical_global % MODULE_WIDTH, module_start)\n",
    "    reduced = partial_trace(full_state, [wire for wire in range(16) if wire != keep]).data\n",
    "    purity = float(np.real(np.trace(reduced @ reduced)))\n",
    "    full_wbp_values.append(float(np.clip(2.0 * (1.0 - purity), 0.0, 1.0)))\n",
    "factorization_wbp_error = float(\n",
    "    abs(np.mean(full_wbp_values) - np.mean(module_wbp_values))\n",
    ")\n",
    "\n",
    "assert factorization_cost_error < 1e-11\n",
    "assert factorization_wbp_error < 1e-11\n",
    "\n",
    "validation_df = pd.DataFrame([{\n",
    "    \"qiskit_version\": qiskit.__version__,\n",
    "    \"full_validation_qubits\": 16,\n",
    "    \"parameter_shift_max_abs_error\": parameter_shift_error,\n",
    "    \"full_vs_modular_cost_max_abs_error\": factorization_cost_error,\n",
    "    \"full_vs_modular_wbp_abs_error\": factorization_wbp_error,\n",
    "    \"module_state_amplitudes\": 2**MODULE_WIDTH,\n",
    "}])\n",
    "display(validation_df)\n",
    "print(\"Example bound Qiskit module operations:\", bind_module(\n",
    "    test_module_spec, test_features[:8], test_theta[:8]\n",
    ").count_ops())\n",
    "cell_ok(\"Qiskit circuits, parameter-shift check, and full-circuit factorization check\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "02f10074-5a2a-45b8-a71d-8d0381d5136e",
   "metadata": {},
   "source": [
    "## Exact experiment with up to 128 qubits:\n",
    "\n",
    "PRTW and the WBP-style comparator are evaluated from bound Qiskit circuits.\n",
    "The full $n$-qubit Qiskit circuit is also constructed for every architecture and its actual Qiskit\n",
    "gate counts, depth, and parameter count are reported.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "19b0cf85",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[MILESTONE] starting n=16 (1/7) | elapsed=0.00 min\n",
      "[MILESTONE] completed n=16, architecture=1/2 | elapsed=0.06 min\n",
      "[MILESTONE] completed n=16, architecture=2/2 | elapsed=0.12 min\n",
      "[MILESTONE] starting n=24 (2/7) | elapsed=0.12 min\n",
      "[MILESTONE] completed n=24, architecture=1/2 | elapsed=0.21 min\n",
      "[MILESTONE] completed n=24, architecture=2/2 | elapsed=0.31 min\n",
      "[MILESTONE] starting n=32 (3/7) | elapsed=0.31 min\n",
      "[MILESTONE] completed n=32, architecture=1/2 | elapsed=0.44 min\n",
      "[MILESTONE] completed n=32, architecture=2/2 | elapsed=0.57 min\n",
      "[MILESTONE] starting n=48 (4/7) | elapsed=0.57 min\n",
      "[MILESTONE] completed n=48, architecture=1/2 | elapsed=0.75 min\n",
      "[MILESTONE] completed n=48, architecture=2/2 | elapsed=0.92 min\n",
      "[MILESTONE] starting n=64 (5/7) | elapsed=0.92 min\n",
      "[MILESTONE] completed n=64, architecture=1/2 | elapsed=1.18 min\n",
      "[MILESTONE] completed n=64, architecture=2/2 | elapsed=1.42 min\n",
      "[MILESTONE] starting n=96 (6/7) | elapsed=1.42 min\n",
      "[MILESTONE] completed n=96, architecture=1/2 | elapsed=1.86 min\n",
      "[MILESTONE] completed n=96, architecture=2/2 | elapsed=2.33 min\n",
      "[MILESTONE] starting n=128 (7/7) | elapsed=2.33 min\n",
      "[MILESTONE] completed n=128, architecture=1/2 | elapsed=2.81 min\n",
      "[MILESTONE] completed n=128, architecture=2/2 | elapsed=3.27 min\n",
      "Parameter/cost decisions: 1632\n",
      "Total elapsed seconds: 196.321\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>architecture_id</th>\n",
       "      <th>n</th>\n",
       "      <th>qiskit_full_circuit_constructed</th>\n",
       "      <th>qiskit_num_qubits</th>\n",
       "      <th>qiskit_trainable_parameters_P</th>\n",
       "      <th>qiskit_input_parameters</th>\n",
       "      <th>qiskit_total_symbolic_parameters</th>\n",
       "      <th>qiskit_gate_count_G</th>\n",
       "      <th>qiskit_depth</th>\n",
       "      <th>qiskit_rx</th>\n",
       "      <th>qiskit_ry</th>\n",
       "      <th>qiskit_rz</th>\n",
       "      <th>qiskit_cx</th>\n",
       "      <th>qiskit_cz</th>\n",
       "      <th>elapsed_seconds</th>\n",
       "      <th>exact_simulation_module_width</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>True</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "      <td>26</td>\n",
       "      <td>16</td>\n",
       "      <td>18</td>\n",
       "      <td>4</td>\n",
       "      <td>3.603718</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>qiskit_n16_a1_6bdc4acabf1c8eda</td>\n",
       "      <td>16</td>\n",
       "      <td>True</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>17</td>\n",
       "      <td>5</td>\n",
       "      <td>3.440431</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>qiskit_n24_a0_b4b62d69d64890d6</td>\n",
       "      <td>24</td>\n",
       "      <td>True</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>48</td>\n",
       "      <td>105</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>36</td>\n",
       "      <td>24</td>\n",
       "      <td>21</td>\n",
       "      <td>12</td>\n",
       "      <td>5.298825</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>qiskit_n24_a1_0af55bfbbcd9de80</td>\n",
       "      <td>24</td>\n",
       "      <td>True</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>48</td>\n",
       "      <td>105</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>36</td>\n",
       "      <td>24</td>\n",
       "      <td>18</td>\n",
       "      <td>15</td>\n",
       "      <td>6.182312</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>qiskit_n32_a0_bbb7cda144d85760</td>\n",
       "      <td>32</td>\n",
       "      <td>True</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>64</td>\n",
       "      <td>140</td>\n",
       "      <td>7</td>\n",
       "      <td>15</td>\n",
       "      <td>49</td>\n",
       "      <td>32</td>\n",
       "      <td>28</td>\n",
       "      <td>16</td>\n",
       "      <td>7.642116</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>qiskit_n32_a1_579766c49387e993</td>\n",
       "      <td>32</td>\n",
       "      <td>True</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>64</td>\n",
       "      <td>140</td>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>53</td>\n",
       "      <td>32</td>\n",
       "      <td>34</td>\n",
       "      <td>10</td>\n",
       "      <td>8.116405</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>qiskit_n48_a0_99ac508d60fc8adb</td>\n",
       "      <td>48</td>\n",
       "      <td>True</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>96</td>\n",
       "      <td>210</td>\n",
       "      <td>7</td>\n",
       "      <td>28</td>\n",
       "      <td>68</td>\n",
       "      <td>48</td>\n",
       "      <td>46</td>\n",
       "      <td>20</td>\n",
       "      <td>10.661998</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>qiskit_n48_a1_2f962108aea13cd8</td>\n",
       "      <td>48</td>\n",
       "      <td>True</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>96</td>\n",
       "      <td>210</td>\n",
       "      <td>7</td>\n",
       "      <td>28</td>\n",
       "      <td>68</td>\n",
       "      <td>48</td>\n",
       "      <td>49</td>\n",
       "      <td>17</td>\n",
       "      <td>10.385803</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>qiskit_n64_a0_02e77923352e2a5c</td>\n",
       "      <td>64</td>\n",
       "      <td>True</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>128</td>\n",
       "      <td>280</td>\n",
       "      <td>7</td>\n",
       "      <td>20</td>\n",
       "      <td>108</td>\n",
       "      <td>64</td>\n",
       "      <td>61</td>\n",
       "      <td>27</td>\n",
       "      <td>15.258134</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>qiskit_n64_a1_ec1df09e118d412a</td>\n",
       "      <td>64</td>\n",
       "      <td>True</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>128</td>\n",
       "      <td>280</td>\n",
       "      <td>7</td>\n",
       "      <td>32</td>\n",
       "      <td>96</td>\n",
       "      <td>64</td>\n",
       "      <td>58</td>\n",
       "      <td>30</td>\n",
       "      <td>14.639435</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>qiskit_n96_a0_fcffe9ce67ae6f65</td>\n",
       "      <td>96</td>\n",
       "      <td>True</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>192</td>\n",
       "      <td>420</td>\n",
       "      <td>7</td>\n",
       "      <td>42</td>\n",
       "      <td>150</td>\n",
       "      <td>96</td>\n",
       "      <td>91</td>\n",
       "      <td>41</td>\n",
       "      <td>26.501667</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>qiskit_n96_a1_62007346c576986e</td>\n",
       "      <td>96</td>\n",
       "      <td>True</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>192</td>\n",
       "      <td>420</td>\n",
       "      <td>7</td>\n",
       "      <td>49</td>\n",
       "      <td>143</td>\n",
       "      <td>96</td>\n",
       "      <td>95</td>\n",
       "      <td>37</td>\n",
       "      <td>28.009264</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>qiskit_n128_a0_da64332bb27418be</td>\n",
       "      <td>128</td>\n",
       "      <td>True</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>256</td>\n",
       "      <td>560</td>\n",
       "      <td>7</td>\n",
       "      <td>64</td>\n",
       "      <td>192</td>\n",
       "      <td>128</td>\n",
       "      <td>111</td>\n",
       "      <td>65</td>\n",
       "      <td>29.076883</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>qiskit_n128_a1_ce7dee6ade0cec25</td>\n",
       "      <td>128</td>\n",
       "      <td>True</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>256</td>\n",
       "      <td>560</td>\n",
       "      <td>7</td>\n",
       "      <td>63</td>\n",
       "      <td>193</td>\n",
       "      <td>128</td>\n",
       "      <td>109</td>\n",
       "      <td>67</td>\n",
       "      <td>27.456433</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    architecture_id    n  qiskit_full_circuit_constructed  qiskit_num_qubits  qiskit_trainable_parameters_P  qiskit_input_parameters  qiskit_total_symbolic_parameters  qiskit_gate_count_G  qiskit_depth  \\\n",
       "0    qiskit_n16_a0_2c32656f00d167f8   16                             True                 16                             16                       16                                32                   70             7   \n",
       "1    qiskit_n16_a1_6bdc4acabf1c8eda   16                             True                 16                             16                       16                                32                   70             7   \n",
       "2    qiskit_n24_a0_b4b62d69d64890d6   24                             True                 24                             24                       24                                48                  105             7   \n",
       "3    qiskit_n24_a1_0af55bfbbcd9de80   24                             True                 24                             24                       24                                48                  105             7   \n",
       "4    qiskit_n32_a0_bbb7cda144d85760   32                             True                 32                             32                       32                                64                  140             7   \n",
       "5    qiskit_n32_a1_579766c49387e993   32                             True                 32                             32                       32                                64                  140             7   \n",
       "6    qiskit_n48_a0_99ac508d60fc8adb   48                             True                 48                             48                       48                                96                  210             7   \n",
       "7    qiskit_n48_a1_2f962108aea13cd8   48                             True                 48                             48                       48                                96                  210             7   \n",
       "8    qiskit_n64_a0_02e77923352e2a5c   64                             True                 64                             64                       64                               128                  280             7   \n",
       "9    qiskit_n64_a1_ec1df09e118d412a   64                             True                 64                             64                       64                               128                  280             7   \n",
       "10   qiskit_n96_a0_fcffe9ce67ae6f65   96                             True                 96                             96                       96                               192                  420             7   \n",
       "11   qiskit_n96_a1_62007346c576986e   96                             True                 96                             96                       96                               192                  420             7   \n",
       "12  qiskit_n128_a0_da64332bb27418be  128                             True                128                            128                      128                               256                  560             7   \n",
       "13  qiskit_n128_a1_ce7dee6ade0cec25  128                             True                128                            128                      128                               256                  560             7   \n",
       "\n",
       "    qiskit_rx  qiskit_ry  qiskit_rz  qiskit_cx  qiskit_cz  elapsed_seconds  exact_simulation_module_width  \n",
       "0           6         26         16         18          4         3.603718                              8  \n",
       "1           9         23         16         17          5         3.440431                              8  \n",
       "2          12         36         24         21         12         5.298825                              8  \n",
       "3          12         36         24         18         15         6.182312                              8  \n",
       "4          15         49         32         28         16         7.642116                              8  \n",
       "5          11         53         32         34         10         8.116405                              8  \n",
       "6          28         68         48         46         20        10.661998                              8  \n",
       "7          28         68         48         49         17        10.385803                              8  \n",
       "8          20        108         64         61         27        15.258134                              8  \n",
       "9          32         96         64         58         30        14.639435                              8  \n",
       "10         42        150         96         91         41        26.501667                              8  \n",
       "11         49        143         96         95         37        28.009264                              8  \n",
       "12         64        192        128        111         65        29.076883                              8  \n",
       "13         63        193        128        109         67        27.456433                              8  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "✅ CELL COMPLETE — Qiskit PRTW and WBP-style paired execution\n"
     ]
    }
   ],
   "source": [
    "started = time.time()\n",
    "summary_rows = []\n",
    "architecture_rows = []\n",
    "\n",
    "for n_index, n in enumerate(N_VALUES, start=1):\n",
    "    assert n % MODULE_WIDTH == 0\n",
    "    modules = n // MODULE_WIDTH\n",
    "    milestone(f\"starting n={n} ({n_index}/{len(N_VALUES)})\", started)\n",
    "\n",
    "    for architecture_draw in range(ARCHITECTURES_PER_N):\n",
    "        architecture = make_architecture(n, architecture_draw)\n",
    "        architecture_id = architecture[\"architecture_id\"]\n",
    "        block_started = time.time()\n",
    "        full_circuit, _, _ = build_full_qiskit_circuit(architecture)\n",
    "        results = {}\n",
    "\n",
    "        for split, draws in ((\"train\", TRAIN_DRAWS), (\"reference\", REFERENCE_DRAWS)):\n",
    "            gradient_squared = np.empty((draws, len(COST_NAMES), n), dtype=float)\n",
    "            wbp_scores = np.empty(draws, dtype=float)\n",
    "\n",
    "            for draw in range(draws):\n",
    "                theta_rng = np.random.default_rng(\n",
    "                    stable_seed(\"single_theta\", n, architecture_draw, split, draw)\n",
    "                )\n",
    "                data_rng = np.random.default_rng(\n",
    "                    stable_seed(\"single_data\", n, architecture_draw, split, draw)\n",
    "                )\n",
    "                theta = theta_rng.uniform(-np.pi, np.pi, size=n)\n",
    "                features = sample_features(n, data_rng)\n",
    "                gradients_for_draw = np.empty((len(COST_NAMES), n), dtype=float)\n",
    "                module_wbp_scores = []\n",
    "\n",
    "                for module_index in range(modules):\n",
    "                    lo = module_index * MODULE_WIDTH\n",
    "                    hi = lo + MODULE_WIDTH\n",
    "                    gradients, module_wbp = module_gradients_and_wbp(\n",
    "                        module_spec(architecture, module_index),\n",
    "                        features[lo:hi],\n",
    "                        theta[lo:hi],\n",
    "                        n,\n",
    "                    )\n",
    "                    gradients_for_draw[:, lo:hi] = gradients\n",
    "                    module_wbp_scores.append(module_wbp)\n",
    "\n",
    "                gradient_squared[draw] = gradients_for_draw**2\n",
    "                wbp_scores[draw] = float(np.mean(module_wbp_scores))\n",
    "\n",
    "            results[split] = {\n",
    "                \"gradient_squared\": gradient_squared,\n",
    "                \"wbp_score\": wbp_scores,\n",
    "            }\n",
    "\n",
    "        train_g2 = results[\"train\"][\"gradient_squared\"]\n",
    "        reference_g2 = results[\"reference\"][\"gradient_squared\"]\n",
    "        train_wbp_scores = results[\"train\"][\"wbp_score\"]\n",
    "        mean_activity = train_g2.mean(axis=0)\n",
    "        std_activity = train_g2.std(axis=0, ddof=1)\n",
    "        reference_activity = reference_g2.mean(axis=0)\n",
    "        wbp_fraction = float(np.mean(train_wbp_scores >= WBP_SCORE_THRESHOLD))\n",
    "\n",
    "        for cost_index, cost in enumerate(COST_NAMES):\n",
    "            for parameter_index in range(n):\n",
    "                local_parameter = parameter_index % MODULE_WIDTH\n",
    "                summary_rows.append({\n",
    "                    \"architecture_id\": architecture_id,\n",
    "                    \"architecture_draw\": architecture_draw,\n",
    "                    \"n\": n,\n",
    "                    \"cost\": cost,\n",
    "                    \"parameter_index\": parameter_index,\n",
    "                    \"module_index\": parameter_index // MODULE_WIDTH,\n",
    "                    \"rotation_round\": 0 if local_parameter < 4 else 1,\n",
    "                    \"axis\": architecture[\"axes\"][parameter_index],\n",
    "                    \"train_draws\": TRAIN_DRAWS,\n",
    "                    \"reference_draws\": REFERENCE_DRAWS,\n",
    "                    \"mean_activity\": float(mean_activity[cost_index, parameter_index]),\n",
    "                    \"std_activity\": float(std_activity[cost_index, parameter_index]),\n",
    "                    \"reference_activity\": float(reference_activity[cost_index, parameter_index]),\n",
    "                    \"mean_wbp_score\": float(train_wbp_scores.mean()),\n",
    "                    \"wbp_warning_fraction\": wbp_fraction,\n",
    "                })\n",
    "\n",
    "        operation_counts = full_circuit.count_ops()\n",
    "        architecture_rows.append({\n",
    "            \"architecture_id\": architecture_id,\n",
    "            \"n\": n,\n",
    "            \"qiskit_full_circuit_constructed\": True,\n",
    "            \"qiskit_num_qubits\": full_circuit.num_qubits,\n",
    "            \"qiskit_trainable_parameters_P\": n,\n",
    "            \"qiskit_input_parameters\": n,\n",
    "            \"qiskit_total_symbolic_parameters\": full_circuit.num_parameters,\n",
    "            \"qiskit_gate_count_G\": full_circuit.size(),\n",
    "            \"qiskit_depth\": full_circuit.depth(),\n",
    "            \"qiskit_rx\": int(operation_counts.get(\"rx\", 0)),\n",
    "            \"qiskit_ry\": int(operation_counts.get(\"ry\", 0)),\n",
    "            \"qiskit_rz\": int(operation_counts.get(\"rz\", 0)),\n",
    "            \"qiskit_cx\": int(operation_counts.get(\"cx\", 0)),\n",
    "            \"qiskit_cz\": int(operation_counts.get(\"cz\", 0)),\n",
    "            \"elapsed_seconds\": time.time() - block_started,\n",
    "            \"exact_simulation_module_width\": MODULE_WIDTH,\n",
    "        })\n",
    "\n",
    "        milestone(\n",
    "            f\"completed n={n}, architecture={architecture_draw + 1}/{ARCHITECTURES_PER_N}\",\n",
    "            started,\n",
    "        )\n",
    "\n",
    "decision_df = pd.DataFrame(summary_rows)\n",
    "architecture_df = pd.DataFrame(architecture_rows)\n",
    "print(\"Parameter/cost decisions:\", len(decision_df))\n",
    "print(\"Total elapsed seconds:\", round(time.time() - started, 3))\n",
    "display(architecture_df)\n",
    "cell_ok(\"Qiskit PRTW and WBP-style paired execution\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f325cf70-1fc9-47dd-a97a-6de1997497fd",
   "metadata": {},
   "source": [
    "## PRTW, H--PRTW, and WBP-style decisions\n",
    "\n",
    "For every parameter and cost,\n",
    "\n",
    "$\n",
    "\\widehat A_j=\\frac{1}{R}\\sum_r(\\partial_{\\theta_j}C)^2,\n",
    "\\qquad \\tau(n)=\\frac{0.125}{n^2}.\n",
    "$\n",
    "\n",
    "The held-out reference uses independent input/parameter draws. PRTW thresholds the exact\n",
    "fixed-draw Qiskit activity. H-PRTW shrinks its natural logarithm toward the median for the same\n",
    "rotation round and cost, requiring no additional circuit execution. The WBP-style comparator uses\n",
    "exact Qiskit one-qubit purities and broadcasts its circuit-level warning to all parameter-cost\n",
    "pairs. It is an idealized state-level comparator, not a full reproduction of the finite-shot WBP\n",
    "protocol.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "00ae7959",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PRIMARY COUNT AND RATE REPORT\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>method</th>\n",
       "      <th>cases</th>\n",
       "      <th>true_weak</th>\n",
       "      <th>warnings</th>\n",
       "      <th>TP_caught_weak</th>\n",
       "      <th>FP_false_alarms</th>\n",
       "      <th>FN_missed_weak</th>\n",
       "      <th>TN_cleared_active</th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>specificity</th>\n",
       "      <th>balanced_accuracy</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>warning_fraction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>64</td>\n",
       "      <td>17</td>\n",
       "      <td>14</td>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>42</td>\n",
       "      <td>0.642857</td>\n",
       "      <td>0.529412</td>\n",
       "      <td>0.893617</td>\n",
       "      <td>0.711514</td>\n",
       "      <td>0.796875</td>\n",
       "      <td>0.218750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>16</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>64</td>\n",
       "      <td>17</td>\n",
       "      <td>8</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>12</td>\n",
       "      <td>44</td>\n",
       "      <td>0.625000</td>\n",
       "      <td>0.294118</td>\n",
       "      <td>0.936170</td>\n",
       "      <td>0.615144</td>\n",
       "      <td>0.765625</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16</td>\n",
       "      <td>WBP</td>\n",
       "      <td>64</td>\n",
       "      <td>17</td>\n",
       "      <td>64</td>\n",
       "      <td>17</td>\n",
       "      <td>47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.265625</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.265625</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>24</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>96</td>\n",
       "      <td>23</td>\n",
       "      <td>19</td>\n",
       "      <td>16</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>70</td>\n",
       "      <td>0.842105</td>\n",
       "      <td>0.695652</td>\n",
       "      <td>0.958904</td>\n",
       "      <td>0.827278</td>\n",
       "      <td>0.895833</td>\n",
       "      <td>0.197917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>96</td>\n",
       "      <td>23</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>73</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.608696</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.804348</td>\n",
       "      <td>0.906250</td>\n",
       "      <td>0.145833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>24</td>\n",
       "      <td>WBP</td>\n",
       "      <td>96</td>\n",
       "      <td>23</td>\n",
       "      <td>96</td>\n",
       "      <td>23</td>\n",
       "      <td>73</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.239583</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.239583</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>32</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>128</td>\n",
       "      <td>36</td>\n",
       "      <td>43</td>\n",
       "      <td>22</td>\n",
       "      <td>21</td>\n",
       "      <td>14</td>\n",
       "      <td>71</td>\n",
       "      <td>0.511628</td>\n",
       "      <td>0.611111</td>\n",
       "      <td>0.771739</td>\n",
       "      <td>0.691425</td>\n",
       "      <td>0.726562</td>\n",
       "      <td>0.335938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>32</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>128</td>\n",
       "      <td>36</td>\n",
       "      <td>32</td>\n",
       "      <td>17</td>\n",
       "      <td>15</td>\n",
       "      <td>19</td>\n",
       "      <td>77</td>\n",
       "      <td>0.531250</td>\n",
       "      <td>0.472222</td>\n",
       "      <td>0.836957</td>\n",
       "      <td>0.654589</td>\n",
       "      <td>0.734375</td>\n",
       "      <td>0.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>32</td>\n",
       "      <td>WBP</td>\n",
       "      <td>128</td>\n",
       "      <td>36</td>\n",
       "      <td>128</td>\n",
       "      <td>36</td>\n",
       "      <td>92</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.281250</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.281250</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>48</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>51</td>\n",
       "      <td>33</td>\n",
       "      <td>18</td>\n",
       "      <td>15</td>\n",
       "      <td>126</td>\n",
       "      <td>0.647059</td>\n",
       "      <td>0.687500</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>0.781250</td>\n",
       "      <td>0.828125</td>\n",
       "      <td>0.265625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>48</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>43</td>\n",
       "      <td>29</td>\n",
       "      <td>14</td>\n",
       "      <td>19</td>\n",
       "      <td>130</td>\n",
       "      <td>0.674419</td>\n",
       "      <td>0.604167</td>\n",
       "      <td>0.902778</td>\n",
       "      <td>0.753472</td>\n",
       "      <td>0.828125</td>\n",
       "      <td>0.223958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>48</td>\n",
       "      <td>WBP</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>144</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>64</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>256</td>\n",
       "      <td>49</td>\n",
       "      <td>69</td>\n",
       "      <td>40</td>\n",
       "      <td>29</td>\n",
       "      <td>9</td>\n",
       "      <td>178</td>\n",
       "      <td>0.579710</td>\n",
       "      <td>0.816327</td>\n",
       "      <td>0.859903</td>\n",
       "      <td>0.838115</td>\n",
       "      <td>0.851562</td>\n",
       "      <td>0.269531</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>64</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>256</td>\n",
       "      <td>49</td>\n",
       "      <td>56</td>\n",
       "      <td>39</td>\n",
       "      <td>17</td>\n",
       "      <td>10</td>\n",
       "      <td>190</td>\n",
       "      <td>0.696429</td>\n",
       "      <td>0.795918</td>\n",
       "      <td>0.917874</td>\n",
       "      <td>0.856896</td>\n",
       "      <td>0.894531</td>\n",
       "      <td>0.218750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>64</td>\n",
       "      <td>WBP</td>\n",
       "      <td>256</td>\n",
       "      <td>49</td>\n",
       "      <td>256</td>\n",
       "      <td>49</td>\n",
       "      <td>207</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.191406</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.191406</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>96</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>384</td>\n",
       "      <td>120</td>\n",
       "      <td>125</td>\n",
       "      <td>89</td>\n",
       "      <td>36</td>\n",
       "      <td>31</td>\n",
       "      <td>228</td>\n",
       "      <td>0.712000</td>\n",
       "      <td>0.741667</td>\n",
       "      <td>0.863636</td>\n",
       "      <td>0.802652</td>\n",
       "      <td>0.825521</td>\n",
       "      <td>0.325521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>96</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>384</td>\n",
       "      <td>120</td>\n",
       "      <td>92</td>\n",
       "      <td>67</td>\n",
       "      <td>25</td>\n",
       "      <td>53</td>\n",
       "      <td>239</td>\n",
       "      <td>0.728261</td>\n",
       "      <td>0.558333</td>\n",
       "      <td>0.905303</td>\n",
       "      <td>0.731818</td>\n",
       "      <td>0.796875</td>\n",
       "      <td>0.239583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>96</td>\n",
       "      <td>WBP</td>\n",
       "      <td>384</td>\n",
       "      <td>120</td>\n",
       "      <td>384</td>\n",
       "      <td>120</td>\n",
       "      <td>264</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.312500</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.312500</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>128</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>512</td>\n",
       "      <td>130</td>\n",
       "      <td>156</td>\n",
       "      <td>100</td>\n",
       "      <td>56</td>\n",
       "      <td>30</td>\n",
       "      <td>326</td>\n",
       "      <td>0.641026</td>\n",
       "      <td>0.769231</td>\n",
       "      <td>0.853403</td>\n",
       "      <td>0.811317</td>\n",
       "      <td>0.832031</td>\n",
       "      <td>0.304688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>128</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>512</td>\n",
       "      <td>130</td>\n",
       "      <td>106</td>\n",
       "      <td>77</td>\n",
       "      <td>29</td>\n",
       "      <td>53</td>\n",
       "      <td>353</td>\n",
       "      <td>0.726415</td>\n",
       "      <td>0.592308</td>\n",
       "      <td>0.924084</td>\n",
       "      <td>0.758196</td>\n",
       "      <td>0.839844</td>\n",
       "      <td>0.207031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>128</td>\n",
       "      <td>WBP</td>\n",
       "      <td>512</td>\n",
       "      <td>130</td>\n",
       "      <td>512</td>\n",
       "      <td>130</td>\n",
       "      <td>382</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.253906</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.253906</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>ALL</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>477</td>\n",
       "      <td>309</td>\n",
       "      <td>168</td>\n",
       "      <td>114</td>\n",
       "      <td>1041</td>\n",
       "      <td>0.647799</td>\n",
       "      <td>0.730496</td>\n",
       "      <td>0.861042</td>\n",
       "      <td>0.795769</td>\n",
       "      <td>0.827206</td>\n",
       "      <td>0.292279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>ALL</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>351</td>\n",
       "      <td>248</td>\n",
       "      <td>103</td>\n",
       "      <td>175</td>\n",
       "      <td>1106</td>\n",
       "      <td>0.706553</td>\n",
       "      <td>0.586288</td>\n",
       "      <td>0.914806</td>\n",
       "      <td>0.750547</td>\n",
       "      <td>0.829657</td>\n",
       "      <td>0.215074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>ALL</td>\n",
       "      <td>WBP</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>1209</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.259191</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.259191</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      n  method  cases  true_weak  warnings  TP_caught_weak  FP_false_alarms  FN_missed_weak  TN_cleared_active  precision    recall  specificity  balanced_accuracy  accuracy  warning_fraction\n",
       "0    16    PRTW     64         17        14               9                5               8                 42   0.642857  0.529412     0.893617           0.711514  0.796875          0.218750\n",
       "1    16  H-PRTW     64         17         8               5                3              12                 44   0.625000  0.294118     0.936170           0.615144  0.765625          0.125000\n",
       "2    16     WBP     64         17        64              17               47               0                  0   0.265625  1.000000     0.000000           0.500000  0.265625          1.000000\n",
       "3    24    PRTW     96         23        19              16                3               7                 70   0.842105  0.695652     0.958904           0.827278  0.895833          0.197917\n",
       "4    24  H-PRTW     96         23        14              14                0               9                 73   1.000000  0.608696     1.000000           0.804348  0.906250          0.145833\n",
       "5    24     WBP     96         23        96              23               73               0                  0   0.239583  1.000000     0.000000           0.500000  0.239583          1.000000\n",
       "6    32    PRTW    128         36        43              22               21              14                 71   0.511628  0.611111     0.771739           0.691425  0.726562          0.335938\n",
       "7    32  H-PRTW    128         36        32              17               15              19                 77   0.531250  0.472222     0.836957           0.654589  0.734375          0.250000\n",
       "8    32     WBP    128         36       128              36               92               0                  0   0.281250  1.000000     0.000000           0.500000  0.281250          1.000000\n",
       "9    48    PRTW    192         48        51              33               18              15                126   0.647059  0.687500     0.875000           0.781250  0.828125          0.265625\n",
       "10   48  H-PRTW    192         48        43              29               14              19                130   0.674419  0.604167     0.902778           0.753472  0.828125          0.223958\n",
       "11   48     WBP    192         48       192              48              144               0                  0   0.250000  1.000000     0.000000           0.500000  0.250000          1.000000\n",
       "12   64    PRTW    256         49        69              40               29               9                178   0.579710  0.816327     0.859903           0.838115  0.851562          0.269531\n",
       "13   64  H-PRTW    256         49        56              39               17              10                190   0.696429  0.795918     0.917874           0.856896  0.894531          0.218750\n",
       "14   64     WBP    256         49       256              49              207               0                  0   0.191406  1.000000     0.000000           0.500000  0.191406          1.000000\n",
       "15   96    PRTW    384        120       125              89               36              31                228   0.712000  0.741667     0.863636           0.802652  0.825521          0.325521\n",
       "16   96  H-PRTW    384        120        92              67               25              53                239   0.728261  0.558333     0.905303           0.731818  0.796875          0.239583\n",
       "17   96     WBP    384        120       384             120              264               0                  0   0.312500  1.000000     0.000000           0.500000  0.312500          1.000000\n",
       "18  128    PRTW    512        130       156             100               56              30                326   0.641026  0.769231     0.853403           0.811317  0.832031          0.304688\n",
       "19  128  H-PRTW    512        130       106              77               29              53                353   0.726415  0.592308     0.924084           0.758196  0.839844          0.207031\n",
       "20  128     WBP    512        130       512             130              382               0                  0   0.253906  1.000000     0.000000           0.500000  0.253906          1.000000\n",
       "21  ALL    PRTW   1632        423       477             309              168             114               1041   0.647799  0.730496     0.861042           0.795769  0.827206          0.292279\n",
       "22  ALL  H-PRTW   1632        423       351             248              103             175               1106   0.706553  0.586288     0.914806           0.750547  0.829657          0.215074\n",
       "23  ALL     WBP   1632        423      1632             423             1209               0                  0   0.259191  1.000000     0.000000           0.500000  0.259191          1.000000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "WITHIN-CIRCUIT PARAMETER LOCALIZATION\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>method</th>\n",
       "      <th>mean_within_circuit_AUROC</th>\n",
       "      <th>median_within_circuit_AUROC</th>\n",
       "      <th>evaluated_groups</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.909821</td>\n",
       "      <td>0.937500</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>16</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.904613</td>\n",
       "      <td>0.927083</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>24</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.935032</td>\n",
       "      <td>0.976314</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.945188</td>\n",
       "      <td>0.984127</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>24</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>32</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.785553</td>\n",
       "      <td>0.786458</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>32</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.807968</td>\n",
       "      <td>0.799479</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>32</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>48</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.885948</td>\n",
       "      <td>0.880329</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>48</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.883669</td>\n",
       "      <td>0.880400</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>48</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>64</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.927590</td>\n",
       "      <td>0.937688</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>64</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.921968</td>\n",
       "      <td>0.934570</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>64</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>96</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.895296</td>\n",
       "      <td>0.891580</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>96</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.896373</td>\n",
       "      <td>0.893504</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>96</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>128</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>0.881935</td>\n",
       "      <td>0.876282</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>128</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>0.881680</td>\n",
       "      <td>0.875230</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>128</td>\n",
       "      <td>WBP</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      n  method  mean_within_circuit_AUROC  median_within_circuit_AUROC  evaluated_groups\n",
       "0    16  H-PRTW                   0.909821                     0.937500                 4\n",
       "1    16    PRTW                   0.904613                     0.927083                 4\n",
       "2    16     WBP                   0.500000                     0.500000                 4\n",
       "3    24  H-PRTW                   0.935032                     0.976314                 4\n",
       "4    24    PRTW                   0.945188                     0.984127                 4\n",
       "5    24     WBP                   0.500000                     0.500000                 4\n",
       "6    32  H-PRTW                   0.785553                     0.786458                 4\n",
       "7    32    PRTW                   0.807968                     0.799479                 4\n",
       "8    32     WBP                   0.500000                     0.500000                 4\n",
       "9    48  H-PRTW                   0.885948                     0.880329                 4\n",
       "10   48    PRTW                   0.883669                     0.880400                 4\n",
       "11   48     WBP                   0.500000                     0.500000                 4\n",
       "12   64  H-PRTW                   0.927590                     0.937688                 4\n",
       "13   64    PRTW                   0.921968                     0.934570                 4\n",
       "14   64     WBP                   0.500000                     0.500000                 4\n",
       "15   96  H-PRTW                   0.895296                     0.891580                 4\n",
       "16   96    PRTW                   0.896373                     0.893504                 4\n",
       "17   96     WBP                   0.500000                     0.500000                 4\n",
       "18  128  H-PRTW                   0.881935                     0.876282                 4\n",
       "19  128    PRTW                   0.881680                     0.875230                 4\n",
       "20  128     WBP                   0.500000                     0.500000                 4"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "✅ CELL COMPLETE — operational labels and paired method comparison\n"
     ]
    }
   ],
   "source": [
    "decision_df[\"threshold\"] = ACTIVITY_THRESHOLD_FACTOR / decision_df[\"n\"]**2\n",
    "decision_df[\"truth_weak\"] = decision_df[\"reference_activity\"] <= decision_df[\"threshold\"]\n",
    "decision_df[\"prtw_warning\"] = decision_df[\"mean_activity\"] <= decision_df[\"threshold\"]\n",
    "decision_df[\"wbp_warning\"] = (\n",
    "    decision_df[\"wbp_warning_fraction\"] >= WBP_DRAW_FRACTION_THRESHOLD\n",
    ")\n",
    "\n",
    "tiny = np.finfo(float).tiny\n",
    "decision_df[\"log_activity\"] = np.log(np.maximum(decision_df[\"mean_activity\"], tiny))\n",
    "decision_df[\"round_log_median\"] = decision_df.groupby([\n",
    "    \"architecture_id\", \"cost\", \"rotation_round\"\n",
    "])[\"log_activity\"].transform(\"median\")\n",
    "h_weight = TRAIN_DRAWS / (TRAIN_DRAWS + HIERARCHICAL_PSEUDO_DRAWS)\n",
    "decision_df[\"h_activity\"] = np.exp(\n",
    "    h_weight * decision_df[\"log_activity\"]\n",
    "    + (1.0 - h_weight) * decision_df[\"round_log_median\"]\n",
    ")\n",
    "decision_df[\"h_prtw_warning\"] = decision_df[\"h_activity\"] <= decision_df[\"threshold\"]\n",
    "\n",
    "\n",
    "def safe_ratio(num, den):\n",
    "    return float(num / den) if den else np.nan\n",
    "\n",
    "\n",
    "def binary_metrics(frame: pd.DataFrame, prediction_column: str) -> dict:\n",
    "    truth = frame[\"truth_weak\"].to_numpy(dtype=bool)\n",
    "    pred = frame[prediction_column].to_numpy(dtype=bool)\n",
    "    tp = int(np.sum(truth & pred))\n",
    "    fp = int(np.sum(~truth & pred))\n",
    "    tn = int(np.sum(~truth & ~pred))\n",
    "    fn = int(np.sum(truth & ~pred))\n",
    "    recall = safe_ratio(tp, tp + fn)\n",
    "    specificity = safe_ratio(tn, tn + fp)\n",
    "    return {\n",
    "        \"cases\": len(frame),\n",
    "        \"true_weak\": int(truth.sum()),\n",
    "        \"warnings\": int(pred.sum()),\n",
    "        \"TP_caught_weak\": tp,\n",
    "        \"FP_false_alarms\": fp,\n",
    "        \"FN_missed_weak\": fn,\n",
    "        \"TN_cleared_active\": tn,\n",
    "        \"precision\": safe_ratio(tp, tp + fp),\n",
    "        \"recall\": recall,\n",
    "        \"specificity\": specificity,\n",
    "        \"balanced_accuracy\": np.nanmean([recall, specificity]),\n",
    "        \"accuracy\": safe_ratio(tp + tn, len(frame)),\n",
    "        \"warning_fraction\": float(pred.mean()),\n",
    "    }\n",
    "\n",
    "\n",
    "METHOD_COLUMNS = {\n",
    "    \"PRTW\": \"prtw_warning\",\n",
    "    \"H-PRTW\": \"h_prtw_warning\",\n",
    "    \"WBP\": \"wbp_warning\",\n",
    "}\n",
    "\n",
    "performance_rows = []\n",
    "for n in N_VALUES:\n",
    "    frame = decision_df[decision_df[\"n\"] == n]\n",
    "    for method, column in METHOD_COLUMNS.items():\n",
    "        performance_rows.append({\"n\": n, \"method\": method, **binary_metrics(frame, column)})\n",
    "for method, column in METHOD_COLUMNS.items():\n",
    "    performance_rows.append({\"n\": \"ALL\", \"method\": method, **binary_metrics(decision_df, column)})\n",
    "performance_df = pd.DataFrame(performance_rows)\n",
    "\n",
    "\n",
    "def average_rank_auc(labels: np.ndarray, scores: np.ndarray) -> float:\n",
    "    labels = np.asarray(labels, dtype=bool)\n",
    "    positives = int(labels.sum())\n",
    "    negatives = int((~labels).sum())\n",
    "    if positives == 0 or negatives == 0:\n",
    "        return np.nan\n",
    "    ranks = pd.Series(scores).rank(method=\"average\").to_numpy()\n",
    "    return float((ranks[labels].sum() - positives * (positives + 1) / 2) / (positives * negatives))\n",
    "\n",
    "\n",
    "# Within a circuit and cost, larger risk means more likely weak.\n",
    "localization_rows = []\n",
    "for keys, frame in decision_df.groupby([\"n\", \"architecture_id\", \"cost\"], sort=True):\n",
    "    n, architecture_id, cost = keys\n",
    "    localization_rows.extend([\n",
    "        {\"n\": n, \"architecture_id\": architecture_id, \"cost\": cost,\n",
    "         \"method\": \"PRTW\", \"AUROC\": average_rank_auc(frame[\"truth_weak\"], -frame[\"mean_activity\"])},\n",
    "        {\"n\": n, \"architecture_id\": architecture_id, \"cost\": cost,\n",
    "         \"method\": \"H-PRTW\", \"AUROC\": average_rank_auc(frame[\"truth_weak\"], -frame[\"h_activity\"])},\n",
    "        {\"n\": n, \"architecture_id\": architecture_id, \"cost\": cost,\n",
    "         \"method\": \"WBP\", \"AUROC\": average_rank_auc(frame[\"truth_weak\"], np.repeat(-frame[\"mean_wbp_score\"].iloc[0], len(frame)))},\n",
    "    ])\n",
    "localization_df = pd.DataFrame(localization_rows)\n",
    "localization_summary_df = localization_df.groupby([\"n\", \"method\"], as_index=False).agg(\n",
    "    mean_within_circuit_AUROC=(\"AUROC\", \"mean\"),\n",
    "    median_within_circuit_AUROC=(\"AUROC\", \"median\"),\n",
    "    evaluated_groups=(\"AUROC\", \"count\"),\n",
    ")\n",
    "\n",
    "print(\"PRIMARY COUNT AND RATE REPORT\")\n",
    "display(performance_df)\n",
    "print(\"\\nWITHIN-CIRCUIT PARAMETER LOCALIZATION\")\n",
    "display(localization_summary_df)\n",
    "cell_ok(\"operational labels and paired method comparison\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "56df1b9f",
   "metadata": {},
   "source": [
    "## Finite-shot Shadow--PRTW on the same Qiskit circuits\n",
    "\n",
    "For each monitored parameter, the already defined Qiskit circuit is bound twice, with that angle\n",
    "shifted by $(+\\pi/2)$ and $(-\\pi/2)$. Qiskit statevectors execute those circuits. Qiskit's seeded\n",
    "Born sampler then generates the finite measurement outcomes used by two independent shadow\n",
    "replicas.\n",
    "\n",
    "The declared costs contain only one-qubit (Z) terms. In a local-Pauli classical shadow, a term\n",
    "contributes only on shots where its qubit was assigned the (Z) basis; its single-shot inverse-channel\n",
    "estimate is (3z), and it is zero on (X)- or (Y)-basis shots. The implementation therefore asks\n",
    "Qiskit for the required joint (Z)-outcome distribution and generates the independent Pauli-basis\n",
    "labels separately. It deliberately omits unused (X/Y) outcomes. This is an exact optimization for\n",
    "these (Z)-only observables, not an exact-expectation replacement for finite shots.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4a5b7ebd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shadow configuration fingerprint: 57303d34de46\n",
      "Shadow sizes: (16, 24, 32, 48, 64, 96, 128)\n",
      "All parameters monitored: True\n",
      "Shots per shifted state and replica: (16, 64, 256, 1024)\n",
      "Independent Monte Carlo validation trials: 8\n",
      "\n",
      "✅ CELL COMPLETE — Qiskit Shadow-PRTW configuration and sampler\n"
     ]
    }
   ],
   "source": [
    "# Shadow validation controls. All n values, architectures, and parameters are included.\n",
    "SHADOW_N_VALUES = tuple(N_VALUES)\n",
    "SHADOW_ARCHITECTURE_DRAWS = tuple(range(ARCHITECTURES_PER_N))\n",
    "SHADOW_PARAMETERS_PER_N = None\n",
    "SHADOW_SHOT_BUDGETS = (16, 64, 256, 1024)\n",
    "SHADOW_TRIALS = 8\n",
    "SHADOW_MOM_BLOCKS = 4\n",
    "\n",
    "assert SHADOW_N_VALUES\n",
    "assert tuple(sorted(SHADOW_SHOT_BUDGETS)) == SHADOW_SHOT_BUDGETS\n",
    "assert SHADOW_SHOT_BUDGETS[0] > 0\n",
    "assert TRAIN_DRAWS >= SHADOW_MOM_BLOCKS >= 2\n",
    "\n",
    "\n",
    "def selected_parameter_indices(n: int) -> np.ndarray:\n",
    "    if SHADOW_PARAMETERS_PER_N is None or SHADOW_PARAMETERS_PER_N >= n:\n",
    "        return np.arange(n, dtype=int)\n",
    "    raw = np.linspace(0, n - 1, SHADOW_PARAMETERS_PER_N)\n",
    "    return np.unique(np.rint(raw).astype(int))\n",
    "\n",
    "\n",
    "def shifted_module_states_and_gradient(\n",
    "    spec,\n",
    "    features: np.ndarray,\n",
    "    theta: np.ndarray,\n",
    "    local_parameter: int,\n",
    "    global_n: int,\n",
    ") -> Tuple[Statevector, Statevector, np.ndarray]:\n",
    "    \"\"\"Execute the two bound Qiskit parameter-shift circuits.\"\"\"\n",
    "    theta_plus = theta.copy()\n",
    "    theta_minus = theta.copy()\n",
    "    theta_plus[local_parameter] += np.pi / 2\n",
    "    theta_minus[local_parameter] -= np.pi / 2\n",
    "    state_plus = module_state(spec, features, theta_plus)\n",
    "    state_minus = module_state(spec, features, theta_minus)\n",
    "    exact_gradient = 0.5 * (\n",
    "        module_costs(state_plus, global_n) - module_costs(state_minus, global_n)\n",
    "    )\n",
    "    return state_plus, state_minus, exact_gradient\n",
    "\n",
    "\n",
    "def memory_to_logical_bits(memory: np.ndarray) -> np.ndarray:\n",
    "    \"\"\"Convert Qiskit q7...q0 bitstrings to logical q0...q7 bits.\"\"\"\n",
    "    byte_rows = np.asarray(memory).astype(f\"S{MODULE_WIDTH}\").view(np.uint8)\n",
    "    bits = byte_rows.reshape(-1, MODULE_WIDTH) - ord(\"0\")\n",
    "    assert np.all((bits == 0) | (bits == 1))\n",
    "    # physical_wire reverses each module, so the displayed q7...q0 order is logical q0...q7.\n",
    "    return bits.astype(np.int8, copy=False)\n",
    "\n",
    "\n",
    "def qiskit_z_shadow_replicas(\n",
    "    state: Statevector,\n",
    "    global_n: int,\n",
    "    seed: int,\n",
    ") -> np.ndarray:\n",
    "    \"\"\"Return two independent local-Pauli-shadow estimates from Qiskit Born samples.\n",
    "\n",
    "    Shape: (replica=2, trial, shot_budget, cost=2).\n",
    "    \"\"\"\n",
    "    max_shots = max(SHADOW_SHOT_BUDGETS)\n",
    "    total_shots = 2 * SHADOW_TRIALS * max_shots\n",
    "\n",
    "    sampled_state = state.copy()\n",
    "    sampled_state.seed(seed)\n",
    "    memory = sampled_state.sample_memory(total_shots)\n",
    "    logical_bits = memory_to_logical_bits(memory).reshape(\n",
    "        2, SHADOW_TRIALS, max_shots, MODULE_WIDTH\n",
    "    )\n",
    "    z_outcomes = 1.0 - 2.0 * logical_bits\n",
    "\n",
    "    basis_rng = np.random.default_rng(stable_seed(\"shadow_basis\", seed))\n",
    "    bases = basis_rng.integers(\n",
    "        0, 3,\n",
    "        size=(2, SHADOW_TRIALS, max_shots, MODULE_WIDTH),\n",
    "        dtype=np.int8,\n",
    "    )\n",
    "    z_selected = bases == 2\n",
    "    shadow_z = 3.0 * z_outcomes * z_selected\n",
    "\n",
    "    shot_costs = np.stack([\n",
    "        shadow_z.sum(axis=3) / global_n,\n",
    "        np.einsum(\"rtmq,q->rtm\", shadow_z, STAGGERED) / global_n,\n",
    "    ], axis=3)\n",
    "    cumulative = np.cumsum(shot_costs, axis=2)\n",
    "    return np.stack([\n",
    "        cumulative[:, :, shots - 1, :] / shots\n",
    "        for shots in SHADOW_SHOT_BUDGETS\n",
    "    ], axis=2)\n",
    "\n",
    "\n",
    "def median_of_means_over_draws(values: np.ndarray, blocks: int) -> np.ndarray:\n",
    "    draw_groups = np.array_split(np.arange(values.shape[0]), blocks)\n",
    "    block_means = np.stack([\n",
    "        values[group].mean(axis=0) for group in draw_groups\n",
    "    ], axis=0)\n",
    "    return np.median(block_means, axis=0)\n",
    "\n",
    "\n",
    "# Verify Qiskit's empirical Born sampler on a bound circuit before the large run.\n",
    "shot_check_state = module_state(\n",
    "    test_module_spec, test_features[:8], test_theta[:8]\n",
    ")\n",
    "shot_check = qiskit_z_shadow_replicas(shot_check_state, 16, stable_seed(\"shot_check\"))\n",
    "assert shot_check.shape == (\n",
    "    2, SHADOW_TRIALS, len(SHADOW_SHOT_BUDGETS), len(COST_NAMES)\n",
    ")\n",
    "\n",
    "SHADOW_CONFIG = {\n",
    "    \"implementation\": \"Qiskit Statevector.sample_memory plus local-Pauli inverse channel\",\n",
    "    \"n_values\": SHADOW_N_VALUES,\n",
    "    \"architecture_draws\": SHADOW_ARCHITECTURE_DRAWS,\n",
    "    \"parameters_per_n\": SHADOW_PARAMETERS_PER_N,\n",
    "    \"shot_budgets\": SHADOW_SHOT_BUDGETS,\n",
    "    \"trials\": SHADOW_TRIALS,\n",
    "    \"mom_blocks\": SHADOW_MOM_BLOCKS,\n",
    "}\n",
    "SHADOW_CONFIG_FINGERPRINT = hashlib.sha256(\n",
    "    json.dumps(SHADOW_CONFIG, sort_keys=True, default=str).encode(\"utf-8\")\n",
    ").hexdigest()[:12]\n",
    "print(\"Shadow configuration fingerprint:\", SHADOW_CONFIG_FINGERPRINT)\n",
    "print(\"Shadow sizes:\", SHADOW_N_VALUES)\n",
    "print(\"All parameters monitored:\", SHADOW_PARAMETERS_PER_N is None)\n",
    "print(\"Shots per shifted state and replica:\", SHADOW_SHOT_BUDGETS)\n",
    "print(\"Independent Monte Carlo validation trials:\", SHADOW_TRIALS)\n",
    "cell_ok(\"Qiskit Shadow-PRTW configuration and sampler\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31dbf478-ea9b-413a-a210-0aed9797f2bc",
   "metadata": {},
   "source": [
    "## Core experimental execution: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "79df16f4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[MILESTONE] starting Qiskit Shadow-PRTW n=16 with 16 parameters | elapsed=0.00 min\n",
      "[MILESTONE] n=16: completed 4/16 parameters | elapsed=0.03 min\n",
      "[MILESTONE] n=16: completed 8/16 parameters | elapsed=0.06 min\n",
      "[MILESTONE] n=16: completed 12/16 parameters | elapsed=0.08 min\n",
      "[MILESTONE] n=16: completed 16/16 parameters | elapsed=0.11 min\n",
      "[MILESTONE] n=16: completed 4/16 parameters | elapsed=0.13 min\n",
      "[MILESTONE] n=16: completed 8/16 parameters | elapsed=0.15 min\n",
      "[MILESTONE] n=16: completed 12/16 parameters | elapsed=0.18 min\n",
      "[MILESTONE] n=16: completed 16/16 parameters | elapsed=0.21 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=24 with 24 parameters | elapsed=0.21 min\n",
      "[MILESTONE] n=24: completed 6/24 parameters | elapsed=0.26 min\n",
      "[MILESTONE] n=24: completed 12/24 parameters | elapsed=0.30 min\n",
      "[MILESTONE] n=24: completed 18/24 parameters | elapsed=0.34 min\n",
      "[MILESTONE] n=24: completed 24/24 parameters | elapsed=0.38 min\n",
      "[MILESTONE] n=24: completed 6/24 parameters | elapsed=0.42 min\n",
      "[MILESTONE] n=24: completed 12/24 parameters | elapsed=0.46 min\n",
      "[MILESTONE] n=24: completed 18/24 parameters | elapsed=0.50 min\n",
      "[MILESTONE] n=24: completed 24/24 parameters | elapsed=0.54 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=32 with 32 parameters | elapsed=0.54 min\n",
      "[MILESTONE] n=32: completed 8/32 parameters | elapsed=0.59 min\n",
      "[MILESTONE] n=32: completed 16/32 parameters | elapsed=0.64 min\n",
      "[MILESTONE] n=32: completed 24/32 parameters | elapsed=0.70 min\n",
      "[MILESTONE] n=32: completed 32/32 parameters | elapsed=0.74 min\n",
      "[MILESTONE] n=32: completed 8/32 parameters | elapsed=0.80 min\n",
      "[MILESTONE] n=32: completed 16/32 parameters | elapsed=0.85 min\n",
      "[MILESTONE] n=32: completed 24/32 parameters | elapsed=0.90 min\n",
      "[MILESTONE] n=32: completed 32/32 parameters | elapsed=0.95 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=48 with 48 parameters | elapsed=0.95 min\n",
      "[MILESTONE] n=48: completed 12/48 parameters | elapsed=1.03 min\n",
      "[MILESTONE] n=48: completed 24/48 parameters | elapsed=1.12 min\n",
      "[MILESTONE] n=48: completed 36/48 parameters | elapsed=1.21 min\n",
      "[MILESTONE] n=48: completed 48/48 parameters | elapsed=1.30 min\n",
      "[MILESTONE] n=48: completed 12/48 parameters | elapsed=1.38 min\n",
      "[MILESTONE] n=48: completed 24/48 parameters | elapsed=1.46 min\n",
      "[MILESTONE] n=48: completed 36/48 parameters | elapsed=1.54 min\n",
      "[MILESTONE] n=48: completed 48/48 parameters | elapsed=1.61 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=64 with 64 parameters | elapsed=1.61 min\n",
      "[MILESTONE] n=64: completed 16/64 parameters | elapsed=1.70 min\n",
      "[MILESTONE] n=64: completed 32/64 parameters | elapsed=1.80 min\n",
      "[MILESTONE] n=64: completed 48/64 parameters | elapsed=1.89 min\n",
      "[MILESTONE] n=64: completed 64/64 parameters | elapsed=1.99 min\n",
      "[MILESTONE] n=64: completed 16/64 parameters | elapsed=2.08 min\n",
      "[MILESTONE] n=64: completed 32/64 parameters | elapsed=2.19 min\n",
      "[MILESTONE] n=64: completed 48/64 parameters | elapsed=2.29 min\n",
      "[MILESTONE] n=64: completed 64/64 parameters | elapsed=2.39 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=96 with 96 parameters | elapsed=2.39 min\n",
      "[MILESTONE] n=96: completed 24/96 parameters | elapsed=2.54 min\n",
      "[MILESTONE] n=96: completed 48/96 parameters | elapsed=2.69 min\n",
      "[MILESTONE] n=96: completed 72/96 parameters | elapsed=2.84 min\n",
      "[MILESTONE] n=96: completed 96/96 parameters | elapsed=2.98 min\n",
      "[MILESTONE] n=96: completed 24/96 parameters | elapsed=3.12 min\n",
      "[MILESTONE] n=96: completed 48/96 parameters | elapsed=3.26 min\n",
      "[MILESTONE] n=96: completed 72/96 parameters | elapsed=3.40 min\n",
      "[MILESTONE] n=96: completed 96/96 parameters | elapsed=3.55 min\n",
      "[MILESTONE] starting Qiskit Shadow-PRTW n=128 with 128 parameters | elapsed=3.55 min\n",
      "[MILESTONE] n=128: completed 32/128 parameters | elapsed=3.74 min\n",
      "[MILESTONE] n=128: completed 64/128 parameters | elapsed=3.93 min\n",
      "[MILESTONE] n=128: completed 96/128 parameters | elapsed=4.14 min\n",
      "[MILESTONE] n=128: completed 128/128 parameters | elapsed=4.33 min\n",
      "[MILESTONE] n=128: completed 32/128 parameters | elapsed=4.52 min\n",
      "[MILESTONE] n=128: completed 64/128 parameters | elapsed=4.71 min\n",
      "[MILESTONE] n=128: completed 96/128 parameters | elapsed=4.89 min\n",
      "[MILESTONE] n=128: completed 128/128 parameters | elapsed=5.08 min\n",
      "Shadow parameter/cost cases: 1632\n",
      "Shadow trial rows: 52224\n",
      "Qiskit shadow simulation seconds: 305.26\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>architecture_id</th>\n",
       "      <th>n</th>\n",
       "      <th>parameter_index</th>\n",
       "      <th>module_index</th>\n",
       "      <th>cost</th>\n",
       "      <th>threshold</th>\n",
       "      <th>exact_train_activity</th>\n",
       "      <th>held_out_reference_activity</th>\n",
       "      <th>held_out_truth_weak</th>\n",
       "      <th>exact_prtw_warning</th>\n",
       "      <th>exact_h_prtw_warning</th>\n",
       "      <th>wbp_warning</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000563</td>\n",
       "      <td>0.000327</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000455</td>\n",
       "      <td>0.000239</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000562</td>\n",
       "      <td>0.000124</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000106</td>\n",
       "      <td>0.000510</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000616</td>\n",
       "      <td>0.000652</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.001095</td>\n",
       "      <td>0.000938</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.002909</td>\n",
       "      <td>0.001486</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000897</td>\n",
       "      <td>0.002123</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000582</td>\n",
       "      <td>0.000453</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000566</td>\n",
       "      <td>0.000383</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>mean_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000479</td>\n",
       "      <td>0.000383</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>qiskit_n16_a0_2c32656f00d167f8</td>\n",
       "      <td>16</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>staggered_Z</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000063</td>\n",
       "      <td>0.000442</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   architecture_id   n  parameter_index  module_index         cost  threshold  exact_train_activity  held_out_reference_activity  held_out_truth_weak  exact_prtw_warning  exact_h_prtw_warning  \\\n",
       "0   qiskit_n16_a0_2c32656f00d167f8  16                0             0       mean_Z   0.000488              0.000563                     0.000327                 True               False                 False   \n",
       "1   qiskit_n16_a0_2c32656f00d167f8  16                0             0  staggered_Z   0.000488              0.000455                     0.000239                 True                True                  True   \n",
       "2   qiskit_n16_a0_2c32656f00d167f8  16                1             0       mean_Z   0.000488              0.000562                     0.000124                 True               False                 False   \n",
       "3   qiskit_n16_a0_2c32656f00d167f8  16                1             0  staggered_Z   0.000488              0.000106                     0.000510                False                True                  True   \n",
       "4   qiskit_n16_a0_2c32656f00d167f8  16                2             0       mean_Z   0.000488              0.000616                     0.000652                False               False                 False   \n",
       "5   qiskit_n16_a0_2c32656f00d167f8  16                2             0  staggered_Z   0.000488              0.001095                     0.000938                False               False                 False   \n",
       "6   qiskit_n16_a0_2c32656f00d167f8  16                3             0       mean_Z   0.000488              0.002909                     0.001486                False               False                 False   \n",
       "7   qiskit_n16_a0_2c32656f00d167f8  16                3             0  staggered_Z   0.000488              0.000897                     0.002123                False               False                 False   \n",
       "8   qiskit_n16_a0_2c32656f00d167f8  16                4             0       mean_Z   0.000488              0.000582                     0.000453                 True               False                 False   \n",
       "9   qiskit_n16_a0_2c32656f00d167f8  16                4             0  staggered_Z   0.000488              0.000566                     0.000383                 True               False                 False   \n",
       "10  qiskit_n16_a0_2c32656f00d167f8  16                5             0       mean_Z   0.000488              0.000479                     0.000383                 True                True                 False   \n",
       "11  qiskit_n16_a0_2c32656f00d167f8  16                5             0  staggered_Z   0.000488              0.000063                     0.000442                 True                True                  True   \n",
       "\n",
       "    wbp_warning  \n",
       "0          True  \n",
       "1          True  \n",
       "2          True  \n",
       "3          True  \n",
       "4          True  \n",
       "5          True  \n",
       "6          True  \n",
       "7          True  \n",
       "8          True  \n",
       "9          True  \n",
       "10         True  \n",
       "11         True  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "✅ CELL COMPLETE — full Qiskit finite-shot Shadow-PRTW execution\n"
     ]
    }
   ],
   "source": [
    "shadow_started = time.time()\n",
    "shadow_trial_rows = []\n",
    "shadow_case_rows = []\n",
    "\n",
    "for n in SHADOW_N_VALUES:\n",
    "    parameter_indices = selected_parameter_indices(n)\n",
    "    milestone(\n",
    "        f\"starting Qiskit Shadow-PRTW n={n} with {len(parameter_indices)} parameters\",\n",
    "        shadow_started,\n",
    "    )\n",
    "\n",
    "    for architecture_draw in SHADOW_ARCHITECTURE_DRAWS:\n",
    "        architecture = make_architecture(n, architecture_draw)\n",
    "        architecture_id = architecture[\"architecture_id\"]\n",
    "\n",
    "        for parameter_number, parameter_index in enumerate(parameter_indices, start=1):\n",
    "            module_index = parameter_index // MODULE_WIDTH\n",
    "            local_parameter = parameter_index % MODULE_WIDTH\n",
    "            lo = module_index * MODULE_WIDTH\n",
    "            hi = lo + MODULE_WIDTH\n",
    "            spec = module_spec(architecture, module_index)\n",
    "\n",
    "            exact_gradients_by_draw = []\n",
    "            cross_products_by_draw = []\n",
    "            naive_squares_by_draw = []\n",
    "\n",
    "            for draw in range(TRAIN_DRAWS):\n",
    "                theta_rng = np.random.default_rng(\n",
    "                    stable_seed(\"single_theta\", n, architecture_draw, \"train\", draw)\n",
    "                )\n",
    "                data_rng = np.random.default_rng(\n",
    "                    stable_seed(\"single_data\", n, architecture_draw, \"train\", draw)\n",
    "                )\n",
    "                theta = theta_rng.uniform(-np.pi, np.pi, size=n)\n",
    "                features = sample_features(n, data_rng)\n",
    "\n",
    "                state_plus, state_minus, exact_gradient = shifted_module_states_and_gradient(\n",
    "                    spec,\n",
    "                    features[lo:hi],\n",
    "                    theta[lo:hi],\n",
    "                    local_parameter,\n",
    "                    n,\n",
    "                )\n",
    "                exact_gradients_by_draw.append(exact_gradient)\n",
    "\n",
    "                plus_estimates = qiskit_z_shadow_replicas(\n",
    "                    state_plus,\n",
    "                    n,\n",
    "                    stable_seed(\n",
    "                        \"qiskit_shadow\", n, architecture_draw,\n",
    "                        parameter_index, draw, \"plus\"\n",
    "                    ),\n",
    "                )\n",
    "                minus_estimates = qiskit_z_shadow_replicas(\n",
    "                    state_minus,\n",
    "                    n,\n",
    "                    stable_seed(\n",
    "                        \"qiskit_shadow\", n, architecture_draw,\n",
    "                        parameter_index, draw, \"minus\"\n",
    "                    ),\n",
    "                )\n",
    "                gradient_replicas = 0.5 * (plus_estimates - minus_estimates)\n",
    "                gradient_1, gradient_2 = gradient_replicas\n",
    "                cross_products_by_draw.append(gradient_1 * gradient_2)\n",
    "                naive_squares_by_draw.append(0.5 * (gradient_1**2 + gradient_2**2))\n",
    "\n",
    "            exact_gradients_by_draw = np.asarray(exact_gradients_by_draw)\n",
    "            cross_products_by_draw = np.asarray(cross_products_by_draw)\n",
    "            naive_squares_by_draw = np.asarray(naive_squares_by_draw)\n",
    "\n",
    "            exact_empirical_activity = np.mean(exact_gradients_by_draw**2, axis=0)\n",
    "            cross_mean_activity = np.mean(cross_products_by_draw, axis=0)\n",
    "            naive_mean_activity = np.mean(naive_squares_by_draw, axis=0)\n",
    "            cross_mom_activity = median_of_means_over_draws(\n",
    "                cross_products_by_draw, SHADOW_MOM_BLOCKS\n",
    "            )\n",
    "\n",
    "            for cost_index, cost in enumerate(COST_NAMES):\n",
    "                source_row = decision_df.loc[\n",
    "                    decision_df[\"architecture_id\"].eq(architecture_id)\n",
    "                    & decision_df[\"parameter_index\"].eq(parameter_index)\n",
    "                    & decision_df[\"cost\"].eq(cost)\n",
    "                ]\n",
    "                assert len(source_row) == 1\n",
    "                source_row = source_row.iloc[0]\n",
    "                assert np.isclose(\n",
    "                    exact_empirical_activity[cost_index],\n",
    "                    source_row[\"mean_activity\"],\n",
    "                    rtol=1e-10,\n",
    "                    atol=1e-14,\n",
    "                )\n",
    "\n",
    "                shadow_case_rows.append({\n",
    "                    \"architecture_id\": architecture_id,\n",
    "                    \"n\": n,\n",
    "                    \"parameter_index\": parameter_index,\n",
    "                    \"module_index\": module_index,\n",
    "                    \"cost\": cost,\n",
    "                    \"threshold\": float(source_row[\"threshold\"]),\n",
    "                    \"exact_train_activity\": float(exact_empirical_activity[cost_index]),\n",
    "                    \"held_out_reference_activity\": float(source_row[\"reference_activity\"]),\n",
    "                    \"held_out_truth_weak\": bool(source_row[\"truth_weak\"]),\n",
    "                    \"exact_prtw_warning\": bool(source_row[\"prtw_warning\"]),\n",
    "                    \"exact_h_prtw_warning\": bool(source_row[\"h_prtw_warning\"]),\n",
    "                    \"wbp_warning\": bool(source_row[\"wbp_warning\"]),\n",
    "                })\n",
    "\n",
    "                for trial in range(SHADOW_TRIALS):\n",
    "                    for budget_index, shots in enumerate(SHADOW_SHOT_BUDGETS):\n",
    "                        shadow_trial_rows.append({\n",
    "                            \"architecture_id\": architecture_id,\n",
    "                            \"n\": n,\n",
    "                            \"parameter_index\": parameter_index,\n",
    "                            \"module_index\": module_index,\n",
    "                            \"cost\": cost,\n",
    "                            \"trial\": trial,\n",
    "                            \"shots_per_shift_per_replica_M\": shots,\n",
    "                            \"diagnostic_draws_R\": TRAIN_DRAWS,\n",
    "                            \"threshold\": float(source_row[\"threshold\"]),\n",
    "                            \"exact_train_activity\": float(exact_empirical_activity[cost_index]),\n",
    "                            \"held_out_reference_activity\": float(source_row[\"reference_activity\"]),\n",
    "                            \"truth_weak\": bool(source_row[\"truth_weak\"]),\n",
    "                            \"exact_prtw_warning\": bool(source_row[\"prtw_warning\"]),\n",
    "                            \"exact_h_prtw_warning\": bool(source_row[\"h_prtw_warning\"]),\n",
    "                            \"wbp_warning\": bool(source_row[\"wbp_warning\"]),\n",
    "                            \"naive_shadow_activity\": float(\n",
    "                                naive_mean_activity[trial, budget_index, cost_index]\n",
    "                            ),\n",
    "                            \"cross_shadow_activity\": float(\n",
    "                                cross_mean_activity[trial, budget_index, cost_index]\n",
    "                            ),\n",
    "                            \"mom_shadow_activity\": float(\n",
    "                                cross_mom_activity[trial, budget_index, cost_index]\n",
    "                            ),\n",
    "                        })\n",
    "\n",
    "            if parameter_number % max(1, len(parameter_indices) // 4) == 0:\n",
    "                milestone(\n",
    "                    f\"n={n}: completed {parameter_number}/{len(parameter_indices)} parameters\",\n",
    "                    shadow_started,\n",
    "                )\n",
    "\n",
    "shadow_trial_df = pd.DataFrame(shadow_trial_rows)\n",
    "shadow_case_df = pd.DataFrame(shadow_case_rows)\n",
    "\n",
    "for estimate in (\"naive\", \"cross\", \"mom\"):\n",
    "    column = f\"{estimate}_shadow_activity\"\n",
    "    shadow_trial_df[f\"{estimate}_error\"] = (\n",
    "        shadow_trial_df[column] - shadow_trial_df[\"exact_train_activity\"]\n",
    "    )\n",
    "    shadow_trial_df[f\"{estimate}_error_over_threshold\"] = (\n",
    "        shadow_trial_df[f\"{estimate}_error\"] / shadow_trial_df[\"threshold\"]\n",
    "    )\n",
    "    shadow_trial_df[f\"{estimate}_warning\"] = (\n",
    "        shadow_trial_df[column] <= shadow_trial_df[\"threshold\"]\n",
    "    )\n",
    "    shadow_trial_df[f\"{estimate}_agrees_with_exact_prtw\"] = (\n",
    "        shadow_trial_df[f\"{estimate}_warning\"]\n",
    "        == shadow_trial_df[\"exact_prtw_warning\"]\n",
    "    )\n",
    "\n",
    "print(\"Shadow parameter/cost cases:\", len(shadow_case_df))\n",
    "print(\"Shadow trial rows:\", len(shadow_trial_df))\n",
    "print(\"Qiskit shadow simulation seconds:\", round(time.time() - shadow_started, 3))\n",
    "display(shadow_case_df.head(12))\n",
    "cell_ok(\"full Qiskit finite-shot Shadow-PRTW execution\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76e33b18-cf63-48b3-a360-98eb02012f23",
   "metadata": {},
   "source": [
    "## Shadow convergence and held-out comparison:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4c078b05",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SHADOW ESTIMATOR CONVERGENCE\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>shots_M</th>\n",
       "      <th>parameter_cost_cases</th>\n",
       "      <th>trials</th>\n",
       "      <th>naive_bias_over_tau</th>\n",
       "      <th>cross_bias_over_tau</th>\n",
       "      <th>cross_bias_over_tau_sd</th>\n",
       "      <th>naive_rmse_over_tau</th>\n",
       "      <th>cross_rmse_over_tau</th>\n",
       "      <th>mom_rmse_over_tau</th>\n",
       "      <th>cross_agreement_with_exact_prtw</th>\n",
       "      <th>mom_agreement_with_exact_prtw</th>\n",
       "      <th>cross_activity_correlation</th>\n",
       "      <th>mom_activity_correlation</th>\n",
       "      <th>cross_negative_activity_fraction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>5.663998</td>\n",
       "      <td>0.062602</td>\n",
       "      <td>0.278619</td>\n",
       "      <td>6.227015</td>\n",
       "      <td>2.668743</td>\n",
       "      <td>2.596631</td>\n",
       "      <td>0.623047</td>\n",
       "      <td>0.589844</td>\n",
       "      <td>0.385631</td>\n",
       "      <td>0.281857</td>\n",
       "      <td>0.240234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>16</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>1.472404</td>\n",
       "      <td>0.078075</td>\n",
       "      <td>0.151535</td>\n",
       "      <td>1.744713</td>\n",
       "      <td>0.984443</td>\n",
       "      <td>1.204503</td>\n",
       "      <td>0.759766</td>\n",
       "      <td>0.652344</td>\n",
       "      <td>0.819007</td>\n",
       "      <td>0.679623</td>\n",
       "      <td>0.070312</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16</td>\n",
       "      <td>256</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>0.361329</td>\n",
       "      <td>-0.000440</td>\n",
       "      <td>0.042020</td>\n",
       "      <td>0.557677</td>\n",
       "      <td>0.424927</td>\n",
       "      <td>0.910566</td>\n",
       "      <td>0.843750</td>\n",
       "      <td>0.712891</td>\n",
       "      <td>0.953453</td>\n",
       "      <td>0.808952</td>\n",
       "      <td>0.009766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16</td>\n",
       "      <td>1024</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>0.097161</td>\n",
       "      <td>0.006910</td>\n",
       "      <td>0.024114</td>\n",
       "      <td>0.229170</td>\n",
       "      <td>0.207932</td>\n",
       "      <td>0.842468</td>\n",
       "      <td>0.925781</td>\n",
       "      <td>0.755859</td>\n",
       "      <td>0.988316</td>\n",
       "      <td>0.838831</td>\n",
       "      <td>0.001953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24</td>\n",
       "      <td>16</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>5.540793</td>\n",
       "      <td>0.117644</td>\n",
       "      <td>0.287599</td>\n",
       "      <td>6.128517</td>\n",
       "      <td>2.690865</td>\n",
       "      <td>2.586898</td>\n",
       "      <td>0.688802</td>\n",
       "      <td>0.634115</td>\n",
       "      <td>0.564594</td>\n",
       "      <td>0.542810</td>\n",
       "      <td>0.220052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>24</td>\n",
       "      <td>64</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>1.464192</td>\n",
       "      <td>0.105785</td>\n",
       "      <td>0.110743</td>\n",
       "      <td>1.835474</td>\n",
       "      <td>1.097767</td>\n",
       "      <td>1.312903</td>\n",
       "      <td>0.855469</td>\n",
       "      <td>0.802083</td>\n",
       "      <td>0.863863</td>\n",
       "      <td>0.800398</td>\n",
       "      <td>0.059896</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>24</td>\n",
       "      <td>256</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>0.351843</td>\n",
       "      <td>0.008683</td>\n",
       "      <td>0.048002</td>\n",
       "      <td>0.601500</td>\n",
       "      <td>0.489240</td>\n",
       "      <td>0.823146</td>\n",
       "      <td>0.921875</td>\n",
       "      <td>0.855469</td>\n",
       "      <td>0.964837</td>\n",
       "      <td>0.915877</td>\n",
       "      <td>0.016927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>24</td>\n",
       "      <td>1024</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>0.089152</td>\n",
       "      <td>0.001696</td>\n",
       "      <td>0.027178</td>\n",
       "      <td>0.250435</td>\n",
       "      <td>0.231905</td>\n",
       "      <td>0.667919</td>\n",
       "      <td>0.958333</td>\n",
       "      <td>0.882812</td>\n",
       "      <td>0.992085</td>\n",
       "      <td>0.947359</td>\n",
       "      <td>0.009115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>32</td>\n",
       "      <td>16</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>5.450157</td>\n",
       "      <td>-0.116212</td>\n",
       "      <td>0.297733</td>\n",
       "      <td>6.024417</td>\n",
       "      <td>2.571996</td>\n",
       "      <td>2.484237</td>\n",
       "      <td>0.625977</td>\n",
       "      <td>0.607422</td>\n",
       "      <td>0.517412</td>\n",
       "      <td>0.462664</td>\n",
       "      <td>0.247070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>32</td>\n",
       "      <td>64</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>1.416668</td>\n",
       "      <td>0.010405</td>\n",
       "      <td>0.051077</td>\n",
       "      <td>1.700870</td>\n",
       "      <td>0.928508</td>\n",
       "      <td>1.195721</td>\n",
       "      <td>0.770508</td>\n",
       "      <td>0.739258</td>\n",
       "      <td>0.882080</td>\n",
       "      <td>0.793179</td>\n",
       "      <td>0.060547</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>32</td>\n",
       "      <td>256</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>0.352587</td>\n",
       "      <td>-0.007848</td>\n",
       "      <td>0.036412</td>\n",
       "      <td>0.556297</td>\n",
       "      <td>0.425431</td>\n",
       "      <td>0.911516</td>\n",
       "      <td>0.873047</td>\n",
       "      <td>0.816406</td>\n",
       "      <td>0.972053</td>\n",
       "      <td>0.888174</td>\n",
       "      <td>0.009766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>32</td>\n",
       "      <td>1024</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>0.094068</td>\n",
       "      <td>0.005805</td>\n",
       "      <td>0.022295</td>\n",
       "      <td>0.231070</td>\n",
       "      <td>0.210981</td>\n",
       "      <td>0.817160</td>\n",
       "      <td>0.945312</td>\n",
       "      <td>0.881836</td>\n",
       "      <td>0.993124</td>\n",
       "      <td>0.916887</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>48</td>\n",
       "      <td>16</td>\n",
       "      <td>192</td>\n",
       "      <td>8</td>\n",
       "      <td>5.571682</td>\n",
       "      <td>0.032387</td>\n",
       "      <td>0.201439</td>\n",
       "      <td>6.125456</td>\n",
       "      <td>2.630864</td>\n",
       "      <td>2.473960</td>\n",
       "      <td>0.662760</td>\n",
       "      <td>0.637370</td>\n",
       "      <td>0.509029</td>\n",
       "      <td>0.463028</td>\n",
       "      <td>0.253255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>48</td>\n",
       "      <td>64</td>\n",
       "      <td>192</td>\n",
       "      <td>8</td>\n",
       "      <td>1.393736</td>\n",
       "      <td>-0.003025</td>\n",
       "      <td>0.105569</td>\n",
       "      <td>1.687949</td>\n",
       "      <td>0.964806</td>\n",
       "      <td>1.184798</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.759766</td>\n",
       "      <td>0.853446</td>\n",
       "      <td>0.774341</td>\n",
       "      <td>0.070964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>48</td>\n",
       "      <td>256</td>\n",
       "      <td>192</td>\n",
       "      <td>8</td>\n",
       "      <td>0.338760</td>\n",
       "      <td>-0.009859</td>\n",
       "      <td>0.036832</td>\n",
       "      <td>0.548259</td>\n",
       "      <td>0.436599</td>\n",
       "      <td>0.818277</td>\n",
       "      <td>0.932943</td>\n",
       "      <td>0.837240</td>\n",
       "      <td>0.963311</td>\n",
       "      <td>0.890446</td>\n",
       "      <td>0.019531</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>48</td>\n",
       "      <td>1024</td>\n",
       "      <td>192</td>\n",
       "      <td>8</td>\n",
       "      <td>0.082732</td>\n",
       "      <td>-0.004253</td>\n",
       "      <td>0.011747</td>\n",
       "      <td>0.228625</td>\n",
       "      <td>0.211062</td>\n",
       "      <td>0.734791</td>\n",
       "      <td>0.973307</td>\n",
       "      <td>0.870443</td>\n",
       "      <td>0.991160</td>\n",
       "      <td>0.916843</td>\n",
       "      <td>0.000651</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>64</td>\n",
       "      <td>16</td>\n",
       "      <td>256</td>\n",
       "      <td>8</td>\n",
       "      <td>5.628485</td>\n",
       "      <td>0.091251</td>\n",
       "      <td>0.152216</td>\n",
       "      <td>6.221805</td>\n",
       "      <td>2.578086</td>\n",
       "      <td>2.474457</td>\n",
       "      <td>0.659180</td>\n",
       "      <td>0.617676</td>\n",
       "      <td>0.519581</td>\n",
       "      <td>0.454387</td>\n",
       "      <td>0.232910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>256</td>\n",
       "      <td>8</td>\n",
       "      <td>1.404933</td>\n",
       "      <td>0.011246</td>\n",
       "      <td>0.041492</td>\n",
       "      <td>1.715619</td>\n",
       "      <td>0.958510</td>\n",
       "      <td>1.191537</td>\n",
       "      <td>0.816895</td>\n",
       "      <td>0.765137</td>\n",
       "      <td>0.843930</td>\n",
       "      <td>0.744125</td>\n",
       "      <td>0.072266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>64</td>\n",
       "      <td>256</td>\n",
       "      <td>256</td>\n",
       "      <td>8</td>\n",
       "      <td>0.353883</td>\n",
       "      <td>0.009170</td>\n",
       "      <td>0.021317</td>\n",
       "      <td>0.564968</td>\n",
       "      <td>0.436601</td>\n",
       "      <td>0.872651</td>\n",
       "      <td>0.924805</td>\n",
       "      <td>0.838379</td>\n",
       "      <td>0.961729</td>\n",
       "      <td>0.854021</td>\n",
       "      <td>0.019043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>64</td>\n",
       "      <td>1024</td>\n",
       "      <td>256</td>\n",
       "      <td>8</td>\n",
       "      <td>0.092610</td>\n",
       "      <td>0.003694</td>\n",
       "      <td>0.017711</td>\n",
       "      <td>0.229900</td>\n",
       "      <td>0.210412</td>\n",
       "      <td>0.787535</td>\n",
       "      <td>0.963867</td>\n",
       "      <td>0.869141</td>\n",
       "      <td>0.990631</td>\n",
       "      <td>0.882581</td>\n",
       "      <td>0.001465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>96</td>\n",
       "      <td>16</td>\n",
       "      <td>384</td>\n",
       "      <td>8</td>\n",
       "      <td>5.614490</td>\n",
       "      <td>0.077959</td>\n",
       "      <td>0.086887</td>\n",
       "      <td>6.171291</td>\n",
       "      <td>2.639113</td>\n",
       "      <td>2.507150</td>\n",
       "      <td>0.667969</td>\n",
       "      <td>0.630859</td>\n",
       "      <td>0.544648</td>\n",
       "      <td>0.494398</td>\n",
       "      <td>0.239583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>96</td>\n",
       "      <td>64</td>\n",
       "      <td>384</td>\n",
       "      <td>8</td>\n",
       "      <td>1.386386</td>\n",
       "      <td>-0.013987</td>\n",
       "      <td>0.039311</td>\n",
       "      <td>1.704651</td>\n",
       "      <td>0.984232</td>\n",
       "      <td>1.176973</td>\n",
       "      <td>0.821940</td>\n",
       "      <td>0.765625</td>\n",
       "      <td>0.873131</td>\n",
       "      <td>0.813344</td>\n",
       "      <td>0.083984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>96</td>\n",
       "      <td>256</td>\n",
       "      <td>384</td>\n",
       "      <td>8</td>\n",
       "      <td>0.331932</td>\n",
       "      <td>-0.019201</td>\n",
       "      <td>0.020655</td>\n",
       "      <td>0.546306</td>\n",
       "      <td>0.434008</td>\n",
       "      <td>0.817761</td>\n",
       "      <td>0.914714</td>\n",
       "      <td>0.856120</td>\n",
       "      <td>0.970664</td>\n",
       "      <td>0.909602</td>\n",
       "      <td>0.014648</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>96</td>\n",
       "      <td>1024</td>\n",
       "      <td>384</td>\n",
       "      <td>8</td>\n",
       "      <td>0.079869</td>\n",
       "      <td>-0.007987</td>\n",
       "      <td>0.011385</td>\n",
       "      <td>0.227593</td>\n",
       "      <td>0.213710</td>\n",
       "      <td>0.706558</td>\n",
       "      <td>0.958008</td>\n",
       "      <td>0.892904</td>\n",
       "      <td>0.992577</td>\n",
       "      <td>0.934330</td>\n",
       "      <td>0.001302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>128</td>\n",
       "      <td>16</td>\n",
       "      <td>512</td>\n",
       "      <td>8</td>\n",
       "      <td>5.545856</td>\n",
       "      <td>-0.016694</td>\n",
       "      <td>0.067672</td>\n",
       "      <td>6.084058</td>\n",
       "      <td>2.560355</td>\n",
       "      <td>2.498076</td>\n",
       "      <td>0.653564</td>\n",
       "      <td>0.627930</td>\n",
       "      <td>0.505503</td>\n",
       "      <td>0.460766</td>\n",
       "      <td>0.242920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>128</td>\n",
       "      <td>64</td>\n",
       "      <td>512</td>\n",
       "      <td>8</td>\n",
       "      <td>1.386039</td>\n",
       "      <td>-0.006391</td>\n",
       "      <td>0.031025</td>\n",
       "      <td>1.692297</td>\n",
       "      <td>0.977858</td>\n",
       "      <td>1.190510</td>\n",
       "      <td>0.811035</td>\n",
       "      <td>0.755859</td>\n",
       "      <td>0.846088</td>\n",
       "      <td>0.769176</td>\n",
       "      <td>0.069336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>128</td>\n",
       "      <td>256</td>\n",
       "      <td>512</td>\n",
       "      <td>8</td>\n",
       "      <td>0.349578</td>\n",
       "      <td>-0.001183</td>\n",
       "      <td>0.021593</td>\n",
       "      <td>0.559121</td>\n",
       "      <td>0.441749</td>\n",
       "      <td>0.780679</td>\n",
       "      <td>0.912842</td>\n",
       "      <td>0.851074</td>\n",
       "      <td>0.962951</td>\n",
       "      <td>0.898454</td>\n",
       "      <td>0.010010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>128</td>\n",
       "      <td>1024</td>\n",
       "      <td>512</td>\n",
       "      <td>8</td>\n",
       "      <td>0.087608</td>\n",
       "      <td>0.000617</td>\n",
       "      <td>0.008280</td>\n",
       "      <td>0.232698</td>\n",
       "      <td>0.214891</td>\n",
       "      <td>0.679391</td>\n",
       "      <td>0.958740</td>\n",
       "      <td>0.882080</td>\n",
       "      <td>0.990959</td>\n",
       "      <td>0.925233</td>\n",
       "      <td>0.001465</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      n  shots_M  parameter_cost_cases  trials  naive_bias_over_tau  cross_bias_over_tau  cross_bias_over_tau_sd  naive_rmse_over_tau  cross_rmse_over_tau  mom_rmse_over_tau  cross_agreement_with_exact_prtw  \\\n",
       "0    16       16                    64       8             5.663998             0.062602                0.278619             6.227015             2.668743           2.596631                         0.623047   \n",
       "1    16       64                    64       8             1.472404             0.078075                0.151535             1.744713             0.984443           1.204503                         0.759766   \n",
       "2    16      256                    64       8             0.361329            -0.000440                0.042020             0.557677             0.424927           0.910566                         0.843750   \n",
       "3    16     1024                    64       8             0.097161             0.006910                0.024114             0.229170             0.207932           0.842468                         0.925781   \n",
       "4    24       16                    96       8             5.540793             0.117644                0.287599             6.128517             2.690865           2.586898                         0.688802   \n",
       "5    24       64                    96       8             1.464192             0.105785                0.110743             1.835474             1.097767           1.312903                         0.855469   \n",
       "6    24      256                    96       8             0.351843             0.008683                0.048002             0.601500             0.489240           0.823146                         0.921875   \n",
       "7    24     1024                    96       8             0.089152             0.001696                0.027178             0.250435             0.231905           0.667919                         0.958333   \n",
       "8    32       16                   128       8             5.450157            -0.116212                0.297733             6.024417             2.571996           2.484237                         0.625977   \n",
       "9    32       64                   128       8             1.416668             0.010405                0.051077             1.700870             0.928508           1.195721                         0.770508   \n",
       "10   32      256                   128       8             0.352587            -0.007848                0.036412             0.556297             0.425431           0.911516                         0.873047   \n",
       "11   32     1024                   128       8             0.094068             0.005805                0.022295             0.231070             0.210981           0.817160                         0.945312   \n",
       "12   48       16                   192       8             5.571682             0.032387                0.201439             6.125456             2.630864           2.473960                         0.662760   \n",
       "13   48       64                   192       8             1.393736            -0.003025                0.105569             1.687949             0.964806           1.184798                         0.833333   \n",
       "14   48      256                   192       8             0.338760            -0.009859                0.036832             0.548259             0.436599           0.818277                         0.932943   \n",
       "15   48     1024                   192       8             0.082732            -0.004253                0.011747             0.228625             0.211062           0.734791                         0.973307   \n",
       "16   64       16                   256       8             5.628485             0.091251                0.152216             6.221805             2.578086           2.474457                         0.659180   \n",
       "17   64       64                   256       8             1.404933             0.011246                0.041492             1.715619             0.958510           1.191537                         0.816895   \n",
       "18   64      256                   256       8             0.353883             0.009170                0.021317             0.564968             0.436601           0.872651                         0.924805   \n",
       "19   64     1024                   256       8             0.092610             0.003694                0.017711             0.229900             0.210412           0.787535                         0.963867   \n",
       "20   96       16                   384       8             5.614490             0.077959                0.086887             6.171291             2.639113           2.507150                         0.667969   \n",
       "21   96       64                   384       8             1.386386            -0.013987                0.039311             1.704651             0.984232           1.176973                         0.821940   \n",
       "22   96      256                   384       8             0.331932            -0.019201                0.020655             0.546306             0.434008           0.817761                         0.914714   \n",
       "23   96     1024                   384       8             0.079869            -0.007987                0.011385             0.227593             0.213710           0.706558                         0.958008   \n",
       "24  128       16                   512       8             5.545856            -0.016694                0.067672             6.084058             2.560355           2.498076                         0.653564   \n",
       "25  128       64                   512       8             1.386039            -0.006391                0.031025             1.692297             0.977858           1.190510                         0.811035   \n",
       "26  128      256                   512       8             0.349578            -0.001183                0.021593             0.559121             0.441749           0.780679                         0.912842   \n",
       "27  128     1024                   512       8             0.087608             0.000617                0.008280             0.232698             0.214891           0.679391                         0.958740   \n",
       "\n",
       "    mom_agreement_with_exact_prtw  cross_activity_correlation  mom_activity_correlation  cross_negative_activity_fraction  \n",
       "0                        0.589844                    0.385631                  0.281857                          0.240234  \n",
       "1                        0.652344                    0.819007                  0.679623                          0.070312  \n",
       "2                        0.712891                    0.953453                  0.808952                          0.009766  \n",
       "3                        0.755859                    0.988316                  0.838831                          0.001953  \n",
       "4                        0.634115                    0.564594                  0.542810                          0.220052  \n",
       "5                        0.802083                    0.863863                  0.800398                          0.059896  \n",
       "6                        0.855469                    0.964837                  0.915877                          0.016927  \n",
       "7                        0.882812                    0.992085                  0.947359                          0.009115  \n",
       "8                        0.607422                    0.517412                  0.462664                          0.247070  \n",
       "9                        0.739258                    0.882080                  0.793179                          0.060547  \n",
       "10                       0.816406                    0.972053                  0.888174                          0.009766  \n",
       "11                       0.881836                    0.993124                  0.916887                          0.000000  \n",
       "12                       0.637370                    0.509029                  0.463028                          0.253255  \n",
       "13                       0.759766                    0.853446                  0.774341                          0.070964  \n",
       "14                       0.837240                    0.963311                  0.890446                          0.019531  \n",
       "15                       0.870443                    0.991160                  0.916843                          0.000651  \n",
       "16                       0.617676                    0.519581                  0.454387                          0.232910  \n",
       "17                       0.765137                    0.843930                  0.744125                          0.072266  \n",
       "18                       0.838379                    0.961729                  0.854021                          0.019043  \n",
       "19                       0.869141                    0.990631                  0.882581                          0.001465  \n",
       "20                       0.630859                    0.544648                  0.494398                          0.239583  \n",
       "21                       0.765625                    0.873131                  0.813344                          0.083984  \n",
       "22                       0.856120                    0.970664                  0.909602                          0.014648  \n",
       "23                       0.892904                    0.992577                  0.934330                          0.001302  \n",
       "24                       0.627930                    0.505503                  0.460766                          0.242920  \n",
       "25                       0.755859                    0.846088                  0.769176                          0.069336  \n",
       "26                       0.851074                    0.962951                  0.898454                          0.010010  \n",
       "27                       0.882080                    0.990959                  0.925233                          0.001465  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "HELD-OUT PERFORMANCE AT THE LARGEST SHOT BUDGET\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>shots_M</th>\n",
       "      <th>n</th>\n",
       "      <th>method</th>\n",
       "      <th>cases</th>\n",
       "      <th>trials</th>\n",
       "      <th>warnings_mean</th>\n",
       "      <th>precision_mean</th>\n",
       "      <th>precision_sd</th>\n",
       "      <th>recall_mean</th>\n",
       "      <th>recall_sd</th>\n",
       "      <th>specificity_mean</th>\n",
       "      <th>specificity_sd</th>\n",
       "      <th>balanced_accuracy_mean</th>\n",
       "      <th>balanced_accuracy_sd</th>\n",
       "      <th>accuracy_mean</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>155</th>\n",
       "      <td>1024</td>\n",
       "      <td>ALL</td>\n",
       "      <td>Exact H-PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>8</td>\n",
       "      <td>351.000</td>\n",
       "      <td>0.706553</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.586288</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.914806</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.750547</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.829657</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>1024</td>\n",
       "      <td>ALL</td>\n",
       "      <td>Exact PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>8</td>\n",
       "      <td>477.000</td>\n",
       "      <td>0.647799</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.730496</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.861042</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.795769</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.827206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>1024</td>\n",
       "      <td>ALL</td>\n",
       "      <td>Shadow cross MoM</td>\n",
       "      <td>1632</td>\n",
       "      <td>8</td>\n",
       "      <td>643.375</td>\n",
       "      <td>0.519540</td>\n",
       "      <td>0.005765</td>\n",
       "      <td>0.790189</td>\n",
       "      <td>0.009435</td>\n",
       "      <td>0.744313</td>\n",
       "      <td>0.004342</td>\n",
       "      <td>0.767251</td>\n",
       "      <td>0.005647</td>\n",
       "      <td>0.756204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>1024</td>\n",
       "      <td>ALL</td>\n",
       "      <td>Shadow cross mean</td>\n",
       "      <td>1632</td>\n",
       "      <td>8</td>\n",
       "      <td>473.625</td>\n",
       "      <td>0.635613</td>\n",
       "      <td>0.008262</td>\n",
       "      <td>0.711584</td>\n",
       "      <td>0.013668</td>\n",
       "      <td>0.857217</td>\n",
       "      <td>0.005695</td>\n",
       "      <td>0.784400</td>\n",
       "      <td>0.006066</td>\n",
       "      <td>0.819470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>1024</td>\n",
       "      <td>ALL</td>\n",
       "      <td>WBP-style</td>\n",
       "      <td>1632</td>\n",
       "      <td>8</td>\n",
       "      <td>1632.000</td>\n",
       "      <td>0.259191</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.259191</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     shots_M    n             method  cases  trials  warnings_mean  precision_mean  precision_sd  recall_mean  recall_sd  specificity_mean  specificity_sd  balanced_accuracy_mean  balanced_accuracy_sd  accuracy_mean\n",
       "155     1024  ALL       Exact H-PRTW   1632       8        351.000        0.706553      0.000000     0.586288   0.000000          0.914806        0.000000                0.750547              0.000000       0.829657\n",
       "156     1024  ALL         Exact PRTW   1632       8        477.000        0.647799      0.000000     0.730496   0.000000          0.861042        0.000000                0.795769              0.000000       0.827206\n",
       "157     1024  ALL   Shadow cross MoM   1632       8        643.375        0.519540      0.005765     0.790189   0.009435          0.744313        0.004342                0.767251              0.005647       0.756204\n",
       "158     1024  ALL  Shadow cross mean   1632       8        473.625        0.635613      0.008262     0.711584   0.013668          0.857217        0.005695                0.784400              0.006066       0.819470\n",
       "159     1024  ALL          WBP-style   1632       8       1632.000        0.259191      0.000000     1.000000   0.000000          0.000000        0.000000                0.500000              0.000000       0.259191"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "SHADOW-PRTW WITHIN-CIRCUIT LOCALIZATION AT THE LARGEST SHOT BUDGET\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>mean_AUROC</th>\n",
       "      <th>sd_AUROC</th>\n",
       "      <th>trials</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>0.803059</td>\n",
       "      <td>0.035953</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>24</td>\n",
       "      <td>0.928096</td>\n",
       "      <td>0.008678</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>32</td>\n",
       "      <td>0.761687</td>\n",
       "      <td>0.017741</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>48</td>\n",
       "      <td>0.862029</td>\n",
       "      <td>0.005161</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>64</td>\n",
       "      <td>0.912509</td>\n",
       "      <td>0.008046</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>96</td>\n",
       "      <td>0.875434</td>\n",
       "      <td>0.003982</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>128</td>\n",
       "      <td>0.840246</td>\n",
       "      <td>0.008289</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     n  mean_AUROC  sd_AUROC  trials\n",
       "0   16    0.803059  0.035953       8\n",
       "1   24    0.928096  0.008678       8\n",
       "2   32    0.761687  0.017741       8\n",
       "3   48    0.862029  0.005161       8\n",
       "4   64    0.912509  0.008046       8\n",
       "5   96    0.875434  0.003982       8\n",
       "6  128    0.840246  0.008289       8"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Interpretation: bias and RMSE are divided by tau(n), so magnitudes are comparable across system sizes. The cross-product estimate can be negative at finite shots; this is not a negative physical activity, but a permitted fluctuation of an unbiased estimator.\n",
      "\n",
      "✅ CELL COMPLETE — shadow convergence and held-out comparison\n"
     ]
    }
   ],
   "source": [
    "def correlation_or_nan(x: np.ndarray, y: np.ndarray) -> float:\n",
    "    x = np.asarray(x, dtype=float)\n",
    "    y = np.asarray(y, dtype=float)\n",
    "    if len(x) < 2 or np.std(x) == 0 or np.std(y) == 0:\n",
    "        return np.nan\n",
    "    return float(np.corrcoef(x, y)[0, 1])\n",
    "\n",
    "\n",
    "# First compute one diagnostic row per independent shadow trial. Averaging these rows preserves\n",
    "# the trial as the unit of Monte Carlo replication instead of treating correlated parameter rows\n",
    "# as independent repetitions.\n",
    "trial_diagnostic_rows = []\n",
    "for (n, shots, trial), frame in shadow_trial_df.groupby(\n",
    "    [\"n\", \"shots_per_shift_per_replica_M\", \"trial\"], sort=True\n",
    "):\n",
    "    row = {\n",
    "        \"n\": n,\n",
    "        \"shots_M\": shots,\n",
    "        \"trial\": trial,\n",
    "        \"parameter_cost_cases\": len(frame),\n",
    "    }\n",
    "    for estimate in (\"naive\", \"cross\", \"mom\"):\n",
    "        normalized_error = frame[f\"{estimate}_error_over_threshold\"].to_numpy()\n",
    "        row[f\"{estimate}_signed_bias_over_tau\"] = float(np.mean(normalized_error))\n",
    "        row[f\"{estimate}_rmse_over_tau\"] = float(np.sqrt(np.mean(normalized_error**2)))\n",
    "        row[f\"{estimate}_agreement_with_exact_prtw\"] = float(\n",
    "            frame[f\"{estimate}_agrees_with_exact_prtw\"].mean()\n",
    "        )\n",
    "        row[f\"{estimate}_correlation_with_exact_activity\"] = correlation_or_nan(\n",
    "            frame[\"exact_train_activity\"].to_numpy(),\n",
    "            frame[f\"{estimate}_shadow_activity\"].to_numpy(),\n",
    "        )\n",
    "    row[\"cross_negative_activity_fraction\"] = float(\n",
    "        (frame[\"cross_shadow_activity\"] < 0).mean()\n",
    "    )\n",
    "    trial_diagnostic_rows.append(row)\n",
    "\n",
    "shadow_trial_diagnostics_df = pd.DataFrame(trial_diagnostic_rows)\n",
    "\n",
    "aggregate_spec = {\n",
    "    \"parameter_cost_cases\": (\"parameter_cost_cases\", \"first\"),\n",
    "    \"trials\": (\"trial\", \"nunique\"),\n",
    "    \"naive_bias_over_tau\": (\"naive_signed_bias_over_tau\", \"mean\"),\n",
    "    \"cross_bias_over_tau\": (\"cross_signed_bias_over_tau\", \"mean\"),\n",
    "    \"cross_bias_over_tau_sd\": (\"cross_signed_bias_over_tau\", \"std\"),\n",
    "    \"naive_rmse_over_tau\": (\"naive_rmse_over_tau\", \"mean\"),\n",
    "    \"cross_rmse_over_tau\": (\"cross_rmse_over_tau\", \"mean\"),\n",
    "    \"mom_rmse_over_tau\": (\"mom_rmse_over_tau\", \"mean\"),\n",
    "    \"cross_agreement_with_exact_prtw\": (\"cross_agreement_with_exact_prtw\", \"mean\"),\n",
    "    \"mom_agreement_with_exact_prtw\": (\"mom_agreement_with_exact_prtw\", \"mean\"),\n",
    "    \"cross_activity_correlation\": (\"cross_correlation_with_exact_activity\", \"mean\"),\n",
    "    \"mom_activity_correlation\": (\"mom_correlation_with_exact_activity\", \"mean\"),\n",
    "    \"cross_negative_activity_fraction\": (\"cross_negative_activity_fraction\", \"mean\"),\n",
    "}\n",
    "shadow_convergence_df = shadow_trial_diagnostics_df.groupby(\n",
    "    [\"n\", \"shots_M\"], as_index=False\n",
    ").agg(**aggregate_spec)\n",
    "\n",
    "\n",
    "# Held-out classification is deliberately separate from the fixed-draw estimator audit above.\n",
    "# It combines quantum measurement error with the original finite-draw generalization error.\n",
    "shadow_performance_trial_rows = []\n",
    "shadow_method_columns = {\n",
    "    \"Exact PRTW\": \"exact_prtw_warning\",\n",
    "    \"Exact H-PRTW\": \"exact_h_prtw_warning\",\n",
    "    \"WBP-style\": \"wbp_warning\",\n",
    "    \"Shadow cross mean\": \"cross_warning\",\n",
    "    \"Shadow cross MoM\": \"mom_warning\",\n",
    "}\n",
    "\n",
    "for (shots, trial), trial_frame in shadow_trial_df.groupby(\n",
    "    [\"shots_per_shift_per_replica_M\", \"trial\"], sort=True\n",
    "):\n",
    "    for n_label, frame in (\n",
    "        [(n, trial_frame[trial_frame[\"n\"] == n]) for n in SHADOW_N_VALUES]\n",
    "        + [(\"ALL\", trial_frame)]\n",
    "    ):\n",
    "        for method, prediction_column in shadow_method_columns.items():\n",
    "            shadow_performance_trial_rows.append({\n",
    "                \"shots_M\": shots,\n",
    "                \"trial\": trial,\n",
    "                \"n\": n_label,\n",
    "                \"method\": method,\n",
    "                **binary_metrics(frame, prediction_column),\n",
    "            })\n",
    "\n",
    "shadow_performance_trial_df = pd.DataFrame(shadow_performance_trial_rows)\n",
    "shadow_performance_df = shadow_performance_trial_df.groupby(\n",
    "    [\"shots_M\", \"n\", \"method\"], as_index=False\n",
    ").agg(\n",
    "    cases=(\"cases\", \"first\"),\n",
    "    trials=(\"trial\", \"nunique\"),\n",
    "    warnings_mean=(\"warnings\", \"mean\"),\n",
    "    precision_mean=(\"precision\", \"mean\"),\n",
    "    precision_sd=(\"precision\", \"std\"),\n",
    "    recall_mean=(\"recall\", \"mean\"),\n",
    "    recall_sd=(\"recall\", \"std\"),\n",
    "    specificity_mean=(\"specificity\", \"mean\"),\n",
    "    specificity_sd=(\"specificity\", \"std\"),\n",
    "    balanced_accuracy_mean=(\"balanced_accuracy\", \"mean\"),\n",
    "    balanced_accuracy_sd=(\"balanced_accuracy\", \"std\"),\n",
    "    accuracy_mean=(\"accuracy\", \"mean\"),\n",
    ")\n",
    "\n",
    "\n",
    "# Parameter-localization AUROC for Shadow-PRTW at the designated plotting budget.\n",
    "# First average architecture/cost AUROCs within each independent shadow trial, then use the\n",
    "# between-trial standard deviation as the finite-shot error bar.\n",
    "PAPER_SHADOW_SHOTS = max(SHADOW_SHOT_BUDGETS)\n",
    "shadow_localization_trial_rows = []\n",
    "localization_source = shadow_trial_df[\n",
    "    shadow_trial_df[\"shots_per_shift_per_replica_M\"].eq(PAPER_SHADOW_SHOTS)\n",
    "]\n",
    "for (n, trial, architecture_id, cost), frame in localization_source.groupby(\n",
    "    [\"n\", \"trial\", \"architecture_id\", \"cost\"], sort=True\n",
    "):\n",
    "    shadow_localization_trial_rows.append({\n",
    "        \"n\": n,\n",
    "        \"trial\": trial,\n",
    "        \"architecture_id\": architecture_id,\n",
    "        \"cost\": cost,\n",
    "        \"AUROC\": average_rank_auc(\n",
    "            frame[\"truth_weak\"].to_numpy(),\n",
    "            -frame[\"mom_shadow_activity\"].to_numpy(),\n",
    "        ),\n",
    "    })\n",
    "\n",
    "shadow_localization_trial_df = pd.DataFrame(shadow_localization_trial_rows)\n",
    "shadow_localization_by_trial_df = shadow_localization_trial_df.groupby(\n",
    "    [\"n\", \"trial\"], as_index=False\n",
    ").agg(mean_AUROC=(\"AUROC\", \"mean\"))\n",
    "shadow_localization_summary_df = shadow_localization_by_trial_df.groupby(\n",
    "    \"n\", as_index=False\n",
    ").agg(\n",
    "    mean_AUROC=(\"mean_AUROC\", \"mean\"),\n",
    "    sd_AUROC=(\"mean_AUROC\", \"std\"),\n",
    "    trials=(\"trial\", \"nunique\"),\n",
    ")\n",
    "\n",
    "print(\"SHADOW ESTIMATOR CONVERGENCE\")\n",
    "display(shadow_convergence_df)\n",
    "\n",
    "print(\"\\nHELD-OUT PERFORMANCE AT THE LARGEST SHOT BUDGET\")\n",
    "display(\n",
    "    shadow_performance_df[\n",
    "        shadow_performance_df[\"shots_M\"].eq(max(SHADOW_SHOT_BUDGETS))\n",
    "        & shadow_performance_df[\"n\"].eq(\"ALL\")\n",
    "    ]\n",
    ")\n",
    "\n",
    "print(\"\\nSHADOW-PRTW WITHIN-CIRCUIT LOCALIZATION AT THE LARGEST SHOT BUDGET\")\n",
    "display(shadow_localization_summary_df)\n",
    "\n",
    "print(\n",
    "    \"\\nInterpretation: bias and RMSE are divided by tau(n), so magnitudes are comparable \"\n",
    "    \"across system sizes. The cross-product estimate can be negative at finite shots; this is \"\n",
    "    \"not a negative physical activity, but a permitted fluctuation of an unbiased estimator.\"\n",
    ")\n",
    "cell_ok(\"shadow convergence and held-out comparison\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "24a28709",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SHADOW QUANTUM-EXECUTION AUDIT\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>validation_architectures</th>\n",
       "      <th>monitored_parameters</th>\n",
       "      <th>diagnostic_draws_R</th>\n",
       "      <th>shots_per_shift_per_replica_M</th>\n",
       "      <th>executions_per_architecture_4PRM</th>\n",
       "      <th>executions_per_trial_across_architectures</th>\n",
       "      <th>validation_trials</th>\n",
       "      <th>simulated_executions_across_all_trials</th>\n",
       "      <th>costs_estimated_from_each_shared_shadow_record</th>\n",
       "      <th>additional_quantum_executions_for_H_PRTW</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>8192</td>\n",
       "      <td>16384</td>\n",
       "      <td>8</td>\n",
       "      <td>131072</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>32768</td>\n",
       "      <td>65536</td>\n",
       "      <td>8</td>\n",
       "      <td>524288</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>131072</td>\n",
       "      <td>262144</td>\n",
       "      <td>8</td>\n",
       "      <td>2097152</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>524288</td>\n",
       "      <td>1048576</td>\n",
       "      <td>8</td>\n",
       "      <td>8388608</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>12288</td>\n",
       "      <td>24576</td>\n",
       "      <td>8</td>\n",
       "      <td>196608</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>49152</td>\n",
       "      <td>98304</td>\n",
       "      <td>8</td>\n",
       "      <td>786432</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>196608</td>\n",
       "      <td>393216</td>\n",
       "      <td>8</td>\n",
       "      <td>3145728</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>24</td>\n",
       "      <td>2</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>786432</td>\n",
       "      <td>1572864</td>\n",
       "      <td>8</td>\n",
       "      <td>12582912</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>32</td>\n",
       "      <td>2</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>16384</td>\n",
       "      <td>32768</td>\n",
       "      <td>8</td>\n",
       "      <td>262144</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>32</td>\n",
       "      <td>2</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>65536</td>\n",
       "      <td>131072</td>\n",
       "      <td>8</td>\n",
       "      <td>1048576</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>32</td>\n",
       "      <td>2</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>262144</td>\n",
       "      <td>524288</td>\n",
       "      <td>8</td>\n",
       "      <td>4194304</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>32</td>\n",
       "      <td>2</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>1048576</td>\n",
       "      <td>2097152</td>\n",
       "      <td>8</td>\n",
       "      <td>16777216</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>48</td>\n",
       "      <td>2</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>24576</td>\n",
       "      <td>49152</td>\n",
       "      <td>8</td>\n",
       "      <td>393216</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>48</td>\n",
       "      <td>2</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>98304</td>\n",
       "      <td>196608</td>\n",
       "      <td>8</td>\n",
       "      <td>1572864</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>48</td>\n",
       "      <td>2</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>393216</td>\n",
       "      <td>786432</td>\n",
       "      <td>8</td>\n",
       "      <td>6291456</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>48</td>\n",
       "      <td>2</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>1572864</td>\n",
       "      <td>3145728</td>\n",
       "      <td>8</td>\n",
       "      <td>25165824</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>64</td>\n",
       "      <td>2</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>32768</td>\n",
       "      <td>65536</td>\n",
       "      <td>8</td>\n",
       "      <td>524288</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>64</td>\n",
       "      <td>2</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>131072</td>\n",
       "      <td>262144</td>\n",
       "      <td>8</td>\n",
       "      <td>2097152</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>64</td>\n",
       "      <td>2</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>524288</td>\n",
       "      <td>1048576</td>\n",
       "      <td>8</td>\n",
       "      <td>8388608</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>64</td>\n",
       "      <td>2</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>2097152</td>\n",
       "      <td>4194304</td>\n",
       "      <td>8</td>\n",
       "      <td>33554432</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>96</td>\n",
       "      <td>2</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>49152</td>\n",
       "      <td>98304</td>\n",
       "      <td>8</td>\n",
       "      <td>786432</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>96</td>\n",
       "      <td>2</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>196608</td>\n",
       "      <td>393216</td>\n",
       "      <td>8</td>\n",
       "      <td>3145728</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>96</td>\n",
       "      <td>2</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>786432</td>\n",
       "      <td>1572864</td>\n",
       "      <td>8</td>\n",
       "      <td>12582912</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>96</td>\n",
       "      <td>2</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>3145728</td>\n",
       "      <td>6291456</td>\n",
       "      <td>8</td>\n",
       "      <td>50331648</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>128</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "      <td>65536</td>\n",
       "      <td>131072</td>\n",
       "      <td>8</td>\n",
       "      <td>1048576</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>128</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>64</td>\n",
       "      <td>262144</td>\n",
       "      <td>524288</td>\n",
       "      <td>8</td>\n",
       "      <td>4194304</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>128</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "      <td>1048576</td>\n",
       "      <td>2097152</td>\n",
       "      <td>8</td>\n",
       "      <td>16777216</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>128</td>\n",
       "      <td>2</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>1024</td>\n",
       "      <td>4194304</td>\n",
       "      <td>8388608</td>\n",
       "      <td>8</td>\n",
       "      <td>67108864</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      n  validation_architectures  monitored_parameters  diagnostic_draws_R  shots_per_shift_per_replica_M  executions_per_architecture_4PRM  executions_per_trial_across_architectures  validation_trials  \\\n",
       "0    16                         2                    16                   8                             16                              8192                                      16384                  8   \n",
       "1    16                         2                    16                   8                             64                             32768                                      65536                  8   \n",
       "2    16                         2                    16                   8                            256                            131072                                     262144                  8   \n",
       "3    16                         2                    16                   8                           1024                            524288                                    1048576                  8   \n",
       "4    24                         2                    24                   8                             16                             12288                                      24576                  8   \n",
       "5    24                         2                    24                   8                             64                             49152                                      98304                  8   \n",
       "6    24                         2                    24                   8                            256                            196608                                     393216                  8   \n",
       "7    24                         2                    24                   8                           1024                            786432                                    1572864                  8   \n",
       "8    32                         2                    32                   8                             16                             16384                                      32768                  8   \n",
       "9    32                         2                    32                   8                             64                             65536                                     131072                  8   \n",
       "10   32                         2                    32                   8                            256                            262144                                     524288                  8   \n",
       "11   32                         2                    32                   8                           1024                           1048576                                    2097152                  8   \n",
       "12   48                         2                    48                   8                             16                             24576                                      49152                  8   \n",
       "13   48                         2                    48                   8                             64                             98304                                     196608                  8   \n",
       "14   48                         2                    48                   8                            256                            393216                                     786432                  8   \n",
       "15   48                         2                    48                   8                           1024                           1572864                                    3145728                  8   \n",
       "16   64                         2                    64                   8                             16                             32768                                      65536                  8   \n",
       "17   64                         2                    64                   8                             64                            131072                                     262144                  8   \n",
       "18   64                         2                    64                   8                            256                            524288                                    1048576                  8   \n",
       "19   64                         2                    64                   8                           1024                           2097152                                    4194304                  8   \n",
       "20   96                         2                    96                   8                             16                             49152                                      98304                  8   \n",
       "21   96                         2                    96                   8                             64                            196608                                     393216                  8   \n",
       "22   96                         2                    96                   8                            256                            786432                                    1572864                  8   \n",
       "23   96                         2                    96                   8                           1024                           3145728                                    6291456                  8   \n",
       "24  128                         2                   128                   8                             16                             65536                                     131072                  8   \n",
       "25  128                         2                   128                   8                             64                            262144                                     524288                  8   \n",
       "26  128                         2                   128                   8                            256                           1048576                                    2097152                  8   \n",
       "27  128                         2                   128                   8                           1024                           4194304                                    8388608                  8   \n",
       "\n",
       "    simulated_executions_across_all_trials  costs_estimated_from_each_shared_shadow_record  additional_quantum_executions_for_H_PRTW  \n",
       "0                                   131072                                               2                                         0  \n",
       "1                                   524288                                               2                                         0  \n",
       "2                                  2097152                                               2                                         0  \n",
       "3                                  8388608                                               2                                         0  \n",
       "4                                   196608                                               2                                         0  \n",
       "5                                   786432                                               2                                         0  \n",
       "6                                  3145728                                               2                                         0  \n",
       "7                                 12582912                                               2                                         0  \n",
       "8                                   262144                                               2                                         0  \n",
       "9                                  1048576                                               2                                         0  \n",
       "10                                 4194304                                               2                                         0  \n",
       "11                                16777216                                               2                                         0  \n",
       "12                                  393216                                               2                                         0  \n",
       "13                                 1572864                                               2                                         0  \n",
       "14                                 6291456                                               2                                         0  \n",
       "15                                25165824                                               2                                         0  \n",
       "16                                  524288                                               2                                         0  \n",
       "17                                 2097152                                               2                                         0  \n",
       "18                                 8388608                                               2                                         0  \n",
       "19                                33554432                                               2                                         0  \n",
       "20                                  786432                                               2                                         0  \n",
       "21                                 3145728                                               2                                         0  \n",
       "22                                12582912                                               2                                         0  \n",
       "23                                50331648                                               2                                         0  \n",
       "24                                 1048576                                               2                                         0  \n",
       "25                                 4194304                                               2                                         0  \n",
       "26                                16777216                                               2                                         0  \n",
       "27                                67108864                                               2                                         0  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Shadow exports:\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_trial_estimates.csv\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_cases.csv\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_convergence.csv\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_performance.csv\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_localization.csv\n",
      " - C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_qiskit_outputs\\prtw_qiskit_73d6d3334176_shadow_resources.csv\n",
      "\n",
      "✅ CELL COMPLETE — shadow resource audit and numerical exports\n"
     ]
    }
   ],
   "source": [
    "# Export the numerical shadow diagnostics. The only figure is the combined\n",
    "# paper-style comparison produced at the end of the notebook.\n",
    "shadow_trial_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_trial_estimates.csv\"\n",
    "shadow_case_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_cases.csv\"\n",
    "shadow_convergence_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_convergence.csv\"\n",
    "shadow_performance_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_performance.csv\"\n",
    "shadow_localization_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_localization.csv\"\n",
    "\n",
    "shadow_trial_df.to_csv(shadow_trial_path, index=False)\n",
    "shadow_case_df.to_csv(shadow_case_path, index=False)\n",
    "shadow_convergence_df.to_csv(shadow_convergence_path, index=False)\n",
    "shadow_performance_df.to_csv(shadow_performance_path, index=False)\n",
    "shadow_localization_trial_df.to_csv(shadow_localization_path, index=False)\n",
    "\n",
    "shadow_resource_df = pd.DataFrame([\n",
    "    {\n",
    "        \"n\": n,\n",
    "        \"validation_architectures\": len(SHADOW_ARCHITECTURE_DRAWS),\n",
    "        \"monitored_parameters\": len(selected_parameter_indices(n)),\n",
    "        \"diagnostic_draws_R\": TRAIN_DRAWS,\n",
    "        \"shots_per_shift_per_replica_M\": shots,\n",
    "        \"executions_per_architecture_4PRM\": (\n",
    "            4 * len(selected_parameter_indices(n)) * TRAIN_DRAWS * shots\n",
    "        ),\n",
    "        \"executions_per_trial_across_architectures\": (\n",
    "            len(SHADOW_ARCHITECTURE_DRAWS)\n",
    "            * 4 * len(selected_parameter_indices(n)) * TRAIN_DRAWS * shots\n",
    "        ),\n",
    "        \"validation_trials\": SHADOW_TRIALS,\n",
    "        \"simulated_executions_across_all_trials\": (\n",
    "            SHADOW_TRIALS * len(SHADOW_ARCHITECTURE_DRAWS)\n",
    "            * 4 * len(selected_parameter_indices(n)) * TRAIN_DRAWS * shots\n",
    "        ),\n",
    "        \"costs_estimated_from_each_shared_shadow_record\": len(COST_NAMES),\n",
    "        \"additional_quantum_executions_for_H_PRTW\": 0,\n",
    "    }\n",
    "    for n in SHADOW_N_VALUES\n",
    "    for shots in SHADOW_SHOT_BUDGETS\n",
    "])\n",
    "shadow_resource_path = OUTPUT_DIR / f\"{RUN_PREFIX}_shadow_resources.csv\"\n",
    "shadow_resource_df.to_csv(shadow_resource_path, index=False)\n",
    "\n",
    "print(\"SHADOW QUANTUM-EXECUTION AUDIT\")\n",
    "display(shadow_resource_df)\n",
    "print(\"\\nShadow exports:\")\n",
    "for path in (\n",
    "    shadow_trial_path,\n",
    "    shadow_case_path,\n",
    "    shadow_convergence_path,\n",
    "    shadow_performance_path,\n",
    "    shadow_localization_path,\n",
    "    shadow_resource_path,\n",
    "):\n",
    "    print(\" -\", path.resolve())\n",
    "cell_ok(\"shadow resource audit and numerical exports\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb4fbc79",
   "metadata": {},
   "source": [
    "### Reading the Shadow--PRTW tables\n",
    "\n",
    "- **Exact train activity** is computed by Qiskit from the same diagnostic draws as the shadow\n",
    "  estimate and therefore isolates finite-shot error.\n",
    "- **Held-out reference activity** comes from independent Qiskit input/parameter draws; comparisons\n",
    "  with it include both shot error and finite-draw generalization error.\n",
    "- **Naive shadow activity** squares each noisy gradient estimate and is positively biased.\n",
    "- **Cross shadow activity** multiplies two independent gradient estimates and is unbiased for the\n",
    "  squared gradient before robust aggregation.\n",
    "- **MoM shadow activity** applies median-of-means to those cross products. A negative finite-shot\n",
    "  cross estimate is possible and is not a negative physical activity.\n",
    "\n",
    "The trial index measures Monte Carlo variability. It is not folded into the resource count for one\n",
    "hardware execution of Shadow--PRTW as a real quantum computer doesn't need to repeat these classical trials.\n",
    "\n",
    "## Postprocessing-only threshold sensitivity and Qiskit resource audit\n",
    "\n",
    "Changing the threshold factor below does not re-execute a Qiskit circuit. Resource counts use the\n",
    "actual Qiskit circuit objects rather than a hand-written gate formula.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0c62c4b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "THRESHOLD SENSITIVITY — OVERALL ROWS\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>threshold_factor_c</th>\n",
       "      <th>n</th>\n",
       "      <th>method</th>\n",
       "      <th>cases</th>\n",
       "      <th>true_weak</th>\n",
       "      <th>warnings</th>\n",
       "      <th>TP_caught_weak</th>\n",
       "      <th>FP_false_alarms</th>\n",
       "      <th>FN_missed_weak</th>\n",
       "      <th>TN_cleared_active</th>\n",
       "      <th>precision</th>\n",
       "      <th>recall</th>\n",
       "      <th>specificity</th>\n",
       "      <th>balanced_accuracy</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>warning_fraction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.0625</td>\n",
       "      <td>ALL</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>147</td>\n",
       "      <td>192</td>\n",
       "      <td>100</td>\n",
       "      <td>92</td>\n",
       "      <td>47</td>\n",
       "      <td>1393</td>\n",
       "      <td>0.520833</td>\n",
       "      <td>0.680272</td>\n",
       "      <td>0.938047</td>\n",
       "      <td>0.809160</td>\n",
       "      <td>0.914828</td>\n",
       "      <td>0.117647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0.0625</td>\n",
       "      <td>ALL</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>147</td>\n",
       "      <td>83</td>\n",
       "      <td>63</td>\n",
       "      <td>20</td>\n",
       "      <td>84</td>\n",
       "      <td>1465</td>\n",
       "      <td>0.759036</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.986532</td>\n",
       "      <td>0.707552</td>\n",
       "      <td>0.936275</td>\n",
       "      <td>0.050858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0.0625</td>\n",
       "      <td>ALL</td>\n",
       "      <td>WBP</td>\n",
       "      <td>1632</td>\n",
       "      <td>147</td>\n",
       "      <td>1632</td>\n",
       "      <td>147</td>\n",
       "      <td>1485</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.090074</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.090074</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0.1250</td>\n",
       "      <td>ALL</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>477</td>\n",
       "      <td>309</td>\n",
       "      <td>168</td>\n",
       "      <td>114</td>\n",
       "      <td>1041</td>\n",
       "      <td>0.647799</td>\n",
       "      <td>0.730496</td>\n",
       "      <td>0.861042</td>\n",
       "      <td>0.795769</td>\n",
       "      <td>0.827206</td>\n",
       "      <td>0.292279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0.1250</td>\n",
       "      <td>ALL</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>351</td>\n",
       "      <td>248</td>\n",
       "      <td>103</td>\n",
       "      <td>175</td>\n",
       "      <td>1106</td>\n",
       "      <td>0.706553</td>\n",
       "      <td>0.586288</td>\n",
       "      <td>0.914806</td>\n",
       "      <td>0.750547</td>\n",
       "      <td>0.829657</td>\n",
       "      <td>0.215074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>0.1250</td>\n",
       "      <td>ALL</td>\n",
       "      <td>WBP</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>1632</td>\n",
       "      <td>423</td>\n",
       "      <td>1209</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.259191</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.259191</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>0.2500</td>\n",
       "      <td>ALL</td>\n",
       "      <td>PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>891</td>\n",
       "      <td>991</td>\n",
       "      <td>752</td>\n",
       "      <td>239</td>\n",
       "      <td>139</td>\n",
       "      <td>502</td>\n",
       "      <td>0.758829</td>\n",
       "      <td>0.843996</td>\n",
       "      <td>0.677463</td>\n",
       "      <td>0.760729</td>\n",
       "      <td>0.768382</td>\n",
       "      <td>0.607230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>0.2500</td>\n",
       "      <td>ALL</td>\n",
       "      <td>H-PRTW</td>\n",
       "      <td>1632</td>\n",
       "      <td>891</td>\n",
       "      <td>1046</td>\n",
       "      <td>779</td>\n",
       "      <td>267</td>\n",
       "      <td>112</td>\n",
       "      <td>474</td>\n",
       "      <td>0.744742</td>\n",
       "      <td>0.874299</td>\n",
       "      <td>0.639676</td>\n",
       "      <td>0.756987</td>\n",
       "      <td>0.767770</td>\n",
       "      <td>0.640931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>0.2500</td>\n",
       "      <td>ALL</td>\n",
       "      <td>WBP</td>\n",
       "      <td>1632</td>\n",
       "      <td>891</td>\n",
       "      <td>1632</td>\n",
       "      <td>891</td>\n",
       "      <td>741</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.545956</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.545956</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    threshold_factor_c    n  method  cases  true_weak  warnings  TP_caught_weak  FP_false_alarms  FN_missed_weak  TN_cleared_active  precision    recall  specificity  balanced_accuracy  accuracy  warning_fraction\n",
       "7               0.0625  ALL    PRTW   1632        147       192             100               92              47               1393   0.520833  0.680272     0.938047           0.809160  0.914828          0.117647\n",
       "15              0.0625  ALL  H-PRTW   1632        147        83              63               20              84               1465   0.759036  0.428571     0.986532           0.707552  0.936275          0.050858\n",
       "23              0.0625  ALL     WBP   1632        147      1632             147             1485               0                  0   0.090074  1.000000     0.000000           0.500000  0.090074          1.000000\n",
       "31              0.1250  ALL    PRTW   1632        423       477             309              168             114               1041   0.647799  0.730496     0.861042           0.795769  0.827206          0.292279\n",
       "39              0.1250  ALL  H-PRTW   1632        423       351             248              103             175               1106   0.706553  0.586288     0.914806           0.750547  0.829657          0.215074\n",
       "47              0.1250  ALL     WBP   1632        423      1632             423             1209               0                  0   0.259191  1.000000     0.000000           0.500000  0.259191          1.000000\n",
       "55              0.2500  ALL    PRTW   1632        891       991             752              239             139                502   0.758829  0.843996     0.677463           0.760729  0.768382          0.607230\n",
       "63              0.2500  ALL  H-PRTW   1632        891      1046             779              267             112                474   0.744742  0.874299     0.639676           0.756987  0.767770          0.640931\n",
       "71              0.2500  ALL     WBP   1632        891      1632             891              741               0                  0   0.545956  1.000000     0.000000           0.500000  0.545956          1.000000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "QISKIT QUANTUM-RESOURCE AND CONSTANT-WIDTH SIMULATION AUDIT\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "      <th>architecture_draw</th>\n",
       "      <th>full_qiskit_circuit_constructed</th>\n",
       "      <th>qiskit_qubits</th>\n",
       "      <th>trainable_parameters_P</th>\n",
       "      <th>input_symbols</th>\n",
       "      <th>total_bound_symbols</th>\n",
       "      <th>qiskit_gates_per_circuit_G</th>\n",
       "      <th>qiskit_depth</th>\n",
       "      <th>parameter_shift_settings_per_diagnostic_draw</th>\n",
       "      <th>PRTW_gate_applications_per_diagnostic_draw</th>\n",
       "      <th>H_PRTW_additional_quantum_settings</th>\n",
       "      <th>Shadow_PRTW_settings_per_draw</th>\n",
       "      <th>activity_summary_floats_per_cost</th>\n",
       "      <th>exact_simulation_module_width</th>\n",
       "      <th>exact_simulation_state_amplitudes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>32</td>\n",
       "      <td>2240</td>\n",
       "      <td>0</td>\n",
       "      <td>64</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>16</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>16</td>\n",
       "      <td>32</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>32</td>\n",
       "      <td>2240</td>\n",
       "      <td>0</td>\n",
       "      <td>64</td>\n",
       "      <td>16</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>24</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>48</td>\n",
       "      <td>105</td>\n",
       "      <td>7</td>\n",
       "      <td>48</td>\n",
       "      <td>5040</td>\n",
       "      <td>0</td>\n",
       "      <td>96</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>24</td>\n",
       "      <td>48</td>\n",
       "      <td>105</td>\n",
       "      <td>7</td>\n",
       "      <td>48</td>\n",
       "      <td>5040</td>\n",
       "      <td>0</td>\n",
       "      <td>96</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>64</td>\n",
       "      <td>140</td>\n",
       "      <td>7</td>\n",
       "      <td>64</td>\n",
       "      <td>8960</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>32</td>\n",
       "      <td>64</td>\n",
       "      <td>140</td>\n",
       "      <td>7</td>\n",
       "      <td>64</td>\n",
       "      <td>8960</td>\n",
       "      <td>0</td>\n",
       "      <td>128</td>\n",
       "      <td>32</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>48</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>96</td>\n",
       "      <td>210</td>\n",
       "      <td>7</td>\n",
       "      <td>96</td>\n",
       "      <td>20160</td>\n",
       "      <td>0</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>48</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>48</td>\n",
       "      <td>96</td>\n",
       "      <td>210</td>\n",
       "      <td>7</td>\n",
       "      <td>96</td>\n",
       "      <td>20160</td>\n",
       "      <td>0</td>\n",
       "      <td>192</td>\n",
       "      <td>48</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>128</td>\n",
       "      <td>280</td>\n",
       "      <td>7</td>\n",
       "      <td>128</td>\n",
       "      <td>35840</td>\n",
       "      <td>0</td>\n",
       "      <td>256</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>64</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>64</td>\n",
       "      <td>128</td>\n",
       "      <td>280</td>\n",
       "      <td>7</td>\n",
       "      <td>128</td>\n",
       "      <td>35840</td>\n",
       "      <td>0</td>\n",
       "      <td>256</td>\n",
       "      <td>64</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>96</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>192</td>\n",
       "      <td>420</td>\n",
       "      <td>7</td>\n",
       "      <td>192</td>\n",
       "      <td>80640</td>\n",
       "      <td>0</td>\n",
       "      <td>384</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>96</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>96</td>\n",
       "      <td>192</td>\n",
       "      <td>420</td>\n",
       "      <td>7</td>\n",
       "      <td>192</td>\n",
       "      <td>80640</td>\n",
       "      <td>0</td>\n",
       "      <td>384</td>\n",
       "      <td>96</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>128</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>256</td>\n",
       "      <td>560</td>\n",
       "      <td>7</td>\n",
       "      <td>256</td>\n",
       "      <td>143360</td>\n",
       "      <td>0</td>\n",
       "      <td>512</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>128</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>128</td>\n",
       "      <td>256</td>\n",
       "      <td>560</td>\n",
       "      <td>7</td>\n",
       "      <td>256</td>\n",
       "      <td>143360</td>\n",
       "      <td>0</td>\n",
       "      <td>512</td>\n",
       "      <td>128</td>\n",
       "      <td>8</td>\n",
       "      <td>256</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      n  architecture_draw  full_qiskit_circuit_constructed  qiskit_qubits  trainable_parameters_P  input_symbols  total_bound_symbols  qiskit_gates_per_circuit_G  qiskit_depth  \\\n",
       "0    16                  0                             True             16                      16             16                   32                          70             7   \n",
       "1    16                  1                             True             16                      16             16                   32                          70             7   \n",
       "2    24                  0                             True             24                      24             24                   48                         105             7   \n",
       "3    24                  1                             True             24                      24             24                   48                         105             7   \n",
       "4    32                  0                             True             32                      32             32                   64                         140             7   \n",
       "5    32                  1                             True             32                      32             32                   64                         140             7   \n",
       "6    48                  0                             True             48                      48             48                   96                         210             7   \n",
       "7    48                  1                             True             48                      48             48                   96                         210             7   \n",
       "8    64                  0                             True             64                      64             64                  128                         280             7   \n",
       "9    64                  1                             True             64                      64             64                  128                         280             7   \n",
       "10   96                  0                             True             96                      96             96                  192                         420             7   \n",
       "11   96                  1                             True             96                      96             96                  192                         420             7   \n",
       "12  128                  0                             True            128                     128            128                  256                         560             7   \n",
       "13  128                  1                             True            128                     128            128                  256                         560             7   \n",
       "\n",
       "    parameter_shift_settings_per_diagnostic_draw  PRTW_gate_applications_per_diagnostic_draw  H_PRTW_additional_quantum_settings  Shadow_PRTW_settings_per_draw  activity_summary_floats_per_cost  \\\n",
       "0                                             32                                        2240                                   0                             64                                16   \n",
       "1                                             32                                        2240                                   0                             64                                16   \n",
       "2                                             48                                        5040                                   0                             96                                24   \n",
       "3                                             48                                        5040                                   0                             96                                24   \n",
       "4                                             64                                        8960                                   0                            128                                32   \n",
       "5                                             64                                        8960                                   0                            128                                32   \n",
       "6                                             96                                       20160                                   0                            192                                48   \n",
       "7                                             96                                       20160                                   0                            192                                48   \n",
       "8                                            128                                       35840                                   0                            256                                64   \n",
       "9                                            128                                       35840                                   0                            256                                64   \n",
       "10                                           192                                       80640                                   0                            384                                96   \n",
       "11                                           192                                       80640                                   0                            384                                96   \n",
       "12                                           256                                      143360                                   0                            512                               128   \n",
       "13                                           256                                      143360                                   0                            512                               128   \n",
       "\n",
       "    exact_simulation_module_width  exact_simulation_state_amplitudes  \n",
       "0                               8                                256  \n",
       "1                               8                                256  \n",
       "2                               8                                256  \n",
       "3                               8                                256  \n",
       "4                               8                                256  \n",
       "5                               8                                256  \n",
       "6                               8                                256  \n",
       "7                               8                                256  \n",
       "8                               8                                256  \n",
       "9                               8                                256  \n",
       "10                              8                                256  \n",
       "11                              8                                256  \n",
       "12                              8                                256  \n",
       "13                              8                                256  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "✅ CELL COMPLETE — threshold sensitivity and Qiskit resource audit\n"
     ]
    }
   ],
   "source": [
    "sensitivity_rows = []\n",
    "for factor in SENSITIVITY_FACTORS:\n",
    "    threshold = factor / decision_df[\"n\"]**2\n",
    "    sensitivity_frame = decision_df.copy()\n",
    "    sensitivity_frame[\"truth_weak_sensitivity\"] = sensitivity_frame[\"reference_activity\"] <= threshold\n",
    "    sensitivity_frame[\"prtw_sensitivity\"] = sensitivity_frame[\"mean_activity\"] <= threshold\n",
    "    sensitivity_frame[\"h_sensitivity\"] = sensitivity_frame[\"h_activity\"] <= threshold\n",
    "    sensitivity_frame[\"truth_weak\"] = sensitivity_frame[\"truth_weak_sensitivity\"]\n",
    "    for method, column in (\n",
    "        (\"PRTW\", \"prtw_sensitivity\"),\n",
    "        (\"H-PRTW\", \"h_sensitivity\"),\n",
    "        (\"WBP\", \"wbp_warning\"),\n",
    "    ):\n",
    "        for n_label, frame in [(n, sensitivity_frame[sensitivity_frame[\"n\"] == n]) for n in N_VALUES] + [(\"ALL\", sensitivity_frame)]:\n",
    "            sensitivity_rows.append({\n",
    "                \"threshold_factor_c\": factor,\n",
    "                \"n\": n_label,\n",
    "                \"method\": method,\n",
    "                **binary_metrics(frame.rename(columns={column: \"temporary_prediction\"}), \"temporary_prediction\"),\n",
    "            })\n",
    "sensitivity_df = pd.DataFrame(sensitivity_rows)\n",
    "\n",
    "resource_rows = []\n",
    "for n in N_VALUES:\n",
    "    for architecture_draw in range(ARCHITECTURES_PER_N):\n",
    "        architecture = make_architecture(n, architecture_draw)\n",
    "        full_circuit, _, _ = build_full_qiskit_circuit(architecture)\n",
    "        p = n\n",
    "        g = full_circuit.size()\n",
    "        resource_rows.append({\n",
    "            \"n\": n,\n",
    "            \"architecture_draw\": architecture_draw,\n",
    "            \"full_qiskit_circuit_constructed\": True,\n",
    "            \"qiskit_qubits\": full_circuit.num_qubits,\n",
    "            \"trainable_parameters_P\": p,\n",
    "            \"input_symbols\": n,\n",
    "            \"total_bound_symbols\": full_circuit.num_parameters,\n",
    "            \"qiskit_gates_per_circuit_G\": g,\n",
    "            \"qiskit_depth\": full_circuit.depth(),\n",
    "            \"parameter_shift_settings_per_diagnostic_draw\": 2 * p,\n",
    "            \"PRTW_gate_applications_per_diagnostic_draw\": 2 * p * g,\n",
    "            \"H_PRTW_additional_quantum_settings\": 0,\n",
    "            \"Shadow_PRTW_settings_per_draw\": 4 * p,\n",
    "            \"activity_summary_floats_per_cost\": p,\n",
    "            \"exact_simulation_module_width\": MODULE_WIDTH,\n",
    "            \"exact_simulation_state_amplitudes\": 2**MODULE_WIDTH,\n",
    "        })\n",
    "resource_df = pd.DataFrame(resource_rows)\n",
    "\n",
    "print(\"THRESHOLD SENSITIVITY — OVERALL ROWS\")\n",
    "display(sensitivity_df[sensitivity_df[\"n\"].eq(\"ALL\")])\n",
    "print(\"\\nQISKIT QUANTUM-RESOURCE AND CONSTANT-WIDTH SIMULATION AUDIT\")\n",
    "display(resource_df)\n",
    "cell_ok(\"threshold sensitivity and Qiskit resource audit\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "94f22786",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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9+7ddbwhyjpHlYSYU8o/p6jVaj744AMCAgKwsrLC0dGRdu3a8b///U/bRvO9nj17locffhh7e3scHByYOHEicXFxxfo0xngV/l40Xh1+fn689dZbAHh4eOh8j/rGLycnh4ULF9KyZUssLS1xcXEhKCiII0eOaNsUDk0r6fe9fv16FAqFXk/UhQsXYmZmRmRkZKnjLRAIqo7KXisVDb+dMmUKS5cuBdAJ0yzqaVbasVdf+G1gYCBt2rTh5MmT9O3bF2tra5o0acInn3yid87UR3mPcYU/o6HriB07djBw4EAcHBywtramZcuWfPzxxzp260t1UFqqi7Vr1zJu3DhA/p40Y7l27dpSP2dZz1+MgampKR06dCA3N1fHq/77778nNjaWTz75REfQ0/Dqq6/SokULPvvsM/Ly8gBYuXIl0dHRLFq0yOANz7Fjx1bJ5xBUHCHqCaoUzV2kwneg9u3bR//+/enduzcKhUJHcNm3bx+dOnXCwcEBgJkzZ/LCCy8waNAgtm7dyrJly7h8+TK9evUiJiZGu92tW7fo2bMny5cvZ9euXbzzzjscP36cPn36aA9S+jhw4AC9evWiXbt27Nu3T+cOuj7Wrl3LU089RcuWLfntt9946623eP/99/n333/LPCZTp07FzMyM9evXs3nzZszMzPjoo4+YMGECrVq14tdff2X9+vWkpaXRt29frly5ot12586d9O3bl/DwcBYvXsz27dt56623tGMxffp0nn32WQC2bNmidc02lKMwOzuboKAg1q1bx7x58/jnn3+YOHEiixYt4uGHHy7W/p9//mHJkiUsXLiQ3377DWdnZ8aMGVPmC9j58+cTHh7OihUr+Ouvv3B3d+fHH39k8ODB2Nvb88MPP/Drr7/i7OzMkCFDdIS98+fP07VrV44dO8bChQvZvn07H3/8MTk5OdocEomJiQC8++67/PPPP6xZs4YmTZoQGBgocuUJBHWMrKwsfv75Z7p27UqbNm2YOnUqaWlpbNq0SaddREQEXbt25ffff2fevHls376dr776CgcHB5KSkujUqRNr1qwB5LxmmuOioVDWqVOnEh4eXuy4fu3aNU6cOMFTTz2lXVbWOcoQYk6p2JyyaNEiFixYwIQJE/jnn3/YuHEj06ZN0xsiPGbMGJo2bcrmzZtZsGABW7duZciQITrnBsYaL338/vvvTJs2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9u3b2bJli+3fsGHDqFu3Llu2bKFNmzaOCl1ERIoh5SURESlKlJdERORanDr8dtSoUfTv359WrVrRrl07Pv74Y44ePcqwYcMAsyv4iRMnmDNnDm5ubjRq1CjL80NDQ/Hx8bliv4iISH4oL4mISFGivCQiIjlxalGvT58+nD17lvHjxxMdHU2jRo1YvHgxVatWBSA6OpqjR486M0QRESlBlJdERKQoUV4SEZGcWAzDMJwdhCPFx8cTGBhIXFxcgRbKOH36NKGhoS41Ft1V43ZVam/HUns7lj3a2x7vx8VBQdvBVV/7rhq3K1ObO5ba27EK2t7KSf9RXnKtuF2V2tvx1OaO5ai8pO+kiIiIiIiIiIiIi1FRT0RERERERERExMWoqCciIiIiIiIiIuJiVNQTERERERERERFxMSrqiYiIiIiIiIiIuBgV9URERERERERERFyMinoiIiIiIiIiIiIuRkU9ERERERERERERF6OinoiIiIiIiIiIiItRUU9ERERERERERMTFqKgnIiIiIiIiIiLiYlTUExERERERERERcTEq6omIiIiIiIiIiLgYFfVERERERERERERcjIp6IiIiIiIiIiIiLkZFPRERERERERERERejop6IiIiIiIiIiIiLUVFPRERERERERETExaioJyIiIiIiIiIi4mJU1BMREREREREREXExKuqJiIiIiIiIiIi4GBX1REREREREREREXIyKeiIiIiIiIiIiIi5GRT0REREREREREREXo6KeiIiIiIiIiIiIi1FRT0RERERERERExMWoqCciIiIiIiIiIuJiVNQTERERERERERFxMSrqiYiIiIiIiIiIuBgV9URERERERERERFyMinoiIiIiIiIiIiIuRkU9ERERERERERERF+Ph7ABEREREXJVhGKSnp5ORkeHsUK7JarWSlpZGcnIybm76XLcwuLu74+HhgcVicXYoIiIiUgKoqCciIiKSD6mpqURHR5OUlOTsUHLFMAysVisJCQkqOhWiUqVKUbFiRTw89Gu2iIiIFC79tiEiIiKSR1arlUOHDuHu7k5YWBheXl5FvlCW2atQPckKh2EYpKamcubMGQ4dOkTNmjWdHZKIiIgUcyrqiYiIiORRamoqVquVKlWqUKpUKWeHkysq6hU+X19fPD09OXLkCGlpac4OR0RERIo5TagiIiIikk+am04u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VF588UV69eqVq+tGRkby1VdfAebPULdu3WjTpg1btmzh4sWLREVF0axZM8qUKZOneEWKK+UlERG5GqcX9URERESKg2YVmuXqvISUhBwLdy0qtMhVT728mDBhAk888QTp6el4eHhkWbXXz8/Pdt6SJUu44YYbAPjyyy+5/fbbs71e48aN2bJlC6mpqbz66qv8+uuvvPTSS3h6el4zlsjISJ5++mni4+NZtWoVb7zxBt7e3jRv3py1a9dqPj0RERGRXFJRT0RERMQOcjscdlP0Jlp+3PKqxz/p9QktKl451LWwJCYm5vu5Xl5evPLKKyxcuJCpU6fyxBNPXPM5TZo0ISgoiFmzZuHl5UWVKlUAiIiIYOXKlaxevZohQ4bkOyYRERGRksKpC2WIiIiIlDQhpULw8fDJ9piPhw8hpUIcHFHBWCwWxowZw+uvv05SUlKuzo+IiODNN9+kU6dOtv0RERHMnDmTc+fO2XoLioiIiMjVqaeeiIiIiAOFB4azd8TebFe5DSkVQnhguBOiKpg777yTsWPHMmXKFJ599tlrnh8ZGcl3332XZTGMdu3aERsbS6tWrfD3z3n4sYiIiIioqCciIiLicOGB4Q4r3mVOnG8YRpb9l29f6vDhw1c9NnDgQAYOHJhln5ubG7t3786yL6eFOUaMGMGIESOy7PP19SUlJeWqzxERERGRrDT8VkRERERERERExMWoqCciIiIiIiIiIuJiVNQTERERERERERFxMSrqiYiIiIiIiIiIuBgV9URERERERERERFyMinoiIiIiIiIiIiIuRkU9ERERERERERERF6OinoiIiIiIiIiIiItRUU9EREREirzZs2fTrFkzZ4chIiIiUmSoqCciIiJSTE2cOJF27dpl2Xf//ffj6+tLcnKybd/kyZNp0qQJs2fPxt3dHT8/P/z8/KhYsSLDhw8nJSXFdm6nTp3w9vbGz8+PMmXKEBERwfr16/Mc28CBAxk5cmS+vzYRERGRkk5FPREREREnSTn4O6cndyXl4O+Fcv3IyEg2bNhAQkKCbd+qVauoXr06f/75p21fVFQUkZGRADRu3JjExEQSExPZuHEjv//+OxMnTsxy3TfffJPExESio6Np0aIFt99+e6HELyIiIiJXp6KeiIiIiBMYhkHCr2+TEXOAhF/fxjAMu9+jefPm+Pn58dtvvwGwf/9+fHx86NevHytXrrTFsXr1altR71JhYWF07dqVnTt3Znt9Hx8fhgwZwsmTJzl79uwVx1NSUhg8eDAhISEEBgbSqFEj1q9fzwcffMCXX37J1KlT8fPzo2HDhvzwww/UqFEjSzv88ccflClTJkuvwkyJiYmMGDGC8PBwQkNDGTBgAHFxcflqJxERERFX5OHsAERERESKg7gl/0f6qd25Pt968Tzp/+wFIO3kdmKm9cTNNyhXz/WoUJ/A7mOveZ6bmxsdO3YkKiqKbt26sXr1aiIiIoiIiGDsWPP5O3bsIDY2loiICH744Ycszz927BhLly7lkUceyfb6SUlJzJgxg6pVqxIcHHzF8c8++4ytW7dy4MABAgMD2b9/P76+vjz++ONs2rSJoKAg3nvvPQDS09MZNmwYq1atolOnToA5j969996Lj4/PFdcePHgwHh4ebNu2DU9PTx588EFGjBjB559/fs12ERERESkOVNQTERERsYP0U7tJPbwu/8//t8Bnb5GRkXz11VeAOfS2e/futGnThi1btnDx4kWioqJo1qwZZcqUAWD79u0EBQVhGAbx8fG0b9+e++67L8s1R48ezbhx4/Dx8aFZs2b8+OOP2d7b09OThIQEdu/eTZs2bahTp85V4/Tw8GDAgAHMnj2bTp06kZyczNdff82yZcuuOPfMmTP873//48yZMwQFBQEwfvx4GjZsaJsXUERERKS4U1FPRERExA48KtTP9bmX9tLLco3ydXPVWy8v94qMjOTpp58mPj6eNWvW8Oabb+Lt7U3z5s1Zu3Ztlvn0wJxTb8uWLYA5xPXFF1+kW7durF271nbOhAkTrljk4ujRozRo0MC2vWvXLvr37090dDTDhg3j2LFj9OrVi4kTJxISEpJtrIMHD6ZVq1ZMmTKFhQsXUrlyZVq1anXFeYcPH8ZqtVKjRo0s+93c3Dh16hSVKlXKdfuIiIiIuCoV9URERETsIDfDYcGcw+7sx3eAxQKXzqNnsWBx96LswC+xWCx2i6tJkyYEBQUxa9YsvLy8qFKlCgARERGsXLmS1atXM2TIkGyf6+fnx4MPPsj777/P2bNnsx1imyk8PJzExMQr9r/wwgu88MIL/PPPP/Tr149XXnmFyZMn4+Z25dTOdevWpWnTpnz77bfMnTuXwYMHZ3uvKlWq4ObmxsmTJylVqlRumkFERESk2NFCGSIiIiKOlJFKRlx01oIegGGQER8NGal2vZ3FYiEiIoK33nqLjh072vZHREQwc+ZMzp07xw033JDtcy9evMinn35KWFgYZcuWzfO9V6xYwZYtW0hPT6d06dL4+Pjg4WF+ply+fHn+/vvvK54zZMgQ3nnnHVavXs3999+f7XUrVKjA7bffzogRI4iJiQHg1KlTfP/993mOUURERMRVqagnIiIi4kAWD29Chn5PyNAfrvz38AIsHt52v2dkZCSnTp3KUrxr164dsbGxtGrVCn9/f9v+7du34+fnh5+fH5UqVWLbtm0sWrQoX70HM3vnBQUFUb16dQIDA3n55ZcBePDBBzlx4gRlypShSZMmtuf07t2bI0eO0K1bN8qVK3fVa8+ePZugoCBat25NQEAAN9xwAxs3bsxzjCIiIiKuSsNvRURERBzMPTAM98Awh91vxIgRPProo6Snp9v2+fr6kpKSkuW8gQMHMnDgwByvFRUVlev79uvXj379+mV7rGbNmtkW4UqXLk25cuUYNGhQjrH5+/szadIkJk2alOt4RERERIoT9dQTERERkSJj3rx5pKen07NnT2eHIiIiIlKkqaeeiIiIiBQJ9evXJzY2ls8++wx3d3dnhyMiIiJSpKmoJyIiIiJFwu7du50dgoiIiIjL0PBbERERERERERERF6OinoiIiIiIiIiIiItRUU9ERERERERERMTFaE49EREREQdLOJNCwpnUK/b7l/PCv5y3EyISEREREVejop6IiIiIg/31zUlWTjtyxf7IR6py0/DqTohIRERERFyNht+KiIiIONh194QxfH5L/EK8APAL8WL4/JZcd0+YQ+OoVq0aCxYssNv1br/9dsaNG2e364mIiIjI1amoJyIiIuJg/uW82bv6LIkx5hDcxJhU9q4+WyhDb/fu3cutt95KuXLlCA4Opn79+rz55pt2v48jderUCW9vb/z8/ChTpgwRERGsX78egKioKCwWC35+fvj7+1O1alVGjx6N1Wpl2LBh+Pn54efnh4+PD+7u7rZtPz8/5syZQ8WKFbPca8yYMVgsFg4fPmzbt3DhQoKCgrBarY78skVERESyUFFPRERExMFWTj/M8g8PZ9m3/MPDrJx+ONvzC6Jnz540bdqUI0eOcPr0ab799ltq1Khh9/s42ptvvkliYiLR0dG0aNGC22+/3XYsMDCQxMREEhIS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alXi4+Nd9jXuagr6nqKc9B/lJdeK21WpvR1Pbe5YjspL+k6KiIiIONhf35xkap+NJMakApAYk8rUPhv565uTTo5MRERERFyFFsoQERERcbDr7gmjfqeQK/b7l/NyQjQiIiIi4opU1BMRERFxMP9y3oU2zFZERERESgYNvxUREREREREREXExKuqJiIiI5JPVanV2CFLEZL4mtBiJiIiIFDYNvxURERHJIy8vL9zc3Dh58iTlypXDy8uryBdxtPpt4TIMg9TUVM6cOYObmxuenp7ODklERESKORX1RERERPLIzc2N6tWrEx0dzcmTrrFirWEYWK1W3NzcVNQrRKVKlSI8PBw3Nw2IERERkcKlop6IiIhIPnh5eREeHk56ejoZGRnODuearFYrZ8+eJTg4WAWnQuLu7m7rCamh2SIiIlLYVNQTERERySeLxYKnp6dLDLW0Wq14enri4+Ojop6IiIhIMeD03+imTp1K9erV8fHxoWXLlqxZsybH81etWkXLli3x8fGhRo0aTJ8+3UGRiohISaC8JCIiRYnykoiIXI1Ti3rz589n5MiRjBkzhs2bN3PDDTfQvXt3jh49mu35hw4dokePHtxwww1s3ryZF154gccff5z//e9/Do5cRESKI1fMSyl//44x7z5S/v7d/tc++DunJ3cl5WAhXLsQ4y5Mhdkmhc1V29xVqb0dq7i2tyvmJRERcRynFvUmTZrEkCFDePDBB6lfvz7vvfceVapUYdq0admeP336dMLDw3nvvfeoX78+Dz74IIMHD2bixIkOjlxERIojV8tLhmGQuPwdOHeYxOXvYBiGXa+d8OvbZMQcIOHXt+1+7cKKuzAVZpsUNldtc1el9nas4tzerpaXRETEsZw2p15qaiobN27k+eefz7K/S5curF27Ntvn/PHHH3Tp0iXLvq5duzJz5kzS0tKync8mJSWFlJQU23ZcXBwA58+fz/cExlarlfj4eLy8vFxqThpXjdtVqb0dS+3tWPZo7/j4eIAi88eXK+allL/XEndoq7lxaCvx73TBzTcwT9e4GuvFODJiDtiuHVeI17Zn3IWpMNuksLlqm7sqtbdjXd7e1s1L8K7RPk/XKGo5CVwzL4Hr/k7mqnG7KrW346nNHaug7Z3bvOS0ol5MTAwZGRmUL18+y/7y5ctz6tSpbJ9z6tSpbM9PT08nJiaGihUrXvGcCRMm8Morr1yxv2rVqgWIXkRE7CUhIYHAQOf/sVs88tJhO1yjuF27MB12dgAFcNjZAZQwh50dQMnyZs98P7Wo5CQoLnlJREQK4lp5yemr31oslizbhmFcse9a52e3P9Po0aMZNWqUbdtqtRIbG0twcHCO98lJfHw8VapU4dixYwQEBOTrGs7gqnG7KrW3Y6m9Hcse7W0YBgkJCYSFhdk5uoJxtbzkqq99V43blanNHUvt7VgFbe+impNAeclRXDVuV6X2djy1uWM5Ki85ragXEhKCu7v7FZ8ynT59+opPlzJVqFAh2/M9PDwIDg7O9jne3t54e3tn2RcUFJT/wC8REBDgkj8Mrhq3q1J7O5ba27EK2t5FpTcEuH5ectXXvqvG7crU5o6l9nasgrR3UcpJoLzkLK4at6tSezue2tyxCjsvOW0gtZeXFy1btmTZsmVZ9i9btoz27bOfA6Ndu3ZXnP/LL7/QqlWrbOeHEBERyS3lJRERKUqUl0RE5FqcOjviqFGjmDFjBrNmzWL37t08+eSTHD16lGHDhgFmV/ABAwbYzh82bBhHjhxh1KhR7N69m1mzZjFz5kyefvppZ30JIiJSjCgviYhIUaK8JCIiOXHqnHp9+vTh7NmzjB8/nujoaBo1asTixYttk7JGR0dz9OhR2/nVq1dn8eLFPPnkk3z44YeEhYXxwQcfcNdddzk0bm9vb15++eUruqkXda4at6tSezuW2tuximt7u2JectXvhavG7crU5o6l9nas4treykuO46pxuyq1t+OpzR3LUe1tMYrSuu0iIiIiIiIiIiJyTU4dfisiIiIiIiIiIiJ5p6KeiIiIiIiIiIiIi1FRT0RERERERERExMWoqCciIiIiIiIiIuJiVNS7itWrV3PrrbcSFhaGxWJhwYIFV5yze/duevXqRWBgIP7+/rRt2zbL6lPOMG3aNJo0aUJAQAABAQG0a9eOJUuWAJCWlsZzzz1H48aNKV26NGFhYQwYMICTJ086NWZXd+LECe6//36Cg4MpVaoUzZo1Y+PGjdmeO3ToUCwWC++9955jgyxGEhISGDlyJFWrVsXX15f27duzfv36LOcUxZ9NV5HTe19u30NOnTpF//79qVChAqVLl6ZFixZ8++23Dv5Kih/lJckt5SXHUl4qPMpJRZsr5iXlJMdTTnI85aXCUxTzkop6V3HhwgWaNm3KlClTsj1+8OBBOnToQL169YiKimLr1q2MHTsWHx8fB0eaVeXKlXnjjTfYsGEDGzZs4MYbb+S2225j586dJCUlsWnTJsaOHcumTZv47rvv2LdvH7169XJqzK7s3LlzXH/99Xh6erJkyRJ27drFO++8Q1BQ0BXnLliwgHXr1hEWFub4QIuRBx98kGXLlvH555+zfft2unTpQufOnTlx4gRQdH82XUVO7325fQ/p378/e/fu5ccff2T79u3ceeed9OnTh82bNzvqyyiWlJckN5SXHE95qfAoJxVtrpiXlJMcSznJOZSXCk+RzEuGXBNgfP/991n29enTx7j//vudE1AelSlTxpgxY0a2x/766y8DMI4cOeLgqIqH5557zujQocM1zzt+/LhRqVIlY8eOHUbVqlWNd999t/CDK4aSkpIMd3d346effsqyv2nTpsaYMWMMw3Ctn82iLrv3vstl9x5SunRpY86cOVnOK1u27FXfhyTvlJfkapSXHEt5yXGUk4o2V85LykmFRznJ8ZSXHKeo5CX11MsHq9XKokWLqFOnDl27diU0NJQ2bdpk2+XcmTIyMpg3bx4XLlygXbt22Z4TFxeHxWLJ9tMSubYff/yRVq1acc899xAaGkrz5s355JNPspxjtVrp378/zzzzDA0bNnRSpMVDeno6GRkZV3yK5Ovry2+//eYyP5vFSXbvIR06dGD+/PnExsZitVqZN28eKSkpdOrUyWlxFneu8tpXXip8ykuOpbxUtCgnFR2u8NpXTip8ykmOp7xUtDgkL+WrFFjCcFkFNjo62gCMUqVKGZMmTTI2b95sTJgwwbBYLEZUVJTzAv3Xtm3bjNKlSxvu7u5GYGCgsWjRomzPu3jxotGyZUvjvvvuc3CExYe3t7fh7e1tjB492ti0aZMxffp0w8fHx/jss89s57z++uvGzTffbFitVsMwDH36VEDt2rUzIiIijBMnThjp6enG559/blgsFqNOnTpF/mfT1Vz+3ne5q72HnD9/3ujatasBGB4eHkZAQIDxyy+/FHK0JYvyklyN8pLjKS85hnJS0eZKeUk5yXGUk5xDeckxikpeUlEvFy7/Zp04ccIAjH79+mU579ZbbzX69u3r4OiulJKSYuzfv99Yv3698fzzzxshISHGzp07s5yTmppq3HbbbUbz5s2NuLg4J0Xq+jw9PY127dpl2ffYY48Zbdu2NQzDMDZs2GCUL1/eOHHihO24ElXBHDhwwOjYsaMBGO7u7kbr1q2N++67z6hfv36R/9l0NTklqpzeQ0aMGGFcd911xq+//mps2bLFGDdunBEYGGhs27bNAVGXDMpLcjXKS46nvOQYyklFmyvlJeUkx1FOcg7lJccoKnlJw2/zISQkBA8PDxo0aJBlf/369YvEijFeXl7UqlWLVq1aMWHCBJo2bcr7779vO56Wlkbv3r05dOgQy5YtIyAgwInRuraKFSvm+DpYs2YNp0+fJjw8HA8PDzw8PDhy5AhPPfUU1apVc0LErq9mzZqsWrWKxMREjh07xl9//UVaWhrVq1cv8j+bxUVO7yEHDx5kypQpzJo1i5tuuommTZvy8ssv06pVKz788EMnRl28FfXXvvKS4ygvOZ7yknMpJxVNRfm1r5zkOMpJzqG85FyOzkse9gq8JPHy8qJ169bs3bs3y/59+/ZRtWpVJ0V1dYZhkJKSAvz3Atu/fz8rV64kODjYydG5tuuvvz7H10H//v3p3LlzluNdu3alf//+DBo0yGFxFkelS5emdOnSnDt3jp9//pm33nrL5X42XdG13kOSkpIAcHPL+pmRu7s7VqvVYXGWNK722ldeKjzKS86jvOR4yklFlyu99pWTCo9yknMpLzmeM/KSinpXkZiYyIEDB2zbhw4dYsuWLZQtW5bw8HCeeeYZ+vTpQ8eOHYmMjGTp0qUsXLiQqKgo5wUNvPDCC3Tv3p0qVaqQkJDAvHnziIqKYunSpaSnp3P33XezadMmfvrpJzIyMjh16hQAZcuWxcvLy6mxu6Inn3yS9u3b8/rrr9O7d2/++usvPv74Yz7++GMAgoODr/hB9vT0pEKFCtStW9cZIbu8n3/+GcMwqFu3LgcOHOCZZ56hbt26tsRfVH82XUVO731hYWHXfA+pV68etWrVYujQoUycOJHg4GAWLFjAsmXL+Omnn5z1ZRULykuSG8pLjqe8VHiUk4o2V8xLykmOpZzkHMpLhadI5qV8DdotAVauXGkAV/x74IEHbOfMnDnTqFWrluHj42M0bdrUWLBggfMC/tfgwYONqlWrGl5eXka5cuWMm266yTbp4qFDh7L9mgBj5cqVzg3chS1cuNBo1KiR4e3tbdSrV8/4+OOPczxf80QUzPz5840aNWoYXl5eRoUKFYxHH33UOH/+fJZziuLPpqvI6b0vt+8h+/btM+68804jNDTUKFWqlNGkSZMrlm2XvFNektxSXnIs5aXCo5xUtLliXlJOcjzlJMdTXio8RTEvWQzDMPJXDhQRERERERERERFn0EIZIiIiIiIiIiIiLkZFPRERERERERERERejop6IiIiIiIiIiIiLUVFPRERERERERETExaioJyIiIiIiIiIi4mJU1BMREREREREREXExKuqJiIiIiIiIiIi4GBX1REREREREREREXIyKeiJFzOHDh7FYLGzZsuWq50RFRWGxWDh//rzD4hIRkZJJeUlERIoK5SSRrFTUE3FB7du3Jzo6msDAQABmz55NUFCQc4MSEZESS3lJRESKCuUkKUk8nB2AiOSdl5cXFSpUcHYYIiIigPKSiIgUHcpJUpKop56IHV24cIEBAwbg5+dHxYoVeeedd+jUqRMjR460nWOxWFiwYEGW5wUFBTF79uws+/bs2UP79u3x8fGhYcOGREVF2Y5d2qU8KiqKQYMGERcXh8ViwWKxMG7cOACmTp1K7dq18fHxoXz58tx9991XjT3zE6yff/6Z+vXr4+fnR7du3YiOji5gq4iIiLMoL4mISFGhnCRifyrqidjRM888w8qVK/n+++/55ZdfiIqKYuPGjfm+1lNPPcXmzZtp3749vXr14uzZs1ec1759e9577z0CAgKIjo4mOjqap59+mg0bNvD4448zfvx49u7dy9KlS+nYsWOO90xKSmLixIl8/vnnrF69mqNHj/L000/nK34REXE+5SURESkqlJNE7E/Db0XsJDExkZkzZzJnzhxuvvlmAD777DMqV66cr+uNGDGCu+66C4Bp06axdOlSZs6cybPPPpvlPC8vLwIDA7FYLFm6mR89epTSpUtzyy234O/vT9WqVWnevHmO90xLS2P69OnUrFnTFsP48ePzFb+IiDiX8pKIiBQVykkihUM99UTs5ODBg6SmptKuXTvbvrJly1K3bt18Xe/S63h4eNCqVSt2796d6+fffPPNVK1alRo1atC/f3++/PJLkpKScnxOqVKlbEkKoGLFipw+fTrvwYuIiNMpL4mISFGhnCRSOFTUE7ETwzBydZ7FYrni3LS0tFw/N7f8/f3ZtGkTc+fOpWLFirz00ks0bdo0x6XdPT09rxmriIi4BuUlEREpKpSTRAqHinoidlKrVi08PT35888/bfvOnTvHvn37spxXrly5LBOq7t+/P9tPhS69Tnp6Ohs3bqRevXrZ3tvLy4uMjIwr9nt4eNC5c2feeusttm3bxuHDh1mxYkWevzYREXE9yksiIlJUKCeJFA7NqSdiJ35+fgwZMoRnnnmG4OBgypcvz5gxY3Bzy1o7v/HGG5kyZQpt27bFarXy3HPPXfGpD8CHH35I7dq1qV+/Pu+++y7nzp1j8ODB2d67WrVqJCYmsnz5cpo2bUqpUqVYsWIFf//9Nx07dqRMmTIsXrwYq9Wa7y7uIiLiWpSXRESkqFBOEikcKuqJ2NHbb79NYmIivXr1wt/fn6eeeoq4uLgs57zzzjsMGjSIjh07EhYWxvvvv5/tqk9vvPEGb775Jps3b6ZmzZr88MMPhISEZHvf9u3bM2zYMPr06cPZs2d5+eWX6dy5M9999x3jxo0jOTmZ2rVrM3fuXBo2bFgoX7uIiBQ9yksiIlJUKCeJ2J/F0CBwkULVqVMnmjVrxnvvvefsUERERJSXRESkyFBOEikYzaknIiIiIiIiIiLiYlTUExERERERERH5//btgAQAAIBBWP/W5hC2GPLDjPstAAAAAMxY6gEAAADAjKgHAAAAADOiHgAAAADMiHoAAAAAMCPqAQAAAMCMqAcAAAAAM6IeAAAAAMyIegAAAAAwE4+SqnfkV3rEAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1280x420 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "PAPER-FIGURE SHADOW SETTINGS\n",
      "Shadow estimator: cross-replica median-of-means from Qiskit Born samples\n",
      "Shots per shifted state and replica M: 1024\n",
      "Diagnostic draws R: 8\n",
      "Median-of-means blocks: 4\n",
      "Error bars: one standard deviation across 8 shadow trials\n",
      "PRTW, H-PRTW, and WBP-style use the exact fixed-draw summaries; only Shadow-PRTW includes finite-shot measurement variation.\n",
      "\n",
      "HONEST SUMMARY AT THE PREDECLARED THRESHOLD\n",
      "PRTW   : recall=0.727, specificity=0.844, precision=0.589, balanced accuracy=0.785\n",
      "H-PRTW : recall=0.597, specificity=0.890, precision=0.627, balanced accuracy=0.744\n",
      "WBP    : recall=1.000, specificity=0.000, precision=0.236, balanced accuracy=0.500\n",
      "Shadow : recall=0.832, specificity=0.722, precision=0.480, balanced accuracy=0.777\n",
      "\n",
      "Interpretation guardrails:\n",
      "1. A weak label is an operational parameter/cost condition, not a universal BP certificate.\n",
      "2. The WBP-style proxy is an exact state-level comparator broadcast to every parameter/cost pair.\n",
      "3. Shadow-PRTW is averaged over finite-shot trials; those trials are not extra diagnostic draws.\n",
      "4. AUROC evaluates parameter localization without selecting an additional threshold.\n",
      "5. Every circuit and shifted parameter value is represented by a Qiskit QuantumCircuit.\n",
      "6. Constant-width simulation is exact only because the declared modules are disconnected.\n",
      "7. The sparse modular family does not represent tasks requiring arbitrary long-range correlations.\n",
      "\n",
      "Combined figure: C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_v15_qiskit_outputs\\prtw_v15_qiskit_73d6d3334176_paper_comparison_with_shadow.png\n",
      "Export directory: C:\\Users\\n00174929\\OneDrive - University of North Florida\\Quantum Private - DO not share with students\\BarrenPlateau\\Final\\prtw_v15_qiskit_outputs\n",
      "\n",
      "✅ CELL COMPLETE — paper comparison with finite-shot Shadow-PRTW\n"
     ]
    }
   ],
   "source": [
    "# One paper-style figure: exact PRTW, exact H-PRTW, the exact WBP-style proxy,\n",
    "# and finite-shot Shadow-PRTW on the same three diagnostic panels.\n",
    "paper_colors = {\n",
    "    \"PRTW\": \"#0000FF\",\n",
    "    \"H-PRTW\": \"#008000\",\n",
    "    \"WBP-style\": \"#E67E22\",\n",
    "    \"Shadow-PRTW\": \"#7B2CBF\",\n",
    "}\n",
    "paper_markers = {\n",
    "    \"PRTW\": \"o\",\n",
    "    \"H-PRTW\": \"s\",\n",
    "    \"WBP-style\": \"^\",\n",
    "    \"Shadow-PRTW\": \"D\",\n",
    "}\n",
    "\n",
    "fig, axes = plt.subplots(1, 3, figsize=(12.8, 4.2), sharex=True)\n",
    "\n",
    "exact_plot_methods = {\n",
    "    \"PRTW\": \"PRTW\",\n",
    "    \"H-PRTW\": \"H-PRTW\",\n",
    "    \"WBP-style\": \"WBP\",\n",
    "}\n",
    "for display_name, stored_name in exact_plot_methods.items():\n",
    "    frame = performance_df[\n",
    "        performance_df[\"method\"].eq(stored_name)\n",
    "        & performance_df[\"n\"].isin(N_VALUES)\n",
    "    ].copy()\n",
    "    frame[\"n\"] = frame[\"n\"].astype(int)\n",
    "    frame = frame.sort_values(\"n\")\n",
    "    axes[0].plot(\n",
    "        frame[\"n\"], frame[\"recall\"],\n",
    "        color=paper_colors[display_name], marker=paper_markers[display_name],\n",
    "        linewidth=1.8, markersize=5, label=display_name,\n",
    "    )\n",
    "    axes[1].plot(\n",
    "        frame[\"n\"], frame[\"specificity\"],\n",
    "        color=paper_colors[display_name], marker=paper_markers[display_name],\n",
    "        linewidth=1.8, markersize=5, label=display_name,\n",
    "    )\n",
    "\n",
    "    auc_frame = localization_summary_df[\n",
    "        localization_summary_df[\"method\"].eq(stored_name)\n",
    "    ].sort_values(\"n\")\n",
    "    axes[2].plot(\n",
    "        auc_frame[\"n\"], auc_frame[\"mean_within_circuit_AUROC\"],\n",
    "        color=paper_colors[display_name], marker=paper_markers[display_name],\n",
    "        linewidth=1.8, markersize=5, label=display_name,\n",
    "    )\n",
    "\n",
    "shadow_plot = shadow_performance_df[\n",
    "    shadow_performance_df[\"shots_M\"].eq(PAPER_SHADOW_SHOTS)\n",
    "    & shadow_performance_df[\"method\"].eq(\"Shadow cross MoM\")\n",
    "    & shadow_performance_df[\"n\"].isin(SHADOW_N_VALUES)\n",
    "].copy()\n",
    "shadow_plot[\"n\"] = shadow_plot[\"n\"].astype(int)\n",
    "shadow_plot = shadow_plot.sort_values(\"n\")\n",
    "\n",
    "axes[0].errorbar(\n",
    "    shadow_plot[\"n\"], shadow_plot[\"recall_mean\"],\n",
    "    yerr=np.nan_to_num(shadow_plot[\"recall_sd\"].to_numpy(), nan=0.0),\n",
    "    color=paper_colors[\"Shadow-PRTW\"], marker=paper_markers[\"Shadow-PRTW\"],\n",
    "    linestyle=\"--\", linewidth=1.8, markersize=5, capsize=2.5,\n",
    "    label=\"Shadow-PRTW\",\n",
    ")\n",
    "axes[1].errorbar(\n",
    "    shadow_plot[\"n\"], shadow_plot[\"specificity_mean\"],\n",
    "    yerr=np.nan_to_num(shadow_plot[\"specificity_sd\"].to_numpy(), nan=0.0),\n",
    "    color=paper_colors[\"Shadow-PRTW\"], marker=paper_markers[\"Shadow-PRTW\"],\n",
    "    linestyle=\"--\", linewidth=1.8, markersize=5, capsize=2.5,\n",
    "    label=\"Shadow-PRTW\",\n",
    ")\n",
    "\n",
    "shadow_auc_plot = shadow_localization_summary_df.sort_values(\"n\")\n",
    "axes[2].errorbar(\n",
    "    shadow_auc_plot[\"n\"], shadow_auc_plot[\"mean_AUROC\"],\n",
    "    yerr=np.nan_to_num(shadow_auc_plot[\"sd_AUROC\"].to_numpy(), nan=0.0),\n",
    "    color=paper_colors[\"Shadow-PRTW\"], marker=paper_markers[\"Shadow-PRTW\"],\n",
    "    linestyle=\"--\", linewidth=1.8, markersize=5, capsize=2.5,\n",
    "    label=\"Shadow-PRTW\",\n",
    ")\n",
    "\n",
    "titles = (\n",
    "    \"Weak-direction recall\",\n",
    "    \"Active-direction specificity\",\n",
    "    \"Within-circuit AUROC\",\n",
    ")\n",
    "ylabels = (\"fraction\", \"fraction\", \"AUROC\")\n",
    "display_ticks = [n for n in (16, 32, 64, 96, 128) if n in N_VALUES]\n",
    "for axis, title, ylabel in zip(axes, titles, ylabels):\n",
    "    axis.set_title(title)\n",
    "    axis.set_xlabel(\"qubits n\")\n",
    "    axis.set_ylabel(ylabel)\n",
    "    axis.set_ylim(0.0, 1.03)\n",
    "    axis.set_xticks(display_ticks)\n",
    "    axis.grid(alpha=0.30)\n",
    "\n",
    "axes[2].axhline(0.5, color=\"0.35\", linestyle=\":\", linewidth=1.0, zorder=0)\n",
    "axes[1].legend(loc=\"lower center\", frameon=True, fontsize=9)\n",
    "fig.tight_layout()\n",
    "\n",
    "figure_path = OUTPUT_DIR / f\"{RUN_PREFIX}_paper_comparison_with_shadow.png\"\n",
    "fig.savefig(figure_path, dpi=300, bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "\n",
    "# Preserve the original numerical exports.\n",
    "decision_path = OUTPUT_DIR / f\"{RUN_PREFIX}_decisions.csv\"\n",
    "performance_path = OUTPUT_DIR / f\"{RUN_PREFIX}_performance.csv\"\n",
    "localization_path = OUTPUT_DIR / f\"{RUN_PREFIX}_localization.csv\"\n",
    "sensitivity_path = OUTPUT_DIR / f\"{RUN_PREFIX}_threshold_sensitivity.csv\"\n",
    "resource_path = OUTPUT_DIR / f\"{RUN_PREFIX}_resource_audit.csv\"\n",
    "\n",
    "decision_df.to_csv(decision_path, index=False)\n",
    "performance_df.to_csv(performance_path, index=False)\n",
    "localization_df.to_csv(localization_path, index=False)\n",
    "sensitivity_df.to_csv(sensitivity_path, index=False)\n",
    "resource_df.to_csv(resource_path, index=False)\n",
    "\n",
    "print(\"\\nFIGURE SHADOW SETTINGS\")\n",
    "print(\"Shadow estimator: cross-replica median-of-means from Qiskit Born samples\")\n",
    "print(\"Shots per shifted state and replica M:\", PAPER_SHADOW_SHOTS)\n",
    "print(\"Diagnostic draws R:\", TRAIN_DRAWS)\n",
    "print(\"Median-of-means blocks:\", SHADOW_MOM_BLOCKS)\n",
    "print(\"Error bars: one standard deviation across\", SHADOW_TRIALS, \"shadow trials\")\n",
    "print(\n",
    "    \"PRTW, H-PRTW, and WBP-style use the exact fixed-draw summaries; only \"\n",
    "    \"Shadow-PRTW includes finite-shot measurement variation.\"\n",
    ")\n",
    "\n",
    "print(\"\\nSUMMARY AT THE PREDECLARED THRESHOLD\")\n",
    "overall = performance_df[performance_df[\"n\"].eq(\"ALL\")].set_index(\"method\")\n",
    "for method in (\"PRTW\", \"H-PRTW\", \"WBP\"):\n",
    "    row = overall.loc[method]\n",
    "    print(\n",
    "        f\"{method:7s}: recall={row['recall']:.3f}, specificity={row['specificity']:.3f}, \"\n",
    "        f\"precision={row['precision']:.3f}, balanced accuracy={row['balanced_accuracy']:.3f}\"\n",
    "    )\n",
    "shadow_overall = shadow_performance_df[\n",
    "    shadow_performance_df[\"shots_M\"].eq(PAPER_SHADOW_SHOTS)\n",
    "    & shadow_performance_df[\"n\"].eq(\"ALL\")\n",
    "    & shadow_performance_df[\"method\"].eq(\"Shadow cross MoM\")\n",
    "].iloc[0]\n",
    "print(\n",
    "    f\"Shadow : recall={shadow_overall['recall_mean']:.3f}, \"\n",
    "    f\"specificity={shadow_overall['specificity_mean']:.3f}, \"\n",
    "    f\"precision={shadow_overall['precision_mean']:.3f}, \"\n",
    "    f\"balanced accuracy={shadow_overall['balanced_accuracy_mean']:.3f}\"\n",
    ")\n",
    "\n",
    "print(\"\\nInterpretation guardrails:\")\n",
    "print(\"1. A weak label is an operational parameter/cost condition, not a universal BP certificate.\")\n",
    "print(\"2. The WBP-style proxy is an exact state-level comparator broadcast to every parameter/cost pair.\")\n",
    "print(\"3. Shadow-PRTW is averaged over finite-shot trials; those trials are not extra diagnostic draws.\")\n",
    "print(\"4. AUROC evaluates parameter localization without selecting an additional threshold.\")\n",
    "print(\"5. Every circuit and shifted parameter value is represented by a Qiskit QuantumCircuit.\")\n",
    "print(\"6. Constant-width simulation is exact only because the declared modules are disconnected.\")\n",
    "print(\"7. The sparse modular family does not represent tasks requiring arbitrary long-range correlations.\")\n",
    "print(\"\\nCombined figure:\", figure_path.resolve())\n",
    "print(\"Export directory:\", OUTPUT_DIR.resolve())\n",
    "cell_ok(\"paper comparison with finite-shot Shadow-PRTW\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9676f574",
   "metadata": {},
   "source": [
    "## Scope of the result\n",
    "\n",
    "This notebook demonstrates that the four reported diagnostics can be evaluated consistently from\n",
    "the same parameterized Qiskit circuit family. It does not simulate hardware gate noise and it does\n",
    "not claim that the exact WBP-style comparator reproduces every detail of the Sack *et al.* protocol.\n",
    "The full 128-qubit circuit is real Qiskit code; its scalable classical validation is possible here\n",
    "only because the architecture declares disconnected constant-width modules and local additive costs.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "85418c86-b4b6-4406-8fe5-3a99c468d966",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Architecture: qiskit_n16_a0_2c32656f00d167f8\n",
      "Printed object: module 0 of the n=16 circuit\n",
      "Numerical parameters bound: False\n",
      "Qubits: 8\n",
      "Remaining symbolic parameters: 16\n",
      "Gate count: 35\n",
      "Circuit depth: 7\n",
      "Operation counts: {'ry': 13, 'cx': 9, 'rz': 8, 'rx': 3, 'cz': 2}\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABHYAAAIwCAYAAADj4OzLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VFX+x/H3zKQ30gkk9N5BuoB0REAEFEEFwbWwirIKKio2BLHAYm+sfUEWFyxIU0BAOiK9Q0gnCWlAepv5/ZEfWWN6SDJM8nk9j89u7j3n3u9AOHPu955isFgsFkRERERERERExOYYrR2AiIiIiIiIiIhUjBI7IiIiIiIiIiI2SokdEREREREREREbpcSOiIiIiIiIiIiNUmJHRERERERERMRGKbEjIiIiIiIiImKjlNgREREREREREbFRSuyIiIiIiIiIiNgoJXZERERERERERGyUEjsiIiIiIiIiIjZKiR0RERERERERERulxI6IiIiIiIiIiI1SYkdERERERERExEYpsSMiIiIiIiIiYqOU2BERERERERERsVFK7IiIiIiIiIiI2CgldkREREREREREbJQSOyIiIiIiIiIiNkqJHRERERERERERG6XEjoiIiIiIiIiIjVJiR0RERERERETERimxIyIiIiIiIiJio5TYERERERERERGxUUrsiIiIiIiIiIjYKCV2RERERERERERslBI7IiIiIiIiIiI2SokdEREREREREREbpcSOiIiIiIiIiIiNUmJHRERERERERMRGKbEjIiIiIiIiImKjlNgREREREREREbFRSuyIiIiIiIiIiNgoJXZERERERERERGyUEjsiIiIiIiIiIjZKiR0RERERERERERulxI6IiIiIiIiIiI1SYkdERERERERExEbZWTsAKZ3FYiEnPdPaYchf2Dk7YjAYrB1GhVgskJFr7SjEGpxMYKO/tiIilUZ9q9rLlvtvIiLFUWLHBuSkZ7Ks2SRrhyF/cU/wUuxdnKwdRoVk5EK/ddaOQqxh+whwVssvIrWc+la1ly3330REiqOpWCIiIiIiIiIiNkqJHRERERERERERG6XEjoiIiIiIiIiIjVJiR0RERERERETERmkJTREREREREanRMjJzOHo2iZj4dLKyc3F0MBFU15V2zbywt9d4B7FtSuyIiIiIiIhIjXM27DKf/PcUm/Ze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1+Rvd14WV7c7D7pvUZHnt48ATRcXqd16rAYzecO29422djTWob6VbSipH1acqdErWdpsEjlpGUWet+X+m1SOoCHLibqYRqC/C5Gb7rJ2OCKVQlOxpNbIvJRCtxcn0+mJO0ot696oLqM3LsRgZ8KsnbLESowOzqQF7+fkzG5lKh/yz3tI3LoUo7NH6YVFRESucxkJV+j/8RO0uHtwqWX9e7Zh9MaFpF9MwmIpfrS2iEhNpPe2NUyLuwfT5r7C0zj2PP85F/eWvNZMeXV64g4ajehZ6PiWBxaRHFbMjhDF8G7XmL5vTy90/Nx/t3FiyZoKx1ggrvsXlrlsclgsq4c+VSn3lZJlX7rI2ZeHFTru0WkoQfeV/e+sLNLOHyL03amFjvsMnELd254o9/XOzR9daBt4k6sXrV7dUtEQC/DuNwHvfhPKXL7JrGWVcl8REak+ldmfKk3vNx7C74YWhY6vvXVOgQ02yiJwUBe6Pnt3oeNH3vue0NW7Khzjn6255Zkyl72496T6biJSa2kqlg3QcOHrky0P5dVUrNpLU7FERFOx1LeqzWy5/yaVQ1OxpCbSVCwRERERERERERul97Y2wM7ZkXuCl1o7DPkLO2dHa4dQYU6mvJEbUvs4Fb/ju4hIraG+Ve1ly/03EZHiKLFjAwwGg4aMSqUyGDQdR0REai/1rUREpCbRVCwRERERERERERulxI6IiIiIiIiIiI1SYkdERERERERExEYpsSMiIiIiIiIiYqOU2BERERERERERsVFK7IiIiIiIiIiI2CgldkREREREREREbJQSOyIiIiIiIiIiNkqJHRERERERERERG6XEjoiIiIiIiIiIjVJiR0RERERERETERimxIyIiIiIiIiJio5TYERERERERERGxUUrsiIiIiIiIiIjYKCV2RERERERERERslBI7IiIiIiIiIiI2SokdEREREREREREbZWftAKR0FouFnPRMa4chf2Hn7IjBYLB2GBVisUBGrrWjEGtwMoGN/tpWKrWrtZctt90iIiIiRVFixwbkpGeyrNkka4chf3FP8FLsXZysHUaFZORCv3XWjkKsYfsIcFbLr3a1FrPltltERESkKJqKJSIiIiIiIiJio5TYERERERERERGxUUrsiIiIiIiIiIjYKCV2RERERERERERslBI7IiIiIiIiIiI2SokdEREREREREREb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jcUCGVo6qFZyMuXvFl2rqV2tvWy57RapDBqxIyJS82hAvg0wGAwaNi6VymDQdByp3dSuioiIiEhNoalYIiIiIiIiIiI2SokdEREREREREREbpcSOiIiIiIiIiIiNUmJHRERERERERMRGKbEjIiIiIiIiImKjlNgREREREREREbFRSuyIiIiIiIiIiNgoJXZERERERERERGyUEjsiIiIiIiIiIjZKiR0RERERERERERulxI6IiIiIiIiIiI1SYkdERERERERExEYpsSMiIiIiIiIiYqOU2BERERERERERsVFK7IiIiIiIiIiI2CgldkREREREREREbJQSOyIiIiIiIiIiNkqJHRERERERERERG2Vn7QCkdBaLhZz0TGuHIX9h5+yIwWCwdhgVYrFARq61oxBrcDKBjf7aioiISCXSM0btZMvPMFI8JXZsQE56JsuaTbJ2GPIX9wQvxd7FydphVEhGLvRbZ+0oxBq2jwBntfwiIiK1np4xaidbfoaR4mkqloiIiIiIiIiIjVJiR0RERERERETERimxIyIiIiIiIiJio5TYERERERERERGxUUrsiIiIiIiIiIjYKCV2RERERERERERslBI7IiIiIiIiIiI2ys7aAUjNEdC7HcO/m1vgWHZqOlfORxO88jdOfrYOS67ZStFJbZB8dCtnnh9Y4JjRyRXH+i3xGTAZ/1GPYTCp2RMRERGpqfRMIrWRnnCk0oX8sJOITfvBYMDZz5Pm4/vTY+5U6rQIZPdTn1g7PKkFvPpOoE73UWCxkJ0UQ8LWr4n8fCYZkSdpNH2JtcMTERERkSqmZxKpTZTYkUqXeDyE86u25/98+sufGbP9bVrePZgDry8nM+GKFaOT2sClSWd8BkzK/9lvxCMcn96G+I2fUn/Sq9jX8bNidCIiIiJS1fRMIrWJ1tiRKpeTnkn8gXMYjEY8GtW1djhSC5mcXHFt2RMsFjJjgq0djoiIiIhUMz2TSE2mxI5UC/fGeY1nRlKylSOR2upqQsfO3cfKkYiIiIiINeiZRGoqTcWSSmdydsTR2z1/Pmure4fh06EpcQfPkhwSY+3wpBYwZ6aRcyUei8VCTlIMcRs+Jv38QVxadMepfgtrhyciIiIiVUzPJFKb1IrETnx8PK+//jrff/89UVFR+Pn5ceeddzJ//nwefPBBli1bxr/+9S8eeOABa4daI3Se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O9nyM4wUT4kdG2AwGGr9cDmpXAaDpuOIiIiI1GZ6xhCpOTQVS0RERERERETERimxIyIiIiIiIiJio5TYERERERERERGxUUrsiIiIiIiIiIjYKCV2RERERERERERslBI7IiIiIiIiIiI2SokdEREREREREREbpcSOiIiIiIiIiIiNUmJHRERERERERMRGKbEjIiIiIiIiImKjlNgREREREREREbFRSuyIiIiIiIiIiNgoJXZERERERERERGyUEjsiIiIiIiIiIjZKiR0RERERERERERulxI6IiIiIiIiIiI1SYkdERERERERExEYpsSMiIiIiIiIiYqPsrB2AlM5isZCTnmntMOQv7JwdMRgM1g6jQiwWyMi1dhRiDU4msNFf20qldrX2suW2W0RERKQoSuzYgJz0TJY1m2TtMOQv7gleir2Lk7XDqJCMXOi3ztpRiDVsHwHOavnVrtZittx2i4iIiBRFU7FERERERERERGyUEjsiIiIiIiIiIjZKiR0RERERERERERulxI6IiIiIiIiIiI3SEpoiIiIitcCVlCwuxKWRnW0GwGy2WDkiERGR6mOxWIiOSyM7J+97MCfHTGZWLo4OJitHdu2U2BERERGpgTIyc/j25xA27IzkjxMJnAm7XOB8dHw6TW/5lq5tfRjSK5C7RzTF3dXBStGKiIhUvsiYVL5cfYadBy+y/0Q88UkZ+ediEzNw7/U1HVp40a2dL+OHNWFQj/oYjQYrRlwxSuyIiIiI1CAXE9JZ+OVRPv/hDImXM0ssGxKVTEhUMis3hvLU4n3ce2tznr6vIw3ruVVTtCIiIpVv9+FYFn55lNVbw8nNLX6EanaOmQMnEzhwMoElK0/TslEdHpnQmocntMHB3nZG8iixI5UmoHc7hn83t8Cx7NR0rpyPJnjlb5z8bB2WXLOVopPaIPnoVs48P7DAMaOTK471W+IzYDL+ox7DYFKzJzWb2uLay2Kx8O3PIUxfsIuESyUndIqSnJrNB/85ydc/nWPRrB48eHsrDAbbe2spIiK1V2paNs+9u5/3lp/AUoEZx2fCLvP4m3v57PszfDnvJm5o61v5QVYBPeFIpQv5YScRm/aDwYCznyfNx/enx9yp1GkRyO6nPrF2eFILePWdQJ3uo8BiITsphoStXxP5+UwyIk/SaPoSa4cnUi3UFtcuGZk5TH3hN1ZsCLnm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bustHYWUJWHzYi7+upZGz6ws9z5nlr9EXkYKgffOLXb7toHgaN3HrUqhvGodSsvBJZkQu5KljcaSk5ZR7HZrzt0iIiIixdGlWFJjZF5IocML42j95Igy27rW92PI93MwmIzk5eRWQXQiRdnYOZJ2PJxDkzuUq/3JN8dwfutSbBzdym4sYgUyEi/R44MnaXJ3nzLb+nYKYcj3c0iPT8JsLn6mpoiIiEh1pBk7VuBqziw3ubsPIfcWvYxj14yPif+l+LVmKqr1kyOoP7BTkce3PDCX5MirW7DRMzSIsHmPFnn82H9/JGLR2grHeD1Z81nfG2nGTvaFeI6+dEuRx91a9yPw3jmVOlbaid859e6EIo979RqP3+1PXnV/x2YOKXKrcaNzLZq+tqWiIV53mrGT70aasVOZubQsXWb/E592TYo8vu626YUW1y+PgN5taf/s3UUe3//eKk6t+bnCMV5v1py7RURERIqjwo4VuJG+gMj/WPOXgxupsCNVS4WdfMqrNZc1524RERGR4uhSLBERERERERERK6UZO1bAbDaTk55p6TDkb0yO9hgMBkuHUSFmM2Ro6aAaycEIVvq2rVTKqzWXNeduERERkeKosCMiIiIiIiIiYqV0KZaIiIiIiIiIiJVSYUdERERERERExEqpsCMiIiIiIiIiYqVU2BERERERERERsVIq7IiIiIiIiIiIWCkVdkRERERERERErJQKOyIiIiIiIiIiVkqFHRERERERERERK6XCjoiIiIiIiIiIlVJhR0RERERERETESqmwIyIiIiIiIiJipVTYERERERERERGxUirsiIiIiIiIiIhYKRV2RERERERERESslAo7IiIiIiIiIiJWSoUdERERERERERErpcKOiIiIiIiIiIiVUmFHRERERERERMRKqbAjIiIiIiIiImKlVNgREREREREREbFSKuyIiIiIiIiIiFgpFXZERERERERERKyUCjsiIiIiIiIiIlZKhR0RERERERERESulwo6IiIiIiIiIiJX6fyodJCOge+1QAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1458.05x702.333 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Postprocessing/inspection only — no circuit execution\n",
    "\n",
    "PRINT_N = 16\n",
    "ARCHITECTURE_DRAW = 0\n",
    "\n",
    "# True prints one readable 8-qubit module.\n",
    "# False prints the complete PRINT_N-qubit circuit.\n",
    "PRINT_ONE_MODULE = True\n",
    "MODULE_INDEX = 0\n",
    "\n",
    "# False shows symbolic x[...] and theta[...] parameters.\n",
    "# True binds the circuit to one existing diagnostic draw.\n",
    "BIND_PARAMETER_VALUES = False\n",
    "DRAW_SPLIT = \"train\"\n",
    "DRAW_INDEX = 0\n",
    "\n",
    "\n",
    "architecture = make_architecture(PRINT_N, ARCHITECTURE_DRAW)\n",
    "\n",
    "if PRINT_ONE_MODULE:\n",
    "    circuit_spec = module_spec(architecture, MODULE_INDEX)\n",
    "    circuit, x_parameters, theta_parameters = circuit_spec\n",
    "\n",
    "    if BIND_PARAMETER_VALUES:\n",
    "        theta_rng = np.random.default_rng(\n",
    "            stable_seed(\n",
    "                \"single_theta\",\n",
    "                PRINT_N,\n",
    "                ARCHITECTURE_DRAW,\n",
    "                DRAW_SPLIT,\n",
    "                DRAW_INDEX,\n",
    "            )\n",
    "        )\n",
    "        data_rng = np.random.default_rng(\n",
    "            stable_seed(\n",
    "                \"single_data\",\n",
    "                PRINT_N,\n",
    "                ARCHITECTURE_DRAW,\n",
    "                DRAW_SPLIT,\n",
    "                DRAW_INDEX,\n",
    "            )\n",
    "        )\n",
    "\n",
    "        full_theta = theta_rng.uniform(-np.pi, np.pi, size=PRINT_N)\n",
    "        full_features = sample_features(PRINT_N, data_rng)\n",
    "\n",
    "        lo = MODULE_INDEX * MODULE_WIDTH\n",
    "        hi = lo + MODULE_WIDTH\n",
    "        circuit_to_print = bind_module(\n",
    "            circuit_spec,\n",
    "            full_features[lo:hi],\n",
    "            full_theta[lo:hi],\n",
    "        )\n",
    "    else:\n",
    "        circuit_to_print = circuit\n",
    "\n",
    "    printed_object = f\"module {MODULE_INDEX} of the n={PRINT_N} circuit\"\n",
    "\n",
    "else:\n",
    "    circuit_spec = build_full_qiskit_circuit(architecture)\n",
    "    circuit, x_parameters, theta_parameters = circuit_spec\n",
    "\n",
    "    if BIND_PARAMETER_VALUES:\n",
    "        theta_rng = np.random.default_rng(\n",
    "            stable_seed(\n",
    "                \"single_theta\",\n",
    "                PRINT_N,\n",
    "                ARCHITECTURE_DRAW,\n",
    "                DRAW_SPLIT,\n",
    "                DRAW_INDEX,\n",
    "            )\n",
    "        )\n",
    "        data_rng = np.random.default_rng(\n",
    "            stable_seed(\n",
    "                \"single_data\",\n",
    "                PRINT_N,\n",
    "                ARCHITECTURE_DRAW,\n",
    "                DRAW_SPLIT,\n",
    "                DRAW_INDEX,\n",
    "            )\n",
    "        )\n",
    "\n",
    "        theta = theta_rng.uniform(-np.pi, np.pi, size=PRINT_N)\n",
    "        features = sample_features(PRINT_N, data_rng)\n",
    "        circuit_to_print = bind_full(circuit_spec, features, theta)\n",
    "    else:\n",
    "        circuit_to_print = circuit\n",
    "\n",
    "    printed_object = f\"complete n={PRINT_N} circuit\"\n",
    "\n",
    "\n",
    "print(\"Architecture:\", architecture[\"architecture_id\"])\n",
    "print(\"Printed object:\", printed_object)\n",
    "print(\"Numerical parameters bound:\", BIND_PARAMETER_VALUES)\n",
    "print(\"Qubits:\", circuit_to_print.num_qubits)\n",
    "print(\"Remaining symbolic parameters:\", circuit_to_print.num_parameters)\n",
    "print(\"Gate count:\", circuit_to_print.size())\n",
    "print(\"Circuit depth:\", circuit_to_print.depth())\n",
    "print(\"Operation counts:\", dict(circuit_to_print.count_ops()))\n",
    "print()\n",
    "\n",
    "display(circuit_to_print.draw(output=\"mpl\", fold=180))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f6ab219-6681-4874-b307-8b663335f11c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c5677534-f2b7-4071-83f8-65277917f2cb",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
