From c218e7c6831e0faf75b591b9bc70c235a02f144f Mon Sep 17 00:00:00 2001 From: xoth42 Date: Sat, 20 Dec 2025 01:22:31 -0500 Subject: [PATCH] improve errors to be more realistic, parameters now model superconducting qubit, added notebook with visualizations --- constants.py | 13 + demos/circuit_visualization.ipynb | 972 ++++++++++++++++++++++++++++++ error_kraus.py | 164 +++-- qml_training.py | 97 ++- quantum_simulator.py | 50 +- run_experiments.py | 13 +- tests/test_qml_run.py | 1 - tests/test_quantum_simulator.py | 96 +-- 8 files changed, 1277 insertions(+), 129 deletions(-) create mode 100644 constants.py create mode 100644 demos/circuit_visualization.ipynb diff --git a/constants.py b/constants.py new file mode 100644 index 0000000..9f5ac38 --- /dev/null +++ b/constants.py @@ -0,0 +1,13 @@ +"""Project-wide defaults for noise modeling and gate timing. +All durations are expressed in microseconds (μs). +""" +from typing import Dict + +DEFAULT_T1: float = 100.0 +DEFAULT_T2: float = 200.0 + +DEFAULT_GATE_DURATIONS: Dict[str, float] = { + "CNOT": 0.2, # 200 ns = 0.2 μs + "RY": 0.025, # 25 ns = 0.025 μs + "H": 0.025, # 25 ns = 0.025 μs (useful for example circuits) +} diff --git a/demos/circuit_visualization.ipynb b/demos/circuit_visualization.ipynb new file mode 100644 index 0000000..d93483e --- /dev/null +++ b/demos/circuit_visualization.ipynb @@ -0,0 +1,972 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "4c5442e4", + "metadata": {}, + "source": [ + "# Noise-Aware Demo\n", + "Run the next cell to train the noise-aware qnn moons model (T1=80 µs, T2=120 µs) and plot loss/accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "51311e81", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MOONS | NOISE_AWARE | Epoch 01 | Loss 1.2864 | Acc 0.507\n", + "MOONS | NOISE_AWARE | Epoch 02 | Loss 1.1830 | Acc 0.533\n", + "MOONS | NOISE_AWARE | Epoch 03 | Loss 1.0872 | Acc 0.547\n", + "MOONS | NOISE_AWARE | Epoch 04 | Loss 1.0001 | Acc 0.573\n", + "MOONS | NOISE_AWARE | Epoch 05 | Loss 0.9226 | Acc 0.600\n", + "MOONS | NOISE_AWARE | Epoch 06 | Loss 0.8547 | Acc 0.653\n", + "MOONS | NOISE_AWARE | Epoch 07 | Loss 0.7960 | Acc 0.693\n", + "MOONS | NOISE_AWARE | Epoch 08 | Loss 0.7459 | Acc 0.740\n", + "MOONS | NOISE_AWARE | Epoch 09 | Loss 0.7037 | Acc 0.760\n", + "MOONS | NOISE_AWARE | Epoch 10 | Loss 0.6684 | Acc 0.773\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import sys\n", + "sys.path.insert(0, '..')\n", + "\n", + "# Minimal noise-aware run + plot\n", + "from qml_training import train, EncodingType\n", + "from visualizer import plot_training_curves\n", + "\n", + "# Small demo run (moons, 10 epochs) with T1/T2 noise\n", + "metrics = train(\n", + " model_type=\"noise_aware\",\n", + " encoding=EncodingType.ANGLE,\n", + " dataset=\"moons\",\n", + " epochs=10,\n", + " record_metrics=True,\n", + " T1=80.0,\n", + " T2=120.0,\n", + ")\n", + "\n", + "plot_training_curves(\n", + " metrics[\"loss_history\"],\n", + " metrics[\"acc_history\"],\n", + " dataset=\"moons\",\n", + " model_type=\"noise_aware\",\n", + " title=\"Noise-aware demo\",\n", + " save=False,\n", + " T1=80.0,\n", + " T2=120.0,\n", + " epochs=3,\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bb14f9fa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ All imports successful!\n" + ] + } + ], + "source": [ + "import torch\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import FancyBboxPatch, Circle, FancyArrowPatch\n", + "import math\n", + "\n", + "# Import our quantum simulator components\n", + "from quantum_simulator import (\n", + " zero_state, custom_state, apply_gate, apply_circuit_to_ket,\n", + " state_to_density, run_noisy_circuit_density, measure,\n", + " RY, RZ, RX, CNOT, H, X, Z, I2\n", + ")\n", + "from qml_training import (\n", + " EncodingType, state_encoding, quantum_feature_map,\n", + " param_gate_layer\n", + ")\n", + "from error_kraus import thermal_relaxation_error_rate, add_time_based_noise\n", + "\n", + "print(\"✅ All imports successful!\")" + ] + }, + { + "cell_type": "markdown", + "id": "de584b5e", + "metadata": {}, + "source": [ + "## Circuit Visualization Helpers\n", + "\n", + "Custom visualization functions to draw quantum circuits in a clean, readable format." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b61c06cf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "✅ Visualization helpers loaded!\n" + ] + } + ], + "source": [ + "def draw_circuit(circuit, num_qubits, title=\"Quantum Circuit\", figsize=(12, 3)):\n", + " \"\"\"\n", + " Draw a quantum circuit diagram.\n", + " \n", + " circuit: List of (gate_name, [qubits], param?) tuples\n", + " num_qubits: Number of qubits\n", + " \"\"\"\n", + " fig, ax = plt.subplots(figsize=figsize)\n", + " \n", + " # Layout parameters\n", + " wire_spacing = 1.0\n", + " gate_width = 0.6\n", + " gate_spacing = 1.2\n", + " start_x = 1.0\n", + " \n", + " # Draw qubit wires\n", + " max_x = start_x + len(circuit) * gate_spacing + 1\n", + " for q in range(num_qubits):\n", + " y = (num_qubits - 1 - q) * wire_spacing\n", + " ax.hlines(y, 0, max_x, colors='black', linewidth=1)\n", + " ax.text(-0.3, y, f'q{q}', fontsize=12, ha='right', va='center', fontweight='bold')\n", + " \n", + " # Gate colors\n", + " gate_colors = {\n", + " 'RY': '#4CAF50', # Green\n", + " 'RZ': '#2196F3', # Blue\n", + " 'RX': '#FF9800', # Orange\n", + " 'H': '#9C27B0', # Purple\n", + " 'X': '#E91E63', # Pink\n", + " 'CNOT': '#607D8B', # Gray\n", + " 'T1T2_NOISE': '#F44336', # Red for noise\n", + " }\n", + " \n", + " # Draw gates\n", + " for i, op in enumerate(circuit):\n", + " x = start_x + i * gate_spacing\n", + " gate_name = op[0]\n", + " qubits = op[1]\n", + " param = op[2] if len(op) > 2 else None\n", + " \n", + " color = gate_colors.get(gate_name, '#9E9E9E')\n", + " \n", + " if gate_name == 'CNOT':\n", + " # Draw CNOT gate\n", + " ctrl_y = (num_qubits - 1 - qubits[0]) * wire_spacing\n", + " targ_y = (num_qubits - 1 - qubits[1]) * wire_spacing\n", + " \n", + " # Control dot\n", + " ax.plot(x, ctrl_y, 'ko', markersize=10)\n", + " # Vertical line\n", + " ax.vlines(x, min(ctrl_y, targ_y), max(ctrl_y, targ_y), colors='black', linewidth=2)\n", + " # Target circle with X\n", + " circle = plt.Circle((x, targ_y), 0.2, fill=False, linewidth=2, color='black')\n", + " ax.add_patch(circle)\n", + " ax.vlines(x, targ_y - 0.2, targ_y + 0.2, colors='black', linewidth=2)\n", + " ax.hlines(targ_y, x - 0.2, x + 0.2, colors='black', linewidth=2)\n", + " \n", + " elif gate_name == 'T1T2_NOISE':\n", + " # Draw noise operator (wavy box) with λ1, λ2, and time info\n", + " λ1 = op[2] if len(op) > 2 else 0\n", + " λ2 = op[3] if len(op) > 3 else 0\n", + " idle_time = op[4] if len(op) > 4 else 0\n", + " for q in qubits:\n", + " y = (num_qubits - 1 - q) * wire_spacing\n", + " # Make box wider to fit text\n", + " noise_width = gate_width * 1.8\n", + " rect = FancyBboxPatch(\n", + " (x - noise_width/2, y - 0.35), noise_width, 0.7,\n", + " boxstyle=\"round,pad=0.05\", facecolor=color, edgecolor='darkred',\n", + " linewidth=2, alpha=0.8, linestyle='--'\n", + " )\n", + " ax.add_patch(rect)\n", + " # Display noise parameters: λ1, λ2, and time\n", + " noise_label = f\"λ₁={λ1:.3f}\\nλ₂={λ2:.3f}\\nt={idle_time:.1f}\"\n", + " ax.text(x, y, noise_label, fontsize=6, ha='center', va='center', \n", + " color='white', fontweight='bold')\n", + " else:\n", + " # Draw single/multi-qubit gate box\n", + " for q in qubits:\n", + " y = (num_qubits - 1 - q) * wire_spacing\n", + " rect = FancyBboxPatch(\n", + " (x - gate_width/2, y - 0.3), gate_width, 0.6,\n", + " boxstyle=\"round,pad=0.05\", facecolor=color, edgecolor='black',\n", + " linewidth=1.5\n", + " )\n", + " ax.add_patch(rect)\n", + " \n", + " # Gate label\n", + " label = gate_name\n", + " if param is not None:\n", + " if isinstance(param, (int, float)):\n", + " label = f\"{gate_name}\\n({param:.2f})\"\n", + " elif isinstance(param, torch.Tensor):\n", + " label = f\"{gate_name}\\n({param.item():.2f})\"\n", + " ax.text(x, y, label, fontsize=8, ha='center', va='center', \n", + " color='white', fontweight='bold')\n", + " \n", + " ax.set_xlim(-0.5, max_x)\n", + " ax.set_ylim(-0.5, num_qubits * wire_spacing)\n", + " ax.set_aspect('equal')\n", + " ax.axis('off')\n", + " ax.set_title(title, fontsize=14, fontweight='bold', pad=10)\n", + " \n", + " plt.tight_layout()\n", + " return fig, ax\n", + "\n", + "print(\"✅ Visualization helpers loaded!\")" + ] + }, + { + "cell_type": "markdown", + "id": "e15d94d4", + "metadata": {}, + "source": [ + "---\n", + "## 1. State Encoding Methods\n", + "\n", + "We support two encoding types:\n", + "- **Angle Encoding**: Each feature maps to a rotation angle on a qubit (RY gate)\n", + "- **Amplitude Encoding**: Features are encoded directly as state amplitudes" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0c31ca5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== ANGLE ENCODING ===\n", + "Input features: [0.5, -0.800000011920929]\n", + "\n", + "Circuit operations:\n", + " ('RY', [0], tensor(0.5000))\n", + " ('RY', [1], tensor(-0.8000))\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example: Angle Encoding for 2 qubits\n", + "n_qubits = 2\n", + "x_angle = torch.tensor([0.5, -0.8]) # Two features → two qubits\n", + "\n", + "# Get the encoding circuit\n", + "state_angle, circuit_angle = state_encoding(x_angle, n_qubits, encoding=EncodingType.ANGLE)\n", + "\n", + "print(\"=== ANGLE ENCODING ===\")\n", + "print(f\"Input features: {x_angle.tolist()}\")\n", + "print(f\"\\nCircuit operations:\")\n", + "for op in circuit_angle:\n", + " print(f\" {op}\")\n", + "\n", + "# Visualize\n", + "draw_circuit(circuit_angle, n_qubits, title=\"Angle Encoding Circuit\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "595f3d78", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== AMPLITUDE ENCODING ===\n", + "Input features: [0.5, 0.30000001192092896, 0.699999988079071, 0.20000000298023224]\n", + "\n", + "Initial state (normalized amplitudes):\n", + " |ψ⟩ = [0.5360563 +0.j 0.3216338 +0.j 0.7504788 +0.j 0.21442251+0.j]\n", + "\n", + "Circuit operations: None (state preparation only)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAGGCAYAAADmRxfNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAT5xJREFUeJzt3QecE9X6//GHIlXpTUCKoiCCoCgIIkWRIpeiWECUKl4L9oIgVUUUpSggKCrYUOSiIIJIs8MVBRUBQZHeQXpv+b++5/ef3CSbLLubZTe7+bxfr4HNZGZyMjmbnWfOOc/J4vP5fAYAAAAAUcgazc4AAAAAQGABAAAAIFXQYgEAAAAgagQWAAAAAKJGYAEAAAAgagQWAAAAAKJGYAEAAAAgagQWAAAAAKJGYAEAAAAgagQWQJxbu3atZcmSxb98/fXX/uf69+/vX1+uXDmLBePHjw8qL+KzHgAZEd9fyOwILIBUVKVKlaCLs3PPPddOnDiRKc9xPFxsBr7HxBZdLCD2HT582AYPHmxXXXWVFShQwM466ywrUqSIVaxY0Zo3b25PP/20LVu2LGgfBViBn7UCsNTSoEED/3E7depk6Vmns2bN6s5JrVq1bODAgbZ///40KU9mQtAAmGXnJACp46effkpwUbJ161abOXOm/etf/8qQp7lx48Z29tlnu5/z58+f3sVBOskM9WDPnj1Wr149+/3334PW//PPP275888/bcaMGVa0aFG75JJLLN74fD7bu3evLVy40C1vv/22ffPNN1a6dOn0LlqmcuWVV9pLL72U3sUAzhgCCyCVRLprrfUZNbCoU6eOW/B/evXqZQULFgx7sZCZZYZ68MILLwQFFa1atbLq1au7Vov169fbf//7X1uyZInFa51WC8Vnn31mv/76q1u/evVqe+CBB+zTTz9N0nG0/znnnGMZ3Zl+Hwpa4zFwRRzxAYjakSNHfAULFvTpV0rLRRdd5P85R44cvp07dybY56uvvvJvo2XFihW+vn37+sqUKePLnTu378orr/R98cUXbtvt27f7unTp4itSpIgvV65cvquvvtr37bffJjhm4PHGjRvnmz59uts2b968vgIFCvjatGnj++uvv4L2WbNmTdB+KpenX79+/vVly5YNW+5wi15bOnbs6F9Xv379RN+/yhFo7dq1vrZt27rzmidPHt8111zjmz17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7bDbz58/366++mq7/fbbXStH48aNrV27dqdt5QAAAACQSQOLY8eO2aJFi6xRo0b+dVmzZnWPFyxYEHafOnXquH28QGL16tU2Y8YMu+GGGyK+ztGjR23fvn1BCwAAsSw53YQbNGhgWbJkSbA0b97cv02nTp0SPN+0adOg4+zatcvat29v+fLlswIFCljXrl3twIEDZ/R9AsjYsluM2Llzp508edKKFy8etF6PV6xYEXYftVRov7p165rP57MTJ07YPffck2hXqEGDBtmAAQNSvfwAAJzJbsJqxVdQobGF6ia8cuVKK1asWILtP/nkE3ezzvPPP/+4rsW33HJL0HYKJMaNG+d/nDNnzqDnFVRs2bLFZs+ebcePH3e9Ce6++27XDRkAYrrFIiW+/vpre/755+21115zYzL0ZTp9+nR79tlnI+7Ts2dP27t3r3/ZsGFDmpYZAIAz2U24UKFCVqJECf+iwEDbhwYWCiQCtytYsKD/OY1bnDlzpr355psumNENvBEjRthHH31kmzdv5gMEkPqBhboVqZvS1KlTXctBNIoUKWLZsmWzbdu2Ba3XY33hhdOnTx+788477a677rKqVavajTfe6AINtUqcOnUq7D76IlWzbuACAEAsSkk34VBKbNK2bVvLmzdvgptzavFQZsV7773XtWx4dGx1f7riiiv86/Saeu0ff/wxVd4bgMwnxYHFq6++aueee667i3HTTTfZkiVL3HoFGAoSIt1JiSRHjhxWo0YNmzt3rn+dggM9rl27dth9Dh065L7kAik4EXWNAgAgI0usm/DWrVtPu7/GYixdutTdgAvtBvXuu++6v7EvvviiffPNN9asWTP3WqJjh3azyp49u2sNScrrAohPKQos1Cfz4Ycfdl9MuhMSeBGvoOLaa691zaXJpT6kY8eOtXfeecc1w+oOysGDB13zr3To0MF1ZfK0aNHCRo8e7V5rzZo1rrlXrRha7wUYAADEK/2NVot+zZo1g9arBaNly5buudatW9vnn39uP/30k2vFAIA0Hbw9ZMgQa9WqlRvAFdh06lHLg1o0kuu2226zHTt2WN++fd0dkerVq7s+nt6dmvXr1we1UPTu3dtlstD/mzZtsqJFi7qgYuDAgSl5WwAAxJSUdBP26Macbrw988wzp32d888/373WqlWr7LrrrnPHDp1DSglSlCnqdK8LIH6lqMVCXzxqMo1ETaXhAo6k6N69u61bt86N31A/Tg0a8+hOyvjx44OaZTU5nspz+PBhF3goJZ/6hQIAkNGlpJuwZ9KkSe5v6R133HHa19m4caP7u60uzqJj79mzx43v8MybN8+9duDfZQCIOrDQhXtig7WXL1/OHQ0AAFJBcrsJB3aDUjenwoULB63XXBRPPPGE/fe//7W1a9e6IEW9ECpUqODS2MrFF1/sujsrG5XGafzwww/uxp+6UJUsWZLPFUDqdYXSBHRvvPGG3XfffQmeW7ZsmfsC7NKlS0oODQAAougmLJrj4vvvv7dZs2YlOJfqWqWEKwpU1CqhQKFx48YuVXvgXBYffPCBCybUNUrHb9OmTYq6OQOIH1l8KUifpBzWagrVrhrToCBDTa3KJjF58mTXlKo7HOqvGes083b+/PndnBakngUAAABSdq2coq5QuruhfpdqJtWMoAow3nvvPZs2bZq1a9fONa9mhKACAAAAQDq2WIRSE60GdCkrU2hzbKyjxQIAAACI/lo5RWMsQimgAAAAABC/khRYJCUHdijNL6HJ6gAAAABkfknqChWue5MCBwndXeu1Tv9rMHesoysUAGROypaUWGp0QONBy5Qpw4kA0rIrlMZPBNIs182bN7cqVarYww8/bBUrVnTrV6xYYcOHD3fzWEyfPj0phwYA4IwEFRUrVbIjhw9zdhFRrty5beWKFQQXQHoO3taEO2eddZab1TOcm2++2bVWfPrppxbraLEAgMxn8eLFbsbqot1vthyliqV3cRCDjm3abjtG/sdlubz88svTuzhA/A7enjdvnr344osRn9dkOj169EjJoQEASDUKKnKWZ6ZoAEgLKcoNmytXLluwYEHE5+fPn++2AQAAABAfUhRYtG/f3j744AN78MEH7a+//nJjMLTo5wceeMAmTJjgtgEAAAAQH1LUFUrdoJRpY+TIkTZq1Ch/1igFFxqyodm3E+sqBQAAACBzSVFgkSNHDnvvvffsiSeesBkzZti6devc+rJly1qzZs2sWrVqqV1OAAAAADEsqpm3L730UrcAAAAAiG8pGmMBAAAAAFG3WGhMhTfzdmIywszbAAAAANIpsOjbt2+CwEJBxNq1a23KlCluJu5//etfqVA8AAAAAJk2sOjfv3/E57Zs2WJXXXWVXXTRRdGUCwAAAEA8j7E499xz7Z577rFnn302tQ8NAAAAIJ4Gb+fNm9fWrFlzJg4NAAAAIB4Ci6VLl9qrr75KVygAAAAgjqRojEX58uXDZoXas2eP7d271/LkyeMGcQMAAACIDykKLOrXr58gsNDjggUL2gUXXGBt27a1QoUKpVYZAQAAAGTGwGL8+PGpXxIAAAAA8TXGokuXLvbjjz9GfH7hwoVuGwAAAADxIWtKWyz+/vvviM8rI9Q777wTTbkAAAAAxHu62c2bN1vu3LnPxKEBAAAAZOQxFlOnTnWL54033rA5c+aEzQyl9VdeeWXqlRIAAABA5ggsli9fbpMmTfJngNIYi0WLFgVto/WaHK9evXo2dOjQ1C8tAAAAgIwdWPTs2dMtkjVrVnvrrbfs9ttvP5NlAwAAAJCZ082eOnUq9UsCAAAAIMM6I4O3AQAAAMSXJLVYqOuTlkOHDlmOHDncz6Ezb4fS8ydOnEitcgIAAADI6IFF3759XaCQPXv2oMcAAAAAkOTAon///ok+BgAAABDfGGMBAAAAIH2yQsnJkyftyy+/tNWrV9vu3bvN5/MFPa+uUn369Im+hAAAAAAyZ2Dx888/W5s2bWzjxo0JAgoPgQUAAAAQP1LUFeq+++6zw4cP25QpU2zXrl1uXovQRS0aAAAAAOJDiloslixZYgMHDrQWLVqkfokAAAAAxEeLRenSpSN2gQIAAAAQf1IUWPTo0cPGjh1r+/btS/0SAQAAAIiPrlD79++3s88+2ypUqGBt27a18847z7Jly5Zg8PYjjzySWuUEAAAAkNkCi8cff9z/88iRI8NuQ2ABAAAAxI8UBRZr1qxJ/ZIAAAAAiK/AomzZsqlfEgAAAADxNXj7TBo1apSVK1fOcuXKZbVq1bKFCxcmuv2ePXvs/vvvt3PPPddy5sxpF110kc2YMSPNygsAAAAghS0W5cuXd2MoItFzCgyUlrZhw4b273//2woWLHja406cONEeffRRGzNmjAsqhg8fbk2aNLGVK1dasWLFEmx/7Ngxu/76691z//nPf6xUqVK2bt06K1CgAJ8tAAAAEOstFvXr13dZodauXWvnnHOOXXbZZW7Rz1qn5ypXrmzbt2+3Xr16WdWqVZM0LmPo0KHWrVs369y5s9tfAUaePHns7bffDru91mvmb80AfvXVV7uWDpWtWrVqKXlbAAAAANIysGjdurVt2rTJvvnmG/vtt99s8uTJbtHPX331lXuuU6dO9ssvv9i8efNs9+7d1rNnz0SPqdaHRYsWWaNGjf5XuKxZ3eMFCxaE3eezzz6z2rVru65QxYsXtypVqtjzzz9vJ0+eTMnbAgAAAJCWgUXfvn3tgQcesGuuuSbBc2ox0IW+WiqkQYMGrivUnDlzEj3mzp07XUCgACGQHm/dujXsPqtXr3ZdoLSfxlX06dPHhgwZYs8991zE1zl69Kib2C9wAQAAAJAOgcVff/2V6JiJQoUKuW08F198sR08eNBS26lTp9z4ijfeeMNq1Khht912mz399NOuC1UkgwYNsvz58/sXTe4HAAAAIB0Ci/PPP9/eeecdO3z4cILnDh06ZOPGjXMDvD2bN2+2okWLJnrMIkWKuNm7t23bFrRej0uUKBF2H2WCUhaowFm/FcSohUNdq8JRl6y9e/f6lw0bNpz2/QIAAAA4A1mh+vfvb23btrVKlSpZx44d7YILLnDrV61aZe+++64bY/Hhhx+6deqm9P7777vB1YnJkSOHa3WYO3euG8PhtUjocffu3cPuo2NOmDDBbafxGPLnn3+6gEPHC0cpabUAAAAASOcWi1tuucUNnFZXIo1nUBYnLQMHDnTrlKVJ24jP53PjK15//fXTHlepZseOHetaQ/744w+79957XRcqHVs6dOgQNAhczysr1EMPPeQCiunTp7vB2xrjgYwxF8n48eNdeuLARfuFBrIKYvPmzeu64GlA/48//pjgWPr89Xq5c+d223kBKgAAAGK0xUKaN2/uli1btri5I7wZudVaEPQC2bMneaZujZHYsWOHGxyu7kzVq1e3mTNn+gd0r1+/3t8yIRof8eWXX9ojjzxil156qZvHQkFGjx49Uvq2EKXkzkUi+fLlc897QudIUXe3kSNHui546n43bNgwa9y4sWsh87rYKSuZUhUrsLz22mvtxIkTtnTpUj5PAACANJLFpyaFOKasUGpl0XgLXeAiOgomrrzyShcIiLqpKQBUFrGnnnoqbIvFww8/7GZQT+5nppaw6667zgURaiEZMGCAde3alY8QgC1evNh1ry016D7LWb4kZwQJHF2z2Tb1fM2lur/88ss5Q0AqXCunuMVCNm7c6Oaq0AvpAjKUui4hfnhzkQR2VzvdXCRy4MAB16qlOqQvd7U6XHLJJRFfQ1nAVMG9iRB1AaFxPXotTdTotXa99NJLbm4TAAAAnHkpCiyOHDniBm2r+4kuBtV1xWv4COzGQmARXxKbi2TFihVh96lYsaKbQV1d2RSgvvzyy1anTh1btmyZlS5d2r/d559/7hIGKOuYutvNnj3bZRLz5jPxxmJo9na1Xmg+E82horE3Sn8MAACAGBy8rcnvPvnkEzdY++uvv3ZBhQZcz5o1y5o1a+buJGsWbuB0NHO6AlC1MGhyRdUrjZsIHezfsGFD+/XXX23+/PnWtGlTu/XWW2379u3uOa+1THOYtGnTxnV/UMpjBbmTJk3iQwAAAIjVwEKzXStTkwZJe11WNHBaXV50Z7lAgQIuMxDiS0rmIgl11llnue5MGpgdSBmhKlSoYFdddZW99dZbLimA/hcvYUDlypX92yulsAZ7a8A/AAAAYjSw0J3imjVrup+V2lMCZ9bWXWPdeUZ8CZyLxOPNRaKWiaRQV6rff/89QXaxUDru0aNH3c96TQUSgZmljh8/bmvXrk1yRjIAAACkQ2ChPvP//POP+zlPnjxuzoDAizqNHtc4DMSf5M5F8swzz7gudBonoUHYd9xxh0tffNddd7nnta+63v33v/916zU4vEuXLm6wtjdXijIU3HPPPdavXz93LNVFva542wAAACAGB28rpej333/vny+iRYsWLgOP7jLrTrLmGVCXFcSf5M5Fsnv3bjf/hLZVgKrWB42j8Lo1qWuVBn4rUNHg8MKFC7t0tt99911Q5ijVP3WPuvPOO91cF6qj8+bNc8cEAABAjM5joaBCg2IHDx7suqBs2LDBja/466+/3PMXXHCBG2uhjD+xjnksACDzYR4LnA7zWAAxMo9F3bp13eLRBGjq9qK+8brDXKlSJXf3GAAAAEB8SLWrf3Vv8SYsAwAAABBfkhxY7Nq1K9kHZ2IyAAAAID4kObDQpGXJpdShAAAAADK/JAcWGuOtOSuaN28elI0HqUPZkpT1CEhsAsIyZcpwggAAQMYOLDT3wEcffeRm3f7zzz/t9ttvt3bt2rmB24g+qKhYsZIdOXKYU4mIcuXKbStXriC4AAAAGTuwGDhwoFs0x8CECRNsyJAhbuKyOnXqWPv27d1EZIypSBm1VCiouPiSWy1v3mIpPAoys4MHt9sfyz52dYVWCwAAkCmyQimQ0PLKK6/Yl19+6YKMxx9/3B588EFr3Lix9e7d201OhuRTUHFOvlKcOgAAAGQ4/5sCOZk0X8UNN9xg77//vi1fvtyuvvpqmzFjhgs2AAAAAMSXFM9jcejQIZsyZYp9+OGHNnv2bMuRI4frEtW6devULSEAAACAzBVYnDhxwr744gvX/WnatGnucdOmTe3dd9+1li1bWq5cuc5cSQEAAABk/MDi7rvvtsmTJ9u+ffusXr16Nnz4cLv55putQIECZ7aEAAAAADJPYPHmm2+6eSzUMlGqVClbsmSJWyLJkiWLG+ANAAAAIPNLVleow4cP26effpqkbQksAAAAgPiR5MDi1KlTZ7YkAAAAAOIv3SwAAAAAeAgsAAAAAESNwAIAAABA1AgsAAAAAESNwAIAAABA1AgsAAAAAKR/YLFlyxb77bff7ODBg9GXBgAAAEB8BRZTp061SpUqWenSpe3yyy+3H3/80a3fuXOnXXbZZTZlypTULCcAAACAzBZYTJs2zW666SYrUqSI9evXz3w+n/85rStVqpSNGzcuNcsJAAAAILMFFs8884zVq1fPvv/+e7v//vsTPF+7dm375ZdfUqN8AAAAADJrYLF06VK79dZbIz5fvHhx2759ezTlAgAAAJDZA4s8efIkOlh79erVVrhw4WjKBQAAACCzBxYNGza0d955x06cOJHgua1bt9rYsWOtcePGqVE+AAAAAJk1sBg4cKBt3LjRrrzySnv99dctS5Ys9uWXX1rv3r2tatWqbjC3BnUDAAAAiA8pCiwqVqzoBm6ru1OfPn1cIPHSSy/Z888/7wKL7777zsqVK5f6pQUAAAAQk7KndMdLLrnE5syZY7t377ZVq1bZqVOn7Pzzz7eiRYumbgkBAAAAZN7AwlOwYEHXJQoAAABA/EpSYPHuu++m6OAdOnRI0X4AAAAAMmFg0alTpwTrNGBbAmfdDlwvBBYAAABAfEhSYLFmzZqgx3v27LGOHTta/vz57YEHHnCDuWXFihU2YsQI279/v0tHCwAAACA+JCmwKFu2bNDj/v37u0Has2bNCmqhUEaoNm3auDkshg0bZuPGjUv9EgMAAADIHOlmp0yZYjfeeGNQUOE/YNasdtNNN9nUqVNTo3wAAAAAMmtgoXEV6vYUyfLlyxOMvQAAAACQeaUosGjdurWNHj3ahg4daocOHfKv189Dhgxxs3G3atUqNcsJAAAAILPNY/HKK6+4Ad2PP/649ezZ084991y3fsuWLXb8+HG7+uqrbfjw4aldVgAAAACZKbBQNqhvvvnGjaP44osvbN26dW5906ZN7YYbbrAWLVqEHX8BAAAAIHNKUVcoj7o7jRkzxgUXWvRzy5Ytow4qRo0aZeXKlbNcuXJZrVq1bOHChUna76OPPnKvra5aAAAAADJIYHEmTJw40R599FHr16+fLV682KpVq2ZNmjSx7du3J7rf2rVrXdesa665Js3KCgAAACCKrlDly5c/bauEnv/777+TfWwNCO/WrZt17tzZPVYryPTp0+3tt9+2p556Kuw+J0+etPbt29uAAQPsu+++cxP4AQAAAIjxwKJ+/foJAgtd3GusxQ8//GBVqlSxyy67LNnHPXbsmC1atMgNCA+cF6NRo0a2YMGCiPs988wzVqxYMevatasLLAAAAABkgMBi/PjxEZ/77bffXNcltSAk186dO12AUrx48aD1ehxp3ozvv//e3nrrLfv111+T9BpHjx51i2ffvn3JLicAAACAMzzGQmMi/v3vf1uPHj3sTNu/f7/deeedNnbsWCtSpEiS9hk0aJDLauUt55133hkvJwAAAJDZpajF4nTUwqDZt5NLwUG2bNls27ZtQev1uESJEgm21xgODdpWelvPqVOn3P/Zs2e3lStX2gUXXBC0j7pZaXB4YIsFwQUAAAAQY4HFP//847omlS5dOtn75siRw2rUqGFz5871p4xVoKDH3bt3T7B9pUqV7Pfffw9a17t3b9eSoUn8wgUMOXPmdAsAAACAdA4srr322rDrlY1JYyE0CPu9995LUYHUmtCxY0e74oorrGbNmm4G74MHD/qzRHXo0MFKlSrlujRpngsNFA9UoEAB93/oegAAAAAxFlioFSE0K5QeKw2tMjh16dLFtSakxG233WY7duywvn372tatW6169eo2c+ZM/4Du9evXu0xRAAAAADJ4YPH111/bmaRuT+G6PiXltRPLWAUAAADgzEjRrX/NG7F06dKIzy9btsxtAwAAACA+pCiw6N+/vy1ZsiTi8wo6NAs2AMSyUaNGWbly5dx4rVq1atnChQsjbvvJJ5+4sV8ax5U3b17XTTNwLNnx48ddmu2qVau650uWLOnGhG3evNm/jbLYaSJPdRvNnTu3y1rXr18/Ny4NAICM7owMVti1a5fL8AQAsWrixIkuWYQu7BcvXuzm4NHkntu3bw+7faFChezpp5+2BQsWuBsrSiih5csvv3TPHzp0yB2nT58+7n8FIkp53bJlS/8xlNxCY9Ref/1117I7bNgwGzNmjPXq1SvN3jcAAOk+xuLbb78NGt+gP5qrVq0KmxlKf7B11w4AYtXQoUOtW7du/oxzusCfPn26vf322/bUU08l2L5BgwZBjx966CF755137Pvvv3cBiSbcnD17dtA2I0eOdNntlHSiTJky1rRpU7d4zj//fBd8jB492l5++eUz9l4BAIipwOKrr77yd29SBigFFlrCqVy5so0YMSL1SgkAqUhdjxYtWuQmzPQo25yy2qlF4nR8Pp/NmzfPBQUvvvhixO327t3rvi+9NNiRtlFrCAAAcRNYPPnkky5Tk/6gFitWzN3da9OmTdA2+gOaJ08e118ZAGLVzp077eTJk/401h49VnelxIIAzaNz9OhRy5Ytm7322mt2/fXXh932yJEjbsxFu3btLF++fGG3UauvbsLQWgEAiKvAQgMNtciaNWusaNGiLogAgHhxzjnn2K+//moHDhywuXPnujEa6s4U2k1KA7lvvfVWdyNG3ZzC2bRpk+sWdcstt7guWQAAxOU8FmXLlk39kgBAGilSpIhrcdi2bVvQej0uUaJExP3UXapChQruZ2WF+uOPP2zQoEFBgYUXVKxbt851lwrXWqFMUQ0bNrQ6derYG2+8karvDQCAmA4slBpRf1DVReCss85yj0Nn3g6l5//+++/UKicApBplratRo4ZrdWjdurVbp2xNehxpcs5wtI+6RYUGFX/99Zcbl1a4cOGwLRUKKvT648aNc9+tAABkBkkKLOrXr+8CBe8PoPcYADIqdWPq2LGjm5tCmZuGDx9uBw8e9GeJ0hwUGk+hFgnR/9pWc08omJgxY4abx8Lr6qSg4uabb3apZj///HM3hmPr1q3uOQ3OVjCjoEKtG2r11biKHTt2+MuTWEsJAACZJrAYP358oo8BIKO57bbb3IV93759XQCgrk0zZ870D+hWitjA1gQFHffdd59t3LjRjTerVKmSvf/+++44oqDhs88+cz/rWIHUeqGAQuloNWBbS+nSpYO20XgMAADibowFAGQG6vYUqetT4Lw98txzz7klEs3gfbrgoFOnTm4BACBuAwtNjpcS9erVS9F+AAAAADJhYKEm/OSMqdBdO22vPsYAAAAAMr8kBRbqHwwAAAAAUWeF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AAAAIGoEFgAAAAAyZ2AxatQoK1eunOXKlctq1aplCxcuTHT7SZMmWaVKldz2VatWtRkzZqRZWQEAAADEYGAxceJEe/TRR61fv362ePFiq1atmjVp0sS2b98edvv58+dbu3btrGvXrvbLL79Y69at3bJ06dI0LzsAAAAQr2IusBg6dKh169bNOnfubJUrV7YxY8ZYnjx57O233w67/SuvvGJNmza1J554wi6++GJ79tln7fLLL7eRI0emedkBAACAeJXdYsixY8ds0aJF1rNnT/+6rFmzWqNGjWzBggVh99F6tXAEUgvHlClTwm5/9OhRt3j27t3r/t+3b5+llwMHDvz/MmyykyePpVs5ELsOHtzhryuxUFePbN1op4797/cI8BzbFWN1dc0mO3WE71UkdGxLbNXVLcv32LFDJ9KtHIhd/6w9kK511XtNn893+o19MWTTpk0qsW/+/PlB65944glfzZo1w+5z1lln+SZMmBC0btSoUb5ixYqF3b5fv37uNVg4B9QB6gB1gDpAHaAOUAeoA9QBS9I52LBhw2mv5WOqxSItqDUksIXj1KlTtmvXLitcuLBlyZIlXcuG/0XG5513nm3YsMHy5cvHaUHMoq4io6CuIqOgrsYetVTs37/fSpYsedptYyqwKFKkiGXLls22bdsWtF6PS5QoEXYfrU/O9jlz5nRLoAIFCkRddqQ+BRUEFsgIqKvIKKiryCioq7Elf/78GW/wdo4cOaxGjRo2d+7coBYFPa5du3bYfbQ+cHuZPXt2xO0BAAAApL6YarEQdVPq2LGjXXHFFVazZk0bPny4HTx40GWJkg4dOlipUqVs0KBB7vFDDz1k9evXtyFDhljz5s3to48+sp9//tneeOONdH4nAAAAQPyIucDitttusx07dljfvn1t69atVr16dZs5c6YVL17cPb9+/XqXKcpTp04dmzBhgvXu3dt69eplF154ocsIVaVKlXR8F4iGuqppHpPQLmtArKGuIqOgriKjoK5mbFk0gju9CwEAAAAgY4upMRYAAAAAMiYCCwAAAABRI7AAAAAAEDUCC6SJr7/+2sqVK5eqx5w8ebL9+OOPqXpM4EzU1Tlz5tisWbM4uUhV1FXEc1396aefbNKkSal6TESPwALpQrOdt2/f3k2AowkKu3btagcOHAjaZsmSJXbNNddYrly53EzcgwcPDnr+zz//tBdeeCGNS454c7q6euTIEevUqZNVrVrVsmfPbq1bt05wDGW669GjRxqXHPFm4MCBLlNinjx5Ik78qsyKSs2ubYoVK2ZPPPGEnThxwv88dRWxUlcffPBBN7eZskQpQ2go1dv77rvPTp48mQYlRlIRWCBd6EJt2bJlbjLDzz//3L799lu7++67/c/v27fPGjdubGXLlrVFixbZSy+9ZP379w+an6RVq1Zuf13YAelVV/VHLXfu3O6PYKNGjcIe44YbbnDH0EUdcKYcO3bMbrnlFrv33nvDPq+6qqBC282fP9/eeecdGz9+vEvvTl1FLNVVT5cuXdw0BOHUqlXLsmXL5uoyYojSzQJn2ldffeUrW7as+3n58uVKcez76aef/M9/8cUXvixZsvg2bdrkHr/22mu+ggUL+o4ePerfpkePHr6KFSsGHbdChQq+adOm8QEi3epqoI4dO/patWoV9rjXXXedb8SIEXxSOCN1NdC4ceN8+fPnT7B+xowZvqxZs/q2bt3qXzd69Ghfvnz5gr5rqatI77oaqF+/fr5q1aqFfa5r166+xx57LNXKiejRYoE0t2DBAtf0qdnVPbrTq4kPvTET2qZevXqWI0cO/zZNmjSxlStX2u7du/3rWrRoYZ999lkavwPEi6TU1aRq2bIldRXpXp/VZc+bcNb7XlULsVrUPNRVZBSqq9OmTUvvYiAAgQXSnGZUV9/eQOqbXqhQIfect03gHz/xHnvbeN2h1D2FeR6RXnU1OX8Av/nmG3cRB6SHpH6vUleRUVx//fW2ceNGW7FiRXoXBf8fgQUytLp169rBgwftl19+Se+iAIlSRpQKFSq4DFFALKOuIqPQ+LYGDRrYjBkz0rso+P8ILJDmSpQoYdu3b0+Q3UHZd/Sct822bduCtvEee9vIzp077dChQ1amTJk0KTviS1LqalIdP37cNm3alOopF4GkSur3KnUVGcmaNWv4Xo0hBBZIc7Vr17Y9e/a4bE+eefPm2alTp1yWB28bZd/RHziPsvJUrFjRChYs6F+nvpXap0iRImn8LhAPklJXk0rdoM455xy7/PLLz0BJgaTV599//z0oWNb3qlIpV65c2b+OuoqMYtWqVbZ69Wo3VgixIXt6FwDx5+KLL7amTZtat27dbMyYMS546N69u7Vt29ZKlizptrn99tttwIABbs4A5f9funSpvfLKKzZs2LCgY2ngtsZZAOlVV2X58uUufaJaMvbv32+//vqrWx+Ye111VX3XgTNF6YxVB/W/Ust69VBd8M4++2yXwlsBxJ133unmBdK4it69e9v999/v5gqgriJW6qoXNGjOINXTw4cP+7dRHfYSu+h79brrrrO8efPy4cWKVMgsBSQ71dw///zja9eune/ss892qQ47d+7s279/f9A+v/32m69u3bq+nDlz+kqVKuV74YUXgp4/ePCgL3fu3L4VK1bwCSBd66q219dp6BK6zcyZM/mkcMbqqtIdh6uH2s6zdu1aX7Nmzdx3Z5EiRVyqzuPHj1NXEXN1tX79+mG3WbNmjX+bevXq+caMGcOnF0Oy6J/0Dm6Q+X399dduduK1a9em2jGnTp1qTz75pEtBC8RyXf3tt9/cLPIaExSYQhmIBnUV8VxX1eKhrGbr1q0LakFG+mKMBTIsupYgI9VV9QEmqECso64io5g+fbrrbkpQEVsYY4EM66233krvIgBJ0qdPH84UMgTqKjIKjRXSgthCiwXShFJsPvzww5xtxDzqKjIK6ioyCupq/GCMBQAAAICo0WIBAAAAIGoEFgAAAACiRmABAAAAIGoEFgAAAACiRmABAEh1mggrS5YsNn78eM4uAMQJAgsAyMR0Ya8L/MClWLFi1rBhQ/viiy8so/j++++tWbNmVqpUKcuVK5eVKVPGWrRoYRMmTPBvc+jQIevfv7+b5Tel5s+f746xZ8+eVCo5AMQPJsgDgDjwzDPPWPny5c3n89m2bdtcwHHDDTfYtGnT7F//+leqv17ZsmXt8OHDdtZZZ0V9rEmTJtltt93mZtl96KGHrGDBgrZmzRr79ttvbezYsXb77bf7A4sBAwa4nxs0aJDiwELH6NSpkxUoUCDqsgNAPCGwAIA4oLv9V1xxhf9x165drXjx4vbhhx+ekcBCLSNqWUgNakGoXLmy/fe//7UcOXIEPbd9+/ZUeQ0AQPToCgUAcUh343Pnzm3ZswffX3r55ZetTp06VrhwYfd8jRo17D//+U+C/WfPnm1169Z1xzn77LOtYsWK1qtXr0THWGzdutU6d+5spUuXtpw5c9q5555rrVq1ctsm5u+//7Yrr7wyQVAh6tblvV7RokXdz2px8Lp9KSiRJUuWuFaI888/3wU8JUqUsC5dutg///zjP5a2feKJJ9zPat3xjhFYvvfff9+dE52bQoUKWdu2bW3Dhg1JOOMAkPnRYgEAcWDv3r22c+dO1xVKd/lHjBhhBw4csDvuuCNou1deecVatmxp7du3t2PHjtlHH31kt9xyi33++efWvHlzt82yZctcK8ell17qulgpSFi1apX98MMPiZahTZs2bt8HHnjAypUr58qhAGX9+vXucWLdqubOnWsbN250QUk4CipGjx5t9957r91444120003ufUqo+h1Vq9e7QIbBRUqxxtvvOH+V0uIAgjt8+eff7pWnGHDhlmRIkX8x5aBAwdanz597NZbb7W77rrLduzY4c5jvXr17JdffqHrFAD4AACZ1rhx43xmlmDJmTOnb/z48Qm2P3ToUNDjY8eO+apUqeK79tpr/euGDRvmjrFjx46Ir7tmzRq3jV5fdu/e7R6/9NJLyX4Pb731lts3R44cvoYNG/r69Onj++6773wnT54M2k7l0Xb9+vU77fuSDz/80G3/7bff+tepfFqn8gdau3atL1u2bL6BAwcGrf/999992bNnT7AeAOIRXaEAIA6MGjXK3bXXou48ygqlu+6ffPJJ0Hbq4uPZvXu3a+m45pprbPHixf713qDmqVOn2qlTp5L0+jquujIpY5OOmxzqsjRz5kw3IFvZoZ599llXpgsvvNANtk7q63uOHDniWm+uuuoq9zjwvUWi86T3qtYK7estav1QOb766qtkvScAyIwILAAgDtSsWdMaNWrkFnVzmj59uhsQ3b17d9flyaMuT7rg1jgEjSHwuhgpwPAoQ9PVV1/tAhMNANc4g48//jjRIEPdpV588UWX4lb7qPvQ4MGD3biLpGjSpIl9+eWXLg2sskHdf//9tm7dOtclKykDuHft2uUySum1FWTofWkchQS+t0j++usv141MQYT2DVz++OMPBpEDAGMsACA+Zc2a1bVaaEyFLpovueQS++6779z4Cl30v/baa25wtdLFjhs3Lmi+CF2Y6+Jed+kVoKg1YeLEiXbttdfarFmzLFu2bGFf8+GHH3ZzT0yZMsUFCRqvMGjQIJs3b55ddtllSSp3njx5XGuFFo2B0EBtBSsdO3ZMdD+1NKh1Q4OzlbZWA84VCDVt2jRJrS7aRuMw9Frh3p+OBwDxjsHbABCnTpw44f7XIG6ZPHmya6nQRb9aGDwKLMIFJtddd51bhg4das8//7w9/fTTLthQq0gkF1xwgT322GNuUUCji/whQ4a47lnJ5aXP3bJli/tfF/7hqOuVBn8rCOnbt69/vV4/VKRjqNxqsVArx0UXXZTssgJAPKArFADEoePHj7vWBY17uPjii9063YnXhfXJkyf92ynVqloYQrsVhVKAIEePHg37epq8TmMbQi/WzznnnIj7eBQUhDNjxgz3v1Ldeq0ZEjprttfCoMAg0PDhwxMcM2/evGGPoYxROo6Ck9Dj6HFg2loAiFe0WABAHFAXnhUrVrifNSZBXZt0x/6pp56yfPnyufVKJ6vWB3UP0mzW2k6DvitUqODmgfAoxay6Qml7pYLVduo6pVSwmtsiHKVxVeuGuiRpbIfmz/j000/dLOAao5EYzXWhlgJ1o1IwcvDgQZszZ46bNVzzW2i910VLx1a3LLUqaIxIlSpV3OKN6VBAVapUKRdUafbuUJqjQtT6onKpK5j3us8995z17NnTBVutW7d2QZGOofdx99132+OPPx7FJwQAmUB6p6UCAKRtutlcuXL5qlev7hs9erTv1KlTCVK7XnjhhS4dbaVKldz+St8a+Odi7ty5vlatWvlKlizpUsDq/3bt2vn+/PPPiOlmd+7c6bv//vvdMfPmzevLnz+/r1atWr6PP/74tO9BaWHbtm3ru+CCC3y5c+d25a9cubLv6aef9u3bty9o2/nz5/tq1KjhyhWYenbjxo2+G2+80VegQAH32rfccotv8+bNYdPTPvvss75SpUr5smbNmiD17OTJk31169Z170GL3o/e18qVK5P92QBAZpNF/6R3cAMAAAAgY2OMBQAAAICoEVgAAAAAiBqBBQAAAICoEVgAAAAAiBqBBQAAAICoEVgAAAAAiBqBBQAAAICoEVgAAAAAiBqBBQAAAICoEVgAAAAAiBqBBQAAAICoEVgAAAAAiBqBBQAAAACL1v8DdkbJV7mqH9kAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example: Amplitude Encoding for 2 qubits\n", + "# Need 2^2 = 4 amplitudes for 2 qubits\n", + "x_amplitude = torch.tensor([0.5, 0.3, 0.7, 0.2])\n", + "\n", + "state_amp, circuit_amp = state_encoding(x_amplitude, n_qubits, encoding=EncodingType.AMPLITUDE)\n", + "\n", + "print(\"=== AMPLITUDE ENCODING ===\")\n", + "print(f\"Input features: {x_amplitude.tolist()}\")\n", + "print(f\"\\nInitial state (normalized amplitudes):\")\n", + "print(f\" |ψ⟩ = {state_amp.numpy()}\")\n", + "print(f\"\\nCircuit operations: {circuit_amp if circuit_amp else 'None (state preparation only)'}\")\n", + "\n", + "# Visualize state as bar chart\n", + "fig, ax = plt.subplots(figsize=(8, 4))\n", + "basis_labels = ['|00⟩', '|01⟩', '|10⟩', '|11⟩']\n", + "amplitudes = torch.abs(state_amp).numpy()\n", + "colors = plt.cm.viridis(np.linspace(0.2, 0.8, 4))\n", + "ax.bar(basis_labels, amplitudes, color=colors, edgecolor='black')\n", + "ax.set_ylabel('Amplitude Magnitude', fontsize=12)\n", + "ax.set_xlabel('Basis State', fontsize=12)\n", + "ax.set_title('Amplitude Encoding: State Preparation', fontsize=14, fontweight='bold')\n", + "ax.set_ylim(0, 1)\n", + "for i, v in enumerate(amplitudes):\n", + " ax.text(i, v + 0.02, f'{v:.3f}', ha='center', fontsize=10)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ecdf7d98", + "metadata": {}, + "source": [ + "### Encoding Comparison: Measurement Distributions\n", + "\n", + "Let's compare how the same data looks under different encodings." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "711f939e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQ8AAAGdCAYAAAC8WIX0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAf5JJREFUeJzt3QW4FOX///+b7gMISqdBSAqCqICBAhYoKhYgYiANFqiUqJiIAoqJiYAB2IgIxkcUpEQlDBCUjkM3879e9/83853dM3vO2T199vm4roWzs7Oz99xT97znjjyO4zgGAAAAAAAAAMLkDZ8AAAAAAAAAAAQPAQAAAAAAAEREzUMAAAAAAAAAgQgeAgAAAAAAAAhE8BAAAAAAAABAIIKHAAAAAAAAAAIRPAQAAAAAAAAQiOAhAAAAAAAAgEAEDwEAAAAAAAAEIngIADGoXr26yZMnj32NGDHCmz5v3jxvul5r164lf9PAn5evv/56luWlftufFmQNji8g+8uOx6nS4E+T0ujSNdydrmt7dsA1BwCQ3RA8BJAhNwuRXjfffDM5ng2Eb5eTTjrJHDp0KMl8O3fuNMWKFQuZN71urrJLYDAzHD161EyZMsVce+21pmbNmqZ48eKmYMGCpnLlyubSSy8148ePt3kNJBfw0KtBgwaBmbRy5UqTN2/ekHnPO+88MjQOJRcoi/V6rvNVyZIl7fmrTZs2ZuTIkWb9+vUmo2kfzm3lBwKDAICcKH9WJwAAcpOTTz7ZPPnkk977E044weQEW7duNe+++26Sm7OXX37Z7N+/P8vSlRv8+uuvpnPnzub3339P8tl///1nX5999pnZtm1bSC1W5J7jKz0tX77cBnfCA4PPPfeccRwny9KF3O3IkSP2tXv3brNmzRozZ84cM2rUKDN06FD7UuA6Ox+nSoM/TUpjdnbmmWeGpBcAgKxG8BBAhlCwpGnTpkmm16tXL1fneJUqVczdd99tcqJx48aFBA+PHTtmnn/++SxNU06n2mCtW7c2O3bsCDkG2rVrZ29mt2zZYr777juzaNGiLE1ndrdv3z5TpEiRHH18pScFCv3Bw8TERPPmm29maZqyGwW5EhISsjoZuep6vmvXLrN48WIza9Yse33QSw88Nm3aZF544QVv/ux0nB4+fNgG1bUvZJc0pcbpp59uXwAAZBsOAKSDuXPnqsqL95o0aVKK31mzZk3Id7SMd99912nWrJlTpEgRp1SpUs7VV1/trFu3LvD7K1ascHr16uXUqVPHKVasmP1OjRo1nM6dOzsLFy4Mmffo0aPOq6++6lxwwQVOmTJlnPz58zsnnHCCc9555zkvvfSSc+TIkcDf0Gf16tVzChUq5FSqVMkZNGiQs3v3bqdatWpeuocPHx4xH7SOrm7dunnTW7du7WzYsMG57bbbnPLlyzsFCxZ0ateubX8vyC+//OJcdtllTokSJeyrXbt2zpIlS+xvu8tUmlLLn8a8efN6f3/33XfePO+//743PV++fMn+zsGDB51x48Y5LVu2dEqXLu0UKFDArpe23w8//BAyr9bd//vhL//yw/epb775xm7D4sWL25fy4ddffw1cx1WrVjk9e/Z0TjvtNLtv6HXqqac6t99+u913gqxdu9a57rrr7DoULVrUrs/s2bPtb/vTklotWrQI+d6jjz7qHD9+PMl8P//8szNz5sw07bPhx9OcOXOcsWPH2vUvXLiwc/rppztvvfWWnXfv3r3OwIEDnYoVK9p9u1GjRs706dOTpCt8P//xxx+diy66yElISLD5f/HFF9u0h1O6r7nmGrtPu2nXftuwYUPn3nvvdbZu3Zrib2lfvPDCC+1vadrOnTuTPb60TiNHjnQaN25s06bfPPHEE+1v3nrrrc7nn3+e5n0k1mM4PN16nxrh29Q9VnU8al91PfXUU4HHqtIYbteuXXY/1HlWeatjtUqVKnbdgo6lv//+2+nfv79z7rnnOpUrV7bHhdZV+47OSR999FFg2nXM6Pfd7a/zufL52muvdSZMmBAyb3LXjvA8T+57M2bMsMecrgclS5YMmffbb7+11watq9Kv/fGss85yxo8f7xw+fDhJ+sOX/eabb9p9ScfSySef7IwZM8bOp+Nw1KhRTvXq1VM8j0dznnTz0J8Off/hhx+2+6h+S9eku+66y04POo6CXkH7RLTX899//91ea/3z+I+v9DhO/de2SC93uf5rivaX5cuXOx06dLDnS03TtTKovOEKv47qGq9rvfZ3nR9VxtB2Cz93h/9ucttOwtMQ9HLLEyldc/bv32/3wbPPPtseW9qXTjrpJKd9+/bO1KlTU9ymf/31lz0O69evb9dR26BHjx7Ojh070nQsAwByL4KHALJN8FA3p0GFad0oHThwIOS7r7zyir15ilQAf+aZZ0JuVlq1apVsgV2/vWfPnpDfGDx4cOC8TZs2dcqVK5eksB9N8LBmzZpOhQoVApevwIufAqG6yQqfTzexCuT4b3pSy7+cK664wsmTJ4/9WwEfl5tnurHQDUmk39myZYsNPkXKWwU8FMRKa/BQ6+oPdLov3dAoDX7Tpk2z+RPpN7ROClT7aVvpRj58XuXNJZdckuyNXBAF2vzfufzyy1O9fWLZZ8OPpyZNmgR+7/nnn7eBo6D1/Oqrr0LS4Q9E6Pd0gxr+PQXc/EFnifTb7ktBj//++y/ibykA5A+CpSZ4qKBqcr+pwFFa95FYj+H0Ch527NjR+/uee+6x8xw7dswL5Oi85A9YhweKVq9ebYNcya2z8sXv448/TjZf9VIwyC+lwI/S6ZcewUMF5Pzv/cHD+++/P9n06Ls65iItO9L+PHToUBukSs0+EO15MiiAFOka2aVLl0wNHsqCBQtC5tGDhEjfj+U4jTV4qKCkgsf++aIJHmrf1DU+6Pf69u2bLYKHGzdutA+DkltOp06dQh4whW+TSPuSrjtpOZYBALkXzZYBZIgvvvjC9uEW1PxJTZqCfP/997afn7Zt25q5c+ea//3vf3b6H3/8YWbMmGGuu+46+/7HH380t99+uzl+/Lh9nz9/fnPNNdeY2rVrm3///df+tl+/fv3Mt99+672/+OKLTYsWLexy1PzK/W3N99prr9n3CxcuNI8//rj3nfLly5uuXbuavXv3mldffTVwcJFo/P3336Zw4cLmzjvvtM0x1eTrwIED9rMnnnjC3HLLLfZv3cPqb/2u6/rrr7ed1k+bNs3Mnj3bpNWpp55qLrnkEvPpp5+a6dOn2zzcvn27l2duvkfSpUsXs3TpUvt3iRIlzA033GAHAtH207bQdho4cKBt9nbOOefYdb7sssvMPffcE9jMXZ3yB9G6ahtfddVV9vfUT6AordomgwcPtu///PNPmyZ3G5UpU8Z069bNdrj/xhtv2P1Sn2lakyZN7PpLnz59bPM71+WXX24aN25sPv/8c++3oqE+wfzcbZoaseyz4dQUWs2jdUy98sorZuPGjXZ6r1697P9XXHGFbRan5urav7SvqY+tCy+8MHB5+r3TTjvNHmvaR9566y27bbXfdu/e3TbRzpcvn51XA/Ao/9SvmJpna7r6dpw6dardXvr74Ycfjtgsfv78+aZo0aLmpptuMpUqVTJLlizxlh1kxYoV3qAQ6ntNx6rSqm2t/tnCB4yIdR+J5RhOT9o2Srv60dQ+ryajOi60jtKzZ8+Ig2OoiemVV17pjXx74okn2mNV20f71A8//GDXWXmnddY5xj2/NmrUyB6f+o6af6oZuY5vnadFfd/16NHDbivxN2HV4BpqYq3vaIAN7UduPqUnNf8vW7asPV9pe/722292ugYqevTRR735dH3ReWjz5s12W2vf13d1jnrppZciHks6/i666CK7D69atcpbb1HXBK1atbJ9xLrnkPB9INrzZBDlnbZh3bp1zTvvvONtS/392GOPmYoVK5oHHnjATvevs/YLt4+/SNffaOm80rBhQ7Ns2TL7Xucr7WPpdZzqnKeBpbQv6VgT5Y2uFcn1pahzhfZZ5beOW52XdJymlvYLdQOgPCtVqpR5++237flOdK7s1KmT3d5p6Xfx559/tvuRy9+34dlnn53icm688UZv/5arr77a7hM6F+jcKR988IHdB4YNGxZxX9L5RL+n8pX6UnW3o64zZ511VpYdywCAbCqro5cAcofwp9qRXv6n/eFP4VUbym0+pv/VBMf9TE2IXFdddVVIbQ01R/M7dOiQs379evv3tm3bQmowqZmNn967n2k+zS933HFHyHQ1b3S98847gTUFoql5qJea2LlU48T/mZpNyfz580Om33fffd531LxITd/SWvNQzd6+/PJL7/2QIUOc7t27e+8XLVoUknb/7yxbtixkWV9//XXI7/hr7F155ZUR0xCppqp/HjU3dPNFVMPE/Uz7hEtNLP37h5qwufS3v/ai5hU1P3VrX+p10003ed/RvhheyyM11KTe/51ITaXDxbrPhh9PqgnkNrN78cUXQz679NJLA2vYqpmfn78WU9myZZ3ExETvs0ceeSRkmWre7bdv3z5bk1FNONW87sknnwyppaWae5F+S+ul/S5cpONr8eLF3jQ1MQxvXqgm4P5mvrHsI7Eew+lZ81BNJ5Wf7ntt1/PPP9/+rZrYqpHkrw3lr2WmZvH+/FUtRH/+qPmi+7matIfTOXDKlCk2DWomre2pJszud9Ss1+U2NddLaQqnJpPpXfNQv/nPP/8k+S3/eaJr164hn6mWpfuZmmNu3749cNl169b1rk2zZs0K+UzNbZV/MnHixMB9INbzZHjtswEDBnifLV26NOQz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wQ6Iok6dS5Ysadq0aWPmzJkT1XJ+/PFHc9VVV5mKFSuaAgUK2GXVr1/fDB061OzZsyfJ/IsWLTIdOnSwg68ULlzY1K1b147ifPjw4STzHjp0yDz66KN2Hs2r72gQkMWLFwemJScue+bMmbZzbXWyndK237FjhxkyZIhp3bq1zeeULiCO45gXX3zRnHnmmaZYsWJ2UBV11v32228nmfePP/6wARcF16pWrWo7+S5durS58MILbRrTegxoXxg8eLA57bTT7LI12Mtll11mfvrppyTzfvPNN6Z///6madOmpnz58nbZFSpUMJ07dza//PJLmtYTiGX/zcpz+NSpU80555xj92u99Pe0adNS/f1///3X9OjRwzRo0MCei/Lnz2+PbS1nwoQJ5tixY2nOm2jSmBOXrYEOevXqZRo1amTzz92+KtAHefrpp83ll19uypYt681bvXp1E8nXX39t2rVrZ7eLrhkaBEsDlR08eDBkvl27dplnn33WXHHFFebUU0+15zu9dB0fM2aMOXr0aJquRxl9zdBydP3S+V/5WKpUKZvnL7/8sv3tWK8Zrl9//dVeTzXom75z0kknmZYtW5pXXnnFpFU0ZYDkHDlyxDz33HOmWbNmJiEhweazBtTQQGc6Vv20jTp16mTXQ+tTo0YNM2jQILNz5840Xwd1rPTu3dvulzpW9Bu6xq5cuTJN+6goTx577DFbFixSpIgtX55//vnm888/D1z2n3/+addf5UilRdtPg8H9999/SebV+WrcuHGmefPmNv+0H+k4U/n1gw8+SDL/ihUr7D6hfVTLVnpq1aplyxhB5wWl5cYbbzTlypWzea6BT+677z6ze/fuFB9Ehr/Czw/R5KF89dVXdr2UfyrznXHGGWbixIm2/O6XUjrCr0XRlDuz6v5iyZIl9vg/++yzvUEcTzzxRHte/e677wK/k9ptF0sac/uyYzmfR7M/6/7l3nvvNXXq1LHHoO4XK1eubM852tbhlD6lU+lVWpR+7bN//fVXmq6Jy5cvt8tROnT9UTp0/tB6Tp48OUk63nrrLdOtWzdz+umn2/V0B0DS+WPbtm0h827cuNE8/vjjpm3btvZcrfXUCOstWrQwkyZNMildFxo2bBhyPEY6L8TMAZBhhg8frlKsfT333HPOd9995/z999/e5+vWrXMqV67szeN/Va1a1fn3339T9Tvd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aNMYD8uO9nwe7f4czXGoc6nb4lBBOKVXlP4ff/wxyXpGc01MrjzkD9z5u5jQOV61md0m2ToX6dwUqWynByZKm4KCblNlvbKFqMZmBrK5tWvXOiVKlLBDj1erVs357LPPvKHkmzdv7hw9ejRT0zN8+HBvKPS5c+cm+fzKK6/0Pu/YsaPz0UcfhUzzD0Uv7nStm3+49QIFCjidO3d23n77bWf27Nl2OPmEhARv/t69e4fM705v3bp1mtZv5syZ3rIqVKjgvPvuu84zzzzj5MuXz04rXry4s2nTJm9+DQcflB+NGzf2pl944YV2u40fP94pVKiQN90d5n7//v1OxYoVven333+/88EHHzinn366N03fdT377LPedM2jeR944AFvWuXKlZ2DBw/m6GXLwoULnffee8++SpUq5c33/PPP22nKU9e+ffu8eW+//XZv3vPOO8+brmPJ1aFDB2fEiBHOxx9/bD+74oorQrb7zp07vXm/++47p1ixYt7nd999t53mfyUmJsZ0DOh7Oo6fe+4554svvnBee+21kPxr3759yP45ZswY7zPtS6+++mqStPhFs56pPcYRHc7h6X8OX7x4sZM3b17vnKzjQMeO/tY0na+XLVsWuE9PmjTJm37RRRc511xzjfPSSy85X375pfP+++87l19+uTevrrWrV6+O6diONo05ddnav91z7DnnnBOyfd3pOj+7dN7WNP/14MQTT/Tm1XnfNWzYMLucqVOnOp988okzcOBA71qsNP7www/evJs3b3ZOPfXUkOtu+Lnxn3/+ifl6lFHXjO3bt3vrpFe/fv1s2UD/+8/1u3fvjumaMWXKFO+z6tWrOx9++KG9hhYuXNhO0/8bNmzw5ldZzJ0/JdGWAXQ9caer7OQ6fvy4U7duXe+zAQMG2P3k4osvDskX18SJE+33VT78/PPP7XYpUqSIN6/2F79otp327TZt2jgvvvii3Q4vvPCCU6VKFW/+O++8M2TZ0eyjcvbZZztPPPGEXb933nnHOffcc71l169f3zly5Ig3r5Z31VVX2XOW0vLUU085pUuX9ubXOdWfbne6XqNGjbLfuf76671p2lbKa/Ef/40aNbLnhDfeeMM54YQTvOnKg6Ay7W233WbLyq1atQrZx8Np+7ifX3bZZRH3o2jyUPuqe2xpHpWJtI/790MtI9ytt97qfa58jCSacmek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5ctnp2mQlF69etnPli9fnt7pBAAAyPEoQwEAACAuah7++eef5q677vICh6K/Bw0aZD8DAAAAZSgAAADEafDwjDPO8Po69NO0hg0bpke6AAAAch3KUAAAAMi1zZZ/+eUX7+9+/fqZ/v3721qGZ511lp32448/mgkTJpjHHnssY1IKAACQA1GGAgAAQFwEDxs1amTy5MljHMfxpt17771J5rvhhhtsf4gAAACgDAUAAIA4CR6uWbMmY1MCAACQC1GGAgAAQFwED6tVq5axKQEAAMiFKEMBAAAgLoKHQX7//Xezbt06c/jw4ZDpV1xxRVrTBQAAkGtRhgIAAECuDh7+/fff5sorrzTLly8P6QdRf8uxY8fSN5UAAAC5AGUoAAAA5DR5Y/mSRlquUaOG2bJliylatKj57bffzLfffmuaNm1q5s2bl/6pBAAAyAUoQwEAACAuah7Onz/ffP3116Zs2bImb9689nXuueea0aNHm379+pklS5akf0oBAAByOMpQAAAAiIuah2qWXKJECfu3AogbNmzwOgRftWpV+qYQAAAgl6AMBQAAgLioeVivXj2zbNky23S5efPm5oknnjAFCxY0L730kqlZs2b6pxIAACAXoAwFAACAuAgePvjgg2bfvn3274ceeshcdtllpmXLlqZMmTJm6tSp6Z1GAACAXIEyFAAAAOIieNi2bVvv71NOOcWsXLnS7Nixw5QuXdobcRkAAACUoQAAABCHwUO/9evX2/+rVKmSHukBAACIC5ShAAAAkGsHTDl69KgZOnSoKVmypKlevbp96W81xTly5Ej6pxIAACAXoAwFAACAuKh52LdvX/Phhx/agVJatGhhp82fP9+MGDHCbN++3bzwwgvpnU4AAIAcjzIUAAAA4iJ4OHnyZDNlyhTTvn17b1qDBg1s0+Xrr7+e4CEAAABlKAAAAMRrs+VChQrZpsrhatSoYQoWLJge6QIAAMh1KEMBAAAgLoKHffr0MaNGjTKHDh3ypunvRx55xH4GAAAAylAAAACIo2bLV111Vcj7r776ylSuXNk0bNjQvl+2bJk5fPiwufDCC9M/lQAAADkUZSgAAADERfBQoyn7derUKeS9+jsEAAAAZSgAAADEYfBw0qRJGZsSAACAXIgyFAAAAOJutGXX1q1bzapVq+zftWrVMieeeGJ6pQsAACDXogwFAACAXD1g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Ms8++2zIMubNm2eaNWtmihUrZkqVKmUDZf/884/3JL9jx44h8w8YMMCcd9553nv93adPHzu9bNmypm3btnb6r7/+atq3b2+KFy9uypUrZ7p06WK2bdsW8r2+ffva75UuXdrO8/LLL5t9+/aZ7t2725p+p5xyivn8889Dfj81y+3Xr5+59957zQknnGDKly9va/25qlevbv+/8sor7RN093249evXm7vuusum79FHHzV169a16dG0J5980jz99NM2oCiqiai881PNRi3f/XzkyJFm2bJldppebu3FxMREc8cdd9h1KVy4sKlXr56t7ej64IMPzOmnn24KFSpk06rf9dO0hx9+2HTt2tXmSbVq1cxHH31ktm7dagOfmtagQQPz888/h3zv+++/Ny1btrT7hfY35ZnyHgCAnIjyE+Unyk8AEBnBQyAXuuWWW8ykSZO896+99poNqIVT4PDNN980EydONL/99psZOHCguemmm8w333zjBRcrV65s3nvvPfP777+bYcOGmfvvv99MmzbNfn706FEbHFSzXNWqmz9/vrn99tu9oFdqvfHGG6ZgwYLmf//7n02LAmIXXHCBDXYqaPXFF1+YzZs3m2uvvTbJ9xRwXLBggQ0k3nnnneaaa64xZ599tlm8eLG5+OKLbXBw//79dv5olqtgqIJ7TzzxhHnooYfM7Nmz7WcLFy60/yt/N27c6L0PpyDskSNHAmsYKtinoNy7776bqvzp3LmzDToqCKjf1EvTtH0UCFW+vf3223YbPfbYYyZfvnz2e4sWLbLrptqOy5cvt0HQoUOHJmk2/cwzz9ig75IlS8yll15q80zBRO0LyseTTz7Zvnccx87/119/mXbt2plOnTrZ7T516lQbTFQQGACAnIryE+UnofwEAAEcALlGt27dnA4dOjhbtmxxChUq5Kxdu9a+Chcu7GzdutV+pnnk4MGDTtGiRZ0ffvghZBk9evRwrr/++oi/0bt3b6dTp0727+3btyua5MybNy/Z9Pj179/fad26tfdefzdu3DhknlGjRjkXX3xxyLT169fb31q1apX3vXPPPdf7/OjRo06xYsWcLl26eNM2btxovzN//vyYlytnnnmmc99993nvNf/06dOd5PTs2dMpWbJkxM8bNGjgtG/f3v49adKkJPNq+f5T9PDhw52GDRuGzDNr1iwnb968XtrD3XDDDc5FF10UMu2ee+5x6tat672vVq2ac9NNNyXJs6FDh3rTlH+aps/cfeT2228PWe53331n03LgwIGI6wwAQHZE+Ynykx/lJwBIKn9QQBFAznbiiSfaGmSqYaZYl/5WDT2/P//809bIu+iii5L0Oehv3jxhwgRbc3HdunW2H0V97g7coWa9apqspsZaTps2bWxNtwoVKkSV3iZNmoS8V/PcuXPn2tp54VTr7bTTTrN/qzmtS7XtypQpY+rXr+9NU1Ne2bJlS8zLFa2Pu4zsZOnSpbZmqJvucCtWrLBNj/1Uw3Ds2LG2SbpbQ9G/vm6eRcpHNeNWPqrG4TvvvOPNo/1MNSHXrFlj6tSpk85rCgBAxqP89P+j/ET5CQDCETwEcnHTG7cZqQKA4fbu3Wv///TTT02lSpVCPlP/eKKBV9TsVv3ktWjRwvYjqP763L763Oa76u9OTYDVfPXBBx+0TXzPOusskzdvXq+pq0tNecOpiXB42i6//HLz+OOPJ5nXH5gsUKBAyGdqLu2f5jafVlArrct1l5FaCujt2rXLbNiwwVSsWDHkMwVgFaw8//zz7fvU5lM49TeYHoLyLKV8VNNrbfdwOWFQHgAAIqH8RPkptSg/AYgnBA+BXEp90ilIpcCPOwiJnwbwUJBQNQrVZ2EQ9aWn/gN79erlTVPQK5xqKuo1ZMgQG2TUyM4KHuoJvgYoCa8tFx6cC+q0XAN9aDCP/PnT7zSVXstV+lVzLznqD/C+++6zgdfwQUrUr6MGF7n++uvte+XTnj177DQ3kKp88lOfkOG/qRqD//77r1m9enVg7UPVANQ29NN7zevWOow1H9W/ogaAAQAgN6H8lBTlJ8pPAMCAKUAupeCQmq0qyBMUKFItQtUq1CApGiBEQUENjjFu3Dj7Xk499VQ7sMisWbNsgEqDbfgHCFETVQUMNVCKRlj+8ssvzR9//OE1W9XgJPq+BmXR9OHDhycJJgbp3bu32bFjhw2u6feUNqVBg76kFLTLjOUq+DhnzhyzadMms3PnzsB5VANPg62oifADDzxgVq5caX9vzJgxdiRnDYDSvHlzO6/+L1q0qB2MRvMo+Bo+qIl+U/mtoKJGhz506JAN+rZq1coGKlXbU59rdGnVAhX9htI5atQou/20XcePHx84iEs0FBT94YcfbM1WpUfbdubMmQyYAgDI8Sg/JUX5ifITABA8BHKxhIQE+4pEQSUFBDXqsgJ+etquZsw1atSwn6tp6lVXXWVH9lWAa/v27SG1EBXwUlBMwSvVZtNIyypg6nuiGo9avoJlZ555pq1dp1F7U6Jmvqohp4CeRkxW/3sDBgwwpUqVsk18Y5Vey1VNQgXrqlSpEtI/ZDgte/r06ea7774zTZs2NfXq1bOBwRdeeME89dRT3nzqO1KjJX/22Wc2TRqFWSMj+ymPtX3U1Fk1Fd2RmlWTUnmrgKhqkyqv3UCoagpoZGw1P9dva7RsjRytfirTQjUeNSK3ApItW7a0eaBlhzfPBgAgJ6L8FIryE+UnAMijUVPIBgAAAAAAAADhqHkIAAAAAAAAIBDBQwAAAAAAAACBCB4CAAAAAAAACETwEAAAAAAAAEAggocAAAAAAAAAAhE8BAAAAAAAABCI4CEAAAAAAACAQAQPAQAAAAAAAAQieAgAAAAAAAAgEMFDAAAAAAAAAIEIHgIAAAAAAAAIRPAQAAAAAAAAgAny/wFFhDUyCD3zwAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Apply the circuits and measure\n", + "SHOTS = 2000\n", + "\n", + "# Angle encoding: apply the RY circuit\n", + "final_state_angle = apply_circuit_to_ket(state_angle, circuit_angle, n_qubits)\n", + "counts_angle = measure(final_state_angle, shots=SHOTS)\n", + "\n", + "# Amplitude encoding: state is already prepared\n", + "counts_amp = measure(state_amp, shots=SHOTS)\n", + "\n", + "# Plot comparison\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n", + "\n", + "basis_labels = ['00', '01', '10', '11']\n", + "\n", + "# Angle encoding\n", + "ax = axes[0]\n", + "values = [counts_angle.get(b, 0) / SHOTS for b in basis_labels]\n", + "ax.bar(basis_labels, values, color='#4CAF50', edgecolor='black', alpha=0.8)\n", + "ax.set_title(f'Angle Encoding\\nx = {x_angle.tolist()}', fontsize=12, fontweight='bold')\n", + "ax.set_ylabel('Probability')\n", + "ax.set_xlabel('Measurement Outcome')\n", + "ax.set_ylim(0, 1)\n", + "\n", + "# Amplitude encoding\n", + "ax = axes[1]\n", + "values = [counts_amp.get(b, 0) / SHOTS for b in basis_labels]\n", + "ax.bar(basis_labels, values, color='#2196F3', edgecolor='black', alpha=0.8)\n", + "ax.set_title(f'Amplitude Encoding\\nx = {x_amplitude.tolist()}', fontsize=12, fontweight='bold')\n", + "ax.set_ylabel('Probability')\n", + "ax.set_xlabel('Measurement Outcome')\n", + "ax.set_ylim(0, 1)\n", + "\n", + "plt.suptitle('Encoding Method Comparison: Measurement Distributions', fontsize=14, fontweight='bold', y=1.02)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "d5feddd8", + "metadata": {}, + "source": [ + "---\n", + "## 2. Quantum Kernel Feature Map\n", + "\n", + "The quantum kernel uses a feature map that includes:\n", + "1. State encoding (RY gates for angle encoding)\n", + "2. Entanglement layer (CNOT)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c03f26fa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== QUANTUM KERNEL FEATURE MAP ===\n", + "Input: x = [0.699999988079071, -0.30000001192092896]\n", + "\n", + "Circuit structure:\n", + " Layer 1: ('RY', [0], tensor(0.7000))\n", + " Layer 2: ('RY', [1], tensor(-0.3000))\n", + " Layer 3: ('CNOT', [0, 1])\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Build the quantum kernel feature map circuit\n", + "x_kernel = torch.tensor([0.7, -0.3])\n", + "\n", + "# The feature map: RY encoding + CNOT entanglement\n", + "kernel_circuit = param_gate_layer(\"RY\", x_kernel) # Encoding layer\n", + "kernel_circuit += [(\"CNOT\", [0, 1])] # Entanglement\n", + "\n", + "print(\"=== QUANTUM KERNEL FEATURE MAP ===\")\n", + "print(f\"Input: x = {x_kernel.tolist()}\")\n", + "print(f\"\\nCircuit structure:\")\n", + "for i, op in enumerate(kernel_circuit):\n", + " print(f\" Layer {i+1}: {op}\")\n", + "\n", + "draw_circuit(kernel_circuit, n_qubits, title=\"Quantum Kernel Feature Map: φ(x)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "48dee4a6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== QUANTUM KERNEL VALUES ===\n", + "k(x₁, x₁) = 1.0000 (self-similarity, should be ~1.0)\n", + "k(x₁, x₂) = 0.9969 (similar points)\n", + "k(x₁, x₃) = 0.4881 (different points)\n" + ] + }, + { + "data": { + "image/png": "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lB6r/GIahoiISMt0UEBt6f3338fcuXMxb948q1mpW7durYKjgmAwRERERJpx4sQJtGvXLtt+6TKMjY0tUJsMhoiIiLRMZ5mhoKAgnD59a7SiiUz0XKVKlQK1yWCIiIiINENWwRg1ahR27dqlJnmWeQ+XLFmiBnK9+GLBBkFwDn0iIiINM60p5sj2irI333xTTfrcsWNHXL9+XXWZyWTOEgy98sorBWqTwRAREZGW6WxtMicnJzXnoax0Id1liYmJqF27tpr7sKAYDBEREZHmuLu7qyDIERgMERERaZkOZqC2lJSUhA8//BCbNm1CRESE6jKzJBMx5heDISIiItIMWRN169atauLFsmXLqm4zezEYIiIi0jC9FVCvX78ea9euVZMsOgqDISIiIi3TWTdZyZIlUaqU9WLS9uI8Q0RERKQZkydPxoQJE9SwekdhZoiIiEjLHNxNhiKeGfrkk09w5swZBAYGqsXiLdcnEwVZn4zBEBEREWlGjx49HN4mgyEiIiIt01HNUHp6uho9NmTIEJQrV85h7bJmiIiISMt0tFCrq6srPv74YxUUORKDISIiItKMBx98UM0z5EjsJiMiItIwvc0z1LVrV7VY6+HDh9GkSRMUL17c6v7HHnss320yGCIiIiLNeOmll9TPGTNmZLtP6okyMjLy3SaDISIiItKMrGuROQJrhoiIiEiTkpOTHdIOgyEiIiIt09FoMiHdYDILdUhICLy9vc2r1L/zzjv4+uuvURAMhoiIiO6BAmpHbkXZlClTsHDhQkybNg3u7u7m/XXr1sX8+fML1CaDISIiItKMRYsW4auvvkL//v3h4uJi3t+gQQMcP368QG2ygJqIiEjring2x5EuX76MatWq2SysTktLK1CbzAwRERGRZtSuXRt///13tv0rV65Ew4YNC9QmM0NERERapqO1ycSECRMwcOBAlSGSbNBPP/2EEydOqO6zNWvWoCCYGSIiItIwvRVQP/7441i9ejX++OMPNfu0BEfHjh1T+1q2bFmgNhkMERERUZH36aefmv/dtm1b/P7774iIiMD169exbds2FQh17ty5QG0zGCIiItIyncwzNH78eNUVZktSUhK6dOmC6OjoArXNYIiIiIiKvMWLF+P555/Hr7/+arU/MTFRZYQiIyOxefPmArXNAmoiIiIN08uq9b1790ZsbCz69euHtWvX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ihUrsGTJEvNSHDJduZeXV2GfHmn0GpLuVgmEhARGllPkE+XlGhKmVdJjYmLQoEEDvnGkefxNWESdOXMGV65cUav/nj9/vrBPh+6xayglJQVjx47F66+/XmjnR9q+hh599FG0bdsWvXv3LrTzI3IUdpMVQampqWrlX1nsrkaNGmoFYElRBwQEqPule2zSpEnsJqMCX0PPP/+8+vnll1/yXaQCXUMiNDQUderUweXLl+Hn58d3kjSLq9YXQW+99Rbi4uIwa9YseHt7Y926dRgyZAjWrFlT2KdG98A1JPvkL36pGSLK7zW0evVqFShJl5mvr6/qejV1nxFpFTNDRYxkfR5++GFs3rwZbdq0UfskPS398h9++KH693fffYdr164hJCQEf/75JypUqFDYp00auYbGjBmjsoqNGzdG8eLF1V/zv/zyS2GfMmnoGnr//fexdOlSFQQlJiZi1KhRGDBgQGGfMpFdGAwRERGRrrGAmoiIiHSNwRARERHpGoMhIiIi0jUGQ0RERKRrDIaIiIhI1xgMERERka4xGCIiIiJdYzBEREREusZgiIiIiHSNwRARERHpGoMhIiIi0jUGQ0RERAQ9+3971EwzaHk31wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Compute kernel value between two data points\n", + "from qml_training import quantum_kernel\n", + "\n", + "x1 = torch.tensor([0.5, 0.3])\n", + "x2 = torch.tensor([0.6, 0.25])\n", + "x3 = torch.tensor([-0.8, -0.7])\n", + "\n", + "k_11 = quantum_kernel(x1, x1)\n", + "k_12 = quantum_kernel(x1, x2)\n", + "k_13 = quantum_kernel(x1, x3)\n", + "\n", + "print(\"=== QUANTUM KERNEL VALUES ===\")\n", + "print(f\"k(x₁, x₁) = {k_11:.4f} (self-similarity, should be ~1.0)\")\n", + "print(f\"k(x₁, x₂) = {k_12:.4f} (similar points)\")\n", + "print(f\"k(x₁, x₃) = {k_13:.4f} (different points)\")\n", + "\n", + "# Visualize as heatmap\n", + "points = [x1, x2, x3]\n", + "labels = ['x₁', 'x₂', 'x₃']\n", + "K = torch.zeros(3, 3)\n", + "for i in range(3):\n", + " for j in range(3):\n", + " K[i, j] = quantum_kernel(points[i], points[j])\n", + "\n", + "fig, ax = plt.subplots(figsize=(6, 5))\n", + "im = ax.imshow(K.numpy(), cmap='viridis', vmin=0, vmax=1)\n", + "ax.set_xticks(range(3))\n", + "ax.set_yticks(range(3))\n", + "ax.set_xticklabels(labels)\n", + "ax.set_yticklabels(labels)\n", + "\n", + "for i in range(3):\n", + " for j in range(3):\n", + " ax.text(j, i, f'{K[i,j]:.3f}', ha='center', va='center', \n", + " color='white' if K[i,j] < 0.7 else 'black', fontsize=12)\n", + "\n", + "ax.set_title('Quantum Kernel Matrix', fontsize=14, fontweight='bold')\n", + "plt.colorbar(im, ax=ax, label='Kernel Value')\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "80bba7f4", + "metadata": {}, + "source": [ + "---\n", + "## 3. Noise Effects: T1/T2 Thermal Relaxation\n", + "\n", + "Our simulator models realistic quantum hardware noise using:\n", + "- **T1 (Amplitude Damping)**: Energy relaxation, |1⟩ → |0⟩ decay\n", + "- **T2 (Phase Damping)**: Dephasing, loss of quantum coherence\n", + "\n", + "Let's visualize how circuits change when noise is added." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "73880b24", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== ORIGINAL CIRCUIT (No Noise) ===\n", + " ('RY', [0], 0.5)\n", + " ('RY', [1], -0.3)\n", + " ('CNOT', [0, 1])\n", + " ('RZ', [0], 0.7)\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAEhCAYAAABFptdJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOF9JREFUeJzt3Qd8U+X+x/Ffuid77yGKIHuJIEtQUQRFBBFFnKggintcr3jd4FUU/yqIWy4CsuSCAiJTL3uL7NmyoUD3SPN//Z6YkJYWOk6btvm8X6/zyjo5OTlJ02+e/J7nsTkcDocAAAAAsISfNZsBAAAAQMAGAAAALEYLNgAAAGAhAjYAAABgIQI2AAAAYCECNgAAAGAhAjYAAABgIQI2AAAAYCECNgAAAGAhAjZQguzfv19sNpt7WbJkSb63OWTIEPf2unTpIt7i+by+/vprr+1HcaXHzPMYFlWF8X775Zdf3I8xbNgwS7ZZFP5ORo0a5d6HOnXqZLjt5ptvNtf7+/vLtm3bvLJ/gC8hYAOFbNOmTfLYY49JkyZNpEyZMhIUFCSVK1eWbt26yXvvvSdnz57lNcmnpKQkKVu2rDts3HTTTRf9UuLn5+ded+TIkRess2LFCrn//vvliiuukMjISAkODpaqVatKz5495ZNPPpGEhISL7o/D4ZB58+bJPffcI5dffrmUKlVKAgMDzet+3XXXybvvvitHjhzJ9fP8/fff5eGHH5arrrrKvJd0mxUqVJBrr71WXn31VdmzZ4+UJFaEWH0tXnzxRXNew+bTTz+d4XYNpt4OygXh2WefNafp6eny0ksveXt3gBIvwNs7APiKtLQ088/8o48+uuC248ePm2Xx4sUmbE2aNEmuv/76XD9GuXLlZMyYMe7L9evXz/d+33nnnSbAqZo1a0pxEBISIgMGDJDx48ebywsWLJBjx46ZQJvZ999/b0KXZ4hziY+Pl4ceekgmT558wf2OHj1qWkJ1eeedd2TatGnSrl27C9Y7dOiQ3HXXXSakZ6av+W+//WaWv/76K8ct8zExMSbwz5o164LbTp06ZR5Ll6VLl7p/xWjTpk2G90ZRVdDvt5kzZ8rGjRvN+V69ekm9evXEF+iXhaZNm8rmzZtl9uzZsn79emnZsqW3dwsosQjYQCF5/PHH5bPPPnNfrlatmvTv39+0OG7ZskV+/PFHsdvtcvLkSbnllltM6OrQoUOOtp2SkmJCoraMPvPMM5bu94033miW4kaDsitg63H9z3/+k2Xr9Hfffec+37x5c2nWrJk5r8dz4MCBMmfOHPftDRo0kNtuu820Yv/vf/8zrdKuEK1fiFauXClXXnmle30N9Z07d5Z9+/a5r6tbt6707t3bhH0NynqfrMJ3djT062OtXbvWfV2VKlXk1ltvlVq1aklsbKwJT4sWLcpwv8aNG5slt1zvLW21LwwF/X7z/BvUMO9L9PlqwFb6t+H6+wBQABwACtzvv/+uTaTupWXLlo6zZ89mWGfRokUOPz8/9zqNGzd22O129+2dO3d233bvvfc6tmzZ4ujTp4+jXLly5roNGzY49u3bl+FxFi9enOExTp486XjkkUcclStXdoSEhDhatWrlmDp1qlnP8366HRd9LNf1ug+ePO/z1VdfORYsWODo0qWLIzw83BEREeG48cYbHVu3br3geIwePdrse4MGDRxly5Z1BAQEOEqXLu1o06aN44033nDExcVdcJ/Mj5UTDRs2dN+nRYsWF9y+cuXKDNv98MMP3bdNnjw5w209e/Z0JCcnZ7j/119/nWGd7t27Z7j9zjvvzHD7o48+6khNTb1gP3bu3On4/vvvc/ScXnjhhQzb1OMYHx9/wXrR0dGOzz77zH1Zj5nn/Tzl5L3lcujQIcdzzz3naN68uSMyMtIRHBzsqFmzpllfX/+cvG9y+37LvO9ZLZnf61k5ePCg+28sKCgoy/dZ7dq1s91vtXTpUnN9WFiYee/269fPsXv37os+X3X06FHHiy++6GjWrJn529DjVr9+fcdjjz3mOHDgwAXr6zHX90vbtm0d1apVM3+vep9atWo5+vfv71i+fPkF93n11Vfd+6DPI6v3met2fe0SExMvecwA5A0BGygEnv98dfn111+zXG/gwIEZ1luyZEmWIUjDooZYz3UvFbBjYmIyBE7P5ZZbbsl3wO7QoYPDZrNdsO3y5cs7jh8/nuF+et3FwlKTJk0csbGx+Q7Y77zzTob7ZQ77w4YNc98WGBjoOHHihPs2/aLguk1D2Y4dO7J8jPbt22d57A4fPpzheGgg9fzClBcpKSkmGLm2WaVKlSxDYlZyGrCze2+puXPnZnj8zMsTTzxRpAP2l19+6V6/devWWa5zsYA9Z84c82Uw82PrFxHP90Hm+/3xxx+OChUqZLvv+uVy2bJlGe4zbty4iz5ffW9l/ju4VMBWnvuRk2MGIG8oEQEKwfLly93ntfOddmzLitYNe9b76v20xCCzDRs2SEBAgOk0p2UL27dvN3XHF/OPf/zDrOfSsWNH6dq1q3kMzzKIvNIOdw0bNpS+ffuaGldX+YTWBH/xxRfywgsvuNetUaOGeezatWub46H5WcsopkyZYkogtGRGOw8+99xz+donPT4vv/yyKRFR3377ralxV6mpqfLDDz+419V6XC3XUbr+H3/84b5Ny0a0c2J2r5mWi7houYd2lNN6es/a7nvvvdd0psyPNWvWmBIQz8cODw8XK2X33jpw4IDccccd7g6d2glQS120rObEiROmpKmguOrH9f3hKo3R2ulHH300V/0NPP8OW7dunat90Of9wAMPmL4USjuUah28vn+1jt/zPeDp3LlzpnxHS7+Uvuf1dQsNDTVlYX/++afp2Hz77bfLrl27pHTp0mY9Lcm5+uqrzfEtX768REREmPW09EffB/re0j4drm3llD5v7TfgOh4lqSMnUJQQsIFC4DlChP6DzU7m2y42soT+c+7Tp88FI2JkRUPBN9984758zTXXmM5vOoqCjirQvXt3EwjzQzukrV692tQnK+1ApWFNaSDwpAFcw4KG2IMHD5pQrbXLrVq1kmXLlpl15s+fn++ArXXuWq/8888/m8vaefTtt982QVe/AGj4z6pzo16vtcf5ec2io6MzXK9fPvKrILaZ0/eWhjnP0VI0VGrnTRd9H+lrWRBc9eNbt251B2x9v+W2v4HnqCq57UD5008/mU6pLp9++qkJ3Gro0KHmC5h+actMO6667qdhXOvjtTOya2QPrcnXLyi66N/oiBEjzG3auVYXrZnWL5z6ntQvPvq6uP6eTp8+bY6HjhqTU/rlNqvjAcBaBGygGNJRFjIHoIvRVsi4uDj35UGDBplwrTRsautqfgO2tni6wrXSwOEK2NqZzzOIaWv2hx9+mCHEZhYVFSVW0ODsCtgaUPV56i8Inp0btcPhxYbyy00Loau1vKS9tzw7YuqXIc9w7XofZR57uajREOviCrk55dmpVHk+f33e+otQVn9D+suOi/4daGt0dvQLpytgaxAfPHiwaeG+mNz+nXg+vufxAGAtxsEGCoGOmexysVY+/Rk+u/vlp+XyzJkzGS7rqBMXu5wXmcOV56gTGqpddJhC/bn/YuFaJScnixU0LGrLoYuWiWjQ+e9//5vhC4e2DnqGLy0ByMtr5mohrF69eobrPctz8qogtpnT95a2lrpoq2tueJbKWPnaFibPvyH9Ipn5S1dWQ0BmPm6X4gq8iYmJpmTpUuE6L8cy82sBoGAQsIFC4PkTrv7Dza5ederUqdnez1Nu6251EhJPnj91u8Z0zi/PQKqymy1Q62g9SzhWrVplQoL+43dNhmElDfqew7HNmDFDvvrqqwzBxLM8RGnYbt++vfuylr5k19qX+TXTlkylNeaex0CDvecXjbzWInv+SqCPfalJbnIru/eWZ4uv57CD2fGsN9fA6Elrjb3BVWOf+VeV3P4NaR185uekQzJe6rjpF2b9cpndopMGKS2T8iwP0/Icff/p34iWU+WHZ+CvWLFivrYFIHsEbKAQuP5xujz//PMZOqsprYn2DJ+NGjXKVW3lpVoltZOUiz6OqyVLTz3rswuaZ92zdrhq27atmc1SZ1+0orNlVu677z73eS2VeeWVV9yXte5bZ9W82GumtbU6+6arg5uLlpl4dobUmR1dLfkapnSccxctl3niiSeyLCHRwKn14Tn5EqP74aIhTEtzMoc9dfjwYZkwYYJYxfXFQemkOJ4dRF3vI8+Wfs9AumPHDncLsNbe/9///V++v8Tl5YuF56QyOnZ5bmTuFKnjqnv2fchuLHPt7+CiIVn7BGjtuOeiAVo7M+rfQua/EdcvLK4vB5m/0OWW5/P2lUl2AG+gBhsoBPpPVjtCuSZ20HpOrWPNaqIZpYFTw1F+R53wbJHVVtqPP/7YHeZ1avZOnTqZ1jLXbH+FQacbd7VgapmGHhctUdHnXxAlD66WX+0k5/rJ3TOcZW69dtFJZjT0uuq3XSM+6IgQYWFhpuXds8xEA3XmiTs++OADM5GMq4xEj79uTycS0pICbU3U7ehoDlpvq0HqUnQ0mIULF5oaXVeLvI6goRPgaHmK50QzOlFR5i93eaW1wdqxzxXmtQZZv6hpMNTWYH0P6YgUY8eOdR9zz5E0WrRoYQKk1iRn7qyZlxKZdevWmS8s2llR/15ctcsXo8fD9WXSdfxySkdM0RZf1y8ZOoKJdjZ0jSKSVQdH1/vrjTfeMKOI6Bc03QcdjeWyyy4zv6Lolw89dtoCrjXcWn6jfyOe7r77bjNaiAZ5z74DeaHHzcWqL/AAspDH4f0A5JJOMDJ8+PBLjuerY0TPnz//gvtnngwkK3kdB1snUfG87DnxRW4mmvGU3f10goysxhLWyTf69u2b7Ti+eRkHO/PkNpkfUycbOXXqVLb30bG4dVKPS71mV155pWPjxo1ZbmP//v0XjJWd1ZLda5oVnTCoV69el9ym53HPzUQz2cnNONg6iYlOJJTVejfddFOuxsF20fG4PSdjci06bndO7N271z02uU7cktUEPRcbB3v27NkOf3//Cx5fj4lOHpXd/XSiqYuNg53V36tO0pTd+yS7v4XcTDSjf28JCQk5Om4Aco8SEaCQaCvyuHHjTKmAtn5pCYjW0+r12jKmrX+jR482Q2fpz8hW05/staVUW4wrVapkapN1fGetDdbW08zrFhQtNdAh+LRVX/dBx/3VETy01CKrUg2raCmFa+QUF21JvthoElpWo6202sqvYx5ry6JnDbTSXyJ02EHXFOtZDeOnrbZa/qIt1NpyqXXO+rrr66BDJGrJhL72uRkJQre3dOlSM1Sc7kOpUqXM89Pno8dYt6evrZX0ddJWfK2Vb9q0qTk+WrahtfQ333xzhpFYdOxsbUXXX2n0/aSX27VrJzNnzsxzrb22lus48ToE5KXGfc+Ktg67xn3WkqS5c+fmuhX7119/Nb/8aCdHfV7aiVZ/hbjYe1ff63rctDRJS5Jcr5XeXy8PHz7c/Cqh23WZPn26PPnkk+aXEW2h1/fNW2+9ZcaUzyv9FcbzF5rcjI4DIHdsmrJzeR8AxZT+vJ/VP9V+/fqZf+hKJxfZuXOnF/au+NBOofrz+u7du81lraPVTmoo+qZNm+aujddJkVzve1+gXwJ1XG2l5S25nWwHQM4RsAEfUqtWLbnhhhtMLay2OupoItqq5Zp1UWkru7ao4eK0HlZbil31xG+++aa89NJLHLYiTkdy0XpwDZr6K4L2Byjq43dbQeu8dWQbV0v87Nmzvb1LQIlGwAZ8iP4kraM4ZEdnjtOOetkNsYeMtFOmazQNPWZa+qNlHyjatKOpq5xl2LBh7s6/JZmW8OgXae04rV8utNMvgIJDwAZ8yLvvviu//PKLCYY6goX+s9Uaz6uvvtrU8uoMhwAAIH8I2AAAAICFGEUEAAAAsBABGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAAAgYAMAAABFEy3YAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAAABGwAAACiaaMEGAAAALETABgAAACxEwAYAAAAsRMAGAAAALETABgAAACxEwAYAAAAsRMAGAAAALETABgAAACwUYOXGULycOnVK5s+fL0ePHpXU1FTxBREREdKyZUtp166d+Pnx/RJAwUtMTJSFCxfK3r17JTk52ScOeWhoqFx++eXSrVs3CQoK8vbuAIWOgO2Dzp49K/fee6/MnTtX0tLSxBfVrFlT3n33XRk4cKC3dwVACWW32+Xpp5+WiRMnSnx8vPiiMmXKyJNPPin//Oc/xWazeXt3gEJjczgcjsJ7OHjbuXPnpEePHrJ69WpzObJOKYmsVUr8AnygNdfhkJTYFDm19ZTYk9JMC/a3334rgwYN8vaeAShh0tPT5b777jOfMcq/XE0JqdNGbEGhUvI5JD05QZL3/CH2c8fNNc8884yMGTPG2zsGFBoCto8ZO3asjBw5UgIjgqTtP66WsleUE19jT7bLn19sloMLD0i5cuVMiUxgYKC3dwtACbJ8+XLp1KmTiJ+/VBw8XsLb9Pe5FlxHul3OLZ0gp6c9Zy7v3LlTGjRo4O3dAgqFDzRbwtO0adPM6eUDrvDJcK38g/3lqqHNJKhUkJw+fVp+++03b+8SgBL6WRvRpr9EtB3gc+Fa2fz8pXTXRyWkYbcMxwTwBQRsH6LVQKtWrTLnK7WuIr7Mz99PKrWsbM67jgkAWGXlypXmNKxJT58/qGFNbuSzFj6HgO1jPdm1040KLh0svi7o72OgdekAYKXY2Fhz6hdR0ecPrH9kJT5r4XMI2D7Esz+rjVdebH7On2zp5wugoD5vXZ8zvsz295CofNbClxCzAAAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACwVYuTEgszm3znSfT05LlsPxR2TKjmmy5uha+bDr+1IjsrqM2/CJLDiw0KwzosVw6VH7Oll6aJm8t+4DDigA5MDeRyPc5xNTHXLgXLqMW5siP++1m+uWDQqTGqWyblOr92kcxxiwGC3YKBTvrxsrk3dMkVqRNeXp1k9KSECIfLhhnNgddrmv8WApE1xGmlZoYsJ1TFKMjN88kVcGKGQOh0NOnjwp+/fvN6d6GcXLU4uS5KO1KXJZWT/5oHuIlAtxXj9qRbKMWJhklid/TZLj8enm+rm7U727w0AJVeAB+9y5c/L8889L/fr1JTg4WCpXrix333237Nmzp6AfGkXIiug/ZPqumXIg9qAE+gVK5bDKsv30Dvlp9xyJCIqQYc0fMYv6ZNN4iU2N9fYuAz7jzJkz8uGHH0qDBg2kYsWKUrduXXOql/V6vR3Fw7w9aTJ+Y6rsPJ0uQf42d6v1bwfs8t/daWZpUNZPKoX7yY7Tdnl+cbK3dxkokfwKOlxfe+21Mnr0aNm7d6+kpKTI8ePHZdKkSdKmTRvZsmVLQT48ipDIoEhpUOYyqRJWWWJTYiUq7pC5/ru//iNRsVFyddV2Ui2imiyNWi4rj6zy9u4CPmP+/PlSo0YNGTlypPmc9qSX9Xq9XddD0Vc2xCZNK/pJzVJ+cibJIXtinC3VLj3q+MujLQMlNtkhj/2SJAlpXttVoEQr0IA9atQo2bx5sznfqVMnmTVrlgwdOtRcjomJkQceeKAgHx5FyDc3fiHvdxkj/jZ/eWPV25KYlmSuT01PNS3WKiktScZv+tzLewr4Dg3NN998syQmJppykMwlIa7r9HZdj5Bd9P1vcLjM6hcmATaRob8kSrxHBUjd0jZ5r5uzZuTp35Jk31lKgIAiFbAXLVokrVu3lpCQEFP68fHHH8vXX38tNpvNLBqstbX6q6++MuvrdT/88IP06dNHPv30U2nYsKG5fs2aNbJu3TprnxGKpNdXviVz9/4swQHBMrz5YxLkF+S+7VjCMXOamJZIaQhQSLTs4/bbbzcBOj09YytnZnq7rqfrUy5StD30c6J8tzVFQgNt8mbnEAn2d14fFiDy6Y0hEhlsk0/Wp8qv+52dHwEUkYC9YsUK6dmzpwnGycnJ5ifExx9/XMaOHZthva1bt7o/iOvUqSNVq1Z1h+327du711u+fHn+nwWKvA3HN8pnmyfI1pN/Ss3IGtK7fi9v7xLg07755htJSEi4ZLh20fV0/W+//bbA9w15t/yQXV5dniKrDttNR8f7mwaa69/tGiyXl/M3nRt3x6RLr8sC3Eso44kB3g/YzzzzjKSmOn9z6t69u8yZM0def/11E6g9aS90F+3Y6KlSpUru8/v27cvLfqOYmrjlS0l3pMvtl/eViMDzw0oBKDzaGj1u3Lg83fejjz5idJFi4I3fkyXd4ZChLYKkdLDIzZc5g7Z2bhzbPUQ+6nF+KRdq8/buAiVOrr63Hjt2TFatcnZA0xFBpkyZIuXKlZNevXrJ9u3bTedFl/j4ePf5oKDz5QCZL3uuV5iOHDliFl+idZQuZ/edFf/Av387LECd/t01w+X1sl66rL8uw3Vn5Yx02pJxvcKQfCbJ/b5ev359oT8+4C3aByYvIzlpMNf7LV68WMqUKVMg+1ZSJCX93c/k2C6xBYUX+ONVfzHj5fUHRWquz/72wpR60tngFhsby2ctir2WLVtaH7A9W5u19lrDtUvbtm0zBOzw8PMfKFpK4knrs7NarzCNHz9eXnvtNfFVf7xIaY6Lvm8937sALu666zJ+SUb2Tk56nMPzN23IaNWqFccDxVpO5wewrPJKa6s9ad21i7YQejp69Kj7vI636g06mknv3r3F11qwO3bsaM5f8/a1hdKCXZTtm7tHohYfkkGDBslTTz3l7d0BCrUFW0v88ko7utOCfXF9+/aVAwcOSIVB4ySoZnPxZYnbF0vMrH+alr/PP2ekKPiGXAVszzCsnRv1Q7ps2bLmsqt0xOWqq66S0qVLy9mzZ82HTHR0tFSvXt0k/5UrV7rX03GyvUE7Xbo6XvoKz3Kc0nVLi39w3r9fPdFiuHSofo08MH+oGfmjXEhZeaTpw9K8UjOxO9JlzdE18tmmzyUhLSHL+0+8frxUDjtfi6/eXPW2rDyy2pzXGR3vuLyfVAgpL0fij8p3f01yj4/9TOunpFWlFvLQwkclLjXvU/wGlwlx9xHI6U8+QEmgn8P6K6R+judmtkZtSKlXr5507dr1gkYVZKSjbKnAyg0kuFbeA/borsHSs36AXPtdvJxJFqkUZpPXrg2WjjX9xZ4usmh/mpmlMfb8D8Nu7ar5y+Q+oRdcH3UuXTpNcn42X1fHX55pFyR1SvvJ8XiHfLYhRSZvcw6O/Wy7IHmwWaDcOCUhX0P6pZ10/vodGRnJZy18Rq46OWoQadeunbu+7M4775S5c+fKW2+9ZYbhy1xnff/995vz+gE+cOBA+emnn+SRRx6RHTt2mOt1qD9+Lip+qkdUk661usiSQ8vcw+o93WqktKvaVmbvniOLDv4mXWt2kUeaPXzR7Rw8d0hGr/m3e9kZs9tcf1X5xjKixXBJSI2XCVu+kAA/f3mhzbPmcdXsv2d/vO2yPoXwbIGSR8Oxjv6UFyNGjCBcF5K6ZWxy2+UBMntnmgnX6oPuwdKjrr98sSlVpu9IlduuCDSBOys6WohrenRd5uxyDlCw8bhziL7apWzyyfUhEhZgk9dXJMvpRIcZ2q9Ddeevm19vSRU/m8iI1hn7UQEogFFExowZI4GBzt7ICxYsMB0cX375ZWncuPEF6+p42E2bNnUPx6fjYE+YMMFc1p8Xv/zyy9w+PIqAG2r3MBPGLIt21nHXiqwpTSs2kb1n98mk7ZPNSCGnEk9JpxodpVRQZLbbOZtyVtYeWyvLo1eY5XTSaXP9zfVuMqeTtv8gv+yfLzN2zRJ/P3+5qW5Pc/2uM7vkWMJx6VG7u9iEVjQgL+69914JCwsTP7+c/RvQ9XT9wYMHc8ALyZ1XBoq/n03m7Ha2KOsU5+2rB8ifJ9Nl7JoUef33FDkaly63XBYgZZ0N5hmcSnS4p0fXpVEFZ3D+fKMzaA9sHCiB/jYT1v+zLU3+vdrZDD64ifN//IkEh6w9mi431g8wI5EAKMCArSUd8+bNMz/zaCu11lrrGNg6nW5mpUqVMsH62WefNeUlur4O0XfXXXeZSWaaNGmS24dHEWDKQNLtsvP0LnO5WoSz1OZEwgn3OicST5oQXiW8SrbbaVy+kUztNVmm3zJFXmz7vJQKKpVpeyfN6fFE53ZdLdhq+6ntUjakjNQtfb7WH0DOaSPH9OnTTWv0pUK23q7rzZgxg9rrQtSxhr+kpTtk4zFni3Od0s4GhcOx58s1Dsc5TAivVerir2G32v5Sv6yfrIy2y5YTzrHPtSzEuQ3n5ei/T+uWOb+tdUftEuxvM+UmAHIuT0W42jkm8wyMOpNjVjRkjx492iwoGaqGV5VzKbGSkp5F0V8O/XpgkRyOOyxJ9mS5uW5Puaba1ZJsT5b312WcsEhl1Up9MumUOdUAry3nAHLvhhtuMGV+OkOjTiKjPGuyXXXWoaGhJlxff/31HOZCVLu0n5xJckjyRSZdzGkp/IPNnGUen2/M/nM7q01pC7lyBnhmfwQKdKp0QMSzBcU5nnilsIru6yqGVhS7wy5H450jxgT6BUqA3/nvcz/smCrLolfI6qNr5Pu/Jpvr6pSqneX2KoZW+Pv6w+77u0IAJSJA/kN2VFSU+SVSOzB60st6vXZSJ1x7h2fXwv1/dzSsHnk+CleLsIk93SEHzzmDcJC/SFCm/+xXVfCTq6v7y87Tdll88HxI3n/WeZ/qkc47VIvwy3C9Sv97B+jTCuQOE6Qi147GHzPTnWtoTk1PlYOxh8wU6I3KXymDGg6U0MBQKR9aTpYcWmpaujUof3H9BIlJipHBv9xvgvT9Vw2RdcfWS3xqghkxRP116i9zOm/fz9Kx+jVyV8MBZnQS7cyoJSnz9s1370OF0PJ/78v5IR8B5L1cRDsvasdHHe1JJ+HSUZZ27dpFh0YvOnQu3ZR1aGhOsYvsikk3U6C3qeonT7YJksggkcrhfjJ7Z6rEJDmD9/K7w+VEQrq0++b8CE4PNXfWVGuttacftqWaqdR1SbE7pH9D53rfbjm/XtW/Q7fuC4CcowUbubbhxEbT6fDysg3c17239gNZfXSt3HpZb+lR6zoTrj/b7OzQmtnZ5HOSYk+R2xvcJo81G2rC8uzdP8mXfzrLjLac3Cofb/hEwgPD5eGmD5ph/0avfU+i4qLc22hY7go5k3xW9p11zhAGIP8867FdddfwnuWH7BLgZ5Nmlc7/qx75a5Is2m83w+f1axhowvU/l2eczM2TtnDfWC9Ajseny6ydzs6Sni3iw+YnSWKaQ17tGCzlQ23yz2VJsiLqfCt3yyp+Jnxr7TYAL7RgDxkyxCwo+RbsXyi96/eSjtU7yJ+ntpnrTiWdMuNYZ+V4wgm5ZdZt7ssxyTHyRjbrusw/sNAsWWlQ5jJTe/3jzhmSLrSqACiZfvgrVe5rGig31w+QNUectdNH4x0y9BfnNOyZRcc6pN6nGecG0E6QV0w4PwdCZgv322Xh/sQsb6sQapM2Vf3l5z3nhwkEkDO0YCPXouKiTQt1t5pdJSIwotCPYJ/LektcSpwZvg8ASqq9Zxwyc2ea9L0i0CvD5Gm41+4uY9fmvUM74KuowUaejF0/TsbKOK8cvffWvu+VxwWAwvbc4mSzeMOYVSlmAZB7tGADAAAAFiJgAwAAABYiYAMAAAAWImADAAAAFiJgAwAAABYiYAMAAAAWImADAAAAFiJgAwAAABYiYAMAAAAWImADAAAAFiJgAwAAABYiYAMAAAAWImADAAAAFiJgAwAAABYiYAMAAAAWImADAAAAFiJg+xB/f3/3+fQ0h/i69LR0cxoQEODtXQFQQj9vHWmp4uscaSnmlM9a+BICtg8JCQmRyMhIcz4uOk58Xfxh5zGoVKmSt3cFQAnj+lxJPb5bfF3qsV3mlM9a+BICto/p2bOnOY1afFB8WeKpRDmx6XiGYwIAVnF9rsStmiyOdLvPHtj01CSJXzfdnOezFr6EgO1j7rrrLnN64Jd9su2rLRIXHSsOh++Ui9iT7XJk5WFZ+c/fxZHmkKZNm0qjRo28vVsASpg77rjDlIkk71stxz+/R5L2rRZHurMszRfol4rEncvl2Cd3mFb8sLAw6d27t7d3Cyg0NocvpSuYMD1q1Cj517/+5T4atgCb+AWU/O9ajnSR9JTzLUm1atWSxYsXS7169by6X0BRUqNGDYmOjpbq1atLVFSUt3enWJs+fboMGDBA7Pa/P3dsfmILDBGx2aREczjEkZpoTlVoaKjMmzdPunTp4u09AwoNAdtHQ/bkyZPlu+++k19//VXS0tLEl2iw7tevn4wYMUJq167t7d0BihQCtrWWLl0q48ePlzlz5khcnG/1fSlbtqzceuut8thjj0nr1q29vTtAoSJg+7jExEQ5deqUpKb6Rk937eRZvnx5sZX0FiQgjwjYBUM/Y0+ePClJSUniC7QkRD9rGTkEvorxyXyc/nSn/1ABAAUnMDBQqlatyiEGfETJL7wFAAAAChEBGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAACwEAEbAAAAsBABGwAAALAQARsAAAAgYAMAAABFEy3YAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFCNgAAACAhQjYAAAAgIUI2AAAAICFAqzcGADvS0tLE4fDISWdn5+f+Pv7e3s3AAC4AAEbKAGBevLkyTJt2jRZvHixxMXFia+IjIyUbt26Sf/+/WXAgAEEbgBAkWBz+EJTF1CCw/XgwYNNwPZ1Q4YMkYkTJxKy86lGjRoSHR0t1atXl6ioKGteHADwMbRgA8XYqFGjTLi2+duk/m0NpGr7ahJaIUxsPlA54bA7JPFEohz+I1r2ztotX3/9tdSrV09eeeUVb+8aAMDH0YINFFPp6elSp04dOXTokDQd1kJqda8tvmr/z3tl64TNUr9+fdm1a5fYbDZv71KxRQs2AOQfo4gAxdSmTZtMuPYPCZDqnWqIL6vRpZb4B/nLnj17ZPv27d7eHQCAjyNgA8XU4cOHzWlEtXATLn1ZQGiAhFUOy3BcAADwFgI2UEylpqaaU79A3w7XLn6Bzo+zlJQUb+8KAMDHEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACxGwAQAAAAsRsAEAAAALEbABAAAACwVYuTEAQPERHR0ta9eulXXr1plFZ8I8evSouU1P27VrJy1atJBWrVqZpUmTJhIYGOjt3QaAIo+ADQA+RCfimTFjhnzyySeyfPnybNez2+2yevVqs7hUrFhRHnzwQRk6dKjUrl27kPYYAIofSkQAwAckJyfLG2+8IbVq1ZKBAwdmGa7Dw8MzXLbZbBkunzhxQt5++22pV6+e9O7dW7Zu3Vrg+w0AxREBGwBKuDVr1kjLli3llVdekWPHjrmvv/LKK+X555+XadOmyd69eyU2Nlb8/Jz/FvT07NmzsnTpUnn//ffltttuk4AA54+e6enpMmfOHLPNN998U1JTU7323ACgKCJgA0AJlZaWJi+//LK0b99etm3bZq7z9/eXO+64QxYvXix//vmnvPPOO9KvXz+pW7fuBS3WkZGR0qlTJxk5cqQpKzl06JC8/vrrUqNGDXO7But//OMfcvXVV8tff/3llecIAEURARsASmhJSP/+/eWtt94y9dRKW5zXr18vU6dOlS5dulwQqC+lSpUqJlDv2rVLXnjhBXdrt26zQ4cOsmrVqgJ5LgBQ3BCwAaAEdmTs27evzJw501zWkT+05XnlypXStGnTfG8/JCTE1GLr9ho1amSui4mJke7duxOyAYCADQAli8PhkCFDhsi8efPM5bCwMJk7d65pebZ6iL02bdqYkN21a1dzOS4uTnr27Em5CACfRws2AJQgX3/9tUyePNnd0qxBu0ePHgX2eFqnrQHeFbK1Jfuee+6h4yMAn0bABoASIioqynRIdPn++++lc+fOBf64oaGhMnv2bDMqidJJa0aPHl3gjwsARRUBGwBKSGnIww8/bIbWU9qKfPvttxfa42tLtraeuzo+vvbaa4yTDcBnEbAB5NicW2e6lx97/SAfdf1AOlS7RoL8guTT6z42119f+3w5wogWw811z7Q636qKgrFkyRL5+eefzfmqVavKhx9+WOiHum3btvLss8+6h/B76aWXCn0fAKAoIGADyLX3142VyTumSK3ImvJ06yclJCBEPtwwTuwOu9zXeLCUCS4jTSs0kR61r5OYpBgZv3kiR7mA6dTnLmPGjJGyZct65ZiPGjVKqlevbs5rbfaBAwe8sh8A4E0EbAC5tiL6D5m+a6YciD0ogX6BUjmssmw/vUN+2j1HIoIiZFjzR8yiPtk0XmJTYznKBejw4cPuIfl0rGqdSMZbtGPl0KFD3TM+TpgwwWv7AgAlMmDv379fnnrqKTPLV3BwsJnUQBdt4QBQfEUGRUqDMpdJlbDKEpsSK1Fxh8z13/31H4mKjZKrq7aTahHVZGnUcll5hMlHCtrEiRPdk8k89NBDEhQUJN704IMPuqdV//zzzxlRBIDPKdCAvXHjRvnggw/MxAM68QGAkuGbG7+Q97uMEX+bv7yx6m1JTEsy16emp5oWa5WUliTjN33u5T31DYsWLcoQbr1Na8B79eplzp84ccJMyQ4AvqRAA3Z4eLgZf/XVV1+VPn36FORDAShEr698S+bu/VmCA4JlePPHTCdHl2MJx8xpYloipSGFQMswNmzYYM7XrFlTatWqJUVBx44d3ed12D4A8CV+eW0tad26tam1q1+/vnz88cdmeKbMJSAarhcsWGAuN2zY0Op9B+AlG45vlM82T5CtJ/+UmpE1pHd9Z2slCt+uXbskNtZZ496qVasi8xJ47gsBG4CvyXXAXrFihZkKVz8wk5OTZe/evfL444/L2LFjC2YPARRZE7d8KemOdLn98r4SERjh7d3xSa7W66IWsFu0aOE+v379eq/uCwAUNmcvlFx45pln3B1WunfvLk888YSptabjIlDy3TLrtgyX95zdK31mZ5zM5HjCiQvWQ8E5efKk+3zt2rWLzKEuXbq0GSpQp04/deqUt3cHAIpuwD527JjpsKh0VJApU6ZIuXLlTGeW7du3y6RJk6S4OHLkiFmA4mrPnj3mNC0pTc7uOSO+zp7sHEVj9+7dPtViqs/XZfjw4aYRJL813a7TypUr52tbrlkl9bPWl14TACVXy5YtrQ/Y+/btc5/X2msN154zeBWngD1+/HgzlS9Q3MUeOCfLn1ni7d0oMkaMGCG+6ty5c2axyvHjxy3ZTnx8fJEqXwGAvHI4HAVTIpId7dxYnOhECL179/b2bgB5tnjxYtNaGVm7lDR/PGffqEuyDR+slbjoOPnoo4+kQ4cO4iumT58ub731ljkfGRkpoaGh+S450dZrPz8/qVChgiUBXUtFfv3113xtCwCKk1wF7Lp167rPa+dGra1zTcfrKh0pLnScVl2A4urgwYPmNCAkQErXL5Pr+z/RYrh0qH6NPDB/aLbD6bWt0kYGN7pbqoVXldNJp+XHXTPkl/0Lsly3cflGMrz5o1IxtKI4xCGH44/I1B0/yu+H/zC3hwaEytCmD0q7qu0kwOYvm05slk83TZBTSackMjBSvrhhvPzv8Er5YP1Hkhf+wf7m9LLLLsvxT3glwenTp90B+95775Vx48bla3s1atSQ6Oho8/kYFRWVr9KVBg0amPP6hceXXhMAyNUoIlqP165dO3M+KSlJ7rzzTpk7d675cP/hhx8uWF8nGPjxxx/NsmPHDvf127Ztc1+v6wAoXNUjqknXWl1kyaFl2YbrquFV5MW2z0mIf7BM2PKFnE05J8OaPyrNKjbNcv20dLssiVpmJprRIF47spY82/opE6zVw00ekOtqdZNlh5aZadZbV2llble6D4sPLpHONTuZfUPOeQbXojQcnue+UB4CwNfkepi+MWPGSGBgoDmvY1xrB8eXX35ZGjdufMG6OnvXHXfcYZZZs2a5r582bZr7emb4AgrfDbV7mFkYl0Uvz3adG+vcIAF+ATJrz0/yy/758v02Zx+LXvVuznL9HTE75MedM2TtsXWy+cQWM6ujDuHnZ7OZkN21Zhc5l3xOPt08QX7YMVV2nt4ljSs0knqlnb+MrTj8h9mn62v3KKBnXTJpXxjXr4s6olNaWpoUBQRsAL4s1wH72muvlXnz5plWk6CgIKlTp44ZA3vkyJEFs4cALNe8UjOxp9tNyFUabEsFRboXm9ikWoSzhOpEgnMYuOOJzl+bLtbC3LJSC5l00zcyutPb5vK/142V+NQEqRJeWfz9/OVE4vkh5Vzbq/b39nbG7DT71KJSM17xXGrTpo05TUxMzDBtujc7Af3000/uyzoxGQD4kjx1ctTxrzP/FKkzOWbWpUuXHPe2BFB4qoZXlXMpsZKSnmIuX1m+obzd8Q337Q8sePiC+2jovhRtxf7n76OkRmRNGdxokAxpfI9sPLEpy3Uzby3ZniKxqXFSJbxKrp+Pr9NyvalTp5rzn3zyidxwww1e74DrKgvs3Lkz/V0A+BzLRhEBUNyc//K77+x++cfvr7ovxySdkcNxznHiK4VVNKcVQ50jShyOO2xO/Wx+puXb7rCbUhCloX3DiU1maVmpuamzblaxiWw4vsm0Tru24dyec7tH/n4cs0eO9BwFeWR0yy23mM6J2inxv//9rxw4cMCrk85oyHd57LHHvLYfAFBsSkQAFH9H449JqaBSEujn7E8RnxpvRvVwLVo/raOFaCjuU/8WubHO9XJ3o0Fm3f/unWdOB1xxh8zoPVXuudJ5/UNNHpBBVw6UbjW7yl0N7zSdIfX+B88dksS0RNMBslRwKXmk6cNy5xX95fJyDWTbqb/MbJAqyC/I7JPuG3InICDADD2qdIi9N99802uHcNOmTe4+N1WqVJFbb73Va/sCAN5CwAZ80IYTG01N9OVlncOoZeVI/BF5Z81oSbYny8NNH5TSwaXl003jsy35OJt8VrrV7GKG6rul3s2y68xueXP1OxIVF21un7B5ovx2cLF0qdlJ+jXoK+uPbZAxa//tvr/ui+6T7hty78EHH5Tw8HBz/vPPP/fKuNOpqakyZMgQsdvt7pklta8OAPgay0pE9ENVFwBF34L9C6V3/V7SsXoH+fPUtmzXW3lktVmyMnn7FLO4TN35o1myk5CWcNExrnVftNRkwX4mJMkLbS0ePXq0DBs2zFx+4IEHZMuWLVKqVCkpLG+//bYZyURdddVV+Z62HQCKK1qwAR+krcpLDi015RwRgRHe3h2zDzqM39KoZRIVl/fJTXzdI488Il27dnVPRKSNHoU1bN/8+fPl9ddfN+f9/f1Nx/fg4OBCeWwAKGoI2ICPGrt+nAyYe5fEpcZ5e1fMPui+vL/uQ2/vSrGm05t/8cUX7lKRmTNnyv3331/gIVtHDbntttvcj/PCCy8wuQwAn0bABoASRCedmTFjhntCsO+++0769+8v586dK5DH0xl5e/bsacbgVv369ZPXXnutQB4LAIoLAjYAlDDXX3+9GRfbFbK1JbtJkyaycOFCyx7j9OnTcvfdd5sZeZOTk811OrPv999/b0pEAMCXEbABoATS4fHmzp0rERER7ppsDd4PPfSQ7N+/P8/bTUlJMa3ijRo1kkmTJrmvHzRokGk5p+4aAAjYAFBi9ejRw4wk0q1bN/d1EydOlHr16pnJaX7++ecc12drKH/55ZelZs2aMnjwYDl2zDleeZkyZeTbb781odvVYg4Avo6ZHAGgBKtTp44pDRk/frw8++yzEh8fLw6Hw8z4qEtISIg0a9ZMWrdubcpIEhISzP309F//+pesW7fOLNHRzvHMPWlJiG63WrVqXnhmAFB0EbABwAdGF3n00Uelb9++ZpSRzz77TA4dOmRuS0pKklWrVpnFU0xMjLz66qtZzhqp29Htde7cWWw2prYHgMyowQYAH1G5cmV56aWXZO/evWY68wEDBkj9+vUveT+drKZLly5mnGut5Z4yZYq5TLgGgKzRgg0APkZbofv06WMWdebMGVm/fr3s3r3bDLenddmhoaFSvnx5admypQnh2goOAMgZAjYA+DjtqKgdIT07QwIA8o4mCQAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbKCY02mvIcJRAAAUFQRsoJiKjIw0p6nxqd7elSIhNTbFPesgAADeRMAGiqkmTZqY2fXio+Mk4Xi8+LK4qFhJPJEogYGB0qhRI2/vDgDAxxGwgWKqUqVK0qVLF3N+y/jNYk+xiy+yJ6fJ1ombzfnu3btL2bJlvb1LAAAfZ3NQwAkUW8uXL5cbbrhBEhMTJTAiUCq1qiyhFcLE5meTks6R7pCEEwlyfO1RSUtIk/DwcFm4cKG0b9/e27sGAPBxBGygmPvtt9/krrvukmPHjomvqlq1qkydOlU6duzo7V0BAICADZQEdrvdtGYvWbJEYmJiJD09XUo6rT8vV66cdOvWTTp06GAuAwBQFNCCDQAAAFiIJh8AAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAADAQgRsAAAAwEIEbAAAAMBCBGwAAABArPP/sxWRKrfgCVAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define a simple VQC circuit\n", + "vqc_circuit = [\n", + " (\"RY\", [0], 0.5),\n", + " (\"RY\", [1], -0.3),\n", + " (\"CNOT\", [0, 1]),\n", + " (\"RZ\", [0], 0.7),\n", + "]\n", + "\n", + "gate_durations = {\n", + " \"RY\": 1,\n", + " \"RZ\": 1,\n", + " \"CNOT\": 2, # Two-qubit gates typically take longer\n", + "}\n", + "\n", + "print(\"=== ORIGINAL CIRCUIT (No Noise) ===\")\n", + "for op in vqc_circuit:\n", + " print(f\" {op}\")\n", + "\n", + "draw_circuit(vqc_circuit, n_qubits, title=\"Original VQC Circuit (Ideal)\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "50aa648a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== NOISY CIRCUIT (T1=100μs, T2=200μs) ===\n", + " T1T2_NOISE on q0: λ1=0.0100, λ2=0.000000, idle=1.0μs\n", + " ('RY', [0], 0.5)\n", + " T1T2_NOISE on q1: λ1=0.0100, λ2=0.000000, idle=1.0μs\n", + " ('RY', [1], -0.3)\n", + " T1T2_NOISE on q0: λ1=0.0198, λ2=0.000000, idle=2.0μs\n", + " T1T2_NOISE on q1: λ1=0.0198, λ2=0.000000, idle=2.0μs\n", + " ('CNOT', [0, 1])\n", + " T1T2_NOISE on q0: λ1=0.0100, λ2=0.000000, idle=1.0μs\n", + " ('RZ', [0], 0.7)\n", + " T1T2_NOISE on q1: λ1=0.0100, λ2=0.000000, idle=1.0μs\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABWoAAAEbCAYAAABDf70FAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAhT5JREFUeJzt3Qd4FOXWB/D/1nQChISE0HvvCCgiKKCIgr1eRRTFir1d+8e1YsFer4jlgg1FAQUEpEiH0HtJSEIaCenJ9u85E3azm8JuIGF2k//vefbJzmZm992Z2Xd2zp45r8bhcDhARERERERERERERKrRqvfSRERERERERERERCQYqCUiIiIiIiIiIiJSGQO1RERERERERERERCpjoJaIiIiIiIiIiIhIZQzUEhEREREREREREamMgVoiIiIiIiIiIiIilTFQS0RERERERERERKQyBmqJiIiIiIiIiIiIVMZALREREREREREREZHKGKglIiI6SxITE6HRaFy3v//+2y/X/VdffeXRTn902223udo3YsSIs748+adA2HefeuopV/t+/PFHtZtDRDUwbtw45bOr0+mwe/durjsiIqp1DNQSEVGdueSSS1wBiSZNmsBkMlU5n8PhQIcOHVzz9uvXr9I8hw8fxhNPPIEBAwagadOmMBqNaNasGYYOHYrnnnsOx44d89qe7du3Y+rUqcrzy3MYDAalXeeccw4ef/xx5f81Je2SwMuQIUMQHR2tPGejRo3Qt29f3H///Vi9ejXqk0AIhJ3tIOyLL77osU58uUkbhcViwTvvvIObb74ZXbp0gVarrXHbhw0bpsz/+uuv17gdztc4cOCA0o4rrrgC3bt3d33G4uLicPnll+O3336r8Xqp+FoffvhhpXkGDhzYoALm0k+99957yn3p866++mrlvrz3mm47+SyKlJQU/N///R/Gjx+PFi1aeMwj+2Zdyc3NVfa5a6+9Fm3btq1y/z7Vss8++yx69uyJsLAwpc+Uvv2NN95AaWlptcv98MMPGDVqFKKiohAUFKS87h133KHsv4GkpttabvJDX1FREWbPno0pU6Yo6ys+Pl75nEZGRmLQoEF4+eWXUVhYWOvttVqt+OWXX/Dggw8qx7rWrVsjODgY4eHh6N27N5588klkZmZWu/z+/fuV7STbS7abHLtHjx6tbM/qyH4g+4O8T9k/ZD+R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SJ8k204yq+WzLhnd0gfIfiLb1Z17mQ7Zl6RtREREtUUjsepaezYiIqKzRMoLyEmzXAbtDO5J4IYnTFSfOctsSABCLumVwCEFDqlr6yz/IvWZnZfzU+2TAKD7AFAyCJWU06ltEsxzlm2QeqryIwKdfTIgqXOANwms1mWtYPkh1lk+SH6Mra0SNERERIIZtUREFJAkQCXZVVJHUMhgKhK4lQAuUX3l/GFCstQYpA08cnWAM8tbBkGUWpoU2CTDVsiVIQzS1n9S29kZpJXB0hikJSKi2sZALRERBSy5hFECV9OmTVMubZQTpqpGZyaqL5566illUCAZNI8CjwwA5xzwSsq5uI9oT4FHstplYCw5Fr3//vtqN4fOgunTpyt/pfySlD8iIiKqbbxejoiIAprUF3z22WfVbgYRkU+kDqvcKPBFR0crP5xQw7FgwQK1m0BERPUca9QSERERERERERERqYylD4iIiIiIiIiIiIhUxkAtERERERERERERkcoYqCUiIiIiIiIiIiJSGQO1RERERERERERERCpjoJaIiIiIiIiIiIhIZQzUEhEREREREREREamMgVoiIiIiIiIiIiIilTFQS0RERERERERERKQyBmqJiIiIiIiIiIiIVMZALREREREREREREZHKGKglIiIiIiIiIiIiUhkDtUREREREREREREQqY6CWiIiIiIiIiIiISGUM1BIRERERERERERGpjIFaIiIiIiIiIiIiIpUxUEtERERERERERESkMgZqiYiIiIiIiIiIiFTGQC0RERERERERERGRyhioJSIiIiIiIiIiIlIZA7VEREREREREREREKmOgloiIiIiIiIiIiEhlDNQSERERERERERERqYyBWiIiIiIiIiIiIiKVMVBLREREREREREREpDIGaomIiIiIiIiIiIhUxkAtERERERERERERkcoYqCUiIiIiIiIiIiJSGQO1RERERERERERERCpjoJaIiIiIiIiIiIhIZQzUEhEREREREREREamMgVoiIiIiIiIiIiIilTFQS0RERERERERERKQyBmqJiIiIiIiIiIiIVMZALREREREREREREZHKGKglIiIiIiIiIiIiUhkDtUREREREREREREQqY6CWiIiIiIiIiIiISGUM1BIRERERERERERGpjIFaIiIiIiIiIiIiIpUxUEtERERERERERESkMgZqiYiIiIiIiIiIiFTGQC0RERERERERERGRyhioJSIiIiIiIiIiIlIZA7VEREREREREREREKmOgloiIiIiIiIiIiEhlDNQSERERERERERERqYyBWiIiIiIiIiIiIiKVMVBLREREREREREREpDIGaomIiIiIiIiIiIhUxkAtERERERERERERkcoYqCUiIiIiIiIiIiJSGQO1RERERERERERERCpjoJaIiIiIiIiIiIhIZQzUEhEREREREREREamMgVoiIiIiIiIiIiIilTFQS0RERERERERERKQyBmqJiIiIiIiIiIiIVMZALREREREREREREZHKGKglIiIiIiIiIiIiUhkDtUREREREREREREQqY6CWiIiIiIiIiIiISGUM1BIRERERERERERGpjIFaIiIiIiIiIiIiIpXp1W4AVVaUmYnkZctwbO1alJ44AYfN5vpfVI8eGPLvf3vMv/Lpp1Fw9KjXVdn1xhvR4bLLXNPy3Evvv9+nTXD+q6+iUevWrunklSux/dNPvS4X1LgxRn34ocdjWz74AGlr13pdtuXw4egzZYrHY4vvuguWoiKvy/a97z7En3uuazr38GH889xz8MXoTz+FMTzcNX3g11+x/8cfPebR6PUIiYpCy/PPR6uRIxHcuLFPz01ERN45HA6cOHAASX/9hePbt8NcWCgPuv7f5frr0XH8eNe0KT8ff91zj0+rdtjLLyOybVvXdMrq1dj28cdelzM2aoTRFeZL+OgjHPvnH6/LtjjvPPS7916Px5bcfTfMBQVel+1zzz1oOWyYazr3yBH88+yz8MWojz9GUKNGrumD8+Zh3w8/eF2uUdu2OP/llz0eWzttGnL27vV4TBcUhIhWrdD6oovQYsgQ6IxGn9pFRGeHfP+VfjQzIaGsv3HrRztMmICu113nmraZzfhz0iSfnnfIc88hqmtX13T6pk3Y/M47XpfTGo0YO3Omx2M7vvwSR5cu9bps8wEDMPCRRzweW/bQQyjJyvK6bM9Jk9Bm1CjXdGFaGlY89hh8MeKddxAWE+OaTly8GLtmzfK6XGhsLEa+9ZbHYxvffFPZFhX70fD4eLQeOVI5VuiDgnxqFxER1V8M1PqZw3/8gTUvvKAEZx2mUsBqBcq/U8FQVADrCs8vM7nr1yE39ZjX5y5q0xLWiBDXtCU3D9mbNvnULtOq5bC2bOmaLlmz1qdl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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Add T1/T2 noise to the circuit\n", + "T1 = 100 # microseconds (typical for superconducting qubits)\n", + "T2 = 200\n", + "\n", + "noisy_circuit = add_time_based_noise(\n", + " circuit=vqc_circuit,\n", + " num_qubits=n_qubits,\n", + " T1=T1,\n", + " T2=T2,\n", + " gate_durations=gate_durations\n", + ")\n", + "\n", + "print(f\"=== NOISY CIRCUIT (T1={T1}μs, T2={T2}μs) ===\")\n", + "for op in noisy_circuit:\n", + " if op[0] == 'T1T2_NOISE':\n", + " print(f\" {op[0]} on q{op[1][0]}: λ1={op[2]:.4f}, λ2={op[3]:.6f}, idle={op[4]:.1f}μs\")\n", + " else:\n", + " print(f\" {op}\")\n", + "\n", + "draw_circuit(noisy_circuit, n_qubits, \n", + " title=f\"VQC Circuit with T1/T2 Noise (T1={T1}μs, T2={T2}μs)\",\n", + " figsize=(14, 3))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3063ecb9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAGdCAYAAADDrMAsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdN1JREFUeJzt3QncTPX7//HLvpUtW5ZQoSSULVq0CFFRKmkh39JGhb4lsqbSKoXSqvpGpEU7lSz1pRRptbQQZU/Ivs3/8f78/ud8z8w99z733Pc983o+HsMsZ2bOnDMz9zXXuT7Xp0AoFAoZAAAAAAAAEEcF4/lkAAAAAAAAgJCUAgAAAAAAQNyRlAIAAAAAAEDckZQCAAAAAABA3JGUAgAAAAAAQNyRlAIAAAAAAEDckZQCAAAAAABA3JGUAgAAAAAAQNyRlAIAAAAAAEDckZQCgAgzZsyw1q1bW5kyZaxAgQLuVLZsWf/2f/75x2677TarVauWFS1a1F9mzJgxCb8t9+/fb8OGDbN69epZsWLF/Nfet2/f3F41ZMA111zj77MzzzyTbQYkgDlz5vifa51WrVqV26vk1iG4TlpHz/Dhw/3r9Xc0L3jxxRfD1hcAED8kpQAkRZCe2kk/0oO+//5769Spk82bN8+2b98e9bFvuOEGe+KJJ+z33393SZrcoIRCaq8hJykhdc8999iKFSts3759mV7XjJ70A0H++OMP93wXXnihVa1aNWwZ/bBJz44dO6xEiRJWsGBBa9euXabXw3uO//73v+61n3POOXbsscfaYYcd5h73mGOOsZ49e9q3336brfdnoUKF3Hsvct0z+3oR2x/SOjVs2DDqssuWLXPvq+CyJPqSU1oJmKz+vdIBDx0YOfroo61NmzY2YsQIW7NmjSXq35acRMIJAPK2wrm9AgCQl7z55pt+skWVQKoAqlChghUvXtxdpyTU66+/7i9/2mmn2fnnn++SCmeccYYluldffdU/36BBA7viiiusSJEi1qRJkxx5vq+//tolg7Lqww8/tD179tgpp5xiRx55ZJYf59prr7Xly5enuP63335zp1deecVefvll69atW5Ye/9ChQzZ48GB7++23LSddfvnlbr9JjRo1cvS5EoWShUoaRCaclJgOhUK5tl5IbPpbo5MOjqxcudJmzZplI0eOtCFDhriTEqIeJccffvhh/3L58uUtt2kdguukdczLmjVrFra+AID4ISkFICl07drVmjZtmuJ67we6R9VPwSD1gQceCLt93bp1YdVRql5R9UyyCG4fJeyUrEnPTTfd5BJ3QXfccYd/XvtF+ydI296jqqSTTjrJLffYY49lan2nT5/u/u/cubM1atQoxf6+//777e+//3bnVZGgdQ1q1apVivVScqJUqVI2e/Zsmzt3rrv+wIEDdv3119t5550XNtQzM9555x378ssvrUWLFpZT2rdv707IHCWggkmprVu3uiQk/kfJk9KlS7NJYvj3atu2bbZ48WKbOXOmHTx40J30N2f9+vX21FNP+csrwfzvf/87T2x7HdRRslbvhbyyThlxwgknuBMAIBeEACABzZ49WyUM/mnixIlpLq/bg8tHnnr06BGqWbNmmsusXLnSf7xff/01dMstt4SOO+64UMmSJUPFixcPHX/88aEBAwaENm3aFHUd9u/fH3r++edD5557bqhSpUqhIkWKhCpUqBBq0aJFaPjw4W6ZYcOGpbkOkeuRlj/++CP073//O9SgQYNQqVKlQsWKFXOv8corrwx9+eWXYcu2bt06zefU9s6MyG2bmj179oQOHjwY9X7aFmnZt29fqGzZsm7ZZcuWRV0muE/1GlNz++23h7799tsU12vdg+v0zjvvhLLy/vROZ599tr/MP//8k+7rXb58eejGG28M1a1bN1SiRAl3qlOnTuj6668PLV26NM31jXy93333ndv32iZFixZ179kaNWqEzjrrrNBdd93l3i+R9HovvPDCUJUqVdz7Vdtby7/yyiuhQ4cOhTLrk08+CXXp0iVUrVo1tw6HH3546KSTTgoNHTo09Ndff6W5/7R9vv7661DHjh1DZcqUcdvitNNOC3322WcZfn59doLbvGDBgu7/QoUKhVatWuUv98gjj/jL6La03kPbtm0L3X///aHmzZuHSpcu7baTtqv2xQ8//JBi+d9++y102223uXWvXr26+/7QtqhatWro/PPPT/U9pu8wPf8RRxwRKly4sNsXel9cdtllofHjx4ctm9Z3Y1rvkcj7TZ8+PdSyZUv3/aFtHjRv3rxQ165d3Wv19uUpp5wSGjdunPtsRop87JdffjnUqFEj9z485phjQqNHj/a/J0eOHBmqVauWe1x9xz7zzDOpfn+MHTs2dPrpp4fKlSvntr3eq5dccklo/vz5UbdhcD10/3vvvdd9pvRcel/qu0DXe9L7u5DW90pG/1799NNPodq1a4ct8+GHH6Z6/+DfgB07doRGjBjhPkeHHXaYe29UrFjRbdvrrrvOf5zM/G0J/j3Q++X7778PderUKVS+fHl33TfffJPisxT8GxF8Lm2/7du3h/r37+/e7/o7pL+V2m+R3yGRz5vWvpPIdYh28r5Xo90/aNeuXe492KpVK/fZ0ntJf6fPO++80NSpU9Pdp4oJ9Dk88cQT3WvUPrj22mtDW7ZsydZnGQASAUkpAAkpN5NS+qGmH5KpLacfNvqREaQf3M2aNUv1Pt4PvlglpebOnet+pKX2GPox/uijj+Z6Uiqt+6WXlProo4/ccvqBk5qMJqVS8+6774at0+uvv56l96d+KHvnP/744wwlpV577TX3gz21faIfPq+++mqGEg4//vhjmu/ZyB/BShReffXVaS5/6aWXhg4cOJDhbakfpWk9nj43kUmc4P5T0kc/FKNth8jPW2oif8R27tzZP3/HHXf4r91LEFSuXNklZVJ7D61YscIlT9LaR9qPab2nop2UZAhK73tB6xkUi6SUEj3RvqNk0KBBaa6P7qtkSWqP3aRJk6j3GzJkiEt+RLtNCf2gjRs3hho3bpzmd9yYMWPS/DugxGC0++q9H8+klCxcuDBsmbZt26Z6/+DfgDPPPDPN9VPiMDtJKSW7lJQMLpeZpJTem02bNo36fDqwkxeSUuvWrQudcMIJaT6OkulKmKa2T1J7L51xxhnZ+iwDQCJg+B6ApJlRb/PmzVGHSWjog9dPYurUqa6PUeRwLg37OvXUU11DWw358tx4441+rwz10FDvD/UV2r17t7tOwwEuuugi1zNo0qRJbvjbn3/+aV26dHG9atSLSq6++mr76quv/Mc9/vjjrUOHDq6v1TfffOOGdUnbtm3dcDYN3VAvo2jD39LrJ6KhRxdffLE/bE0Nu9WsW8Mt1DNK66j11dAL9YrSTITeELzgsLvgkMi82C/krbfe8ofu5RQ1u/aox0tWe2sNGDDAbVsNAxw0aJBrbJyWX375xb1n9u7d6y4fccQR1qNHD9ec+KWXXnLvdd2m67ROderUSfPxdJ9du3a589WrV7errrrKDVFUo/kffvjBvvjii7DlH3roIfvPf/7jzus59X7W8Ei9/3W9hrhOmzbNGjdu7F5PenSf0aNH+5e9z83atWvdumnYkj43et/++OOPVrhwyvBl4cKFbt2vvPJK1xB68uTJ7npth8cff9wmTJhgmaWhudrW2gbPP/+8Gzr18ccfu9fpff5Ta2qtddZr8GZCq1ixouvBps+nhmPNnz/frVv37t3dPtL3jei1abvps6X76HO5c+dO12xfQ0ZFvYU0dLZatWrucnAol947Gmqo+2g7fP755/73USx99tlnrt+e+pTp/af9IlOmTAn7jtQEA/ru3LBhg9uXauCv+/br18+eeeaZqI+9aNEia9mypZ177rnuO9nr56bXLfpOUg+/Z5991g1l896T//rXv/zH0OdjyZIl7vzhhx/utr3eH9qO+nug7zitg7az1i8abTvtw/r167vvb29f6ryGdmvyhbvvvjvNvwux6t2mv1H6jHmTKmgyDr3HvL8h0SxdutR/f+r7Se+1unXruu8HvYeD792s/m3R3ye9Z7W99T2j70SvB2NG6H2hv0naZhr6rP58+t6RsWPHuu8W7e/s9LXS33S9jzzB3lGRQ7Sj0XeK9/6WSy65xL0n9F2wYMECd90bb7zh3gNDhw5N9b2k7xM9n4aVexNbaD/q+1V9D3PrswwAuS63s2IAkBNSGx6VXoVPWlUCktbRX+nXr59/m8rtd+/e7d+2du3asKE+b7/9tj9sKviYHTp0SDG8RaX/GT1inJ7HHnss7Pk++OAD/7YNGza4IR7ebapKCErvaH5G5XSllIZ9qLJGy0UORYxVpZSGxwWrza655posvz9VHaMhd97lN998M81KKQ3vClZ8aPiMR+e9YWc6adn03t+33nqrf/2oUaNSrK+GmHjDTFQppGGl3vIaWhf00EMP+bdp+Elw+GVqNJTIu48qizRUxvPkk0+GbYe33nor6v5Ttcaff/7p3xascjr55JNDGRH5+dYQIg0N8y4//fTTbniizms4lyoogp/F4DbV59u7Xp97VU15VEGmYTze7freiDY0c8qUKW4dNFzw4YcfDqtm0/A2j4YFetdrnSJFfn/EolJKz/n777+neC5VznjLdO/ePew2VYV5t2lYUnBIZvCx69ev738Hzpw5M+w2vVe8CrwJEyaE3aZhYKKhtsHrP/3007D10Hesd9tFF13kXx9ZLdO3b1//tiVLloTdFhxGmd7fhVhV9mr4VnA5VYNFu79X0bR48WL/OlWMRg6H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3H/8F1980XKbty61atXK7VUBAAAJHmfFgmIWb51zm2I5b10U4wGIP5JSALKclMkvwU9GbNmyxe655x5r3ry5lStXzkqUKGF16tSxSy+91KZPn26hUMjy237SacyYMbm9KgAAWLLHTDp98MEHYbcrjvJumzBhguV3X331lfXs2dOOOeYYF0eVL1/eTjrpJLvzzjtt6dKllp8sWbLEj6WU+AOQcwrn4GMDQL7w2WefWZcuXWzTpk1h1//yyy/u9Prrr9vff/9tZcuWtX/961/Wpk0bd3vdunUtL6y7FC9ePOz6ESNGuP9r1qxpffv2zZV1AwAA/3PfffdZhw4dYrpJlPTxYoHKlSvn2ua+66677MEHHwy7bs+ePS5+UoJnxYoV7iCfKK7SbXmB9oe3/Y466ij/eq2zF0tJTlTfA/g/JKUAJLVff/3VLrjgAtu2bZu7XK9ePevfv7+rktq8ebN99NFH9sorr/jLK2AJBi3p2blzp5UqVcpyymmnnZZjjw0AAGJn/vz59umnn9rZZ58ds8csU6ZMrscCjzzySFhCqmvXru5UunRp+/nnn23SpElhyzdt2jRTj5+TsVSlSpXcCUDuYfgegJjRUSUdSVLJdvXq1d0RpgMHDqS6vCqTvARQsWLF3LC5jh072hdffJEiGLnppptcEKOjgEWLFnVBWMuWLe3555/P1joPGTLET0gdffTRtnDhQrv++uvtrLPOckP3nn32Wfvxxx+tZMmSafaUCvZHWL16tau80jo2aNAgbIjgwIEDrX79+u7xFKydfPLJNm7cuKiPk1qJf7CMPLKnlLd+nt9//52+UwAA5BH33ntvhpZTpbaGwtWoUcPFPUcccYSr6pk1a1aGekr99ddfduONN7qKad3/8MMPdxXe3bp1s7lz57plTj/9dP++v/32W9jjXnTRRf5tixYtSnU9FdsEK4puv/12mzJlirv/Oeec49ZBlUijRo1KM9aJfB1vvvmmNW7c2MWHDz/8sL+cYkTFZ1WrVnWvq0qVKm67KAZNa3uk1oczWk8p3a5t79Hro+8UkHOolAIQEwqelJDyEjx//vmn++PesGHDqMsrcXPqqafaH3/84V+3b98+12/h448/dqXdF154obv+n3/+SdFrYf/+/S4w0UnPNXTo0Eyv8969e/1SctFjKFEUScmqzFBCywvulGiTNWvWuCOZet1B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/tpVS+kIU2qUL7riiitsypQpYdcvX77cjeN/6623bP78+a7xaUZ5z637X3XVVVawYOpFowMGDPD7WHhWrlxp48ePd0e+9Ny1a9dO9f5aTx3N1VE2z+bNm93pq6++sltuucWvqho6dKh/BNSzYsUKd+RTR9w++eQT1/PAoyPG6omho23BbQ8AQDLGFrF2ySWX2O+//57ucqq8ykpfKsUQhw4d8l+beg+J/tdlVQQdPHjQFixY4PoRff755/59W7VqFfW8Ko6y6rLLLrNPP/3Uv7x//377+eef3emYY46x1q1bW06rXr161OuPPfZY++abb9z5YL9SXXfWWWdl6LEVv3m9vc4+++yoFe+e4HOktt0VTxYpUsRtJ1Ws//333y5uXbp0qbtdtzVr1izsvjNnzvT3U5cuXSyz/vrrL1ftt2nTJv+6LVu2uNO3337r3rNHHXVU1M+MPkunn356pp8TyGkM3wMQM94fYS94SMvdd9/t/v/4449t4cKFqS6nxp1eQkqJp2eeecYloho2bOiuW7ZsWVjJfkYMHDjQNYDUfVVWnpovv/zST0gpQHzkkUfsnXfe8YMfNSa9+eab03wuvT4vIaUSfSWX9JxKximY0XqIElReQkrl488//7zNmDHDOnbs6Acvjz32WNhjq7y9Zs2a7vxPP/2UqW0AAECixRb5jRqveypXrhx2W6VKlcKSKWktH23ZzPrnn3/8YXEaRqd4R0PnNCxNyZNgkibetm7d6ifLFDe1a9cuR55HBxs95513nn8+te2uOKx8+fJhywWXVXPzQoUKxXQ/KUHpJaS6devm4szp06e7GFVJw+DzRX5miBWRV1EpBSBmVP3jSa9yqX379n7FkpIxXr+HSJMnT/bP33PPPdarVy//j+yJJ57oz0Kj8ftegic9mglF/RoUfNx333126aWXpvvcmk739ttvd+dbtmzpjuSpQklHvHR0KhiUBOkomUcVVXpur5+Cl5jzxvp71Legbt267rxm43n//ffd+VdeecVVbgV52zm47QEASMbYItaCCYacsHPnTv98sBI68rK3XGrLR1s2s5RgURylSh/NGqg4S5VDuv6GG26w3KIDe4rTVCEkmj0xmGjRzIr/14Uhez744AO/16liumDlemb2U3BdMrJPMysYV2qWRvVYU0yqfefFqUHBzwyxIvIqklIAckRGAgQ1fVQ5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zcCHcFOnTnXbc9iwYbZ48WK3vbSdNm7cGHVTDR482J5++mkbO3as/fTTTy4BeNFFF9k333zjLzN37lzr3bu3ffHFF24fKJHVtm1b27lzp79MkyZNbOLEibZ06VKbOXOm67ivZQ4ePMguAgAgRoihEuegnmaFvuWWW6xevXruoJ56n956662uDyoAAImuQEhZgyRrtlWmTBn3hz6Re0opiFIANG7cOHf50KFDrsmYgp677rorxfKapvHuu+92SSdPly5dXHD0yiuvRH2OTZs2ueBKyaozzjgj6jLfffedC9B++eUXF7ABAJDfJEvskJ5k2A46qKcq/QkTJrhYasyYMTZt2jSXRFLME2nAgAEuTnr22WftuOOOcwfkdFBw/vz5/kHX9u3b2+WXX+7isgMHDtigQYPshx9+cAcBS5Uq5c7rIOI111xj9evXt99//90dHGzYsKG9/vrrubAVAACIX9yQrxqdI2P27dtnixYtcsMfPQULFrQ2bdrYggULot5n79697ghfkBJSn3/+earP4x3BK1++fNTbVUGlqilVuCkhBgAAkJeNHj3aevXqZT179nSXlZxSlf4LL7wQ9aDef/7zH3dQr0OHDu7yTTfdZJ988omr5vcO6kVWTr344osuwaVYTQf1GjRoYG+88YZ/uw7i3XfffXbVVVe5JFbhwoTrAIDEla8anSNjNm/e7IbLVa5cOex6XV6/fn3U+2honwKxn3/+2VVVaXjem2++6YZQRqNl+vbta6eeeqoLpoLU6+uwww5zpw8//NA9VtGiRdl9AAAgzx/U00G83Dyo5y2jo8okpAAAiY6kFJzHH3/c6tSp40rPlUDq06ePO0qoYCwaDfNTufmUKVNS3HbllVe6XlQa1le3bl277LLLbM+ePWxpAACQZ+X2Qb3geowcOdKuv/76GLwqAADyNpJSCahChQpWqFAh27BhQ9j1ulylSpWo99FMedOnT3dD7tTLQDPmqdLp6KOPTrGsElbvvfeezZ4926pXr57ido0bVYJLJenqhaDHeuutt2L4CgEAABLroJ7Xf6Njx46ut9Tw4cNzeO0BAMh9JKUSkIIizYI3a9assCNzutyyZcs076sS9GrVqrkeBupv0KlTJ/829cRXsKUE06effup6RaVH99FJ5e0AAAB5VW4f1Pvnn39cU3TN0qdYq0iRIjF8dQAA5E0kpRKU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NPNe7dq1bePGjVayZEn78ccfbd68eda0aVObM2dOVh4SAAAg4RFDAQAAZLNSasGCBfbpp59ahQoVrGDBgu502mmn2ahRo+zWW2+1b775JisPCwAAkNCIoQAAALJZKaXheYcffrg7r8TU2rVr/Wboy5cvz8pDAgAAJDxiKAAAgGxWSjVo0MC+/fZbN4SvRYsW9tBDD1nRokXtmWeesaOPPjorDwkAAJDwiKEAAACymZQaPHiw7dy5052/55577Pzzz7fTTz/djjjiCJs6dWpWHhIAACDhEUMBAABkMynVrl07//yxxx5ry5Ytsy1btli5cuX8GfgAAABADAUAABDTpFTQmjVr3P81atTI7kMBAAAkDWIoAACQ7LLU6PzAgQM2ZMgQK1OmjNWqVcuddF4l6fv374/9WgIAACQAYigAAIBsVkrdcsst9uabb7oG5y1btvSnOB4+fLj99ddf9tRTT2XlYQEAABIaMRQAAEA2k1KTJ0+2KVOm2Hnnnedf17BhQzeEr1u3biSlAAAAiKEAAABiP3yvWLFibshepNq1a1vRokWz8pAAAAAJjxgKAAAgm0mpPn362MiRI23v3r3+dTp/3333udsAAABADAUAABCT4XsXX3xx2OVPPvnEqlevbo0aNXKXv/32W9u3b5+dc845GX1IAACAhEcMBQAAkM2klGbXC+rSpUvYZfWTAgAAADEUAABATJNSEydOzOiiAAAAIIYCAACI/ex7nk2bNtny5cvd+Xr16lnFihWz83AAAABJgRgKAAAgi43Od+7caf/617/syCOPtDPOOMOdqlatatdee63t2rWL7QoAAEAMBQAAEPukVP/+/W3u3Ln27rvv2tatW93p7bffdtfdfvvtmX688ePHW61atax48eLWokULW7hwYYbuN2XKFCtQoIB17tw5C68CAAAgvmIZQxE/AQCApExKvfHGG/b888/beeedZ6VLl3anDh062LPPPmuvv/56ph5r6tSpLkAbNmyYLV682M3m165dO9u4cWOa91u1apX9+9//ttNPPz0rLwEAACDuYhVDET8BAICkTUppiF7lypVTXF+pUqVMD98bPXq09erVy3r27Gn169e3CRMmWMmSJe2FF15I9T4HDx60K6+80kaMGGFHH310Vl4CAABA3MUqhiJ+AgAASZuUatmypats2rNnj3/d7t27XZJIt2XU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7Ny5c9jyffv2tTPPPNO/rPN9+vRx11eoUMHatWvnrv/hhx/svPPOs8MOO8wqV65sV199tW3evDnsfrfccou7X7ly5dwyzz77rO3cudN69uzpKpOOPfZY+/DDD8OePyOPe+utt9qdd95p5cuXtypVqrgqJU+tWrXc/xdddJE74uddjrRmzRq7/fbb3frdf//9Vr9+fbc+uu7hhx+2Rx991CWqRJVT2nZBqsTS43u3jxgxwr799lt3nU5etdXWrVvthhtucK+lePHi1qBBA1ed5XnjjTfshBNOsGLFirl11fMG6bp7773Xunfv7rZJzZo17Z133rFNmza5hJqua9iwoX399ddh9/v888/t9NNPd+8Lvd+0zbTtAQDIj4ifiJ+In4DcQVIKSED/+te/bOLEif7lF154wSVqIikh9fLLL9uECRPsxx9/tH79+tlVV11lc+fO9ZNW1atXt2nTptlPP/1kQ4cOtUGDBtlrr73mbj9w4IBLOml4mqqAFixYYNdff72fTMmol156yYoWLWr//e9/3boo0XL22We7JJqSITNmzLANGzbYZZddluJ+SmQtXLjQJahuuukmu/TSS61Vq1a2ePFia9u2rUs67dq1yy2fmcdVkk1Jo4ceesjuuece+/jjj91tX331lftf23fdunX+5UhK7u3fvz9qRZSSSEr2vPrqqxnaPl27dnXJLCWX9Jw66TrtHyXYtN1eeeUVt48eeOABK1SokLvfokWL3GtTddb333/vkmtDhgxJMXzwsccec8nEb775xjp27Oi2mZJUei9oOx5zzDHucigUcsv/+uuv1r59e+vSpYvb71OnTnVJKiUXAQDIr4ifiJ+E+AmIsxCAhNGjR49Qp06dQhs3bgwVK1YstGrVKncqXrx4aNOmTe42LSN79uwJlSxZMjR//vywx7j22mtD3bp1S/U5evfuHerSpYs7/9dffylLEZozZ06a6xN02223hVq3bu1f1vmTTjopbJmRI0eG2rZtG3bdmjVr3HMtX77cv99pp53m337gwIFQqVKlQldffbV/3bp169x9FixYkOXHlWbNmoUGDBjgX9byb731VigtN954Y6hMmTKp3t6wYcPQeeed585PnDgxxbJ6/OBX9LBhw0KNGjUKW2bmzJmhggUL+use6Yorrgide+65Ydfdcccdofr16/uXa9asGbrqqqtSbLMhQ4b412n76Trd5r1Hrr/++rDH/eyzz9y67N69O9XXDABAXkT8RPwURPwExFfheCfBAOS8ihUruooXVcQoh6LzqigK+uWXX1wF0bnnnpuip1NwmN/48eNdpdXq1atdnyrd7jXc1vA2DdHTkDs9Tps2bVxlzpFHHpmp9W3SpEnYZQ1Tmz17tqsmiqQqnbp167rzGlbmUXXQEUccYSeeeKJ/nYa0ycaNG7P8uKLX4z1GXrJkyRJXyeatd6SlS5e6IXhBqogaM2aMG5rpVVQFX6+3zVLbjhrOqO2oCqlJkyb5y+h9psqtlStX2vHHHx/jVwoAQM4jfvo/xE/ET0A8kZQCErgE3RtOpcRSpB07drj/33//fatWrVrYbeo/JGqYruFn6kPUsmVL16dJ/ZC8XkjeMDb1E9JQOA3jGjx4sBvqdsopp1jBggX9IV8eDWmLpKFyket2wQUX2IMPPphi2WDCq0iRImG3adhg8DpvGKGSJdl9XO8xMkqJom3bttnatWutatWqYbcpsack2FlnneUuZ3Q7RVI/p1iIts3S244agqj9Hik/NNMHACA1xE/ETxlF/ATEBkkpIEGp54+SH0ooeM3Dg9R4W8knVUCpJ1Q06lWk/kw333yzf52SKZFUWaXTwIEDXfJKM/0pKaUjjmosHlndE5n0idZsVA261YS7cOHYfU3F6nG1/qo0Sov6LQ0YMMAl9CKbi6tvlpqCd+vWzV3Wdvrnn3/cdV6CTtspSD23Ip9TFU5//PGHrVixImq1lCqWtA+DdFnLelVSWd2O6l+lxu0AACQS4qeUiJ+In4CcRKNzIEEp6aDhW0oeREtAqOpJVVBqbq7G3ko2qam1puHVZalTp45rCD5z5kyX+FCT7GBjbw3VUiJKDc41495HH31kP//8sz98S03FdX81U9f1w4YNS5GkiqZ37962ZcsWl7TR82ndtA5q1p5eMigej6uk1qxZs2z9+vX2999/R11GFUNqkq6hcnfffbctW7bMPd/o0aPdzH5qXN6iRQu3rP4vWbKkayKvZZTUi2xGrufU9laySrMF7t271yUTzzjjDJcAU3Wabtdsg6paEz2H1nPkyJFu/2m/jhs3Lmrz9cxQsm3+/PmuEk/ro3379ttv0+gcAJDvET+lRPxE/ATkJJJSQAIrXbq0O6VGyQolmjQLnxJJOjqo4Xy1a9d2t2uI1sUXX+xmelPi5K+//gqrmlIiRckWJUVUfaOZ9xS46H6iCi09vpIwzZo1c9VAmsUtPRrupooeJYo0g576G/Xt29fKli3rhrplVaweV5VPSgLVqFEjrP9WJD32W2+9ZZ999pk1bdrUGjRo4BJOTz31lD3yyCP+curNpdnzPvjgA7dOmpVPM+UFaRtr/2jInyqrvJn7VPmlbatEm6rftK29BJuObGqmRA3D1HNr9kTNJKg+YNmhCi3N0KhE1+mnn+62gR47cpgiAAD5EfFTOOIn4icgJxVQt/McfQYAAAAAAAAgApVSAAAAAAAAiDuSUgAAAAAAAIg7klIAAAAAAACIO5JSAAAAAAAAiDuSUgAAAAAAAIg7klIAAAAAAACIO5JSAAAAAAAAiDuSUgAAAAAAAIg7klIAAAAAAACIO5JSAAAAAAAAiDuSUgAAAAAAAIg7klIAAAAAAACwePt/fpPQqKLF0K0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Compare measurement outcomes: Ideal vs Noisy\n", + "SHOTS = 5000\n", + "\n", + "# Ideal execution\n", + "init_state = zero_state(n_qubits)\n", + "ideal_state = apply_circuit_to_ket(init_state, vqc_circuit, n_qubits)\n", + "ideal_counts = measure(ideal_state, shots=SHOTS)\n", + "\n", + "# Noisy execution (using density matrix)\n", + "noisy_density = run_noisy_circuit_density(\n", + " initial_state=init_state,\n", + " circuit=vqc_circuit,\n", + " num_qubits=n_qubits,\n", + " T1=T1,\n", + " T2=T2,\n", + " gate_durations=gate_durations\n", + ")\n", + "\n", + "# Sample from noisy density matrix\n", + "probs_noisy = torch.real(torch.diag(noisy_density)).numpy()\n", + "probs_noisy = np.maximum(probs_noisy, 0) # Ensure non-negative\n", + "probs_noisy = probs_noisy / probs_noisy.sum() # Normalize\n", + "\n", + "noisy_counts = {}\n", + "outcomes = np.random.choice(4, size=SHOTS, p=probs_noisy)\n", + "for o in outcomes:\n", + " bitstr = format(o, '02b')\n", + " noisy_counts[bitstr] = noisy_counts.get(bitstr, 0) + 1\n", + "\n", + "# Plot comparison\n", + "fig, axes = plt.subplots(1, 2, figsize=(12, 4))\n", + "basis_labels = ['00', '01', '10', '11']\n", + "\n", + "# Ideal\n", + "ax = axes[0]\n", + "values = [ideal_counts.get(b, 0) / SHOTS for b in basis_labels]\n", + "ax.bar(basis_labels, values, color='#4CAF50', edgecolor='black', alpha=0.8)\n", + "ax.set_title('Ideal Circuit\\n(No Noise)', fontsize=12, fontweight='bold')\n", + "ax.set_ylabel('Probability')\n", + "ax.set_xlabel('Measurement Outcome')\n", + "ax.set_ylim(0, 1)\n", + "for i, v in enumerate(values):\n", + " if v > 0.01:\n", + " ax.text(i, v + 0.02, f'{v:.3f}', ha='center', fontsize=10)\n", + "\n", + "# Noisy\n", + "ax = axes[1]\n", + "values = [noisy_counts.get(b, 0) / SHOTS for b in basis_labels]\n", + "ax.bar(basis_labels, values, color='#F44336', edgecolor='black', alpha=0.8)\n", + "ax.set_title(f'Noisy Circuit\\n(T1={T1}μs, T2={T2}μs)', fontsize=12, fontweight='bold')\n", + "ax.set_ylabel('Probability')\n", + "ax.set_xlabel('Measurement Outcome')\n", + "ax.set_ylim(0, 1)\n", + "for i, v in enumerate(values):\n", + " if v > 0.01:\n", + " ax.text(i, v + 0.02, f'{v:.3f}', ha='center', fontsize=10)\n", + "\n", + "plt.suptitle('Effect of T1/T2 Noise on Measurement Distributions', fontsize=14, fontweight='bold', y=1.02)\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f31a5bca", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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8FKkUaEuv/xyiYqKklatWkmXLl0ct6pVq/o/hwAAAABCM7D44YcfzMhQ33//vbz33ntmRm7trN24cWOXQKN+/fr+zzEAAACAoBNh6RBOPtq0aZN899135qYBx+7du02gkZmZKcEuMTFRypcvL8eOHZP4+PiA5CE7O1sOHDhgZjePjCxS6zQACBmcEwEgeM6JhSkr+5y71NRU82H1tn//fjl69KgZbrZhw4a+rhoAAABAKDeF+uKLLxw1FOvWrTPzVZxzzjlmQry77rrL/K9evbr/cwsAAAAgdAKLq6++2nTevv7662XUqFHSuXNnU0UCAAAAIDwVKbC48sorZeXKlTJ79mxZtWqV6aittRT6v1mzZv7PJQAAAIDQCyw+//xz83/jxo2OJlHPPfec7NmzRypVqmRqMDTI+Pe//+3v/AIAAAAI1VGhVFpamsyYMUNefvll2bJlixkVSvteBDtGhQKA4BLoEVAAIJhkl6BRoYpUY6F05u0VK1aY4WW1xmLt2rWSnp4u0dHRcsEFF5gaCwAAAADhoUiBRdu2beXXX381NRLlypWTjh07ysiRI00w0aFDByldurT/cwoAAAAgtAILnVG7X79+JpA477zzqKoGAAAAwlyRAouPP/7Y/zkBAAAAUGLRKw4AAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAABAYAKLe++9V1auXOn7uwMAAAAI38Diww8/NHNYnHXWWTJ69Gj5888//Z8zAAAAAKEdWBw4cEBmzpwp55xzjrz00kvStGlTM+P2xIkT5dChQ/7PJQAAAIDQCyxKlSolN9xwg3z22Weyb98+mTRpkln2wAMPSO3ateVf//qXzJ49W1JTU/2fYwAAAACh13m7YsWKcvfdd8vy5ctl+/btcu2118qCBQukb9++UqNGDbnzzjvl119/9U9uAQAAAITuqFC7du0yTaKuvPJKmTNnjlSuXNl08L799ttl3rx50qZNG5k8ebI/3goAAABAKAUWCQkJ8tZbb0m3bt2kQYMG8vTTT0vjxo3lk08+kT179siECRPktddeM0HH1VdfLc8++6x/cw4AAAAgaEQX5UXXXXedfPnll5Kenm46bb/xxhty8803m2ZRuWnfiz59+sjcuXP9kV8AAAAAoRJY/PTTT/LII49I//795eyzzy4wfY8ePWTp0qVFeSsAAAAAoRpY7Nixo1Dpq1atappMAQAAAAhNRepjERUVJTNmzPD4/KxZs0yaotL5MOrXry9xcXGmqdWaNWu8ep3OrREREWFGpgIAAAAQ5IGFZVnm5klWVpYp4BeFBiXDhw83M3qvX79eWrVqJb169TKT8hVUi/Lwww+bGcEBAAAAlJBRoTwFDomJibJo0SKpUqVKkdarI0kNHjxYBg0aJM2bN5c333xTypQpI++8806+gcytt94qzzzzjDRs2LBI7wsAAADgNPSx0EK7PWSsBhW33XabubmjtRk6C3dh6ShT69atkxEjRjiWRUZGSvfu3WXVqlUeX6f5qlatmtxxxx3y3Xff5fseaWlp5uYcCKns7GxzCwR9X91mgXp/AAgmnBMBIHjOiYV5X68Di/bt28uQIUPMB5s0aZIZ6UnnrXCmAUfZsmWlbdu20rt378LlWkQOHTpkah+qV6/uslwfb9682e1rvv/+e3n77bfl559/9uo9XnzxRRMk5Xbw4EFJTU2VQO2wY8eOmW2rgRQAhDPOiQAQPOfE48eP+z+wuPzyy81NJScnyz333GM6VgeSftB+/frJlClTvG56pbUh2ofDucaiTp06ZuSq+Ph4CdQXRoMyzQOBBYBwxzkRAILnnKiDKRXrcLNTp06V4qDBgY4mtX//fpfl+rhGjRp50m/dutV02r7qqqvyVNdER0fLli1b5KyzzsozYZ/ectMdFchCvX5hAp0HAAgWnBMBIDjOiYV5T68Ci+nTp5v/WjugH8x+XBCdQK8wYmNjTTOqxYsXO4aM1UBBH99///150jdt2lQ2bNjgsmzUqFGmJmP8+PGmJgIAAABA8fMqsBg4cKAJKG6++WZT+NfHBdH0hQ0slDZTGjBggLRr18706xg3bpxpeqWjRCldZ+3atU1fCa2aOeecc1xeX6FCBfM/93IAAAAAAQ4stm/fbv5rUOH8uDjcdNNNpiP1U089Jfv27ZPWrVvLwoULHR26//77b5oLAQAAAEEmwspvprswoJ23y5cvb3rbB7Lztk4AqEPm0scCQLjjnAgAwXNOLExZmZ7CAAAAAE5PU6hLLrmk0CvWPhba6RoAAABA6IsuzPi5hRHmLawAAACAsOJVYLFs2bLizwkAAACAEos+FgAAAAACF1hkZWXJzJkz5e6775brrrvOMVGd9hj/5JNP8syeDQAAACB0FSmwSEhIkM6dO8stt9wiM2bMkHnz5pm5J1S5cuXkgQceMDNfAwAAAAgPRQosHn/8cfntt99k0aJFsm3bNpeO2lFRUdKnTx9ZsGCBP/MJAAAAINQCi7lz58rQoUOlR48ebkeLaty4sezYscMf+QMAAAAQqoGF9qNo0KCBx+czMjIkMzPTl3wBAAAACPXA4qyzzpL169d7fP6rr76S5s2b+5IvAAAAAKEeWNx5553yzjvvyKxZsxz9K7RJVFpamjzxxBOycOFCM1oUAAAAgPDg1QR5uQ0bNsx03u7bt69UqFDBLNMRog4fPmyaQGlQcccdd/g7rwAAAABCKbDQ2okpU6bIgAED5KOPPpI///xTsrOzTROpG2+8Ubp27er/nAIAAAAIrcDCduGFF5obAAAAgPBW5Jm3AQAAAKBQNRY6tKy7+Sryo+m3bt1aqNcAAAAACOHAolu3bnkCix9//NF04NZhZZs0aWKWbdmyRTZt2iTnnHOOtG3btnhyDAAAAKBkBhbTpk3LM/O23r7++mu59NJLXZ7TZdqB+7nnnvNvTgEAAACEVh+Lp556SoYOHZonqFA9evSQ+++/X0aNGuWP/AEAAAAI1cBCh5etXLmyx+f1OfpXAAAAAOGjSIGFzlcxdepUSUpKyvPc8ePHzazcDRs29Ef+AAAAAITqPBbPP/+89OnTR5o2bSoDBw6URo0aOWoy3n33Xdm/f7/MmTPH33kFAAAAEEqBxbXXXisLFiyQxx57TMaMGePyXOvWreXtt9+WXr16+SuPAAAAAEJ15u2ePXua2759+2Tnzp1mWb169aRGjRr+zB8AAACAUA4sbBpIEEwAAAAA4c2rwGL69Onmf79+/cxEefbjgvTv39+33AEAAAAoESIsy7IKShQZGWkCihMnTkhsbKx5XOCKIyIkKytLgl1iYqKUL19ejh07JvHx8QHJQ3Z2thw4cECqVavm1bYFgFDGOREAguecWJiyslc1Ftu3bzf/NahwfgwAAAAAXgcW2il75MiRcvPNN0vLli3NYwAAAACweV2f8tJLL8nGjRsdjw8fPixRUVGyZMkSb1cBAAAAIET51FDLi+4ZAAAAAMIAPYUBAAAA+IzAAgAAAMDpnSBvx44dsn79enNfh5xSf/75p1SoUMFt+jZt2vieQwAAAAChMY+F81wWzvSluZc5L2cei5IxPjEABBPOiQAQwvNYqKlTp/ojbwAAAABCkNeBxYABA4o3JwAAAABKLNrdAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAPAZgQUAAAAAnxFYAAAAAAjNwGLixIlSv359iYuLkw4dOsiaNWs8pp0yZYp06dJFKlasaG7du3fPNz0AAACAMAgsZs2aJcOHD5fRo0fL+vXrpVWrVtKrVy85cOCA2/TLli2Tvn37ytKlS2XVqlVSp04d6dmzp+zevfu05x0AAAAIVxGWZVkSRLSG4vzzz5cJEyaYx9nZ2SZYGDp0qDz++OMFvj4rK8vUXOjr+/fvn+f5tLQ0c7MlJiaa9R89elTi4+MlEPQzHjx4UKpWrSqRkUEX6wHAacU5EQCC55yoZWUtWx87dqzAsnK0BJH09HRZt26djBgxwrFMN6A2b9LaCG+kpKRIRkaGVKpUye3zL774ojzzzDN5lusOS01NlUB9YXRnaYxHYAEg3HFOBIDgOSceP37c67RBFVgcOnTI1DhUr17dZbk+3rx5s1freOyxx6RWrVomGHFHgxZtapW7xkKjwEDWWERERFBjAQCcEwEgqMqJ2ue5RAYWvnrppZdk5syZpt+Fp41QqlQpc8tNd1Qgawv0CxPoPABAsOCcCADBcU4szHsGVWBRpUoViYqKkv3797ss18c1atTI97X/+c9/TGDxzTffSMuWLYs5pwAAAACcBdXl8djYWGnbtq0sXrzYpfpHH3fs2NHj61555RV57rnnZOHChdKuXbvTlFsAAAAAQVljobT/w4ABA0yA0L59exk3bpwkJyfLoEGDzPM60lPt2rVNJ2z18ssvy1NPPSUffvihmfti3759Znm5cuXMDQAAAEAYBhY33XSTGaFJgwUNElq3bm1qIuwO3X///bdLW6/Jkyeb0aT69Onjsh6dB+Ppp58+7fkHAAAAwlHQzWNxuumoUOXLl/dqbN7ios29dALAatWq0XkbQNjjnAgAwXNOLExZOaj6WAAAAAAomQgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAz6J9X0V4yMrKkoyMjGJZd3Z2tll3amqqREYS6wWDmJgYiYqKCnQ2AAAASgwCiwJYliX79u2ThISEYn0PDS6OHz8uERERxfY+KJwKFSpIjRo12CcAAABeILAogB1UVKtWTcqUKVMshUwNLDIzMyU6OppCbBDQ/ZGSkiIHDhwwj2vWrBnoLAEAAAQ9AosCmj/ZQUXlypWLbScQWASf0qVLm/8aXOj+p1kUAABA/mjQnw+7T4XWVCD82Pu9uPrWAAAAhBICCy/Q7yE8sd8BAAC8R2ABAAAAwGcEFgAAAAB8RmARxi666CJ58MEHA7LOrl27yocffiiB8uabb8pVV10VsPcHAAAINQQWIWrgwIFy7bXXSjCaN2+e7N+/X26++WbHsvr165s+Dc63M888s0jr14kG9fOfe+65Zghfd9vh9ttvl/Xr18t3333n02cBAABADgILnHavv/66DBo0KM8s488++6zs3bvXcfvpp5+KPEywDhf7wAMPSPfu3d2miY2NlVtuucXkBQAAAL4jsCii9Kx0j7fM7Eyv02ZkuQ5l6imdr5KTk6V///5Srlw5M+Hbq6++midNWlqaPPzww1K7dm0pW7asdOjQQZYtW+Z4/vDhw9K3b1/zvA7FqjUCM2bMKFQ+Dh48KEuWLHHbDOmMM84wM13bt6pVqxbps2reJ0+eLIMHDzbr8UTzoLUnJ06cKNL7AAAA4BQmyCuiMd+N8fjc2ZXOlltb3up4PHbFWMnIdj8XQv0K9WVAqwGOx+N+GCcpGSl50j190dPii0ceeUS+/fZb+eyzz8yEbyNHjjRNgVq3bu1Ic//998umTZtk5syZUqtWLfn000/lsssukw0bNsjZZ59tmhi1bdtWHnvsMYmPj5f58+dLv3795KyzzpL27dt7lY/vv//eBCXNmjUrVP4vv/zyfJst1atXT3777bdCrbNdu3ZmxvPVq1ebviEAAAAoOgKLMJCUlCRvv/22vP/++3LppZeaZe+++65LH4a///5bpk6dav5rUKG09mLhwoVm+ZgxY0xNhS6zDR06VBYtWiSzZ8/2OrDYuXOnVK9ePU8zKKUBy6hRoxyP9T21OZP63//+l2/NQkxMjBSWBjjly5c3eQIAAIBvCCyKaGSXkR6fi4xwLTQ/0vkRj2kjJMLl8YMX+HeUJrV161ZJT083TZtslSpVkiZNmjgea62E9k1o3LhxnuZRlStXNvf1eS3sayCxe/dus059vjAzk2twEBcX57FWRTtd26pUqeK4r0FNcdC+GCkpeWuIAAAAUDgEFkUUGxXrt7SWZRVpvf6u1YiKipJ169aZ/860X4YaO3asjB8/XsaNG2f6V2hfBh1aVgMMb2mwcPToUY/PNWrU6LQ1hVJHjhwpcl8OAAAAnEJgEQa0D4Q2FdK+BHXr1jXLtHD/xx9/SLdu3czj8847z9RIHDhwQLp06eJ2PStWrJBrrrlGbrvtNvM4OzvbrKN58+Ze50XfZ9++feb9K1as6PXriqMplNbkaL8RzRMAAAB8Q2ARBrTG4Y477jBNjbRZk3befuKJJ1z6OWgTqFtvvdWMHKUjRmlhW0dwWrx4sbRs2VKuvPJK04H7o48+kpUrV5qg4LXXXjPzURQ2sNCaCQ1S/vWvf3n9usI2hdJO6FqTojUSx48fl59//tksd+6srjUgDRs2NIEXAAAAfENgESa0GZM2d9IhVnVY13//+99y7NgxlzTaSfv55583z2kfCg0ALrjgAkcAoB2rt23bJr169TL9Ku666y4z+Vzu9eRHm1npHBYffPBBoQKLwrriiitcOmXbtRLOzc50qFwdkhYAAAC+i7CcS1phKDEx0YwMpIVjHULVmTaT2b59uzRo0MBjh2N/0F2gw57qLNE643So06ZQLVq0MMPdat+IQND+GJdccolpyqX7353Ttf8BuNJmltosU2tX3Y0gBwDhJDvA58T8ysq5ccbGaaeT1unwtzq0baDozN7Tp0/3GFQAAACgcGgKhYDQJlSB1L1794C+PwAAQKihxgIAAACAzwgsvBDm3VDCFvsdAADAewQW+bDnRmBm5vBk7/eizJEBAAAQbuhjUcDQqBUqVDA98ZUOsVocozaF26hQwU73hwYVut91/+eeiRwAAAB5EVh4MYKRsoOL4irI6lBiOoQYgUXw0KDC3v8AAADIH4FFAbSgX7NmTTN2cEZGhhQHDSoOHz5sZsVmzPbgoM2fqKkAAADwHoGFl7SQWVwFTQ0stCCrk7ARWAAAAKAkovM2AAAAgNAMLCZOnCj169c3V/A7dOgga9asyTf9nDlzpGnTpib9ueeeKwsWLDhteQUAAAAQhIHFrFmzZPjw4TJ69GhZv369tGrVSnr16uWx8/TKlSulb9++cscdd8hPP/1kZnTW28aNG0973gEAAIBwFWEF2SxgWkNx/vnny4QJExz9D+rUqSNDhw6Vxx9/PE/6m266SZKTk+WLL75wLLvgggukdevW8uabb+ZJn5aWZm62Y8eOSd26dWXnzp0SHx8vgaCf8dChQ1KlShX6WAAIe5wTASB4zomJiYlSr149SUhIkPLly5ecztvp6emybt06GTFihGOZbsDu3bvLqlWr3L5Gl2sNhzOt4Zg7d67b9C+++KI888wzeZbrBgMAAACQ1/Hjx0tWYKHRWFZWllSvXt1luT7evHmz29fs27fPbXpd7o4GLc6BiEaBR44ckcsuu0x+/PFHn/KvNS1r164tUiSotTK7du0KWK0JfNuHJUmwf8ZA5+90vX9xvI8/1+mPdXFOLNkCfSyeLsH+OQOdv9Px/sX1HpwT/UMbN2lQUatWrQLTBlVgcTqUKlXK3HJPhKazXvtaqNfhaH1Zh76WwCKwfN2HJUGwf8ZA5+90vX9xvI8/1+mPdXFOLNkCfSyeLsH+OQOdv9Px/sX1HpwT/aegmoqg7Lytbcf0S7B//36X5frY0wzIurww6T257777ipBj/68DgRUO+zDYP2Og83e63r843sef6+SciEAfi6dLsH/OQOfvdLx/cb0H58TTLyg7b7dv317eeOMNR1Ml7Vx9//33e+y8nZKSIp9//rljWadOnaRly5ZuO28HI20KpZGgdiQP5qsmAHA6cE4EgJJ5Tgy6plDa/2HAgAHSrl07E2CMGzfOjPo0aNAg83z//v2ldu3aphO2GjZsmHTr1k1effVVufLKK2XmzJmmr8Rbb70lJYU2zdLhdXM30QKAcMQ5EQBK5jkx6GoslA41O3bsWNMBW4eNff31101NhrrooovM5HnTpk1zmSBv1KhRsmPHDjn77LPllVdekSuuuCKAnwAAAAAIL0EZWAAAAAAoWYKq8zYAAACAkonAAgAAAIDPCCwAAAAA+IzAAgAAAIDPCCyC3HXXXScVK1aUPn36BDorABBQu3btMiMDNm/e3MxVpCMCAkC4SkhIMNMz6Aiq55xzjkyZMiXQWWJUqGC3bNkyOX78uLz77rvy0UcfBTo7ABAwe/fulf3795sfUR2OvG3btvLHH39I2bJl2SsAwk5WVpakpaVJmTJlzJxvGlzoXG6VK1cOWJ6osQhyenXujDPOCHQ2ACDgatasaYIKVaNGDalSpYocOXIk0NkCgICIiooyQYXSAENnkAj0LBIEFsVo+fLlctVVV0mtWrUkIiJC5s6dmyfNxIkTzYR/cXFxZhLANWvWFGeWACAkzonr1q0zV+vq1KlzGnIOAMF5TkxISJBWrVrJmWeeKY888oi54BJIBBbFSKuldGfrl8KdWbNmyfDhw8007evXrzdpe/XqJQcOHCjObAFAiT4nai1F//795a233jpNOQeA4DwnVqhQQX755RfZvn27fPjhh6a5aCAx8/bp2tAREfLpp5/Ktdde61imkef5558vEyZMMI+zs7PN1behQ4fK448/7tLPQtPQxwJAuJ8Ttbq/R48eMnjwYOnXr1/A8g8AwVJOtA0ZMkQuueSSgA74Q41FgKSnp5uq/O7du5/aGZGR5vGqVasClS0ACNpzorYdHjhwoPnhJKgAEO7nxP3795sBftSxY8dM06omTZoELM8mjwF99zB26NAh0z64evXqLsv1sY52YtMv0A033CALFiww7ecIOgCE6zlxxYoVpmmAtkPWTtx627BhQ4ByDACBPSfu3LlTunTpYppI6X+tyTj33HMDuluiA/ruKNA333zDVgIAEbnwwgtNUwAAgEj79u3l559/DqpNQY1FgGivfR0mLHcnG32swygCQDjhnAgAJf+cSGARILGxsWZyp8WLFzuW6ZU4fdyxY8dAZQsAAoJzIgCU/HMiTaGKUVJSkvz111+OxzoUmFZZVapUSerWrWuGEBswYICZjl2rs8aNG2eGHhs0aFBxZgsAAoJzIgCE+DnRQrFZunSpTn+Y5zZgwABHmjfeeMOqW7euFRsba7Vv39764Ycf2CMAQhLnRAAI7XMi81gAAAAA8Bl9LAAAAAD4jMACAAAAgM8ILAAAAAD4jMACAAAAgM8ILAAAAAD4jMACAAAAgM8ILAAAAAD4jMACAAAAgM8ILAAAAAD4jMACABB0Zs+eLZUqVZKkpKRiWf/NN98sN954Y7GsGwDCFYEFACBfERERXt2WLVtm0k+ePFluuOEGqVu3rlk+cODAQm3hrKwsGT16tAwdOlTKlStXLHvnsccek48//lh++eWXYlk/AISj6EBnAAAQ3N577z2Xx9OnT5evv/46z/JmzZqZ/y+//LIcP35c2rdvL3v37i30+33++eeyZcsWueuuu6S4nHfeedKuXTt59dVXzecBAPguwrIsyw/rAQCEifvvv18mTpwonn4+du7c6ait0BqHPn36yLRp07xe/zXXXCNHjhyR7777ToqTBhVaM7Jv375iqxkBgHBCUygAgF/Vq1fPBBVFkZqaKgsXLpTu3bu7LN+xY4dZp7sARZc//fTTjsdaW/Lggw9K/fr1pVSpUlKtWjXp0aOHrF+/3uV1uiw5OdnUvgAAfEdgAQAIGuvWrZP09HRp06ZNkddxzz33mH4e119/vUyaNEkefvhhKV26tPz+++8u6Zo3b26Wr1ixwg85BwDQxwIAEDQ2b95s/jdo0KDI65g/f74MHjzYNHWyPfroo3nSRUdHS506dWTTpk1Ffi8AwCnUWAAAgsbhw4fN/4oVKxZ5HRUqVJDVq1fLnj17Ckyr73Po0KEivxcA4BQCCwBA0PFlXJFXXnlFNm7caGojdGQq7X+xbds2j+9T1P4gAABXBBYAgKBRuXJl8//o0aNFDkB04jsNJN544w2pVauWjB07Vlq0aCFffvllnrT6PlWqVPFDzgEABBYAgKDRtGlT83/79u1un9cRn5zt37/fbbqaNWvKkCFDZO7cuWZdGrC88MILLmkyMzNl165djvk3AAC+IbAAAASNtm3bSmxsrPz4449un1+6dKnL408//dSl5kJn7T527JhLGh1uVmsu0tLSXJZrp20d3rZTp05+/hQAEJ4YFQoA4Fc6c/Yvv/xi7mdkZMivv/4qzz//vHl89dVXS8uWLT2+Ni4uTnr27CnffPONPPvss3me1zkubr31Vunatav88ccf8tZbb0mZMmXkq6++kvPPP18uvPBCOfPMM82kfK1atTIT3+m61q5d6zJKlNL5K/S1Op8FAMB3BBYAAL/6+OOP5d1333U8/umnn8xNaaE/v8BC3X777WYOCm2mpB2wnT355JOyZMkSGTZsmKmF0AnzdOK7cePGmf8alGgTKA00PvnkE8nOzpZGjRqZ+Szuvfdel3XNmTNHevfuLWeccYZfPz8AhKsIy5ehNwAA8DNtzqST12kn7Oeee84x87bObTF16lQZOHCgz+/x888/m0n4NBhp3bq1H3INAKCPBQAgqERFRZlmUBMnTpSkpKRieY+XXnrJNJciqAAA/6HGAgAQ9PxdYwEA8D9qLAAAAAD4jBoLAAAAAD6jxgIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAPiMwAIAAACAzwgsAAAAAIiv/h+nzMzSdgMA7gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "=== FIDELITY SUMMARY ===\n", + "T1= 10μs, T2= 20μs → Fidelity = 0.9888\n", + "T1= 50μs, T2= 100μs → Fidelity = 0.9976\n", + "T1= 100μs, T2= 200μs → Fidelity = 0.9988\n", + "T1= 500μs, T2=1000μs → Fidelity = 0.9998\n", + "T1=1000μs, T2=2000μs → Fidelity = 0.9999\n" + ] + } + ], + "source": [ + "# Sweep over different noise levels\n", + "T1_values = [10, 50, 100, 500, 1000] # Different T1 times\n", + "fidelities = []\n", + "\n", + "for T1 in T1_values:\n", + " T2 = 2 * T1 # T2 is typically ≤ 2*T1\n", + " \n", + " noisy_density = run_noisy_circuit_density(\n", + " initial_state=init_state,\n", + " circuit=vqc_circuit,\n", + " num_qubits=n_qubits,\n", + " T1=T1,\n", + " T2=T2,\n", + " gate_durations=gate_durations\n", + " )\n", + " \n", + " # Calculate fidelity with ideal state\n", + " ideal_density = state_to_density(ideal_state)\n", + " fidelity = torch.real(torch.trace(ideal_density @ noisy_density)).item()\n", + " fidelities.append(fidelity)\n", + "\n", + "# Plot fidelity vs T1\n", + "fig, ax = plt.subplots(figsize=(8, 5))\n", + "ax.plot(T1_values, fidelities, 'o-', markersize=10, linewidth=2, color='#2196F3')\n", + "ax.axhline(y=1.0, color='green', linestyle='--', alpha=0.5, label='Ideal (F=1)')\n", + "ax.set_xlabel('T1 (μs)', fontsize=12)\n", + "ax.set_ylabel('Fidelity with Ideal State', fontsize=12)\n", + "ax.set_title('State Fidelity vs Coherence Time T1', fontsize=14, fontweight='bold')\n", + "ax.set_xscale('log')\n", + "ax.set_ylim(0, 1.1)\n", + "ax.grid(True, alpha=0.3)\n", + "ax.legend()\n", + "\n", + "for x, y in zip(T1_values, fidelities):\n", + " ax.annotate(f'{y:.3f}', (x, y), textcoords=\"offset points\", xytext=(0, 10), ha='center')\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(\"\\n=== FIDELITY SUMMARY ===\")\n", + "for t1, f in zip(T1_values, fidelities):\n", + " print(f\"T1={t1:4d}μs, T2={2*t1:4d}μs → Fidelity = {f:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "dd75a3bc", + "metadata": {}, + "source": [ + "---\n", + "## 4. Deep VQC Architecture\n", + "\n", + "Our deep variational quantum circuit uses multiple layers of parameterized gates." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4bcab0e6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== DEEP VQC (3 layers) ===\n", + "Total gates: 14\n", + "Trainable parameters: 9\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABvoAAAEVCAYAAAAhPDKdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbilJREFUeJzt3Qd0FFUXwPGb3gi9h96lShekShMBUbAg9oZ+FrBjBxVRQQUBQRQFC1JsgIIKIiK99y69JpTQ0st+576wyyYkIYEkm9n9/87Zs2125+3szNyZd+e952Wz2WwCAAAAAAAAAAAAwFK8XV0AAAAAAAAAAAAAANlHog8AAAAAAAAAAACwIBJ9AAAAAAAAAAAAgAWR6AMAAAAAAAAAAAAsiEQfAAAAAAAAAAAAYEEk+gAAAAAAAAAAAAALItEHAAAAAAAAAAAAWBCJPgAAAAAAAAAAAMCCSPQBAAAAAAAAAAAAFkSiDwAAALCwffv2iZeXl+P2zz//5Ml8nec5adIksZJKlSo5yj548GBXFwf5iK7Lzut2fvXAAw84ytiuXbtcmccff/zhmMeTTz4puUl/g31e+ts81apVqxzLoU+fPq4uDgAAACyCRB8AAACyRRNJzhXhevP395dChQpJlSpVpGPHjvLWW2/JwYMH3WrJLl++PNVvHjZsWIbTfv3116mmnTlzpliJlZN4eWHx4sXy0EMPSc2aNSU0NFQCAgKkTJky0rVrVxk7dqxER0eLVeVFAimvLVmyRPr16yd169aVwoULi5+fnxQvXlxat24tgwYNkt27d4s7yYn/0GazySuvvGIe+/j4yPPPP5/q/R9++EH69u0rderUMctSl2mBAgXkmmuukYcffljWrVuXI7/F0zRt2lTatm1rHk+fPp3lCAAAgCzxzdpkAAAAQMYSEhLM7ezZs7J3716ZP3++vPPOO/LGG2+Ym7e39a8vu+6666RWrVqyfft28/zbb7+Vl156Kd1p9T27EiVKyE033ZRr5SpatKgMHz7c8bxq1aqSF5znqZXTniAqKkoeffRRmTJlyiXvHTt2zLSA0tv7779vEiHNmzd3STmRIjIy0iRkZ8yYcckiOXnypEnY6m3hwoWOlrC6Ljuv2/mVtvbSxKUqX758jn//L7/8IuvXrzePu3fvbi7iSHsxw+zZs1O9lpiYaPaPevvmm29k2rRp0qtXrxwvm7sbMGCAWSc12aqJ6FmzZrm6SAAAAMjnSPQBAADgqtx5553SpEkTOXPmjKxdu1b+/PNPSUpKMjftFlETIOPGjXOLpXz//fc7Wrls3rzZtLZo2LBhqmkOHTokCxYscDy/++67TWuXnBYfH28qggsWLCgvvPCC5DVXzNOVdFnfdddd8uuvvzpeq169utx6662mVd+yZctkzpw55nVtzdq5c2fTClRbOME1SVn9D1avXu14rXTp0nLLLbdIhQoV5Ny5c2Z/pRclONMWanq70u1RW3fmhRtvvNHccstnn33meJxeF5LBwcGmtWC9evWkZMmSJsmnLSf/+usv874+f/XVVz060afrmO4bsksvDNH9ul44o/sUjSnlypXLlTICAADATdgAAACAbFiwYIFNDyPtt4kTJ6Z6f+vWrbbKlSunmub333+/5HvWr19ve/DBB21VqlSxBQYG2kJCQmzXXnut7d1337WdP38+3XmfOXPGNnToUFuzZs1sBQsWtPn5+dnKly9vu//++22bN2++ZPpBgwY5ylCxYkVbZGSkrX///rawsDCbv7+/7ZprrrGNHj3alpycnKXffvjwYZuPj4/jO5999tlLpnn//fdT/fYNGzaY13/++WfbPffcY6tXr56tZMmSpuz6m7UMTz75pG3v3r2XfFfbtm0d36O/cdOmTbaePXvaihYtal5bt26d+Zzz/PT/sduzZ49twIABtlatWtnKlStnCw4ONr+7bNmytu7du9tmzZqV4fzSu+kytMtsHVB//fWXrXfv3o5lHRoaamvYsKHtzTfftJ08efKS6fW77d+n/9vq1att3bp1sxUqVMgWFBRkfsOiRYsu+dyXX35pu/322221atWyFStWzObr62vm1aBBA9tLL71kO378+GXnlRVTpkxJ9Zu7du1qi4uLSzXNpEmTUk3TsWPHVO9ntsz0/7W/p/9DTv/Gyy1PLU9m/73zupV2vXSW9nucpf3cihUrbB06dDDbgW4TTzzxhO3cuXNm2mnTptkaNWpk9g26vj733HO22NhYW1a9/PLLqcqh201UVFS62/Rnn312ReVPb3u0O3jwoPlvdJ+m/1VAQIDZV+n0c+fOzdL/nnZf67yPSO9z2fkPM3PgwAGbt7e3mV633Yz2x+nRdd4+L/3vsiqzdWrYsGFmuVWvXt1WpEgRs/7rety0aVPbkCFDUpWvTZs2ju+56667LpnPmDFjHO/rd8XExORYfDlx4oRZh3Wfp8tvxIgRZrp9+/bZ+vXrZ6tWrZpZJrou6DrdsmVLE0M0ZqbVt29fx3frbwQAAAAyQ6IPAAAAOZroUytXrkw1TefOnVO9P3bsWFNZm1FldO3atW1Hjx5N9ZmdO3faKlWqlOFntPJ0+vTpGVbElihRwla3bt10P/v0009n+fffeOONjs+VLl3alpiYmOr9OnXqON7XxJadJr0yq4DXiuWNGzdmWPmt36UJEefPXC7R9+uvv1624v+tt95Kd35Xk+jTpExm36MV4Wkrzp0TU1rRrpXs6f3HaSvFGzdufNl5aTLnahN97dq1c3xGK/F37NiR7nQtWrTIMDmT2TLLLOFztb8xK8szrxN9up3o/NPOQ5fzhx9+mO7877333iz9V/Hx8Sa55rydZjVZldXyZ7Q9qtmzZ6eaf9qbJt/zc6Lvq6++ckzfpEmTLC03TZL98ccfJmFr/6yut1mV2Tqlye3MfpNePGFPEP/www+O1zWpdurUqVTf5ZwI1KRcTsWX4sWLm0S882c00RceHm5iT2blHzdu3CXLQy9AyWi9AAAAANKi604AAADkOB3nqkGDBrJhwwbz/N9//zVdefr4+MjSpUvlqaeekuTkZMfYd9oFnXZzpuM+nThxQrZu3Sr33XefzJ0710yjn9UuEvft2+cY965v375mfDrtKlS/My4uznymcePGl4wnpY4fP266Qnv88celcOHC8t1335ku0dTo0aOld+/e0rZt28v+tgceeMCMw6a0W1ItY9euXc1z7Qpwy5Ytqaa103lqV4LalWORIkXE399fwsPDzVhYBw4cMGUbOHCgo/vHtLSbUF9fX7n33ntNl5E6DlZgYGCmZdXpr732WtO1qi4z7Q5OuzTULvbs3YvqWIoPP/ywhIWFyf/+9z8zHteLL754SdesqlChQpddPjo+4ccff+x4rt0g6n935MgR8//qf3n48GHTpZ8uKy1jWitXrjRd1Wm3p9oN5vfff29e1//4k08+SdWtoHYb2KNHDzM2oa4Puo7p9+v4YDoOmz4eMmSIjB07Vq6UllnXMTtdt2vUqJHutLq8tBtPOx0DrlKlSnI1rvY3ZmV52sem0++0d3ep25GuE7kx/qP+9xUrVjRl0vLZu3zUsfL0Vq1aNbMsdfu2l2fy5Mlm/MOyZctm+t2rVq0y+xM7/Z6QkBDJSRltj/v375fbb79doqOjzXReXl5y8803m+1Q90F///235Jac+g8XLVrkeGzf9jOi65Wuf2np/k7XrZyg82jfvr1ZX3TfqTlzHQtWf6fuzzZt2mTWfR0zVbtm1el13x4bG2v2R/3793fsr3V7tHvwwQdzLL5o3NJbx44d5frrrzf/dalSpeSnn34yj5WWXedZrFgxsz/UdcZ5WTtzHvd0xYoVpmtYjRkAAABAekj0AQAAIFfUrFnTkejTCtdTp06ZCtQPP/zQkeTTMZ50jCxvb29HhXyzZs3M43nz5snGjRulfv36Mnv2bEcCTZMcmqjSynX12muvmXHytLJX5zNmzJhUiSZnX331lanAVY899phJ1iQkJJjnX3zxRZYSfVqRrBW2kZGR5rlWJNsTffrYTsfls89LTZgwwcxLx23btWuXSexphXSHDh1k4sSJZhpNAug0GY3p9+OPP0rPnj1TvWavnM5sHK+dO3eaxIRWOOt36xhQWnmsyQgdS0vnqwkLXf7KOdGnn3dOWF7ORx995HisCS5NugQFBTmSBk888YR5rGX67bffzPJMS5MyWj57QkfLOWPGDPNYv8+ZJkb1fU2u7dmzR86fPy+VK1eWVq1aycyZM800Wll/NTSZphXtdppwyEja944ePSpX62p/Y1aWp31sOh170p4kKl++fK6NxajroSb0dB3R8mgSWddFpQmNhQsXmvLqelmrVi3zuu431qxZc9lEX9rEk/3zOS297fH55593JPmUXlDgvB/Q36CJ/dyQU//h7t27HY/189mlibDp06ebpFhOWL9+vRkDVhNuuuw0uacXTOj360Uk9vVfE32afNXEpsYF+37XnujT/8see3RsQXsSM6fiyzPPPCMjRoxI9Zrz8zvuuCPV/lHpb9HtOS3nMfl0vpoYvNoLBgAAAOC+SPQBAAAgV6T0VHgprUS104p+rVjNiFbsaqLP+TPa+iKj1lT2z2SUWLAnspRWmmqixN6yTRMIWREQECB9+vSRcePGmeeaMNHWQ8HBwTJlyhTHdNoCq3jx4o7n2hpJK4K11UdGtNWIvl+mTJlL3qtbt+4lSYXL0SSgtpjKaJnY2Vs2Xi1NcGhy1k5bNtmTfEpbxNgTfUoTV+kl+vR3OidzNGlsZ0+w2mml+6BBg9KtLM/p32fn/JsuR9fXq3W1vzE7yzOvaKsne+JCtx29CMCeFNX37OVN2wLNVeXN6vbo3GJMk1HOST6lFzXk94SNvQWa0lZtmXnjjTdMEk73W3rRhrZq1mR0y5YtTZJNE7VXQxNzL7/8smkd6Jxsz2z9f/TRR+Xtt982+1NN0GmSu3nz5vLDDz9c0ppP5UR8Ua+//volr+m6rK06NR6OHz/eJNZr165ttkFNNGpLRW35l5a2+kv7n+T39QYAAACuQ6IPAAAAuUJbbNlpl3b2iktt2ZfdCucr+UxaOv+0SUXnCtbTp09neR7aws2e6IuJiTEtRfS7tCtO52nstPJbk1z21iSZ0crp9FxJqyRNotlbVV7JPLNLkzDOCd60FdjasqxAgQKOhFVGSZu0FdqaXLVzXoaaZNUWVJeTWYIgKzTZoYlie+vPzFpkadeNGbXMySwRntF/kBO/MavL80pk9XeklbZVnnO3hM7vpe3aNSvl1W5onWkXiTkto+3ReV+lrS7zYlm6kraMdqbdAGvLaV0f9b1OnTpJ6dKlr/j7R40aZbojvRznZaVJ47vuuksmTZpknmvCsUKFCo4krG7L99xzj2P6nIgvelFH2uSc0hbqmqjXhKju9zQW6M35c5qA1NbtWblQBgAAAEgPiT4AAADkOO02zjnBpF1i2rvn1KRJRESEeawt6jJrpaatQuyfcU4a6rhyGcloHDntftE+TqCdc2JOx5TKKq281VYZOpagvctO56SWPrZ356m0IteeoNDWHTpGmrb408SXdsvYrVu3y84zu2OM7dixI9V/oC2Lhg0bZpIoWgYd9y2jSusrpV2a2luvpF2+6XVTp9OnJ23Xpfqd6dExuuw0gfjzzz9L69atzTqiY3Y9+eSTkhM02dSiRQtHN4E6ppwuO00opKVdFjrTddz5d9iXjSaInWl3rrn1G7O6PLPKvi1n53dcrkzO0hu3MTt0fLPQ0FDHOH36nwwdOtS0HMwpGW2PzvsqHUcuL5ZlTnNuiZzdFpS6P9dEn/33aGu67LZEzmj9132Xjmmq4x1qYli76swoCfj00087En1Tp041LUPt+2Adh9R5282J+JLZ/llbcvfr189026xdhOr/quO86r22hLz//vsvuUAgbfIxvX0NAAAAYEeiDwAAADlKE0zataWz5557LlXyzj4+2LFjx0wFaMGCBVNNrxXEmhyzJ/rs9/bxinQcKudEmp1WKju3VnKmrbG00tjelZ52a+nczV52x5PSFnta0WzvgtR5vtpaxDlZoUlG54piHavJXsGfNjGUU5znqW677TZHSyctb2ZJPi27fbw05/HGLkcTKQ0aNDBjain9D9966y1HV5fffPNNqumd/9er/Y06Lpi2HlJaoa+tLHOSrqf2RJ+uS9oFqXbV6vw/a8LXuWs/XUedW9NpMtmeONFKf3s3pjq+WEZdx+blb0ybgMvov3dOiuvYj9p6SxMvOjbe119/La6mv0GX7QcffGCea5eg2oWkjpeXtttVHftMx4rU/zcnaGJXE8Fq27ZtJsnkvD/URO/BgwdNC7O0y1L3ndqyWF/T7jA//fTTXPsPM6Pr2aJFi8xjLWta//33n/nP9WKHtHS8u5xMKjuv/9rVpX0MV40Dv/76a4afa9Sokdm/6PaoFxfofsjuoYceSjVtTsSXjOj6pReX6MUfN9xwg7nZtxsto72FsP5O5xaBzstdk4+XG5cSAAAAno1EHwAAAK6KtkzQVglnz541lZf63J4kUtriqHPnzo7n2g3hzJkzTYW3VhjrWFe9evUyFaFaua1jKi1cuNC0/tLuLpW2eNPxrrTi3N4lpX5GK5o14bF7926ThNFWERMnTjQtPtKjFbxaga0V6Vrpb++KUT3yyCPZ+t2aOHjllVdMK0H9LVpBnF63nWnHRNOKfP09Wrmsica5c+dKbqhWrZpJJtpbsQwYMMAk4LRCWZdRZjQhaG9h8tFHH5nPaIKkYcOG0qFDh0w/q/+vfVwuTaZq66pbb73VVHg7J4F0HKystGTMjC7XefPmmcc6NqB216frye+//24SaTlJv1vHWdTvVppk09Y5ui5qglOTAJowstNxFnVMLme6LOz/tyYFNTGmyzWzdSAvf2Pabi81+ajrTfny5U0ir3///o7foS2rlG7DmrDQMul4l2kTzK6i46XpcrN3k6gtIbVVl66L2p2qtvbT93RcOR1HLacSfbqMtFtfe+s8vbBALzDQfZImeTXJrt00jhw50rEs7XQfqtuYJrN03DhdP3LrP8yMLg/7turczaTd5s2bzXLU/12n1XVdy677bR13005bVbZp00auhq7/9paNun1pd6DaFahuf5frklVb9dkT7/b9s372xhtvTDVdTsWX9OjndJxUTQDrPDRhpzFD10c7/V/StjbVVvF2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8uTJqYZY0ItBK1eunGvzA4DcRKIPAAB4jBdffNFRSalXimqLvk8++cScSOaUpKQkc5KoFa762N4VjY47AQBATnejab+oROOatugbPXp0jse1Dz74wFwgY49rGtM0tgEAkJNeffVVuffee81jbbF+6623yqeffprjce29994z87F/74ABA+Sxx+hZAIB1kegDAAAew8vLSz7//HPHyaOe5Omg7zfccIPs2bPnqr9/586d0qZNG5NQ1FaDSq8S1UpXnTcAADlJu4P+4osvHOMJaVzr37+/dOzY0TE+7NXQcW1bt25txpu1xzUd93bkyJHENQBArsQ17RZaL5pUiYmJ8tRTT0mnTp0c48Neje3bt8v1119vEor2uPb444/Lxx9/TFwDYGkk+gAAgEfx8fExYzE8//zzjtcWLlwo9erVMwOxX0nCTxN8zz33nDRo0ECWLl3qeP2VV14xFbCMywcAyM3x+nTsvGeffdbx2oIFC0xc0xZ/VxrX9PuuvfZaWbZsmXlNL1h5/fXX5bPPPiOuAQByNa7pWOd64Yrd33//bbqs1gtPruRCFr1wRS/w1Li2YsUKR1x74403zNiznK8BsDoSfQAAwOPoiZx2rzl//nypWLGieS06OlqGDx9uxtG76aabZMKECbJu3TrTZUxa+tratWtN68DOnTtLzZo1ZcSIERIbG2ver1q1qkkeDh06lCtDAQB5Ete0NcK8efOkQoUK5rWoqCgzjp7GtW7dusmXX34p69evN118phfX1qxZY+KatprQuKat9uxxTb/j33//NWPd0kIdAJAXF2fqEAt//vmnlC9f3hHXtCtpPdfq3r17pnEtLi7OxLXx48ebVu61atUy36evq+rVq8uiRYvk7bffJq4BcAu+ri4AAACAq2iXnZs2bXK0vNOKTu3C5ffffzc35e/vb04EIyIizPPw8HAJDQ1NNwEYEBAg//vf/2TIkCESEhKS578HAODZtDJz8+bNpsWDxjWt/NS4NmfOHHOzxypN3DnHtQIFCqRbUarT6lh8GteCg4Pz/PcAADybXlSpcU1bqGtizx7XZs+ebW72WJXe+Vp6cS0wMFCefPJJk+AjrgFwJ7ToAwAAHk1PAseMGSMHDx40g7LbW/jZaUJvy5YtjhNFHScibZKvSpUqptXEoUOHTMs+knwAAFfGtU8//dTENW1Zbm/hZ6etGdLGtbSVoRrXtJX74cOHTUtBKkMBAK5SsGBBGTdunIlr7777rqOFn3Nc02RgZnFNL3D56KOPTFzTnl2IawDcDS36AAAARKRkyZKmBcSLL75oxtlbtWqV6e5l9erVcuDAAUf3ZTpmhJ4oNm7c2NyaNm0qLVu2ZFwHAEC+UqpUKdNiXcefXbJkiSOu6S29uNakSRNHXGvRogVxDQCQ7+Laq6++6ohrep5mP1/TJKBzXNMWfvbztWbNmsl1111HXAPg1kj0AQAApBkPonXr1ubmTLuIUYxNBACwWlxr06aNuTlLTk42MY24BgCwEk3ktW3b1tycEdcAeDISfQAAAFlARSgAwJ14ezOSBwDAfRDXAHgyjuwBAAAAAAAAAAAACyLRBwAAAAAAAAAAAFgQiT4AAAAAAAAAAADAgkj0AQAAAAAAAAAAABZEog8AAAAAAAAAAACwIBJ9QH5ks4lH8tTfDeQxtjQAgDshrgGAm/LUOgIP/dkAgCtHog/IR0JCQsx9/PkE8UTx5+LNfYECBVxdFHjItpZwPmWd8zQJF7a10NBQVxcFAJADiGscQwKAO6FuhLgGAMgeEn1APtKoUSNzf3LjcUlOSBZPkpSQJCc3n0i1HIDcYl/HTnjithbPtgYA7hrXjm84LsmJHhbX4pLk5JaT5jHHkADgZudr6yMkOcnT4lqinNpKXAMAZA+JPiAfadWqlZQqVUoSohJkw6drJd5DWhtpS74NY9ZJYnSihIWFSYsWLVxdJLi51q1bp2xr5xNkw9h1nretxSRKuXLlpHnz5q4uEgAgB7Rt21aKFy9uWmxvHLtOEqI8JK6d1bi2VpJiE6VChQrSrFkzVxcJAJAD2rdvL0WLFjX7+U3j1ntUXFv/yVpzEUulSpWkcePGri4SAMAivGw2T+3wGsiffvrpJ7nzzjslKSlJvHy9pFDlwuIb5CviJe7HJibhcGbPabEl2cTX11d++OEHueWWW1xdMngAT9/WfvzxR+nZs6erSwYAyCHTp0+Xvn37XoxrVQqLb6D7xrWE6AQ5u/eMiWt+fn4mrvfo0cPVJQMA5JCpU6fK3XffLcnJyZ4T1/acEVuyTfz9/eXnn3+Wbt26ubpkAACLINEH5EMzZ86U119/XTZv3iyeol69evLuu+9SQYM8NWPGDHnjjTc8alurX7++2da6d+/u6qIAAHKYVgq++eabsmXLFo9Ztg0aNDBxjcpQAHA/enHioEGDZOvWreIprr32Whk6dKh07drV1UUBAFgIiT4gH9u+fbts27ZNoqOjxV0FBwdL7dq1pWbNmq4uCjwY2xoAwJ3o8aPGNnc/hqxTp47UqFHD1UUBAOQyTfRpXIuJiXHbZR0SEmLiWvXq1V1dFACABZHoAwAAAAAAAAAAACzI29UFAAAAAAAAAAAAAJB9JPoAAAAAAAAAAAAACyLRBwAAAAAAAAAAAFgQiT4AAAAAAAAAAADAgkj0AQAAAAAAAAAAABZEog8AAAAAAAAAAACwIBJ9AAAAAAAAAAAAgAWR6AMAAAAAAAAAAAAsiEQfAAAAAAAAAAAAYEEk+gAAAAAAAAAAAAALItEHAAAAAAAAAAAAWBCJPgAAAAAAAAAAAMCCSPQBAAAAAAAAAAAAFkSiDwAAAAAAAAAAALAgEn0AAAAAAAAAAACABZHoAwAAAAAAAAAAACyIRB8AAAAAAAAAAABgQST6AAAAAAAAAAAAAAsi0QcAAAAAAAAAAABYEIk+AAAAAAAAAAAAwIJI9AEAAAAAAAAAAABiPf8HXzfUEUbSIvwAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Build a 3-layer deep VQC circuit\n", + "depth = 3\n", + "x_input = torch.tensor([0.5, -0.3])\n", + "theta = torch.randn(depth * 3) # 3 parameters per layer\n", + "\n", + "# Construct the full circuit\n", + "deep_vqc = []\n", + "\n", + "# Encoding layer\n", + "deep_vqc += param_gate_layer(\"RY\", x_input)\n", + "\n", + "# Variational layers\n", + "idx = 0\n", + "for layer in range(depth):\n", + " deep_vqc.append((\"RY\", [0], theta[idx].item()))\n", + " deep_vqc.append((\"RY\", [1], theta[idx+1].item()))\n", + " deep_vqc.append((\"CNOT\", [0, 1]))\n", + " deep_vqc.append((\"RZ\", [0], theta[idx+2].item()))\n", + " idx += 3\n", + "\n", + "print(f\"=== DEEP VQC ({depth} layers) ===\")\n", + "print(f\"Total gates: {len(deep_vqc)}\")\n", + "print(f\"Trainable parameters: {len(theta)}\")\n", + "\n", + "draw_circuit(deep_vqc, n_qubits, \n", + " title=f\"Deep Variational Quantum Circuit ({depth} layers)\",\n", + " figsize=(18, 3))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "37b24106", + "metadata": {}, + "source": [ + "---\n", + "## Summary\n", + "\n", + "This demo covered:\n", + "\n", + "| Component | Description |\n", + "|-----------|-------------|\n", + "| **Angle Encoding** | Maps N features to N qubits via RY rotations |\n", + "| **Amplitude Encoding** | Maps 2^N amplitudes directly to N qubit state |\n", + "| **Quantum Kernel** | Uses feature map + inner product for similarity |\n", + "| **T1/T2 Noise** | Models thermal relaxation in real quantum hardware |\n", + "| **Deep VQC** | Multi-layer variational circuit for classification |\n", + "\n", + "The noise model shows how hardware imperfections degrade quantum state fidelity, motivating our noise-aware training approach." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad7fa1b4-ca93-4d3f-a645-e87d35238280", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f90b8a0-e3ae-49c3-abe9-cc47a3f688de", + "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.12.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/error_kraus.py b/error_kraus.py index 3082c50..e088d4f 100644 --- a/error_kraus.py +++ b/error_kraus.py @@ -2,6 +2,39 @@ import math import torch +# ============================================================ +# Notes on Realistic Superconducting Transmon Parameters +# (Based on contemporary fixed-frequency transmon literature) +# Using Manenti-Motta Textbook, wikipedia, Blais et al. Circuit QED, Chen Wang's Guide on Superconducting devices +# ============================================================ +# +# UNIT CONVENTION: All times throughout this module are in MICROSECONDS (μs). +# This includes: T1, T2, gate_durations, idle_time, and all internal calculations. +# Conversion: 1 ns = 0.001 μs, 1 μs = 1000 ns +# +# T1 (Energy Relaxation Time): +# - Typical range: 50–120 μs +# - State-of-art: 70–100 μs (representative average) +# - Optimized (tantalum, 3D): up to 300+ μs +# +# T2 (Overall Coherence Time): +# - Typical range: 50–200 μs +# - Relationship: T2 ~ T1 to 2T1 +# - Representative: 70–150 μs +# +# T_φ (Pure Dephasing Time): +# - Derived from: 1/T2 = 1/(2T1) + 1/T_φ +# - Typically: T_φ ≥ T1 for well-engineered devices +# - Representative: 100+ μs +# +# Gate Times (Microwave-based, all-software Z rotations, converted to μs): +# - Single-qubit rotations (X, Y, H): 20–30 ns = 0.020–0.030 μs +# - Z rotations: 0 ns = 0.0 μs (virtual gates, frame update only) +# - CNOT (microwave cross-resonance): 100–300 ns = 0.1–0.3 μs +# - CNOT (flux-pulsed CZ + locals): 30–50 ns = 0.03–0.05 μs + overheads +# +# ============================================================ + # Identity I2 = torch.eye(2, dtype=torch.cfloat) @@ -12,47 +45,66 @@ def clamp_prob(p: float) -> float: return max(0.0, min(1.0, p)) # ============================================================ -# Thermal relaxation error rates (T1 / T2) +# Thermal relaxation error rates (T1 / T2 / Tφ) # ============================================================ +def compute_tphi_from_t2(T1: float, T2: float) -> float: + """ + Compute pure dephasing time T_φ from T1 and T2. + + Physics: 1/T2 = 1/(2T1) + 1/T_φ + Therefore: T_φ = 1 / (1/T2 - 1/(2T1)) = T2*T1 / (2*T1 - T2) + + For realistic transmons: + - T1 ≈ 70–100 μs (energy relaxation) + - T2 ≈ 70–200 μs (overall coherence time) + - T_φ ≈ 100+ μs (pure dephasing, often T_φ ≥ T1) + """ + if T1 <= 0 or T2 <= 0: + return float('inf') + + denominator = 2 * T1 - T2 + if abs(denominator) < 1e-12: # T2 ≈ 2*T1, T_φ → ∞ + return float('inf') + if denominator <= 0: # Unphysical: T2 > 2*T1 + return float('inf') + + return T2 * T1 / denominator + + def thermal_relaxation_error_rate( T1: float, T2: float, idle_time: float ) -> tuple[float, float]: """ - Given T1, T2, and idle time Δt, return (λ1, λ2): - - λ1 : amplitude damping probability - λ2 : pure dephasing probability - - Physics: - λ1 = 1 - exp(-Δt / T1) - exp(-Δt/T2) = exp(-Δt/(2T1)) * (1 - 2λ2) + Compute dimensionless probabilities (λ1, λ_φ) for T1/T2 decoherence. + + Physics: 1/T2 = 1/(2T1) + 1/T_φ → T_φ is implicit in T1 and T2. + + UNITS: All parameters (T1, T2, idle_time) MUST be in MICROSECONDS (μs). + Returns dimensionless probabilities λ1, λ_φ ∈ [0,1]. + + Typical values (in μs): + - T1: 70–100 μs (energy relaxation) + - T2: 70–150 μs (coherence time, constraint: T2 ≤ 2*T1) + - gate_durations: 0.025 μs (single-qubit), 0.2 μs (CNOT) """ + # Validate physical constraints + assert T1 > 0, f"T1 must be positive, got {T1}" + assert T2 > 0, f"T2 must be positive, got {T2}" + if idle_time <= 0.0: return 0.0, 0.0 - # --- Amplitude damping (T1) --- - if T1 <= 0.0 or math.isinf(T1): - λ1 = 0.0 - else: - λ1 = 1.0 - math.exp(-idle_time / T1) + # λ1: dimensionless probability of amplitude damping during idle_time + λ1 = 1.0 - math.exp(-idle_time / T1) + + # λ_φ: dimensionless probability of pure dephasing during idle_time + # Dephasing rate (1/time): 1/T_φ = 1/T2 - 1/(2T1) + dephasing_rate = (1.0 / T2) - (1.0 / (2.0 * T1)) + λ_φ = 0.5 * (1.0 - math.exp(-idle_time * dephasing_rate)) - λ1 = clamp_prob(λ1) - - # --- Pure dephasing (T2) --- - if T2 <= 0.0 or math.isinf(T2): - λ2 = 0.0 - else: - if T1 <= 0.0 or math.isinf(T1): - λ2 = (1.0 - math.exp(-idle_time / T2)) / 2.0 - else: - exp_arg = -idle_time / T2 + idle_time / (2.0 * T1) - λ2 = (1.0 - math.exp(exp_arg)) / 2.0 - - λ2 = clamp_prob(λ2) - - return λ1, λ2 + return clamp_prob(λ1), clamp_prob(λ_φ) # ============================================================ # Kraus operators: Amplitude damping @@ -86,17 +138,21 @@ def amplitude_damping_kraus(λ1: float) -> List[torch.Tensor]: # ============================================================ # Kraus operators: Phase damping # ============================================================ -def phase_damping_kraus(λ2: float) -> List[torch.Tensor]: +def phase_damping_kraus(λ_φ: float) -> List[torch.Tensor]: """ - Single-qubit pure dephasing channel. - Off-diagonals decay, populations unchanged. + Single-qubit pure dephasing channel (T_φ decoherence). + + Parameter λ_φ is a dimensionless probability ∈ [0,1], already integrated + over some time interval from physical T_φ via thermal_relaxation_error_rate. + + Channel: ρ ↦ (1-λ_φ)ρ + λ_φ Z ρ Z, so ρ_01 → (1-2λ_φ)ρ_01 per application. """ - λ2 = clamp_prob(λ2) + λ_φ = clamp_prob(λ_φ) - if λ2 == 0.0: + if λ_φ == 0.0: return [torch.eye(2, dtype=torch.cfloat)] - p = λ2 + p = λ_φ Z = torch.tensor([[1.0, 0.0], [0.0, -1.0]], dtype=torch.cfloat) @@ -121,10 +177,30 @@ def add_time_based_noise( T1: float, T2: float, gate_durations: Dict[str, float], + gate_noise_fraction: float = 1.0, ) -> List[Tuple]: """ Insert T1/T2 idle noise between gates based on timing. + + Parameters: + circuit: List of gate operations [(gate_name, [qubits], param), ...] + num_qubits: Number of qubits in the circuit + T1: Amplitude damping time constant (μs) + T2: Dephasing time constant (μs) + gate_durations: Map of gate names to their durations (all in μs) + gate_noise_fraction: Fraction of gate time to add as simulated constant + decoherence noise (0.0 to 1.0). This simulates continuous T1/T2 + relaxation that occurs even while gates are being applied, by + inserting noise "gaps" before each gate proportional to its duration. + Default is 0.0 (only idle noise, no gate-time decoherence). + + UNITS: All time quantities (T1, T2, gate_durations) must be in MICROSECONDS (μs). + + Returns: + Extended circuit with T1T2_NOISE operations inserted. """ + gate_noise_fraction = max(0.0, min(1.0, gate_noise_fraction)) # clamp to [0, 1] + accounted_for_time = [0.0] * num_qubits noisy_circuit: List[Tuple] = [] @@ -138,11 +214,6 @@ def add_time_based_noise( time_to_elapse = op_time(name, gate_durations) - # If op acts on multiple qubits, bring them to the same time - if len(acted_on) > 1: - max_time = max(accounted_for_time[q] for q in acted_on) - - # Synchronize multi-qubit gates if len(acted_on) > 1: max_time = max(accounted_for_time[q] for q in acted_on) @@ -156,13 +227,24 @@ def add_time_based_noise( ) accounted_for_time[q] = max_time + # Add simulated constant noise (decoherence during gate execution) + # This models T1/T2 relaxation that occurs even while a gate is applied + if gate_noise_fraction > 0.0 and time_to_elapse > 0.0: + noise_time = time_to_elapse * gate_noise_fraction + for q in acted_on: + λ1, λ2 = thermal_relaxation_error_rate(T1, T2, noise_time) + if λ1 > 0.0 or λ2 > 0.0: + noisy_circuit.append( + ("T1T2_NOISE", [q], λ1, λ2, noise_time) + ) + noisy_circuit.append(op) for q in acted_on: accounted_for_time[q] += time_to_elapse # Pad final idle time - end_time = max(accounted_for_time) + end_time = max(accounted_for_time) if accounted_for_time else 0.0 for q in range(num_qubits): if accounted_for_time[q] < end_time: idle = end_time - accounted_for_time[q] diff --git a/qml_training.py b/qml_training.py index 2195d88..503bf40 100644 --- a/qml_training.py +++ b/qml_training.py @@ -4,6 +4,8 @@ import random from enum import Enum +from constants import DEFAULT_GATE_DURATIONS, DEFAULT_T1, DEFAULT_T2 + DEBUG = False class EncodingType(Enum): @@ -35,6 +37,7 @@ class EncodingType(Enum): # Dataset (REAL-WORLD) # ============================================================ def make_real_dataset(test_size=0.3, seed=42, encoding=EncodingType.ANGLE): + """Load breast-cancer data, map labels to {-1,+1}, and return train/test splits for the chosen encoding.""" data = load_breast_cancer() X = data.data y = data.target @@ -124,27 +127,33 @@ def make_moons_dataset(test_size=0.3, seed=42, noise=0.15, encoding=EncodingType # Metrics # ============================================================ def binary_predictions(scores): + """Convert real-valued scores to {-1,+1} labels.""" return torch.where(scores >= 0, 1.0, -1.0) def accuracy(y_true, y_pred): + """Binary accuracy for {-1,+1} targets.""" return (y_true == y_pred).float().mean().item() def precision(y_true, y_pred): + """Positive predictive value for {-1,+1} labels.""" tp = ((y_pred == 1) & (y_true == 1)).sum().item() fp = ((y_pred == 1) & (y_true == -1)).sum().item() return tp / (tp + fp + 1e-9) def recall(y_true, y_pred): + """True positive rate for {-1,+1} labels.""" tp = ((y_pred == 1) & (y_true == 1)).sum().item() fn = ((y_pred == -1) & (y_true == 1)).sum().item() return tp / (tp + fn + 1e-9) def f1_score(y_true, y_pred): + """Harmonic mean of precision and recall.""" p = precision(y_true, y_pred) r = recall(y_true, y_pred) return 2 * p * r / (p + r + 1e-9) def roc_auc_score(y_true, scores): + """Manual ROC-AUC for {-1,+1} labels and real-valued scores.""" idx = torch.argsort(scores, descending=True) y = y_true[idx] @@ -169,6 +178,7 @@ def roc_auc_score(y_true, scores): return auc def compute_metrics(scores, y_true): + """Return basic classification metrics from scores and true labels.""" y_pred = binary_predictions(scores) return { "accuracy": accuracy(y_true, y_pred), @@ -182,6 +192,7 @@ def compute_metrics(scores, y_true): # Quantum utilities # ============================================================ def expectation_z(state, qubit, n): + """Compute ⟨Z⟩ on the specified qubit for a ket state.""" op = None for q in range(n): mat = Z if q == qubit else I2 @@ -243,6 +254,7 @@ def state_encoding(x, n, encoding=EncodingType.ANGLE): # Deep Variational QNN, no errors # ============================================================ def deep_vqc_forward(x, theta, depth=3, encoding=EncodingType.ANGLE, n=None): + """Forward pass of the noiseless deep VQC, returning ⟨Z0⟩.""" # Calculate number of qubits based on encoding type if n is None: n = len(x) if encoding == EncodingType.ANGLE else int(math.log2(len(x))) @@ -268,6 +280,7 @@ def deep_vqc_forward(x, theta, depth=3, encoding=EncodingType.ANGLE, n=None): # Helper function to build layer of RX/Y/Z on selected qubits def param_gate_layer(gate: str, x, specify_qubits: tuple[int] | None = None): + """Construct a list of single-qubit parameterized gates over given qubits.""" op_list = [] if specify_qubits == None: # Apply gate to all qubits @@ -283,12 +296,13 @@ def param_gate_layer(gate: str, x, specify_qubits: tuple[int] | None = None): """ Noisy-VQC forward pass (one layer), with T1/T2 noise model. """ -def noisy_qnn_forward(x, theta, T1=100, T2=200, - gate_durations={ # needed for noise model - "CNOT": 1, - "RY" : 1, - }, - encoding=EncodingType.ANGLE): +def noisy_qnn_forward(x, theta, T1=DEFAULT_T1, T2=DEFAULT_T2, + gate_durations=None, # needed for noise model (all times in μs) + encoding=EncodingType.ANGLE, + gate_noise_fraction=1.0): + + if gate_durations is None: + gate_durations = dict(DEFAULT_GATE_DURATIONS) # Calculate number of qubits based on encoding type n = len(x) if encoding == EncodingType.ANGLE else int(math.log2(len(x))) @@ -313,7 +327,8 @@ def noisy_qnn_forward(x, theta, T1=100, T2=200, num_qubits = n, T1 = T1, T2 = T2, - gate_durations = gate_durations + gate_durations = gate_durations, + gate_noise_fraction = gate_noise_fraction ) Z0 = torch.kron(Z, I2) @@ -323,22 +338,58 @@ def noisy_qnn_forward(x, theta, T1=100, T2=200, # ============================================================ # Quantum Kernel Model # ============================================================ - -def quantum_feature_map(x, encoding=EncodingType.ANGLE): +def quantum_feature_map(x, encoding=EncodingType.ANGLE, T1=None, T2=None, + gate_durations=None): + """Build the feature map circuit/state for kernel or noisy simulation.""" + if gate_durations is None: + gate_durations = dict(DEFAULT_GATE_DURATIONS) # Calculate number of qubits based on encoding type n = len(x) if encoding == EncodingType.ANGLE else int(math.log2(len(x))) - init_state,circ = state_encoding(x,n,encoding) - state = apply_circuit_to_ket(init_state,circ,n) - state = apply_gate(state, CNOT, [0,1], n) - return state - -def quantum_kernel(x1, x2, encoding = EncodingType.ANGLE): - ψ1 = quantum_feature_map(x1, encoding) - ψ2 = quantum_feature_map(x2, encoding) - return torch.abs(torch.dot(ψ1.conj(), ψ2))**2 - -def kernel_predict(x, X_train, y_train, encoding = EncodingType.ANGLE): - vals = torch.tensor([quantum_kernel(x, xi, encoding) for xi in X_train]) + init_state, circ = state_encoding(x, n, encoding) + + # Add CNOT to circuit + circ += [("CNOT", [0, 1])] + + # If noise parameters provided, use noisy simulation + if T1 is not None and T2 is not None: + density = run_noisy_circuit_density( + initial_state=init_state, + circuit=circ, + num_qubits=n, + T1=T1, + T2=T2, + gate_durations=gate_durations + ) + return density + else: + # Noiseless case: apply circuit to ket vector + state = apply_circuit_to_ket(init_state, circ, n) + return state + +def quantum_kernel(x1, x2, encoding=EncodingType.ANGLE, T1=None, T2=None, + gate_durations=None): + """Compute kernel value between two inputs via feature map (ket or density).""" + if gate_durations is None: + gate_durations = dict(DEFAULT_GATE_DURATIONS) + ψ1 = quantum_feature_map(x1, encoding, T1, T2, gate_durations) + ψ2 = quantum_feature_map(x2, encoding, T1, T2, gate_durations) + + # Handle both ket vectors and density matrices + if isinstance(ψ1, torch.Tensor) and ψ1.dim() == 1: + # Noiseless: ket vector inner product + return torch.abs(torch.dot(ψ1.conj(), ψ2))**2 + else: + # Noisy: trace distance between density matrices + return torch.real(torch.trace(ψ1 @ ψ2)) + +def kernel_predict(x, X_train, y_train, encoding=EncodingType.ANGLE, T1=None, T2=None, + gate_durations=None): + """Predict sign label via kernel sum against training set.""" + if gate_durations is None: + gate_durations = dict(DEFAULT_GATE_DURATIONS) + vals = torch.tensor([ + quantum_kernel(x, xi, encoding, T1, T2, gate_durations) for xi in X_train + ]) return torch.sign(torch.sum(vals * y_train)) # ============================================================ @@ -366,7 +417,7 @@ def kernel_predict(x, X_train, y_train, encoding = EncodingType.ANGLE): Otherwise: None """ -def train(model_type="deep_vqc", encoding=EncodingType.ANGLE, epochs=25, dataset="real", record_metrics=False, T1=100, T2=200): +def train(model_type="deep_vqc", encoding=EncodingType.ANGLE, epochs=25, dataset="real", record_metrics=False, T1=DEFAULT_T1, T2=DEFAULT_T2): if dataset == "real": X_train, X_test, y_train, y_test = make_real_dataset(encoding=encoding) elif dataset == "moons": @@ -379,7 +430,7 @@ def train(model_type="deep_vqc", encoding=EncodingType.ANGLE, epochs=25, dataset if model_type == "kernel": scores = torch.tensor([ - kernel_predict(x, X_train, y_train, encoding) for x in X_test + kernel_predict(x, X_train, y_train, encoding, T1, T2) for x in X_test ]) metrics = compute_metrics(scores, y_test) print(f"{dataset.upper()} KERNEL TEST METRICS:", metrics) diff --git a/quantum_simulator.py b/quantum_simulator.py index 98aeea4..720836a 100644 --- a/quantum_simulator.py +++ b/quantum_simulator.py @@ -2,6 +2,7 @@ from locale import str import torch import math +from constants import DEFAULT_GATE_DURATIONS, DEFAULT_T1, DEFAULT_T2 from error_kraus import * from visualizer import plot_measurement_comparison # ─────────────────────────────────────────────────────────────── @@ -303,28 +304,28 @@ def apply_T1T2_noise_op( num_qubits: int, ) -> torch.Tensor: """ - noise_op = ("T1T2_NOISE", [q], λ1, λ2, idle_time) - - Corrected version: applies amplitude damping and phase damping - as two *composed* channels, not as a single concatenated Kraus set. - This keeps the map trace-preserving. + Apply T1 (amplitude damping) and T_φ (pure dephasing) channels. + noise_op = ("T1T2_NOISE", [q], λ1, λ_φ, idle_time) + + Applies: (1) amplitude damping, then (2) pure dephasing. + Keeps the map trace-preserving. """ - _, qubits, λ1, λ2, _ = noise_op + _, qubits, λ1, λ_φ, _ = noise_op q = qubits[0] - # 1) Amplitude damping (T1 part) + # 1) Amplitude damping (T1: |1⟩ → |0⟩ relaxation) if λ1 > 0.0: - amp_kraus = amplitude_damping_kraus(λ1) # single-qubit {E_i} - amp_full = embed_single_qubit_kraus(amp_kraus, q, num_qubits) # {E_i^full} + amp_kraus = amplitude_damping_kraus(λ1) + amp_full = embed_single_qubit_kraus(amp_kraus, q, num_qubits) amp_ops_probs = make_operations_probs_from_kraus(amp_full) - density = kraus_operator(density, amp_ops_probs) # ρ ← Σ_i E_i ρ E_i† + density = kraus_operator(density, amp_ops_probs) - # 2) Pure dephasing (Tφ part) - if λ2 > 0.0: - deph_kraus = phase_damping_kraus(λ2) # single-qubit {F_j} + # 2) Pure dephasing (T_φ: coherence loss from 1/T2 - 1/(2T1)) + if λ_φ > 0.0: + deph_kraus = phase_damping_kraus(λ_φ) deph_full = embed_single_qubit_kraus(deph_kraus, q, num_qubits) deph_ops_probs = make_operations_probs_from_kraus(deph_full) - density = kraus_operator(density, deph_ops_probs) # ρ ← Σ_j F_j ρ F_j† + density = kraus_operator(density, deph_ops_probs) return density @@ -339,16 +340,21 @@ def run_noisy_circuit_density( T1: float, T2: float, gate_durations: Dict[str, float], + gate_noise_fraction: float = 1.0, ) -> torch.Tensor: """ Execute a circuit with T1/T2 time-based idle noise, in the density-matrix picture. + UNITS: All time quantities (T1, T2, gate_durations) must be in MICROSECONDS (μs). + Inputs: initial_state : state vector (length 2^n) circuit : [(gate_name, [qubits]), ...] num_qubits : number of qubits - T1, T2 : relaxation times - gate_durations: map gate_name -> duration + T1, T2 : relaxation times (μs) + gate_durations: map gate_name -> duration (μs) + gate_noise_fraction: fraction of gate time to add as simulated constant + decoherence noise (0.0 to 1.0). Models T1/T2 relaxation during gates. Output: density matrix ρ_final (2^n x 2^n) @@ -365,6 +371,7 @@ def run_noisy_circuit_density( T1=T1, T2=T2, gate_durations=gate_durations, + gate_noise_fraction=gate_noise_fraction, ) # Optional cache for full unitaries @@ -415,14 +422,11 @@ def run_noisy_circuit_density( ("CNOT",[0,1]), ] - # simple uniform durations - gate_durations ={ - "H": 1, - "CNOT": 1, - } + # Realistic gate durations (all times in μs) for superconducting transmons + gate_durations = dict(DEFAULT_GATE_DURATIONS) - T1 = 10 - T2 = 20 + T1 = DEFAULT_T1 # μs + T2 = 120.0 # μs # compare normal to kraus result ρ_final_normal = run_noisy_circuit_density( diff --git a/run_experiments.py b/run_experiments.py index d872a95..ebf200f 100644 --- a/run_experiments.py +++ b/run_experiments.py @@ -15,6 +15,7 @@ from datetime import datetime from itertools import product +from constants import DEFAULT_T1, DEFAULT_T2 from qml_training import train, EncodingType # Configuration options @@ -107,7 +108,7 @@ def find_matching_csvs(data_dir, dataset, T1, T2, epochs): return found_files -def plot_from_results(results, dataset, T1=100, T2=200, epochs=25, save=False): +def plot_from_results(results, dataset, T1=DEFAULT_T1, T2=DEFAULT_T2, epochs=25, save=False): """ Plot comparison from in-memory results. @@ -176,7 +177,7 @@ def save_summary_csv(all_results, filepath): ]) -def run_all_experiments(epochs=25, T1=100, T2=200): +def run_all_experiments(epochs=25, T1=DEFAULT_T1, T2=DEFAULT_T2): """ Run all training configurations and save results. @@ -268,12 +269,12 @@ def main(): help='Number of training epochs (default: 25)' ) parser.add_argument( - '--T1', type=float, default=100, - help='T1 relaxation time in µs for noise model (default: 100)' + '--T1', type=float, default=DEFAULT_T1, + help=f'T1 relaxation time in µs for noise model (default: {DEFAULT_T1})' ) parser.add_argument( - '--T2', type=float, default=200, - help='T2 dephasing time in µs for noise model (default: 200)' + '--T2', type=float, default=DEFAULT_T2, + help=f'T2 dephasing time in µs for noise model (default: {DEFAULT_T2})' ) parser.add_argument( '--models', type=str, nargs='+', default=None, diff --git a/tests/test_qml_run.py b/tests/test_qml_run.py index afb1b16..01f0307 100644 --- a/tests/test_qml_run.py +++ b/tests/test_qml_run.py @@ -55,7 +55,6 @@ def test_kernel_predict_runs(self): self.assertTrue(torch.is_tensor(pred)) self.assertEqual(pred.numel(), 1) - class TestAllConfigurationsTraining(unittest.TestCase): """Test training with 2 epochs for all configurations.""" diff --git a/tests/test_quantum_simulator.py b/tests/test_quantum_simulator.py index a42692c..ab2483e 100644 --- a/tests/test_quantum_simulator.py +++ b/tests/test_quantum_simulator.py @@ -312,24 +312,30 @@ class TestNoiseHelpers(TestHelper): # thermal_relaxation_error_rate # ─────────────────────────────────────────────────────────── def test_thermal_relaxation_zero_idle(self): - λ1, λ2 = thermal_relaxation_error_rate(T1=30e-6, T2=20e-6, idle_time=0.0) + λ1, λ_φ = thermal_relaxation_error_rate(T1=100.0, T2=120.0, idle_time=0.0) self.assertAlmostEqual(λ1, 0.0) - self.assertAlmostEqual(λ2, 0.0) + self.assertAlmostEqual(λ_φ, 0.0) def test_thermal_relaxation_finite_idle(self): - T1 = 10.0 - T2 = 8.0 - dt = 1.0 - λ1, λ2 = thermal_relaxation_error_rate(T1, T2, dt) + T1 = 100.0 + T2 = 120.0 + dt = 10.0 + λ1, λ_φ = thermal_relaxation_error_rate(T1, T2, dt) # Check λ1 matches 1 - exp(-dt/T1) self.assertAlmostEqual(λ1, 1.0 - math.exp(-dt / T1)) - # Check that total coherence factor matches e^{-dt/T2} - # predicted: e^{-dt/(2T1)} (1 - 2 λ2) - coh_factor = math.exp(-dt / T2) - coh_factor_pred = math.exp(-dt / (2.0 * T1)) * (1.0 - 2.0 * λ2) - self.assertAlmostEqual(coh_factor, coh_factor_pred, places=7) + # Check dephasing from T_φ: 1/T_φ = 1/T2 - 1/(2*T1) + dephasing_rate = (1.0 / T2) - (1.0 / (2.0 * T1)) + expected_λ_φ = 0.5 * (1.0 - math.exp(-dt * dephasing_rate)) + self.assertAlmostEqual(λ_φ, expected_λ_φ, places=7) + + def test_thermal_relaxation_t2_can_be_less_than_t1(self): + """T2 can be < T1 if pure dephasing is strong (relation: 1/T2 = 1/(2T1) + 1/T_φ).""" + # Valid: T2 < T1 is allowed (strong pure dephasing) + λ1, λ_φ = thermal_relaxation_error_rate(T1=100.0, T2=80.0, idle_time=10.0) + self.assertGreaterEqual(λ1, 0.0) + self.assertGreaterEqual(λ_φ, 0.0) # ─────────────────────────────────────────────────────────── # amplitude_damping_kraus @@ -361,7 +367,7 @@ def test_phase_damping_identity_for_zero_lambda(self): self.assert_tensors_close(ks[0], torch.eye(2, dtype=torch.cfloat)) def test_phase_damping_kills_coherence_for_half(self): - # λ2 = 0.5 ⇒ off-diagonals multiplied by (1 - 2λ2) = 0 + # λ_φ = 0.5 ⇒ off-diagonals multiplied by (1 - 2λ_φ) = 0 ks = phase_damping_kraus(0.5) plus = torch.tensor([1/math.sqrt(2), 1/math.sqrt(2)], dtype=torch.cfloat) ρ = state_to_density(plus) @@ -438,11 +444,11 @@ def test_op_time_lookup(self): # add_time_based_noise # ─────────────────────────────────────────────────────────── def test_add_time_based_noise_two_qubits(self): - # Circuit: H on 0, then CNOT on (0,1) with equal durations + # Circuit: H on 0, then CNOT on (0,1) circuit = [("H", [0]), ("CNOT", [0, 1])] num_qubits = 2 T1 = 10.0 - T2 = 8.0 + T2 = 12.0 gate_durations = {"H": 1.0, "CNOT": 1.0} noisy = add_time_based_noise( @@ -451,6 +457,7 @@ def test_add_time_based_noise_two_qubits(self): T1=T1, T2=T2, gate_durations=gate_durations, + gate_noise_fraction=0.0, # Test idle noise only ) # Expected: @@ -466,13 +473,36 @@ def test_add_time_based_noise_two_qubits(self): self.assertEqual(noise_op[1], [1]) self.assertAlmostEqual(noise_op[4], 1.0) # idle_time - λ1_expected, λ2_expected = thermal_relaxation_error_rate(T1, T2, 1.0) + λ1_expected, λ_φ_expected = thermal_relaxation_error_rate(T1, T2, 1.0) self.assertAlmostEqual(noise_op[2], λ1_expected) - self.assertAlmostEqual(noise_op[3], λ2_expected) + self.assertAlmostEqual(noise_op[3], λ_φ_expected) self.assertEqual(noisy[2][0], "CNOT") self.assertEqual(noisy[2][1], [0, 1]) + def test_gate_times_realistic_superconducting(self): + """Verify gate durations match realistic superconducting transmon hardware (all times in μs).""" + # Realistic values in microseconds (1 ns = 0.001 μs) + gate_durations_realistic = { + "RX": 0.025, # Single-qubit: 20–30 ns = 0.020–0.030 μs + "RY": 0.025, + "RZ": 0.0, # Virtual gate: 0 ns = 0.0 μs + "H": 0.025, + "X": 0.025, + "CNOT": 0.2, # Microwave: 100–300 ns = 0.1–0.3 μs (rep: 200 ns = 0.2 μs) + } + + # Validate ranges (all times in μs) + for gate, duration_us in gate_durations_realistic.items(): + if gate == "RZ": + self.assertEqual(duration_us, 0.0, f"{gate} should be virtual (0 μs)") + elif gate in ["RX", "RY", "H", "X"]: + self.assertGreaterEqual(duration_us, 0.020, f"{gate} too fast") + self.assertLessEqual(duration_us, 0.030, f"{gate} too slow") + elif gate == "CNOT": + self.assertGreaterEqual(duration_us, 0.1, f"{gate} too fast") + self.assertLessEqual(duration_us, 0.3, f"{gate} too slow") + class TestDensityExecutor(TestHelper): # ─────────────────────────────────────────────────────────── # build_full_unitary @@ -533,9 +563,9 @@ def test_run_noisy_circuit_density_no_noise_limit(self): n = 1 state = zero_state(n) circuit = [("H", [0])] - gate_durations = {"H": 1e-9} - T1 = 1e9 - T2 = 1e9 + gate_durations = {"H": 0.001} # 1 ns = 0.001 μs + T1 = 1e6 # 1e6 μs (very long, effectively no noise) + T2 = 1e6 # 1e6 μs (very long, effectively no noise) ρ_final = run_noisy_circuit_density( initial_state=state, @@ -565,11 +595,11 @@ def test_apply_T1T2_noise_op_trace_preserving(self): ) ρ = state_to_density(state) - # Choose nontrivial λ1 and λ2 so both amplitude and phase damping act + # Nontrivial λ1 (T1 damping) and λ_φ (T_φ dephasing) λ1 = 0.3 - λ2 = 0.4 + λ_φ = 0.4 idle_time = 1.0 - noise_op = ("T1T2_NOISE", [0], λ1, λ2, idle_time) + noise_op = ("T1T2_NOISE", [0], λ1, λ_φ, idle_time) ρ_out = apply_T1T2_noise_op(ρ, noise_op, num_qubits) @@ -588,18 +618,14 @@ def test_run_noisy_circuit_density_trace_preserving(self): n = 3 state = zero_state(n) - circuit = [ - ("H", [0]), - ("CNOT", [0, 1]), - ] - + circuit = [("H", [0]), ("CNOT", [0, 1])] gate_durations = { - "H": 20e-9, - "CNOT": 40e-9, + "H": 0.025, # Single-qubit: 25 ns = 0.025 μs + "CNOT": 0.2, # CNOT: 200 ns = 0.2 μs } - T1 = 30e-6 - T2 = 20e-6 + T1 = 100.0 # μs + T2 = 120.0 # μs ρ_final = run_noisy_circuit_density( initial_state=state, @@ -627,12 +653,12 @@ def test_run_noisy_circuit_density_trace_preserving_high_err(self): ] gate_durations = { - "H": 1, - "CNOT": 1, + "H": 0.025, # μs + "CNOT": 0.2, # μs } - T1 = 10 - T2 = 20 + T1 = 100.0 # μs + T2 = 120.0 # μs ρ_final = run_noisy_circuit_density( initial_state=state,