{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fa26d8ad",
   "metadata": {},
   "source": [
    "# 水素分子で学ぶ VQE・SQD\n",
    "\n",
    "Qiskit Fall Fest 2026 @ Keio · Leona Quantum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30a72b86",
   "metadata": {},
   "source": [
    "## 目次\n",
    "\n",
    "| セクション | 内容 |\n",
    "|---|---|\n",
    "| 0 | 準備 |\n",
    "| A | 行列の基本 |\n",
    "| B | 水素分子と電子配置 |\n",
    "| C | VQE：角度とエネルギー |\n",
    "| D | SQD：量子測定とサンプリング |\n",
    "| E | SQD：部分空間対角化 |\n",
    "| F（任意） | 配置回復などの発展 |\n",
    "| 発展（任意） | SQD addonと分子積分 |\n",
    "| 実機（任意） | IBM Quantumで測定 |"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "635c88f5",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 0. 準備\n",
    "\n",
    "最初のセルはGoogle Colabに必要なライブラリを入れます。すでに導入されている場合は飛ばして構いません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "729ad83b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:23.417062Z",
     "iopub.status.busy": "2026-10-16T04:32:23.416889Z",
     "iopub.status.idle": "2026-10-16T04:32:23.883700Z",
     "shell.execute_reply": "2026-10-16T04:32:23.883327Z"
    }
   },
   "outputs": [],
   "source": [
    "%pip -q install \"qiskit==2.5.1\" \"numpy>=2.2,<3\" \"matplotlib>=3.9,<4\" \"scipy>=1.13,<2\" \"ipywidgets>=8.1,<9\" \"pylatexenc==2.10\"\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b970badd",
   "metadata": {},
   "source": [
    "`numpy` は行列、`matplotlib` はグラフ、`ipywidgets` はスライダー、`qiskit` は量子回路を扱うために使います。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "482445de",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:23.885210Z",
     "iopub.status.busy": "2026-10-16T04:32:23.885092Z",
     "iopub.status.idle": "2026-10-16T04:32:24.171223Z",
     "shell.execute_reply": "2026-10-16T04:32:24.170977Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import ipywidgets as widgets\n",
    "from IPython.display import display\n",
    "from qiskit import QuantumCircuit\n",
    "from qiskit.quantum_info import Statevector\n",
    "# 図のラベルは英語、説明は日本語。数式と文字の表示設定です。\n",
    "plt.rcParams.update({\n",
    "    'font.family': 'DejaVu Sans', 'mathtext.fontset': 'dejavusans',\n",
    "    'axes.unicode_minus': True, 'font.size': 12, 'figure.dpi': 110,\n",
    "})\n",
    "try:\n",
    "    from google.colab import output as colab_output\n",
    "    colab_output.enable_custom_widget_manager()\n",
    "except ImportError:\n",
    "    pass\n",
    "\n",
    "\n",
    "def show_circuit(circuit):\n",
    "    figure = circuit.draw(output=\"mpl\", style=\"iqp\", fold=-1)\n",
    "    display(figure)\n",
    "    plt.close(figure)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3aad764a",
   "metadata": {},
   "source": [
    "Google Colabでは次の設定がスライダー表示に必要な場合があります。ローカルJupyterでは何も起こりません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "436b2bcf",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.172295Z",
     "iopub.status.busy": "2026-10-16T04:32:24.172213Z",
     "iopub.status.idle": "2026-10-16T04:32:24.174058Z",
     "shell.execute_reply": "2026-10-16T04:32:24.173876Z"
    }
   },
   "outputs": [],
   "source": [
    "try:\n",
    "    from google.colab import output\n",
    "    output.enable_custom_widget_manager()\n",
    "except ImportError:\n",
    "    pass"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79c8b8d9",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## A. 行列の基本（スライド1〜10）\n",
    "\n",
    "スライド1〜4では分子のエネルギーを求める理由を説明しています。ここからはスライド5〜10の内容をPythonで確かめます。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8cddb4a",
   "metadata": {},
   "source": [
    "### A1. 行列を1つ用意する\n",
    "\n",
    "**対応：スライド 5**　|　行列はベクトルを別のベクトルに変える計算です。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "A=\\begin{pmatrix}2&1\\\\1&2\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`A`：行列。`np.array`：数字を並べて配列を作る関数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d5e06098",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.174908Z",
     "iopub.status.busy": "2026-10-16T04:32:24.174863Z",
     "iopub.status.idle": "2026-10-16T04:32:24.176549Z",
     "shell.execute_reply": "2026-10-16T04:32:24.176281Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[2 1]\n",
      " [1 2]]\n"
     ]
    }
   ],
   "source": [
    "A = np.array([[2, 1],\n",
    "              [1, 2]])\n",
    "print(A)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78458435",
   "metadata": {},
   "source": [
    "### A2. ベクトルに行列を掛ける\n",
    "\n",
    "**対応：スライド 5〜6**　|　`@` は行列とベクトルの掛け算です。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "A\\begin{pmatrix}1\\\\0\\end{pmatrix}=\\begin{pmatrix}2\\\\1\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`v`：入力ベクトル。`Av`：行列を掛けた後のベクトル。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "入力と出力は同じ方向ではありません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "95f1f4d9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.177255Z",
     "iopub.status.busy": "2026-10-16T04:32:24.177211Z",
     "iopub.status.idle": "2026-10-16T04:32:24.178623Z",
     "shell.execute_reply": "2026-10-16T04:32:24.178486Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "入力: [1 0]\n",
      "出力: [2 1]\n"
     ]
    }
   ],
   "source": [
    "v = np.array([1, 0])\n",
    "Av = A @ v\n",
    "print(\"入力:\", v)\n",
    "print(\"出力:\", Av)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0acf252f",
   "metadata": {},
   "source": [
    "### A3. 固有ベクトルを確かめる\n",
    "\n",
    "**対応：スライド 7〜8**　|　特別なベクトルでは、行列を掛けても方向が変わらず、定数倍になります。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "A\\begin{pmatrix}1\\\\1\\end{pmatrix}=3\\begin{pmatrix}1\\\\1\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`w`：試したベクトル。`3`：この場合の固有値。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f14af3e4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.179330Z",
     "iopub.status.busy": "2026-10-16T04:32:24.179282Z",
     "iopub.status.idle": "2026-10-16T04:32:24.180811Z",
     "shell.execute_reply": "2026-10-16T04:32:24.180658Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A @ w = [3 3]\n",
      "3 * w = [3 3]\n"
     ]
    }
   ],
   "source": [
    "w = np.array([1, 1])\n",
    "print(\"A @ w =\", A @ w)\n",
    "print(\"3 * w =\", 3 * w)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "564e3287",
   "metadata": {},
   "source": [
    "### A4. 固有値を計算する\n",
    "\n",
    "**対応：スライド 8〜10**　|　`np.linalg.eigh` は、対称行列の固有値と固有ベクトルを計算します。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "A u=\\lambda u\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`eigvals`：小さい順の固有値。`eigvecs`：対応する固有ベクトル（列方向）。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "固有値は `1` と `3`。最も小さい固有値は `1` です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "42a0a8f7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.181519Z",
     "iopub.status.busy": "2026-10-16T04:32:24.181451Z",
     "iopub.status.idle": "2026-10-16T04:32:24.182850Z",
     "shell.execute_reply": "2026-10-16T04:32:24.182697Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "固有値: [1. 3.]\n",
      "最小固有値: 1.0\n"
     ]
    }
   ],
   "source": [
    "eigvals, eigvecs = np.linalg.eigh(A)\n",
    "print(\"固有値:\", eigvals)\n",
    "print(\"最小固有値:\", eigvals[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38a8a657",
   "metadata": {},
   "source": [
    "ここまでの計算を、次は分子のエネルギー行列に対して行います。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "768c85f9",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## B. 水素分子 H₂ の電子配置（スライド11〜15）\n",
    "\n",
    "STO-3Gでは空間軌道が2つあり、スピンを区別すると4スピン軌道です。ビット列は左から **`q3 q2 q1 q0 = u↓, g↓, u↑, g↑`**。Qiskitでは右端が量子ビット0です。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e0980b4",
   "metadata": {},
   "source": [
    "### B1. 4ビットの全配置を並べる\n",
    "\n",
    "**対応：スライド 11〜12**　|　各スピン軌道について0か1なので、全部で16通りです。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "2^4=16\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`format(i, \"04b\")`：整数を4桁の2進数文字列に変換します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "75cc822a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.183490Z",
     "iopub.status.busy": "2026-10-16T04:32:24.183452Z",
     "iopub.status.idle": "2026-10-16T04:32:24.184883Z",
     "shell.execute_reply": "2026-10-16T04:32:24.184754Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']\n",
      "全配置: 16\n"
     ]
    }
   ],
   "source": [
    "all_bits = [format(i, \"04b\") for i in range(16)]\n",
    "print(all_bits)\n",
    "print(\"全配置:\", len(all_bits))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8bbd8b4",
   "metadata": {},
   "source": [
    "### B2. 電子数の条件を定義する\n",
    "\n",
    "**対応：スライド 12**　|　左2ビット（下降スピン）と右2ビット（上昇スピン）に、電子がそれぞれ1個の配置だけを残します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`bits.count(\"1\")`：文字列に含まれる1の個数。`is_valid`：電子数を満たすかを返す関数。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "`0101` は正しいですが、`0100` は電子数が足りません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ef579153",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.185501Z",
     "iopub.status.busy": "2026-10-16T04:32:24.185432Z",
     "iopub.status.idle": "2026-10-16T04:32:24.186986Z",
     "shell.execute_reply": "2026-10-16T04:32:24.186829Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101: True\n",
      "0100: False\n"
     ]
    }
   ],
   "source": [
    "def is_valid(bits):\n",
    "    return bits[:2].count(\"1\") == 1 and bits[2:].count(\"1\") == 1\n",
    "\n",
    "print(\"0101:\", is_valid(\"0101\"))\n",
    "print(\"0100:\", is_valid(\"0100\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e024c6c",
   "metadata": {},
   "source": [
    "### B3. 対象となる4配置を選ぶ\n",
    "\n",
    "**対応：スライド 12**　|　16種類から今回の対象である4種類を取り出します。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "\\{0101,\\;0110,\\;1001,\\;1010\\}\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "`0101`、`0110`、`1001`、`1010` の4種類です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "efc975f3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.187677Z",
     "iopub.status.busy": "2026-10-16T04:32:24.187639Z",
     "iopub.status.idle": "2026-10-16T04:32:24.188943Z",
     "shell.execute_reply": "2026-10-16T04:32:24.188766Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['0101', '0110', '1001', '1010']\n"
     ]
    }
   ],
   "source": [
    "configs = [bits for bits in all_bits if is_valid(bits)]\n",
    "print(configs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "edd45cba",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.189680Z",
     "iopub.status.busy": "2026-10-16T04:32:24.189605Z",
     "iopub.status.idle": "2026-10-16T04:32:24.190953Z",
     "shell.execute_reply": "2026-10-16T04:32:24.190795Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "電子数条件を使う前: 16\n",
      "電子数条件を使った後: 4\n"
     ]
    }
   ],
   "source": [
    "print(\"電子数条件を使う前:\", 16)\n",
    "print(\"電子数条件を使った後:\", len(configs))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b87af63",
   "metadata": {},
   "source": [
    "### B4. 分子のハミルトニアンを入力する\n",
    "\n",
    "**対応：スライド 13**　|　新スライド13の、電子数を固定した4×4行列を使います。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`H_e`：電子ハミルトニアン（Hartree単位）。行と列は `configs` の順です。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "対角成分は一つの配置だけを使ったエネルギー、非対角成分は配置同士の結びつきです。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "2b83f107",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.191676Z",
     "iopub.status.busy": "2026-10-16T04:32:24.191635Z",
     "iopub.status.idle": "2026-10-16T04:32:24.193228Z",
     "shell.execute_reply": "2026-10-16T04:32:24.193075Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-1.837   0.      0.      0.1809]\n",
      " [ 0.     -1.0637  0.1809  0.    ]\n",
      " [ 0.      0.1809 -1.0637  0.    ]\n",
      " [ 0.1809  0.      0.     -0.2452]]\n"
     ]
    }
   ],
   "source": [
    "H_e = np.array([\n",
    "    [-1.8370,  0.0000,  0.0000,  0.1809],\n",
    "    [ 0.0000, -1.0637,  0.1809,  0.0000],\n",
    "    [ 0.0000,  0.1809, -1.0637,  0.0000],\n",
    "    [ 0.1809,  0.0000,  0.0000, -0.2452],\n",
    "])\n",
    "print(H_e)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee116af4",
   "metadata": {},
   "source": [
    "### B5. 行と列がどの配置か確認する\n",
    "\n",
    "**対応：スライド 13**　|　行列の0行目が`0101`、3行目が`1010`です。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "`0101` 単独では -1.8370 Ha。`0101` と `1010` の結合は +0.1809 です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5a6d1846",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.193987Z",
     "iopub.status.busy": "2026-10-16T04:32:24.193944Z",
     "iopub.status.idle": "2026-10-16T04:32:24.195361Z",
     "shell.execute_reply": "2026-10-16T04:32:24.195217Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0行目: 0101, 対角成分 = -1.8370 Ha\n",
      "1行目: 0110, 対角成分 = -1.0637 Ha\n",
      "2行目: 1001, 対角成分 = -1.0637 Ha\n",
      "3行目: 1010, 対角成分 = -0.2452 Ha\n"
     ]
    }
   ],
   "source": [
    "for i, bits in enumerate(configs):\n",
    "    print(f\"{i}行目: {bits}, 対角成分 = {H_e[i,i]:.4f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "98e3215c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.196027Z",
     "iopub.status.busy": "2026-10-16T04:32:24.195962Z",
     "iopub.status.idle": "2026-10-16T04:32:24.197263Z",
     "shell.execute_reply": "2026-10-16T04:32:24.197130Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101と1010の結合: 0.1809\n"
     ]
    }
   ],
   "source": [
    "print(\"0101と1010の結合:\", H_e[0, 3])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24600944",
   "metadata": {},
   "source": [
    "### B6. 4×4の最小固有値を先に求める\n",
    "\n",
    "**対応：スライド 9〜10・13**　|　最後にVQE・SQDと比較するため、答え合わせ用のエネルギーを記録します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`E_reference`：この4×4の電子ハミルトニアンの最小固有値。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "-1.857299 Ha 程度になります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "279b85bc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.197895Z",
     "iopub.status.busy": "2026-10-16T04:32:24.197859Z",
     "iopub.status.idle": "2026-10-16T04:32:24.199258Z",
     "shell.execute_reply": "2026-10-16T04:32:24.199118Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4×4の最小電子エネルギー: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "E_reference = float(np.linalg.eigvalsh(H_e)[0])\n",
    "print(f\"4×4の最小電子エネルギー: {E_reference:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "448709b8",
   "metadata": {},
   "source": [
    "**区別しておくこと**：16×16は4量子ビットの**全Fock空間**の行列サイズで、上の `H_e` は電子数・スピン投影を固定した**4×4ブロック**です。16×16行列すべてを先に計算したわけではありません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e3c9f7e",
   "metadata": {},
   "source": [
    "### スライド14：なぜ大きな分子では配置を絞りたい？\n",
    "\n",
    "電子数を固定しても、軌道数が増えると配置数は急増します。次のセルはスライド14の数値を確かめます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "a0df7786",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.199908Z",
     "iopub.status.busy": "2026-10-16T04:32:24.199870Z",
     "iopub.status.idle": "2026-10-16T04:32:24.201367Z",
     "shell.execute_reply": "2026-10-16T04:32:24.201210Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4量子ビット: 4 配置\n",
      "20量子ビット: 63,504 配置\n",
      "40量子ビット: 34,134,779,536 配置\n"
     ]
    }
   ],
   "source": [
    "from math import comb\n",
    "for spin_orbitals, n_up in [(4, 1), (20, 5), (40, 10)]:\n",
    "    spatial_orbitals = spin_orbitals // 2\n",
    "    dimension = comb(spatial_orbitals, n_up) ** 2\n",
    "    print(f\"{spin_orbitals}量子ビット: {dimension:,} 配置\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "498be036",
   "metadata": {},
   "source": [
    "### スライド15：VQE・QSCI・SQDの関係\n",
    "\n",
    "- **VQE**は回路の角度を変えながら、平均エネルギーを最小化します。\n",
    "- **QSCI**は量子測定から配置を選び、小さな行列を古典計算で対角化します。\n",
    "- **SQD**はこの部分空間対角化を利用し、実際の研究ではノイズの影響を受けた配置の回復なども行います。\n",
    "\n",
    "**これらは必ずVQE→QSCI→SQDの順に実行する手順ではありません。** 今回は理解しやすいようにVQEの試行状態をSQDの入力サンプルとして利用します。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78ca738e",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## C. VQEを体験（スライド16〜19）\n",
    "\n",
    "スライド16の「ここからVQE」に対応します。状態の混ざり具合を角度で変え、**平均エネルギーが最低になる角度**を探します。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b428f607",
   "metadata": {},
   "source": [
    "### C1. 角度を変えると何が変わる？\n",
    "\n",
    "**対応：スライド 17**　|　今回は `0101` と `1010` の2つだけを混ぜます。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "|\\psi(\\theta)\\rangle=\\cos\\frac{\\theta}{2}|0101\\rangle+\\sin\\frac{\\theta}{2}|1010\\rangle\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "60°では `0101` 約75%、`1010` 約25% の測定確率です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "6968a4a9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.202039Z",
     "iopub.status.busy": "2026-10-16T04:32:24.202004Z",
     "iopub.status.idle": "2026-10-16T04:32:24.203362Z",
     "shell.execute_reply": "2026-10-16T04:32:24.203218Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.866 0.5\n"
     ]
    }
   ],
   "source": [
    "theta_deg = 60\n",
    "c_0101 = np.cos(np.deg2rad(theta_deg) / 2)\n",
    "c_1010 = np.sin(np.deg2rad(theta_deg) / 2)\n",
    "print(round(c_0101, 4), round(c_1010, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ec9f5b3",
   "metadata": {},
   "source": [
    "### C2. 振幅を2乗して確率にする\n",
    "\n",
    "**対応：スライド 17**　|　測定確率は振幅の2乗です。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "P(0101)=|c_{0101}|^2,\\quad P(1010)=|c_{1010}|^2\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "75.0%、25.0% になります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ad5894b6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.204044Z",
     "iopub.status.busy": "2026-10-16T04:32:24.204007Z",
     "iopub.status.idle": "2026-10-16T04:32:24.205332Z",
     "shell.execute_reply": "2026-10-16T04:32:24.205191Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101: 75.0%\n",
      "1010: 25.0%\n"
     ]
    }
   ],
   "source": [
    "print(f\"0101: {c_0101**2:.1%}\")\n",
    "print(f\"1010: {c_1010**2:.1%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a14cdec1",
   "metadata": {},
   "source": [
    "### C3. Qiskitで4量子ビットの回路を準備する\n",
    "\n",
    "**対応：スライド 18**　|　まず `0101` を作ってから、回転・条件付き反転によって2配置の重ね合わせを作ります。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`qc`：QuantumCircuit。`x`：0と1の反転。`ry`：混ざり具合を角度で調整。`cx`：条件付き反転。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "最後の状態では、電子が1個ずつの2配置 `0101` / `1010` しか現れません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4f1fb89e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.206023Z",
     "iopub.status.busy": "2026-10-16T04:32:24.205983Z",
     "iopub.status.idle": "2026-10-16T04:32:24.287468Z",
     "shell.execute_reply": "2026-10-16T04:32:24.287276Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 224.274x404.678 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc_init = QuantumCircuit(4)\n",
    "qc_init.x(0)\n",
    "qc_init.x(2)\n",
    "show_circuit(qc_init)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0215bee3",
   "metadata": {},
   "source": [
    "初期状態は `|0000⟩`。`x(0)` と `x(2)` によって `|0101⟩` に変わります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "cf4c647c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.288280Z",
     "iopub.status.busy": "2026-10-16T04:32:24.288233Z",
     "iopub.status.idle": "2026-10-16T04:32:24.315036Z",
     "shell.execute_reply": "2026-10-16T04:32:24.314859Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 224.274x404.678 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc_half = qc_init.copy()\n",
    "qc_half.ry(np.deg2rad(60), 1)\n",
    "show_circuit(qc_half)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c18c3ff2",
   "metadata": {},
   "source": [
    "`ry` で0番と1番の電子を直接動かしているのではありません。量子ビット1の振幅を混ぜています。この時点では不要な中間配置も含まれます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "e1bc0980",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.315869Z",
     "iopub.status.busy": "2026-10-16T04:32:24.315822Z",
     "iopub.status.idle": "2026-10-16T04:32:24.342890Z",
     "shell.execute_reply": "2026-10-16T04:32:24.342708Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500.19x404.678 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qc_example = qc_half.copy()\n",
    "for target in (0, 2, 3):\n",
    "    qc_example.cx(1, target)\n",
    "show_circuit(qc_example)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb731e73",
   "metadata": {},
   "source": [
    "`cx(1, target)` は、量子ビット1が1の枝でだけ、対象ビットを反転します。最終的に `0101` と `1010` だけが残ります。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35a259f8",
   "metadata": {},
   "source": [
    "### C4. 角度を何度でも変えられる関数にする\n",
    "\n",
    "**対応：スライド 18**　|　同じ回路で角度だけ変えられるよう、関数にします。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "ef5339b2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.343699Z",
     "iopub.status.busy": "2026-10-16T04:32:24.343643Z",
     "iopub.status.idle": "2026-10-16T04:32:24.345226Z",
     "shell.execute_reply": "2026-10-16T04:32:24.345036Z"
    }
   },
   "outputs": [],
   "source": [
    "def make_circuit(theta_deg):\n",
    "    qc = QuantumCircuit(4)\n",
    "    qc.x(0)\n",
    "    qc.x(2)\n",
    "    qc.ry(np.deg2rad(theta_deg), 1)\n",
    "    for target in (0, 2, 3):\n",
    "        qc.cx(1, target)\n",
    "    return qc"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e2f839f",
   "metadata": {},
   "source": [
    "### C5. 状態ベクトルで答えを確かめる\n",
    "\n",
    "**対応：スライド 18**　|　理想的な量子状態の振幅を、Qiskitの `Statevector` で計算します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`state`：16成分を持つ状態ベクトル。`probabilities_dict()`：ビット列別の測定確率。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "約 `0101: 0.75`、`1010: 0.25`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "a7d7ecd1",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.345955Z",
     "iopub.status.busy": "2026-10-16T04:32:24.345907Z",
     "iopub.status.idle": "2026-10-16T04:32:24.349156Z",
     "shell.execute_reply": "2026-10-16T04:32:24.349009Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'0101': 0.75, '1010': 0.25}\n"
     ]
    }
   ],
   "source": [
    "state = Statevector.from_instruction(make_circuit(60))\n",
    "print({str(bits): round(float(p), 6) for bits, p in state.probabilities_dict().items()})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d39725be",
   "metadata": {},
   "source": [
    "### C6. エネルギーを計算する\n",
    "\n",
    "**対応：スライド 19**　|　ハミルトニアンと振幅から平均エネルギーを計算します。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "E(\\theta)=\\langle\\psi(\\theta)|H_e|\\psi(\\theta)\\rangle\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`indices`：4配置に対応する16次元状態ベクトルのインデックス。`np.vdot`：複素数ベクトルの内積。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "cb40658a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.349864Z",
     "iopub.status.busy": "2026-10-16T04:32:24.349785Z",
     "iopub.status.idle": "2026-10-16T04:32:24.351158Z",
     "shell.execute_reply": "2026-10-16T04:32:24.351007Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4配置の添字: [5, 6, 9, 10]\n"
     ]
    }
   ],
   "source": [
    "indices = [int(bits, 2) for bits in configs]\n",
    "print(\"4配置の添字:\", indices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "378e30a2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.351891Z",
     "iopub.status.busy": "2026-10-16T04:32:24.351845Z",
     "iopub.status.idle": "2026-10-16T04:32:24.353183Z",
     "shell.execute_reply": "2026-10-16T04:32:24.353046Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "電子数を固定した4つの振幅: [0.866 0.    0.    0.5  ]\n"
     ]
    }
   ],
   "source": [
    "a = state.data[indices]\n",
    "print(\"電子数を固定した4つの振幅:\", np.round(a.real, 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "77130321",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.353840Z",
     "iopub.status.busy": "2026-10-16T04:32:24.353802Z",
     "iopub.status.idle": "2026-10-16T04:32:24.355146Z",
     "shell.execute_reply": "2026-10-16T04:32:24.355008Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "60°の電子エネルギー: -1.282386 Ha\n"
     ]
    }
   ],
   "source": [
    "E_60 = float(np.vdot(a, H_e @ a).real)\n",
    "print(f\"60°の電子エネルギー: {E_60:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75a70246",
   "metadata": {},
   "source": [
    "**期待値**：スライド19では約 -1.2823 Ha と表示されています。Notebookはスライド13の**丸めた行列**を使うため、約 **-1.2824 Ha** です。これは表示精度による差であり、別の分子を計算しているわけではありません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b412bb0",
   "metadata": {},
   "source": [
    "### C7. 角度を入力したらエネルギーを返す\n",
    "\n",
    "**対応：スライド 19**　|　エネルギー計算を関数にして、角度を何回も変えます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "55125bc9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.355826Z",
     "iopub.status.busy": "2026-10-16T04:32:24.355785Z",
     "iopub.status.idle": "2026-10-16T04:32:24.357095Z",
     "shell.execute_reply": "2026-10-16T04:32:24.356940Z"
    }
   },
   "outputs": [],
   "source": [
    "def energy(theta_deg):\n",
    "    sv = Statevector.from_instruction(make_circuit(theta_deg))\n",
    "    amplitudes = sv.data[indices]\n",
    "    return float(np.vdot(amplitudes, H_e @ amplitudes).real)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "25bc5178",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.357826Z",
     "iopub.status.busy": "2026-10-16T04:32:24.357775Z",
     "iopub.status.idle": "2026-10-16T04:32:24.359703Z",
     "shell.execute_reply": "2026-10-16T04:32:24.359550Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  0°: -1.837000 Ha\n",
      " 60°: -1.282386 Ha\n",
      "-13°: -1.857295 Ha\n"
     ]
    }
   ],
   "source": [
    "for angle in (0, 60, -13):\n",
    "    print(f\"{angle:>3}°: {energy(angle):.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5833163e",
   "metadata": {},
   "source": [
    "### C8. エネルギー曲線を描く\n",
    "\n",
    "**対応：スライド 19**　|　角度を変えたときにエネルギーがどう変わるかを見ます。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "-13°付近に最小値が現れます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "373a6c43",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.360328Z",
     "iopub.status.busy": "2026-10-16T04:32:24.360287Z",
     "iopub.status.idle": "2026-10-16T04:32:24.381354Z",
     "shell.execute_reply": "2026-10-16T04:32:24.381188Z"
    }
   },
   "outputs": [],
   "source": [
    "theta_grid = np.linspace(-180, 180, 181)\n",
    "energy_grid = [energy(t) for t in theta_grid]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "84c86c3a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.382081Z",
     "iopub.status.busy": "2026-10-16T04:32:24.382018Z",
     "iopub.status.idle": "2026-10-16T04:32:24.406677Z",
     "shell.execute_reply": "2026-10-16T04:32:24.406482Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 770x330 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(7, 3))\n",
    "plt.plot(theta_grid, energy_grid)\n",
    "plt.xlabel(\"Circuit angle (degree)\")\n",
    "plt.ylabel(\"Electronic energy (Ha)\")\n",
    "plt.grid(alpha=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6385e522",
   "metadata": {},
   "source": [
    "### C9. VQE体験：スライダーで最小値を探す\n",
    "\n",
    "**対応：スライド 19**　|　グラフ上の点がスライダーで動きます。\n",
    "\n",
    "**操作してみる**\n",
    "\n",
    "まず60°からスタートし、0°、-10°、-13°へ動かしてください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "6b079168",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.407538Z",
     "iopub.status.busy": "2026-10-16T04:32:24.407484Z",
     "iopub.status.idle": "2026-10-16T04:32:24.409186Z",
     "shell.execute_reply": "2026-10-16T04:32:24.409027Z"
    }
   },
   "outputs": [],
   "source": [
    "def show_vqe(theta_deg=60):\n",
    "    current_energy = energy(theta_deg)\n",
    "    plt.figure(figsize=(7, 3))\n",
    "    plt.plot(theta_grid, energy_grid)\n",
    "    plt.scatter([theta_deg], [current_energy], s=65)\n",
    "    plt.axhline(E_reference, ls=\"--\", alpha=0.5)\n",
    "    plt.xlabel(\"Circuit angle (degree)\")\n",
    "    plt.ylabel(\"Electronic energy (Ha)\")\n",
    "    plt.grid(alpha=0.2)\n",
    "    plt.show()\n",
    "    print(f\"角度 {theta_deg}° → {current_energy:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "e040355d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.409966Z",
     "iopub.status.busy": "2026-10-16T04:32:24.409924Z",
     "iopub.status.idle": "2026-10-16T04:32:24.437169Z",
     "shell.execute_reply": "2026-10-16T04:32:24.436986Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 770x330 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "角度 60° → -1.282386 Ha\n"
     ]
    }
   ],
   "source": [
    "widgets.interact(\n",
    "    show_vqe,\n",
    "    theta_deg=widgets.IntSlider(value=60, min=-180, max=180, step=1,\n",
    "                                description=\"角度\", continuous_update=False),\n",
    ");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b7cc02f",
   "metadata": {},
   "source": [
    "### C10. 自動で一番低い角度を探す\n",
    "\n",
    "**対応：スライド 19**　|　スライダーで行った操作を、古典計算で自動化します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`minimize_scalar`：1つのパラメータを最小化する関数。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "最適角度は約-12.8°、エネルギーは約-1.8573 Haです。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "755eeaff",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.437994Z",
     "iopub.status.busy": "2026-10-16T04:32:24.437947Z",
     "iopub.status.idle": "2026-10-16T04:32:24.676899Z",
     "shell.execute_reply": "2026-10-16T04:32:24.676693Z"
    }
   },
   "outputs": [],
   "source": [
    "from scipy.optimize import minimize_scalar\n",
    "result = minimize_scalar(energy, bounds=(-90, 0), method=\"bounded\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "911fc788",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.677832Z",
     "iopub.status.busy": "2026-10-16T04:32:24.677785Z",
     "iopub.status.idle": "2026-10-16T04:32:24.679337Z",
     "shell.execute_reply": "2026-10-16T04:32:24.679157Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最適角度: -12.81°\n",
      "VQE最小エネルギー: -1.857299 Ha\n",
      "4×4の最小固有値: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "print(f\"最適角度: {result.x:.2f}°\")\n",
    "print(f\"VQE最小エネルギー: {result.fun:.6f} Ha\")\n",
    "print(f\"4×4の最小固有値: {E_reference:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58939b69",
   "metadata": {},
   "source": [
    "この小さな例では、準備する2配置の範囲に正解が含まれるため、VQEの理想的な最小値と正確な4×4の最小値が一致します。一般の分子に対して必ずそうなるわけではありません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dccd3aa8",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## D. ここからSQD：測定で候補を探す（スライド20〜26）\n",
    "\n",
    "VQEでは角度を更新しました。ここからは**角度を60°に固定**し、計算基底で量子状態を測定して、**電子配置を表すビット列**を集めます。エネルギーの測定ではありません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a8a2117",
   "metadata": {},
   "source": [
    "### D1. VQEとSQDの役割を並べる\n",
    "\n",
    "**対応：スライド 20〜21**　|　VQEでは角度を更新します。SQDの基本操作では角度を固定し、測定から得た配置で最小エネルギーを求めます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "83cf7885",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.680122Z",
     "iopub.status.busy": "2026-10-16T04:32:24.680070Z",
     "iopub.status.idle": "2026-10-16T04:32:24.681680Z",
     "shell.execute_reply": "2026-10-16T04:32:24.681544Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "固定した角度: 60°\n",
      "試行状態のエネルギー: -1.282386 Ha\n"
     ]
    }
   ],
   "source": [
    "sample_theta = 60\n",
    "print(f\"固定した角度: {sample_theta}°\")\n",
    "print(f\"試行状態のエネルギー: {energy(sample_theta):.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59ca73db",
   "metadata": {},
   "source": [
    "### D2. Born則で測定確率を計算する\n",
    "\n",
    "**対応：スライド 22〜23**　|　量子状態の振幅を2乗すると、そのビット列を得る確率になります。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "P(x)=|c_x|^2\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "`0101` は75%、`1010` は25%。符号は確率から分かりません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "2a43d5ea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.682472Z",
     "iopub.status.busy": "2026-10-16T04:32:24.682417Z",
     "iopub.status.idle": "2026-10-16T04:32:24.684160Z",
     "shell.execute_reply": "2026-10-16T04:32:24.684004Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101: 75.0%\n",
      "1010: 25.0%\n"
     ]
    }
   ],
   "source": [
    "sample_state = Statevector.from_instruction(make_circuit(sample_theta))\n",
    "for bits, p in sample_state.probabilities_dict().items():\n",
    "    if p > 1e-10:\n",
    "        print(f\"{bits}: {p:.1%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "190fb4da",
   "metadata": {},
   "source": [
    "### D3. 測定すると1回につきビット列が1個出る\n",
    "\n",
    "**対応：スライド 24**　|　Qiskitの状態ベクトルシミュレーターで、測定を模擬します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`shots`：測定回数。`seed`：ランダムな実験を再現するための番号。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "1回の実験で `0101` または `1010` が1個出ます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "7ec24d5f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.684860Z",
     "iopub.status.busy": "2026-10-16T04:32:24.684823Z",
     "iopub.status.idle": "2026-10-16T04:32:24.686192Z",
     "shell.execute_reply": "2026-10-16T04:32:24.686055Z"
    }
   },
   "outputs": [],
   "source": [
    "def measure(theta_deg, shots, seed=2026):\n",
    "    sv = Statevector.from_instruction(make_circuit(theta_deg))\n",
    "    sv.seed(seed)\n",
    "    return {str(bits): int(count) for bits, count in sv.sample_counts(shots=shots).items()}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "8ffa4597",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.686854Z",
     "iopub.status.busy": "2026-10-16T04:32:24.686806Z",
     "iopub.status.idle": "2026-10-16T04:32:24.688455Z",
     "shell.execute_reply": "2026-10-16T04:32:24.688303Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'0101': 1}\n"
     ]
    }
   ],
   "source": [
    "one_count = measure(60, 1)\n",
    "print(one_count)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdb2a81f",
   "metadata": {},
   "source": [
    "**なぜ毎回準備する？** 同じ重ね合わせの状態を独立に測りたいからです。`Statevector.sample_counts` は、その状態の測定分布から独立な標本を生成するシミュレーター機能です。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72c34cdf",
   "metadata": {},
   "source": [
    "### D4. 実際の回路に測定命令を追加する\n",
    "\n",
    "**対応：スライド 24**　|　`measure_all` は量子回路の全ビットを計算基底で測る命令です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "a9483d83",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.689220Z",
     "iopub.status.busy": "2026-10-16T04:32:24.689132Z",
     "iopub.status.idle": "2026-10-16T04:32:24.725945Z",
     "shell.execute_reply": "2026-10-16T04:32:24.725769Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1006.31x496.65 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "circuit_measured = make_circuit(60)\n",
    "circuit_measured.measure_all()\n",
    "show_circuit(circuit_measured)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f15bf61",
   "metadata": {},
   "source": [
    "**任意：QiskitのSamplerを使う場合**。次は測定命令を含む回路を、QiskitのローカルSamplerで実行します。上の `measure()` と同じ分布からビット列を得ますが、乱数系列は一致するとは限りません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "a55a963d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.726806Z",
     "iopub.status.busy": "2026-10-16T04:32:24.726751Z",
     "iopub.status.idle": "2026-10-16T04:32:24.730412Z",
     "shell.execute_reply": "2026-10-16T04:32:24.730227Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'0101': 78, '1010': 22}\n"
     ]
    }
   ],
   "source": [
    "from qiskit.primitives import StatevectorSampler\n",
    "sampler = StatevectorSampler(default_shots=100, seed=2026)\n",
    "sampler_result = sampler.run([circuit_measured]).result()\n",
    "print(sampler_result[0].data.meas.get_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c951b4e5",
   "metadata": {},
   "source": [
    "### D5. 10回、100回、1000回で違いを見る\n",
    "\n",
    "**対応：スライド 25**　|　測定回数を増やすと、相対頻度は理論確率に近づく傾向があります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "8efb8c54",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.731240Z",
     "iopub.status.busy": "2026-10-16T04:32:24.731162Z",
     "iopub.status.idle": "2026-10-16T04:32:24.733026Z",
     "shell.execute_reply": "2026-10-16T04:32:24.732871Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10回: {'0101': 8, '1010': 2}\n"
     ]
    }
   ],
   "source": [
    "counts10 = measure(60, 10, seed=2026)\n",
    "print(\"10回:\", counts10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "086752c0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.733784Z",
     "iopub.status.busy": "2026-10-16T04:32:24.733738Z",
     "iopub.status.idle": "2026-10-16T04:32:24.735441Z",
     "shell.execute_reply": "2026-10-16T04:32:24.735281Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100回: {'0101': 78, '1010': 22}\n"
     ]
    }
   ],
   "source": [
    "counts100 = measure(60, 100, seed=2026)\n",
    "print(\"100回:\", counts100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "025ca720",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.736123Z",
     "iopub.status.busy": "2026-10-16T04:32:24.736069Z",
     "iopub.status.idle": "2026-10-16T04:32:24.737922Z",
     "shell.execute_reply": "2026-10-16T04:32:24.737742Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1000回: {'0101': 731, '1010': 269}\n"
     ]
    }
   ],
   "source": [
    "counts1000 = measure(60, 1000, seed=2026)\n",
    "print(\"1000回:\", counts1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed0b07bd",
   "metadata": {},
   "source": [
    "### D6. 相対頻度を計算する\n",
    "\n",
    "**対応：スライド 25〜26**　|　例えば `1010` が24回出たなら、100回中24%という意味です。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "\\widehat{P}(1010)=\\frac{N_{1010}}{N}\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`counts.get(\"1010\", 0)`：1010の出現回数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "d6edd95e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.738579Z",
     "iopub.status.busy": "2026-10-16T04:32:24.738541Z",
     "iopub.status.idle": "2026-10-16T04:32:24.739899Z",
     "shell.execute_reply": "2026-10-16T04:32:24.739749Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  10 回 → 1010の相対頻度 20.0%\n",
      " 100 回 → 1010の相対頻度 22.0%\n",
      "1000 回 → 1010の相対頻度 26.9%\n"
     ]
    }
   ],
   "source": [
    "for shots, counts in [(10, counts10), (100, counts100), (1000, counts1000)]:\n",
    "    observed = counts.get(\"1010\", 0) / shots\n",
    "    print(f\"{shots:4d} 回 → 1010の相対頻度 {observed:.1%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9aebfb21",
   "metadata": {},
   "source": [
    "### D7. 測定体験：ショット数と乱数を動かす\n",
    "\n",
    "**対応：スライド 25**　|　同じ角度60°でも測定結果は揺らぎます。\n",
    "\n",
    "**操作してみる**\n",
    "\n",
    "測定回数1→10→100→1000を試し、`1010` を見つけられるか観察してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "da1ff4a8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.740623Z",
     "iopub.status.busy": "2026-10-16T04:32:24.740585Z",
     "iopub.status.idle": "2026-10-16T04:32:24.742186Z",
     "shell.execute_reply": "2026-10-16T04:32:24.741997Z"
    }
   },
   "outputs": [],
   "source": [
    "def show_measurements(shots=100, seed=2026):\n",
    "    counts = measure(60, shots, seed)\n",
    "    values = [counts.get(\"0101\", 0), counts.get(\"1010\", 0)]\n",
    "    plt.figure(figsize=(5.2, 2.8))\n",
    "    plt.bar([\"0101\", \"1010\"], values)\n",
    "    plt.ylabel(\"Number of measurements\")\n",
    "    plt.ylim(0, shots)\n",
    "    plt.show()\n",
    "    print(\"出現回数:\", counts)\n",
    "    print(\"理論確率: 0101=75%, 1010=25%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "9165698d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.742893Z",
     "iopub.status.busy": "2026-10-16T04:32:24.742841Z",
     "iopub.status.idle": "2026-10-16T04:32:24.763343Z",
     "shell.execute_reply": "2026-10-16T04:32:24.763171Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Od5yyy0B18qUKWOOx48ft/MIAADghaAiT5485nj27NmAa1YwUaxYMTuPAAAAXggqGjRoYI6rVq0KuKYJmqpRo0Z2HgEAALyw+kP3/NCAon///pIrVy7/eV31MWTIEMmRI4c5AgAA97M1UnHHHXfIrFmzJCEhQe6//37/+VatWplqm7Nnz5b69es70U8AAOD2OhXdunWTu+++WxYuXCg7duwQn89nlph26NBBSpUq5UwvAQCANypqFi9eXHr06OHErQAAQBbF3h8AACDzjFTotIfWrDh27JjZ7+NKvXr1kmDav3+/TJs2TX799VeJj4+XChUqSLt27UyeR7ZsKeMm3ZtEi3Xptu2a91GjRg15+umn5cYbbwxqHwEAcLswnyZBXKNDhw7Jo48+KqtXr75qOxuP+Fu60uTee++V8+fPB1zThNHly5f7A4tz587JnXfeKevWrUvRTleuLF682LT/p3TztIiICDlw4ICUL1/egZ8EAIDMJz2fd7ZGKjSPQgOKOnXqyNChQ81Dw8LCJCPpczWgePjhh6Vr165SoEAB+fnnn81GZytXrpTPPvvMJJKqiRMnmoCiWrVqZtMzTSRdsGCBvPnmm/LEE0/Inj17/AW9AABA+tgKKr766itznDdvnlx//fUSCocPHzaR04cffug/pwW3dHRCNzXT65Z33nlHcubMaQKNypUrm3ONGzeWv/76S/7973/L0qVL5YEHHgjJzwEAgKcTNQsXLpxin49QuP32200ux7fffus/p2XDNWcie/bsctttt/mnamJjY6Vp06b+gMLy+OOPm+OV0yIAACCDRip0yuGNN96Qb775Rlq3bi2h8NZbb8np06fN6ESlSpUkf/78snfvXjONoYW5brjhBtNOz6n/+7//C7iHdS4mJibN52gCqL4sR44cCcJPAwCAR4OKV155Rfbt2yc9e/Y0H+66/Xl4eHhAO/2gD5aiRYuaKYwff/zRjEQkH8GoVauW/2td6aEKFSoUcA/rnAYnadF8jNGjRzvcewAA3MPW9Efu3LlN5Uz9MNYVGCVKlDCJkle+gkkreo4YMULatGkjy5Ytk7Vr18rUqVNl69atZupj586dpp3mUlhLSq9kndOfJy0DBgwwma/Wa+PGjUH7mQAA8NxIxYQJE2Tw4MFm4zCd/sjo1R86SqIJmhpQ6D4jFh25uPnmm01QMXnyZFPD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Z84cad26tXM9BAAA7l5SumTJErnpppvkscceM3kTGlz89NNPBBQAAHhUuoOKdevWSaNGjeTee+81e3xMmjRJdu7caapnajXNrELLieu0DQAACNH0R+PGjc2xXr16MmDAAFOG+/PPP093Oe9Q+e2330y/tc8XLlyQypUry8CBA6Vv376h7hoAAN7MqdDlop07d/7HowKZwaFDh0xQpEtew8LCJHfu3LJ3717p16+fnD59WoYNGxbqLgIA4J2gYsqUKZJVjR492gQUDzzwgMyYMUOKFCkiy5cvl06dOplrmh9SunTpUHcTAABvBBX6r/qs6PLly/LRRx+ZQOK9996TfPnymfN33323GaHQFSwLFy6U3r17h7qrAABkSVkns9KmPXv2yKlTp6RFixb+gMLSrl07/5QOAAAIYfGrrODw4cPmWKVKlYBr1jmrTVrVQvVlOXDggDkeOXLEsT5eij/u2L2AUDp48GCW+w/A7x/c4qDDv3/W59ylS5f+tq1ngopz586ZY548eQKuWecSExPT/H4tPa55F1eqX7++o/0E3CBieqh7AHhXRJB+//7880+pVKnSVdt4JqjImzevOZ45cybgmnXuymmR5HQZavfu3VMEKTpaoUtSc+TwzB9jlqcRtwaCGzdulDJlyoS6O4Cn8PuXNekIhQYUN95449+29cynYUREhDnu2rUr4Jp1zmqTmoIFC5pXcpGRkY73ExlDA4ry5cvzxw2EAL9/Wc/fjVB4LlFTRxRKliwpX375pZw4cSLFtfnz55sjG6ABAHDtPBNUaLErLSWuW7J36NBBtmzZYobi3nrrLVNqXEch2rdvH+puAgCQZXlm+kMNHz5c/vvf/8ratWvl5ptvDkjE1BoWcDcNHkeOHBkwlQWA3z/YF+bLLDW0M4gmm4waNUpWrlxpEjRr1KhhkjDvueeeUHcNAIAszXNBBQAACA7P5FQAAIDgIqgAAACOIKgAAACO8NTqD2Rdusvst99+KzExMVK0aFFp2rSpFChQINW2SUlJsn79evn111+lWLFi0rFjxwy/L+C2iopr1qwxGzNqzZ9WrVql2fbChQum7aFDh6Rs2bJyxx13SO7cuTP0vgghTdQEMrM9e/b4atasqQnF/lfhwoV9ixcvTtEuISHB17NnT1/p0qX97WrVqpXh9wXc4siRI76uXbv6ihQp4v9/v127dmm237hxoy8iIiLF71S5cuV869evz5D7IvQIKpCpXbx40XfDDTeYv0QiIyN9jz32mO/22283X4eHh/t2796d4i8qPR8WFuZr2LChL1euXGl++AfrvoCb6Ie2/r+fI0cOX+PGja/64X/y5ElfyZIlTZubbrrJ/E7VqVPHfF28eHHfiRMngn5fhB5BBTK1efPmmb887rjjDt/58+f958eOHWvOd+/e3X8uPj7eN336dBMEqEKFCqX54R+s+wJuEhsb65s9e7YvLi7OfLhf7cN//Pjx5vojjzziS0pKMuf02KNHD3Nef7eCfV+EHkEFMrVHH33U/MWxZs2aFOcvXLjgK1q0qJmSSMvVPvyDdV/Arf7uw98a6dOAIbmjR4/6smXL5mvQoEGG3hehweoPZGrbt2+X7NmzS8OGDVOcz5kzp9nC/I8//pC4uLhMc1/Aq/R3Snd6rlixYorzupFj1apVZdu2bZnqvggOggpkavrBristcuXKler2yVabzHJfwKtOnjzp/925kp4/ffq0We2RWe6L4CCoQKamyzh1h9nUZMuWzd8ms9wX8Cp+V6EIKpCpFSpUyPxLJbUP+OPHj/vbZJb7Al6lO/+eOHEi1Wv6OxUeHp7qyGCo7ovgIKhApqZzplr05pdffgm49tNPP5kP/lKlSmWa+wJepb9TWkTuymnDhIQE2blzp7meme6L4CCoQKbWrFkzc3z99ddTnJ8/f74cOHBAmjdvnqnuC3iV/k7pyN+bb76Z4vzUqVPl/Pnz0qJFi0x1XwQHW58jU4uPj5fIyEj5888/5Z577jEf9vqvlpkzZ5q/UNauXSuNGzdOERTotIYaMGCAScYcPny4+bpChQrSpk2boN4XcJvo6GiTCJmYmGj+369Vq5b06tXLXKtZs6b/9yQ2NlaqV69uRgC7dOki9erVky1btsjs2bMlR44cZhVHlSpVgn5fhFiIlrIC/9jq1at9BQsWTFGiV6tbvvzyywFtq1WrlqJd8lerVq0y5L6Am+TOnTvN//e1fH1yc+fODWivFWjnzJmTYfdFaLGhGDI93eRr165dMm/ePNm7d6/Z+Ktdu3ZSu3btgLYPPfSQqTGRGv3XT0bcF3CTHj16yMWLF1O9dvvtt6f4unPnztKgQQP5+OOPzcZfuuTzgQceMKOCGXVfhBbTHwAAwBEkagIAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAEcQVAAAAHHC/wNs4bbKZgIJswAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 572x308 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "出現回数: {'0101': 78, '1010': 22}\n",
      "理論確率: 0101=75%, 1010=25%\n"
     ]
    }
   ],
   "source": [
    "widgets.interact(\n",
    "    show_measurements,\n",
    "    shots=widgets.SelectionSlider(options=[1, 3, 10, 30, 100, 1000],\n",
    "                                  value=100, description=\"測定回数\"),\n",
    "    seed=widgets.IntSlider(value=2026, min=2026, max=2036,\n",
    "                           description=\"乱数番号\", continuous_update=False),\n",
    ");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22abd469",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## E. SQDの基本操作：選んだ配置で対角化する（スライド27〜32）\n",
    "\n",
    "**やることは3つだけです。**\n",
    "\n",
    "1. 観測されたビット列の重複を取り除き、**候補の配置**を選ぶ。\n",
    "2. その配置に対応する、**ハミルトニアンの行と列**を取り出す。\n",
    "3. 小さい行列を**古典コンピュータで対角化**する。\n",
    "\n",
    "ここでの操作はSQDの中核ですが、正式なSQD全体の配置回復やバッチ処理を再現したものではありません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b04b2681",
   "metadata": {},
   "source": [
    "### E1. 候補として採用するビット列を選ぶ\n",
    "\n",
    "**対応：スライド 26〜27**　|　今回は**1回以上出た有効配置をすべて採用**します。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "B=\\{x:\\ N_x>0\\}\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "100回測定なら、ほぼ確実に `0101` と `1010` の2種類が見つかります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "7f5661b2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.764049Z",
     "iopub.status.busy": "2026-10-16T04:32:24.764004Z",
     "iopub.status.idle": "2026-10-16T04:32:24.765873Z",
     "shell.execute_reply": "2026-10-16T04:32:24.765721Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "測定回数の内訳: {'0101': 78, '1010': 22}\n"
     ]
    }
   ],
   "source": [
    "counts = measure(60, 100, seed=2026)\n",
    "print(\"測定回数の内訳:\", counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "fc5ee059",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.766619Z",
     "iopub.status.busy": "2026-10-16T04:32:24.766580Z",
     "iopub.status.idle": "2026-10-16T04:32:24.767888Z",
     "shell.execute_reply": "2026-10-16T04:32:24.767737Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "採用する配置: ['0101', '1010']\n"
     ]
    }
   ],
   "source": [
    "selected = [bits for bits in configs if counts.get(bits, 0) > 0]\n",
    "print(\"採用する配置:\", selected)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c118bac",
   "metadata": {},
   "source": [
    "### E2. 行列の行番号に直す\n",
    "\n",
    "**対応：スライド 27**　|　`configs` の順番で行と列の番号を確認します。\n",
    "\n",
    "**変数**\n",
    "\n",
    "`rows`：4×4行列のうち、採用した配置に対応する行・列番号。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "通常 `[0, 3]` になります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "a8dd61c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.768650Z",
     "iopub.status.busy": "2026-10-16T04:32:24.768614Z",
     "iopub.status.idle": "2026-10-16T04:32:24.769846Z",
     "shell.execute_reply": "2026-10-16T04:32:24.769706Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 3]\n"
     ]
    }
   ],
   "source": [
    "rows = [configs.index(bits) for bits in selected]\n",
    "print(rows)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "963445fe",
   "metadata": {},
   "source": [
    "### E3. 小さなハミルトニアンを作る\n",
    "\n",
    "**対応：スライド 28**　|　`np.ix_` は選んだ行と列を同時に取り出すために使います。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "H_S=\\begin{pmatrix}-1.8370&0.1809\\\\0.1809&-0.2452\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "通常2×2の行列になります。数値は**測定回数から求めたものではなく**、分子ハミルトニアンの行列要素です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "521535f6",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.770529Z",
     "iopub.status.busy": "2026-10-16T04:32:24.770495Z",
     "iopub.status.idle": "2026-10-16T04:32:24.771859Z",
     "shell.execute_reply": "2026-10-16T04:32:24.771715Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "小さい行列のサイズ: (2, 2)\n",
      "[[-1.837   0.1809]\n",
      " [ 0.1809 -0.2452]]\n"
     ]
    }
   ],
   "source": [
    "H_small = H_e[np.ix_(rows, rows)]\n",
    "print(\"小さい行列のサイズ:\", H_small.shape)\n",
    "print(H_small)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a69c5aca",
   "metadata": {},
   "source": [
    "### E4. 小さい行列を対角化する\n",
    "\n",
    "**対応：スライド 29**　|　これが古典コンピュータ側の固有値計算です。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "H_S\\boldsymbol{d}=E_S\\boldsymbol{d}\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`values`：小さい順の固有値。`vectors`：対応する固有ベクトル。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "最小固有値は約-1.8573 Ha。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "79265ea4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.772602Z",
     "iopub.status.busy": "2026-10-16T04:32:24.772564Z",
     "iopub.status.idle": "2026-10-16T04:32:24.773916Z",
     "shell.execute_reply": "2026-10-16T04:32:24.773766Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "固有値: [-1.857299 -0.224901]\n"
     ]
    }
   ],
   "source": [
    "values, vectors = np.linalg.eigh(H_small)\n",
    "print(\"固有値:\", np.round(values, 6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "e7602840",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.774576Z",
     "iopub.status.busy": "2026-10-16T04:32:24.774521Z",
     "iopub.status.idle": "2026-10-16T04:32:24.775949Z",
     "shell.execute_reply": "2026-10-16T04:32:24.775791Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "部分空間の最小エネルギー: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "E_sqd_core = float(values[0])\n",
    "print(f\"部分空間の最小エネルギー: {E_sqd_core:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31917b4f",
   "metadata": {},
   "source": [
    "### E5. 最適な係数も求める\n",
    "\n",
    "**対応：スライド 29〜30**　|　量子測定から直接符号や係数を読めないので、最小固有値の固有ベクトルから求めます。\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "`0101` は約+0.9938、`1010` は約-0.1115。固有ベクトル全体を同時に反転しても同じ状態です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "6c392d57",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.776618Z",
     "iopub.status.busy": "2026-10-16T04:32:24.776580Z",
     "iopub.status.idle": "2026-10-16T04:32:24.777964Z",
     "shell.execute_reply": "2026-10-16T04:32:24.777817Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101 の最適振幅: +0.9938\n",
      "1010 の最適振幅: -0.1115\n"
     ]
    }
   ],
   "source": [
    "best_coeffs = vectors[:, 0].copy()\n",
    "if best_coeffs[0] < 0:\n",
    "    best_coeffs *= -1\n",
    "for bits, amp in zip(selected, best_coeffs):\n",
    "    print(f\"{bits} の最適振幅: {amp:+.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4252e463",
   "metadata": {},
   "source": [
    "### E6. なぜSQDでは角度最適化が必須ではない？\n",
    "\n",
    "**対応：スライド 30**　|　VQEでは量子回路の角度を動かします。SQDの基本操作では、**配置を集めた後に古典対角化で新しい係数を求めます。**\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "同じ60°の入力でも、対角化前 -1.2824 Ha → 対角化後 -1.8573 Ha となります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "c29f5d9c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.778583Z",
     "iopub.status.busy": "2026-10-16T04:32:24.778545Z",
     "iopub.status.idle": "2026-10-16T04:32:24.780108Z",
     "shell.execute_reply": "2026-10-16T04:32:24.779972Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "VQEの試行状態（60°）: -1.282386 Ha\n",
      "SQDの部分空間対角化: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "print(f\"VQEの試行状態（60°）: {energy(60):.6f} Ha\")\n",
    "print(f\"SQDの部分空間対角化: {E_sqd_core:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "c7aba04d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.780799Z",
     "iopub.status.busy": "2026-10-16T04:32:24.780762Z",
     "iopub.status.idle": "2026-10-16T04:32:24.782292Z",
     "shell.execute_reply": "2026-10-16T04:32:24.782156Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "測定前の振幅: [0.866 0.5  ]\n",
      "対角化後の振幅: [ 0.9938 -0.1115]\n"
     ]
    }
   ],
   "source": [
    "before = np.array([\n",
    "    np.cos(np.deg2rad(60) / 2),\n",
    "    np.sin(np.deg2rad(60) / 2),\n",
    "])\n",
    "print(\"測定前の振幅:\", np.round(before, 4))\n",
    "print(\"対角化後の振幅:\", np.round(best_coeffs, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5962f17a",
   "metadata": {},
   "source": [
    "### スライド30：振幅を矢印として見比べる\n",
    "\n",
    "横軸は `0101` の振幅、縦軸は `1010` の振幅です。量子回路で準備した状態と、古典対角化の結果では矢印の向きが異なります。これは**電子の実空間の位置の図ではありません。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "c17e988a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.782965Z",
     "iopub.status.busy": "2026-10-16T04:32:24.782930Z",
     "iopub.status.idle": "2026-10-16T04:32:24.818535Z",
     "shell.execute_reply": "2026-10-16T04:32:24.818356Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfoAAAG4CAYAAACthSUuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjIsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvgI3uAAAAAAlwSFlzAAAQ6wAAEOsBUJTofAAAddFJREFUeJztnQWYFEcThuvglMMPd7cQXINbcPcAIRASiBDshyAhWJAYBA1xCME1uFtICBac4O6ud5xw8z9fX2bZ3dvd2z1d+d7nmZu9ntmemd6Zqa7qqmovTdM0IYQQQohbkiypT4AQQgghCQcFPSGEEOLGUNATQgghbgwFPSGEEOLGUNATQgghbgwFPSGEEOLGUNATQgghbgwFPSGEEOLGUNATQgghbgwFPfF4fvvtN/nkk0/kzJkzHt8Wzs6KFSvUb3X48OGkPhWXayNnbzs+hwmHdwLWTWLB7du3ZcqUKSZlXl5ekipVKilQoIDUrl1b0qZNy7aNRxYsWCBr1qyRqlWrSsGCBdm2DnDr1i2ZOnWqlCpVStq0aWNz340bN8rOnTtN7mt/f39JnTq15MiRQ8qUKSO5c+e2Wcfq1avlp59+kiJFikjJkiX5WznQRs7ednwOEw4KeicU9GPHjrW6PTAwUD777DPp27dvop4XiT1LliyRQ4cOSfv27eXVV191+nodYdmyZep+nTlzZoz7bt26VT7//HOb++A6PvzwQ3nnnXdUR4CQ+GKJGz+HMUFB78SMGTNGrTHv0NWrV2Xt2rVq3a9fP6XVv/XWW0l9isQOYDKdO3euFC9ePF5fBAlVr6PnAIHcrFkzu78DbVLX/iMiIuThw4dy8uRJ+euvv+To0aPSs2dPWbRokaxcuVJSpEhh8t2WLVtKnjx5lAWBOIant90KN34OY4KC3onBeJoxwcHBUr9+fdm1a5eMHj2agp4kKY8fP5bt27dLhQoVJGvWrHZ/Dy9E83sbPH36VL7++mvVwd2yZYt0795dmXONady4sVqI47DtPBcKehcC2s2IESOkXr16cuHCBblx44Z6wf76669y+vRp6datm+TPn1/+/vtvtdy/f186duwoRYsWNdSB7+AlevnyZfH29lYv3bp164qvr2+0412/fl1mzJghOXPmVFrWnTt31Fg2rArp06eXhg0bSt68ea2e77179+SPP/6QixcvypMnTyRbtmxSs2ZNdY4xHevBgwfKgoHvYgy3d+/ehn0jIyOV9rd//34lbDJnzqyuwVK9xuhWEYwro90aNWqkzim24NgYdz579qyyuuTKlUuNM+vtDcE1YcIEg/MTtNRjx44Zvt+8eXMpX768SZ379u2T48ePq3PF+PUrr7yi/DL8/PwM+8Sm3ti2mS3QlmFhYep48UHKlCnV/R0UFKR+74ULF8r//vc/KVeunIn2hGto27atxXFme9rPnCtXrqhrwbBZlixZ1H2RPXt25RwGS0PXrl0t+m7gnt60aZN69vD758uXT15//XVJly5dtH3nzZsnJ06ckC5dukjhwoXVNaDDjt8SdTdt2jSa9SKu12WOpbbD87lhwwab38Nw4ZAhQ6KV8zl86hTPoV1gPnriPBw9elTDz2Ltpzl37pxh+/Hjx1VZ/fr11f8LFy7UatWqZdiOZenSpWqfsLAwrW/fvpqPj4/Jdix58+bV9uzZE+1Y+/btU9srVqyozZkzR0uRIoXJ95InT66NHDnS4nk2a9bM4rG8vLy0N998U3v+/LnVY82bN09LmTKl4TtFixY17Ld3716tWLFi0epNliyZ9t5776nrtMQ333yj+fn5mXzH19dXmzZtmta4cWP1/7p16+z+nebPn6+lTp062nlgqVGjhhYSEqLduHHD4nZ9+fbbbw31rVmzRsuXL5/F/bJkyaJt3rzZsK8j9calzWKiQ4cOqp4TJ07Ytf/HH3+s9u/UqZPN/V68eKEVKlRI7du/f3+TbW+//bYqx/1ojCPtZ8wXX3wR7T7F/1OnTrV5X+D46dKli3Ys3Le4p8xp3ry52r5gwQLDZ+MlR44chuc5rtdlrY0slY8fP97mvYQlKCgo2jH4HGpO8xzaAzV6FwPaow60amP69OmjtBKY6DBWhJ54sWLF1LZOnTrJ4sWL1XhqgwYNlCb//Plz5SAFTQNWgoMHDyqtxNIxYS2Ato1eKjQPmGzRMx05cqTSwOBAZQzGV+FBXbFiRTUuCI0H4Wvr169XFghoPd98843FY7355ptKo4JzC+rImDGj2gaHF1gEMIQBL21oT9DAzp07J8uXL5dvv/1WHQdrY2D+1Z0X0cNGDxqa6KpVq5TmqNdvL5cuXVJaHuqAZoRzQlQENEP01Hfs2KHaFmUwQ8NZB73+du3amYzhweSt888//6h6a9WqpTQ89PRhEcHvA60S7Q6NDu3hSL2xbbOYCA8Pl3Xr1qlzNbYYxQfJkiWTJk2ayMSJE+XPP/+06zuOtJ/O7NmzZdCgQepzpUqV1HdxXbBaffTRR1bvCzggQjMHeL5gAUiePLnS7nEeeBZ8fHzk3Xffjfbd/v37y82bN9X1QSvHOUIThKaOOg8cOBDn63KE6tWrG3yBzIGmD6sDhguN4XN43GmeQ7tJsC4EiXeN/vHjx1qlSpXUtvz58xvKdY0emsj27dujfW/FihVqOzRQaM7GREREaD169FDbu3TpYlHLxgJLAbRUY4YPH662pUmTRnv69KnJtrVr1yrNzJx///1XS5UqldKug4ODLR6rSZMm2rNnz6J9t1y5cmq7JYsAtCGcBywGOIbx9eXMmVN9r1+/fibfCQ8P15o2bWo4rr0a/ezZs9X+DRo00CIjI6Ntx29gfH7QYLE/rADWOHjwoHb16lWL295//331/aFDh5qU21NvbNrMHjZs2KDq/d///mf3d+zV6MH333+v9sVvZ4+26mj74bfPli2bKsd5GYN7pnXr1hbvC2zLlSuXKu/cubPJPY57oXfv3mobtP0nT54YtulaPO77Xbt2mRwPbQ/rErYfO3YsTtdlq42slVti27Zt6lzx3IeGhpps43M41GmeQ3uhRu/E6A5L6Oldu3ZN9bChDQCMZZrz9ttvS40aNaKV//zzz2o9atQok/FOAE1k8uTJSruBFo4xJGhU5mAfjA2anx+0c2gcGKuGV68Oxu8xhrlt2zY1honPL168MFgi8B2MZ5mPYcHigLF68/FKeGNDW8Z3f/jhh2g+BdCsoLXjGn///XcVKwz27NmjNO1MmTKpsERj4KOAnAWwMkCTsxfdkgKNz1IImKXfICZ0T2hcJ/wr4EcQGhqqfvtnz56pbbh+R4htm9k73gtatGghCQG0JYD7JiHaD/vALwRalfmzhGdi0qRJ6nkwvy9wP8G/BecHi5Txs4J7Yfz48cpyhud08+bN0drn/ffflypVqpiUod0x3o77ENY1aPqxva744MiRI+q8YanB72x83/A5FKd6Du2Fgt6JsRRPD8c0lOumQ2MqV65s1ZEHwMQHUzteEsB4DUcoOMDhBWXuoAYhaSlsBDcsTH9z5sxRQttY0KNjMGzYMMPLyBI4njkwa2GIwNo1IKxw3Lhx0c4fC64PnDp1yuQh002zlpydMKyARET//vuv2AvMqBjiwHXjGnSnGwyHQEjEBphu4TgJU6kj7WWL2LZZTOB7EILo6Fi75+IKHJX0+z0h2k+/bgwtBQQERNsX96Cl+0J3tkKHGUNW5mC4DIJ86dKl6t4zF/TmHVvj41nq2CTEfWELdMDRScfQGhwUzdufz6E4zXPoCBT0Tow+dgZNAYIYnpkY58FnS1gLcdJvzB9//DHGY1rSoGyFTumdAv3FDKDRGI+J46WYIUMGQ08WAhJaPqwHjl7D+fPnVc/X3mvQP8d0DY4IerzMMQ7/6aefqvFaZBwD0PIw9goPZUfiadEO8LrGOB5eBvAhQDQDjoOOAzpf06dPt9hetohtm8UEtBNYmBD+Zsn6Ex/ov4c9URGxaT/9eqHRO3Jf6Pe5rfOCf4nxvpYsFebo7Wh8jgl1X1gDY//w34HvCSxxlp4ZPofTneY5dAQKeifGUqyxLaxlEkOvHM5hEL6WtBBjIJDNgYnTGnjh68fQ+f7779Uasf7Dhw+P9h0Ix9hcA4DWDCc9Wxg7h+nfs+caHAGWBwyJwBSH3jh67XDGQicHzjUw8ZYoUcKuuvBdvMzxYoUQNRci0KzwQneU2LZZUpvt8SLVO09IS5wQ7ae3DcJNHbkvHLmf0qRJI3Ehoe4LS4SEhKhOBYa54OhXqFAhi/vxOZzuNM+hI1DQewBly5ZVHtIQPPCedxTEz+OFY55RC2OF0GyBsVCD+Q9YuqnxgsQ4ZGyuQdeSoDHbayLXz2v37t0qZtncGgKvV+NIBkfBeeAYWOAjAdMchizQ2Zk2bZphH6D7KJijtxeEmiVNEWO91o5tq97YtllMYBwRwyDQMBMC+E3ov8kbb7wR4/6xaT+8dAHGveEJbT6sgzpxb1i7nyB47969G61jjKEqxKaDuGZJi+194Si4f/CsomOBIRljb3Fz+Bw6z3PoCJy9zgNA3nAwYMAAJfAsAc0GDnXWQBgaXojGwHQNDQDjeQjP09GtBuaJOGDCQlgaOgiOgkQ0WOAI1aNHD4tj/9AEoY0Ya1t4aSEUBi/lwYMHG8bGAEyUCIVCGlZH2Lt3r9XOCsyfAMfT0SchgunOEnp7wQqAdLDGIAQQk8ZYIqZ6Y9tmtoDwgwUD4UGWxrbjwqNHj5QFCElyAPxQSpcuHeP3YtN+GJuHVQbhqOaWMzjgIbzOkoMmhqLg1wETK1JRG7/ccW8hXA91wvHK+JmIDbG9LxwFCapQH4b2MD5vCz6HzvEcOgo1eg8ATnKdO3dWmb5ee+019ZKDRgMBDQGPlzeEFx5yvMDNgdMVXjYw5yGnOV7w0OT1mF94GhtrRMhjDk0Jcf2IScaxcANDA4EghCnSlsnUGr/88ovSbmbNmqXMx9Ao4cSEjoMew4560ZnRNSCMfSKtKs4JZk5oW3Xq1DHES0NrwjitHs1gDzCZYqwN3rLwkMY5oD60B3IL6G1u7oD1xRdfqEx/OB6GKHQnPjhvoQwvApju0MbIeIbYXMz2BoEEpyxzYqo3tm2W0GZ7XJcuXCEoIeARE457TO9MIjZdHwKKidi0H7QqtBssBvCwR14IPY4evy8yT+r3hfFwEr4HiwPaGM8TnhvEmaMc97furPfVV1/ZzHSXUNflKHDsxYx2iNFHngtLw4XmmfH4HCb9c+gwCRK0RxIsM54l9Dj6TZs2Wd0H8b5jxoyxms0NmbmQDcxatjpk9AoMDIyWQQyZtcxBjLKeNc08axhieC1lHDM+li0Qc1q1alWL14BMfXXr1tUuX74c7XvIUhUQEGCyP+KEv/vuO4cz4yFHQPHixS2eQ/r06bUvv/zSZH/EzVauXNlm5izEVmfIkCHaPohj3rhxo/pctmxZh+uNS5tZAvXgO3fu3NEcRY+jt7Ug3hh5CqxhLRY8Nu0HJk+erPn7+0e7LxDHX69ePfX/H3/8Ee17yEKZMWPGaMdLmzat9sMPP0TbX4+jX7VqlcXr6tmzp9pu/t3YXJcjcfR16tSJVWY8PodJ+xw6ihf+xH/3gcQWjId/9913DjnjzZ8/X2nl0NphVrQFxqmhDaD3DpM1eo8II4JnvLkjHHqZ6JHCAqDnzkesL5yNYJqEJgOtwhrQcJHZDFoS8sDDWgAHJeQwx/GhTemZ+NCbhWaB+uyZlQ/e0DgnmMjhyYzeMc4VoYDWgEkV2hraGBnGcP5YWzofe4AWiphj9Mgx9o9rRFSEJZM2THOwgiDkCmZfPHbQWmHS00G5bmWAA48esYDYaTj94beCp7uj9calzYxBu0FbgWai+2Y4Ajy5zTPd6fPR41xwzvg9bIH2QQZHWBT0cfa4tB+A1o77Wr8+3BdoE2jR+I0R8mTJOQ3WBz1PhJ7rHtYiS571cNJEPR06dFDPmznwocHzgqgNc18YR6/LWhtZKsesa7Be2AKWCWT0swSfw8R/DmMDBT2xirmgJ54NogzgcIjUtBifdmfgDAjhDrM1hhYSKoyQkMSAdy8hxC6gcSC3Q0whQq6CroWZA8GO6BRoZfC1oJAnrg41emIVavTEncHQFSafgVMlTKwwgWMICSZuDFNBm4fjW4JPIUpIAkOve0KIRwJPeXjaY5zdPFwSGegwjwOFPHEHKOiJzVSeMNXacrgjxFWB8ylil+GICSc1OFUiTTNCJqtVq6a0fULcAZruCSGEEDeGzniEEEKIG0NBTwghhLgxHKNPYDBrHJIoII2stzebmxBCSPxEjSDJEyZPQuIpW1DyJDAQ8rZmgyKEEEJiC+Zb0HPqW4OCPoGBJq//GJjMJTZERIqsPizSpKSINwdbCCHE47lx44ZSInUZYwsK+gRGN9dDyMc2TA2CPuiGCL5OQU8IIUTHniFh6oeEEEKIG0NBTwghhLgxFPSEEEKIG0NBTwghhLgxFPSEEEKIG0Oveyfi2bNn8vjxYwkPD1dzZetomkjmZCJXLmEijiQ9RUI8anY7JCLJkCGDmgCHEFeFgt4JgFC/fv26PHnyRJIlS6ZmzcJaB++Y7Oko5AlJTMLCwuTp06cSGhqqZnKksCeuCgW9E/Dw4UMl5IOCgpT2YCzkdY3+/jOR9IEU9oQkJvfu3ZPbt2/L3bt37UpMQogzwjF6JwBaA+bBxovEXMgTQpIOdL7xbGLOCkJcFUoVJzHdYzyQpkFCnA88my9evEjq0yAk1lDQE0IIIW4MBT0hhBDixlDQE0IIIW4MBT0hTk7lypXlvffeS+rTIIS4KBT0JEk4efKkFClSxLAULVpUypUrJ126dJEdO3bwVzHizJkzcuXKlXhpk7lz56r2Pn78uFPUQwhJeBhHT5IEhCudOnUqWvmBAwfkt99+k2nTpskHH3yQJOfmzjx48EC1e0hIiFPUQwhJeKjRkySlffv28u+//6pl586d8u6776rywYMHS3BwMH8dQgiJIxT0JElJmzatwXxfrVo1+e6776RWrVoqidDhw4fVPoMGDZLixYuLpmny/fffS+3ataVYsWJy8+ZNtR3m4169ekmFChWkdOnS8uabb8rBgwdNjoNOA47x2WefyeXLl6VHjx5SpkwZVdfPP/+s6jbm0aNHMnHiRGnWrJmUKlVK6tWrp6wMERERVutFGmNYIcqXL6/OR8+RMGfOHFVPyZIl1TViX1yfpSxsAwYMUEMYVapUkS+//NKh+G3s+8svv0jTpk3Vtb3++usyfPhwldUN4DOODdq0aWNod1ynzqFDh+TDDz+U6tWrqzo6d+4se/bsMTmOPfU4ct2EkARGIwnKlStXIEHU2hoXLlxQizUiIzXt7pOotbtw8OBB1S49e/aMtq1Dhw5q27Zt29T/nTp10pInT6717dtXlevLpUuXtMWLF2u+vr4m5Vh8fHy01atXG+p88uSJKkfd2bJli7Z/v379TM4hf/780fbB0qpVK5P9jOvNkSOHYb+GDRtqERERWtOmTS3WU7JkSfVdnQcPHmiFChWKtl/Xrl21oKAgrXHjxjG2ae/evS0eC/WCt99+2+L2jz/+WG3fuHGjxe3e3t7amjVrDMeJqR5HrtsViOn5JMRZZYsOx+idnLAITS7fFXkYLPIghXPlus8ZJOLrHb8ntGnTJlm5cqX6XKhQIRNt9ccff5TPP/9catasKalTp1bpgrt27apmGBs5cqTSQv38/GTXrl0yYsQIeeedd+TixYsqhanOokWLlIY5Y8YMNVHJX3/9pTTUSZMmyRtvvKG0aZAqVSpVZ6VKlSRz5sxy9uxZdexly5bJ5s2bpW7duibnjXqh+U+dOlUKFiwoadKkURruqlWrVB39+/eXAgUKqLFtWC2w//jx42Xs2LHq+6NHj5bTp09L2bJl5dNPP5Vs2bKp68Bne7RgaNDQ5rNmzSpfffWVsnjgWNDGly9frvaBRo3tWC9ZskReeeUVQ5pXgMlbYEmAtQPOkagTwymjRo2SPn36SMOGDVX2xpjqceS6CSEJDwW9k3Plnki5YeKUHBgnkj9z3OpYuHChbN++XX2GiRnma9ChQwcl7IyBMIYQ0vn666+V6XzFihXSvHlzQzmENQRt9+7dlbCEed54qGDLli2SLl06w74Q5DjeggULDIIeAtK4gwAhjnoyZcok69evjyboUR/qRf06GGbIkyePbNu2TXVGdDA0cenSJVm8eLFB4KEdMKEROhF6Hfq5oQMSE+j0YEE7GO+PY2E4AGTJkkXVB3Lnzq3M7cbA1N+kSZNooX0Q7h9//LGcO3dOCe2Y6nHkugkhCQ8FPUnymfuw6EBT79atm4wbNy7avi1atDD5Xx/DHzhwoBJExuiTkJw/f95E0EPY6ELeuF4ISYT86aDDMX36dKXx37lzR8LDww3bMMZvDqwMxkIeHRBYAWAZQCfBHPgXPHv2TH3GzIUY34djonEdoFWrVnZPdAThCX8GHBvXjI4CtG1Me2wP6NjAooKoBzhHwpIArV63KOC6Ieht4ch1E0ISBwp6Jwfm8f1jo0z3aZ3QdB9XINxgIofWmCJFCmVOtyTYMLEINF5jYGrW48ytYT7rWGBgoEUBh0UX5ohZhwkdAt4SlkLKoOVaOjcIcUthhDpw7tOPa+ncIKTtFdRwooPTIIYXYOUYOnSo+u6ECROUxSImvvnmG+nXr5/V7faE0jly3d7efP0QkhjwSXNyMAYO87i7zkeve93HBpiNAUzp+ueYBPDevXuVlmrcmYCnOToEOXLkUP/DFwBCHh700KjRwUBHAH4C0JLNPfStXResExgrx9i5NSDssC+EPM4NdRvPYojoAV142kPhwoVlyJAhhv/HjBkjnTp1UudRokQJQ91oA3Mwdo6hCaxhCUiZMqXqYKHjMGzYMJPrtlaPI9dNCEkcGF5HXJbWrVurNZzCIIT1MC848UFwYwwfznnGwDwPU39YWJj6H2PGcNoD9evXN2ijurUBJnAISHQY0AGwd15yCEJ0EnRnOPgb6OeXK1cuJcDXrFmj9kWnA2P+x44dU0MQuoZ/4cIFw7nFBEz/vXv3VqGGukCG1oxrgTBGZwbApA4sZbSDiT5v3rzSrl07qVixohL2uF6EyZljrR5HrpsQkkgkShyAB8PwOsfD68zRw+ss8eGHHxpCt9KlS6flzZtX8/PzM5TpoVx6GFylSpVUXdgne/bsmpeXlyqvUKGCCgsDq1atMnwfoXi5cuVSIWbFixfX0qdPbxLqptf7wQcfRDu369evazlz5jSEqKEuLPoxcV3G7aGHCRqfG46ZJk2aGMPrEP6ln3NAQICWL18+LWXKlOp/1Hv69Gm137Fjx1QZ6s6dO7dWuHBh7euvv1bbcAz9+GhHhPXh/xo1aqg12kXHVj2OXLcrwPA64urhddToiUuDcDaEyuXLl0+FcEELhiaLMXZo4Bj3Nwbl0FBhXr527ZoqQ4KZ1atXKzM1gOc5xrVhuoamDCc0hO5BE7V3vBwgBA2aLfL3w7KAurDATI9ENP/73/8M+8JxDfXnz59fmepxbtCqEWpoj5kbvg1I6APrA7RwOCFCQ3/ttddk3bp1KuQPQEuHGR5DEbBmYBz99u3bBm95eN7j+GhHWD3gP4HQOnNs1ePIdRNCEh4vSPtEOI7HcvXqVcmZM6dy8NLHgM1BrDdASJIl8Au52xi9LkzgAa+Halnjxo0b8vjxYzX+bAuMq8OjG0LPXCBD6MHcjHF3PcMdhCnC8Mw93XUwHIB90CnQ94FHOULG9N8Sjw+EXEzXAXM8hB2+G9P14p6BAMV4uaVjxgSc5iB0cRzj8DZj9M4EhDni3zNmzGjSVog6gMDGeeB//T42dxi0VY+j1+2sxPR8EuKsskWHgt4JfgxPFPSJjbmgJ8ReKOiJqwt6mu4JIYQQN4aCnhBCCHFjGMxKPAKMLSPbm3lWPEIIcXco6IlHgPju2CbmIYQQV4ame0IIIcSNoaAnhBBC3BgKekIIIcSNoaAnhBBC3BgKekIIIcSNoaAnhBBC3BgKekIIIcSNoaAnLgVmqNu8ebPcvHlTPPV6k7oN9u3bJ7t3706SYxNCHMdtE+bs379fNmzYoCYzKVq0qLRu3TrazFsxgRnO8ELdu3evREZGSoUKFaRhw4Yq+QqJG/hd/v77b8P/mCIWk85kyZLF5gQNhw8flnr16qmpZjHlqbtj6XqTug169+4tDx8+lJMnT8a5LsySd/DgQXn11VfjNLtdfNVDiDviloK+f//+MmnSJJOyESNGKKGN+b7t4cyZM9KqVSs5duyYSXmZMmXkwIED8Xq+ngimXoWwsgSmOm3Tpo0MHjxYcuXKZbINKWzr1KmjplD1VNypDWAdQOd5/vz50qFDhySvhxB3xO0E/bx585SQh/beo0cP1bv//fffZc+ePdK+fXv1QohJI4dptHbt2moawNy5c0u7du3UXNvQQNeuXZto1+IJYO54PTUt5pK/fPmymr/822+/lblz58rKlSulRo0ahv1LliypOmyeDNuAEOLRgv7rr79W69WrV0vNmjXV50GDBinBvXPnTtm+fbvUqlXLZh3jxo1TQr5y5cqyadMmE5P/0aNHE/gKPIsmTZrIzJkzTcow+Qy0eQh5DLmcP39eUqdObeiEwaJSvHhxZeY3Jjw8XM6dOyd3796VfPnySbZs2WwOyxw6dEg0TVPmXn9/f9UJRDl+d0sWCHRAMmTIoIaCzDuLd+7cUSZ1CGFYJLAvzhvzRaOzaAlHztcYS22A+xrnbgmcc6lSpUzKbt26pa7Jz89PXT/W1toJ14WhK72dHOXGjRty6dIlNTRToEABw7FQht8AwHKmd+DQOcex7G0ne+tx5LoJcSs0N+L+/fsaLql8+fLRtv3+++9q2+DBg2OsJ3PmzGrfI0eOxPmcrly5ourC2hoXLlxQizUiIzXt7pOotbtw8OBB1S49e/a0uP3FixdanTp11D5TpkwxlG/btk2VzZkzx1D29OlTrX///lqaNGnUNn1p1KiRdvfu3Wh1b9myRcuWLZthvwwZMmjr16/XKlasqBUuXNhk371792rFixc3qTdv3rzahg0bTPZbvny52rZ48WJ1TcmSJTPs/8Ybb2jh4eGxOl9L12upLDAw0KQu46V+/fqG/S5duqT+N96O85g5c6bFdsqePbthv4wZM6rrttROlrh165ZWt25dk2PhPPEMRkZGauPHj7d4vq1bt3aonWKqx9HrdvT5JCQpsEe26LiVRn/69Gm1htOcOeXLl1frU6dO2awD2gF6/dDaXnnlFVm2bJnS9NKkSSOvv/66GqO3xePHj9VirM3EhYiwSLl3PVQeBYtEpBBxJjfA9Nn8xNs3YQI3kiVLJgMHDpQtW7bItm3blAOYNa5cuSITJ06UFClSSIkSJZTWCUcxDLPAWW3dunWGfaEZNm3aVIKDg5XGlzdvXuWP0bZtW0mfPr2Jxnrx4kWpW7eu+j2xrVChQnLhwgW1wBIBz/OyZctGswZBA8ZwBM4HnzGcVKlSJcM1OHK+9gIrVUhIiEkZzhtOqbrDHiwB1atXV/e4fj34DrTgXr16qbF/DFOZt1OmTJmUJo3nC74T5u1kjQ8//FBp17DGFCtWTEJDQ9V1TpgwQcaMGSN58uRRlgZo47BO6E50aBNH2immehy5bkLcEbcS9I8ePTKYKs2BORXAW9gWMMECmGDx8oeg1xkyZIh6McyYMcPqOD9eTKNGjZL44v71UBnV6B9xRkauLSOZ8gQkWP2lS5dWawyj2AIm4enTp8vbb79tMMVivL9bt26yePFiJcgLFixoGNqB8ILD5hdffKG8/SGAevbsKbNnz5bChQsb6v3qq6+UsOzatasaXoCgefHihXz88ceqHvzOGF4wBp0DRGnoHYB//vlHCflFixYZBL0j52svq1atMvkfgqx+/frqPHVBj88Qdp9++qkMGzZMfH19DUMlcO4bPXq0QeDp7dSnTx/VDt7e3vL8+XN555135LfffjNpJ2vg2tFZhn+MPvyF85o6darqyMFpLm3atMqJDudj7kRnbzvFVI8j102IO+KWcfQYdzUHY4wALxh7vgtNcuvWrfLBBx/I+PHjlWMfNAu88CEQrAEBAk1EX/DSJ7FD1xohiGNy6Hv//ffVeDKECywA0LZfe+01tR0WGR38phjXhlYJIQ8gRKZNm6Z+X2OwL7RRCBv9XPCdzz//XGmR2G5+rw0YMMBEy4cFqGLFisoKEJvzjQ2oF46nVatWlX79+hnK4bcC7bVatWrKXwXaNpZr166psuPHj8v9+/fVvjgnaMboDEHIA7QBOrkBAfZ17nDtGF+HRq2D78JnJqbnMD7byZHrJsQdcSuNHmY5YCmRCMzxxvvEVAccf+B4B41EB5oCTLkLFy6Ut956y+L3IRh0x7H4Mo+PWFtGme7TOKHpPiFBR8me3wyaJ7RlaJphYWHRthu/xHEfwFLg4+Njsk/KlCmVeRqCyXjYBWZe8/wLEPaw+CCa48mTJya/tx5BYAwiNoxjzh05X0dBx0OPNsEwgjGIaIDQtRbWqMejo73xDMEcrmu/xlo22sma458x6CB99NFHqg3hhAfBDysDHCzN67VEfLWTI9dNiDviVoIe5kRoCn/++We0bXoZxt5tgTFbaHZ48RsLeYAwL9R/+/ZtSSwwBp4pd4B4PxNJHyjiSbl6VqxYodYx+UUMHTpUfv75ZyWQ8ZvBnwLCGGZehEQaCyVopcYapjEox+9urH1aEyZ6uflYtW4lMMdY83fkfB0Ffg3ofGCowBycK45Vrlw5q9/XryemdoLAjwkMlyGuHQIbUQLwF0DnA0MeeB7RAbJFfLWTI9dNiDviVoIeL58qVarIH3/8IQsWLDCM1eHFAPM7aNSokc06IMgx1rd06VLZsWOHSQw3xgUxBGAtXIrEH/gN9d8spgQoGzduVKZ0OL4Za9e//vqrSfY9AGctmIBhrTEOvUIZTLnGY8/YF+GVMPfCmUvnxIkTql7sa49mGpfzdQQMKcDEDSc1Sx0ODCngOnEcS6F8sGLp/i24dgxNINuc7iuhnztCB+0Zo4e/C4Q9Os4wkWNBmCssBbNmzVLDHPqwAMb/49JOtupx5LoJcUfcStDrDnMQEnBAgrCHCROpcOGMg5cMxkt1li9froT5u+++q7yCjTUJaJMw08PUiFhoxN5i3B7AcYvEDxCuetwzHLXwO+F/OJehUwUztB4xYQ0IE7z4kSgJWhvqwVjuTz/9FG3fLl26qPrx28KpDiZleF9DSMKcb+xkCacvCHp4n2NcGR0D3AcY34eJv3v37rG6ZkfO116g+WI8/ccff1T3v6U4+r59+8qaNWtUe8KpDsIcHRXE++M6oan/9ddf6jtwQEQ7wdyNnAZwejty5Ig6hvmwhy3rWMuWLdWYOjIcov4ffvhBbdO1cT27H8rhUAeLih7/7kg72arHkesmxC3R3JCvv/5a8/HxMYmZRWz9zZs3Tfbr06eP2rZq1apodcyfP19LlSqVSR0BAQHajBkzHDoXxtHbjqO3tvj6+qp4a+P4c2sx5HoMu/n3v/jiC/V50qRJhn0Rv928efNo+7ds2VIrVaqUWox56623LJ5fgwYNTM5NPweszcHxgoKCYnW+9sTRI8Y7efLkdsXRf/PNN1b3bdq0qUk7tWrVymI72RtHnzVrVovHyZMnj+FZxHFQl6X4d0d/V2v1OHLdlmAcPXFGPDaO3tjzHeZemB71SW1gNjT39IW2AdOg+Vg8wPcbNGigtBo4cCGWGBaBmMYVif3DLAht0sFvAy0MmhnG5Js3b27RnGopz3uLFi3UmC/MwTArY2gFlgDsC2uOcb58aOwYlsG+iMfG2Dl+V1hp8Bubj+P+8ssvynkMYZZwUMPvj+EfeLUb30/4Ls4La3PguGdsSnfkfC1dr6UyPQukJYxN7wiXg5UKE+LA2xztAc0b97qxsxrKMVSFCBNow7CuIFb/vffeU88XnquYQKgh2g1DH3CIw++JrIOwtukOjjgOnjGE3OF8YHrX498d/V2t1ePIdRPijnhB2if1SbgziAGH6R8e5NZmZcMLEaDTYQn8Qvc90BkvoYCzmrkzGZLadOrUSZnoYcYnxN7nkxBnlS06bqnRE2ILZHdDyBe0S4w3Y9wXoWDQ0CHsCSHEnaCgJx4HPLSRIAeLMSNHjjQx9xJCiDtAQU88jiVLlqhQK6Rmhf8FzF/wybA1zk0IIa4KBT3xOJAIB853DJMkhHgCbpnrnhBCCCFRUNATQgghbgwFPSGEEOLGUNA7AQjrwjznTGlAiPOBZ9PaZEWEuAIU9E4AMsJhGk5MAoIMZIQQ5wDT1+LZ5Ox2xJWh170TgEk4MJUnXiqYYANJXMzT9YZGiDzhr0VIomryEPLIosjZ7YgrQ9HhBECoI4UhptN9/PixmhnNWLNHCtxrD0TyZmAKXEISC8xwh+lxIeSNZzUkxNWgoHciMNGHPtmHMRGRIn/fFqmeW8Sbgy2EEEIcgGKDEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhBA3hoKeEEIIcWMo6AkhhNiFpmly6roms3ZocvGOxlZzEThNLSGEEIuER2hy+LLI7tMiu8+I/H1W5P5TkU9aiuTJ6MVWcxEo6AkhhCiePtdk37kooY5l/3mRkDDTxvmogciAxmwwjxL0ISEhcuPGDQkODpYUKVJI1qxZJSAgIH7OjhBCSIJx+5GmtHQl2E+LHL0i8iLS+v7daoiMaiPi5UVt3u0FPYT7tGnT5LfffpNjx45JZOTLOyNZsmRSvHhx6dKli3z44Yfi7+8fn+dLCCEknth/QWTgXJFbj2Let21Fka86U8h7hKC/d++e1K5dW44cOSLe3t5SsWJFKViwoNLmodWfOXNG9u3bJwMHDpS5c+fK1q1bJV26dAlz9oQQQmJNo1Je8lpBTQbNE1n0t/X9GpYSmdFdJHkyavIeIeiHDRumhHzlypVl4cKFkjNnzmj7XLlyRdq3by+7d+9W+8+YMSO+zpcQQkg8svecyD8XrG+vXkTkl14iPt4U8h4TXrdixQq1/vnnny0KeYBybDfenxBCiPNw+oYmbb/RpN1kkbO3LO9TLp/IvN4i/j4U8h6l0T948ECt8+bNa3M/ffv9+/dje26EEELimYfBmny+UuSHrSIRL16W+/uI5Ej/UugXyyGyuI9ISn8KeY/T6PPly6fWmzZtsrnfxo0b1Tp//vyxPTdCCCHxxItITX7ZrknZISLfbjIV8q3Ki+wbK9KyQtT/+TKJLO8vki4lhbxHCvpevXqpdefOnZXnPULrjMH/KIfXvfH+hBBCkoY/TmpSY7RIvzki956+LC+RS2TtxyI/9/KSnEFekiYgSqtfMUAkcxoKeY813ffu3VsuXrwokydPVp+xBAYGGrzunz17ZgizGzBggAqxI4QQkvggTe2ni0VWHjAtz5haZHgrkU5VTD3pC2QRWT5AJFcGCnmPFvQQ4JMmTZIePXrIggULVCjdtWvXlJDPnDmzZM+eXcqXLy8dO3aUYsWKJcxZE0IIsZnh7pu1IlM3iIRGvCz3SS7Sq67I/5qIpEkRXZg3KEkB747EOjPeK6+8ImPGjInfsyGEEBJrIiM1WbxHZOQSkRsPTbc1KCkytr1I/swU5p4Gc90TQogbcOC8JoPni+w7b1peOKvIuA4idYpTwHsqCSro69atq9abN29OyMMQQojHcuOBJqOWiSz4y7Q8TQqRIc1F3q7JZDeeToIK+i1btiRk9YQQ4rE8D9dkxkaRr9eIPAt9WQ7fuu41o4R8UCpq8YSme0IIcSk0TZPVB0U+WShy6a7ptmpFRCZ0FHklBwU8iYNGj5npCCGEJD7HrmgyZAHi4k3Lc2cQ+ay9SJPSnF2OxIOgP378uFoHBQU5+lVCCCGx4N4TTcatEPllh0ik9rI80C8qVO69esxHT+JR0L/66qty9OhRNf1siRIlbO7r5UXzESGExJbwCE1+3CYyYaXIo2DTbR1fE/m0lUjWdHzPkngW9C1btlSCfvny5TEKekIIIbFjy7EoM/1p0yzjUj5f1Dh82XwU8CSBct23atVKrSHo7Umqg4UQQoh9nL2pSfspmrSeZCrks6YV+f4dkQ1DKORJAmv0JUuWlDt37thllj927Jij1RNCiEfyKFiTL1eJfLdFJNxoZjk/b5HeDUT6NuSUsSQR4+gzZMgQy8MRQggxnz527i6R0ctE7j4xbZvmZUVGt4NXPc30JAkT5oSEhKipaTGpDWawy5o1qwQEBMS1WkIIcXv+Oh2VtvbIZdPy4jmjxuGrFqaAJ0kk6CHcMef8b7/9pszzkZGRJrPbIdYe89Fjilp/f/94OE1CCHEfLt/VZMQSkeX7TMuDUkZNH9ulmun0sYQkqqC/d++e1K5dW44cOSLe3t5SsWJFKViwoGE++jNnzqipawcOHChz585VYXjp0qWL00kSQog78CxUk8nrRKasRwrbl+XeyUXerS0yqJlIWgvTxxKSqIJ+2LBhSshXrlxZFi5cKDlz5oy2z5UrV6R9+/aye/dutf+MGTMkMQkLC5Nvv/1W1q9fL0+fPpWiRYtK7969VQ6A2LB48WL5/PPPDfn706RJE89nTAhx97S1S/eKjFgscu2B6bbXXxUZ20GkYBYKeJIweGm4Ax0gS5YscuvWLfn333+lSJEiVvc7efKkErAYs79+/bokFs+fP5d69erJrl27TMp9fX1l5cqVUr9+fYfqu337thQrVkwNV8BigYgDR5wRr169qjpD6PzkyJFDYkNEpMjifSJty4t4OxwQSQhJSg5ejBqH33PWtLxglqj54V8vQQFPHMcR2eKw2HjwIKo7mjdvXpv76dvv378vicnEiROVkC9cuLDSxHfu3Cl9+/ZVWn737t2VwHaEDz74QEqXLm2YcpcQQuzh1iNNPvhZk9qfmQr51AFRAv7PURTyxElN9/ny5VPa+qZNm6RJkyZW99u4caNa58+fXxKTH374QXx8fGTdunWGzka1atXk4cOHMmvWLFm9erW0bdvWrrqWLVumrhOZAGH6J4SQmAgN12TmZlEx8U+Npo9F6pG3qosMaymSgdPHkkTEYY2+V69eat25c2fleY/QOmPwP8rhdW+8f2Jw7do1uXjxotSqVSuaxaFbt25qbW7StwYsEe+//75MmTLFoh8CIYQYg1HQNQc1qfSpKI96YyFfpbDIjk9FJr3pRSFPnF+jh2YLYTp58mT1GUtgYKDB6/7Zs2eGMLsBAwaoELvE4sKFC1an0tXLzp8/b1ddH330kXI4fPPNNx06h8ePH6tFx7wjRAhxP05c1WToQpHtJ0zLcwaJfNZOpFlZTvJFXEjQQ4BPmjRJevToIQsWLFChdNCkIeQzZ84s2bNnl/Lly0vHjh2VE1tiAg97YMkrXi978sQs9ZQF1qxZo4YeYpPCFz4Co0aNcvh7hBDX48FTTcb9LvLzdmS4e1mewlekf2ORD14XCfClsx1x0cx4mKxmzJgx4kxgbB7A8c4cvczPz89mHY8ePZKePXuq8LxMmTI5fA79+/dXnSBjjb5ChQoO10MIcV4iXmhKuGOO+Idm08e2qyQyso1INk4fS9wlBa4zAYsCuHTpUrRtly9H5ZiMSXhPmDBBhQ+OHz9eLTrnzp1Ta3jfp06dWnnzWwLbsBBC3JPtJzQZMl/kX7Oo4bJ5o9LWls9PDZ54kKDXQ9I2b94siUGhQoVUnn1k44uIiFCZ+3Q2bNig1qVKlbJZB+Lk8d0DBw5Y3H748GHlk0AI8SzO39Jk2CKRdYdMy7OkERnRRqR9JQxtUsgTDxP0yCKXmCApTuPGjWXJkiUyePBg+eKLL5RPwYkTJ2Ts2LHqc4sWLWzWMXz4cIuRAv/73/9kx44dqtOSPn36BLwKQogz8ThEk69Xi8zYZDp9rK+3yIevi/RrJJIqgAKeOC9uZboHI0eOVM50X3/9tcyZM0dlsUPcPybeQbiccVw/HOfmzZsn33zzjVStWlWV5c6dWy3mpE2bVq1LlizJaXoJ8QAiIzWZ95fI6KUit18G0iialhEZ004kT0YKeOKGgt5S6JozASdBJMt599135fTp0yqFLWbQw/9fffVVtHF7mOiRTIcQQnT+PhOVtvaQmbtPsRwi4zuI1ChKAU/cONe9F9I7YTrFoCC7ZroDDh4i3kC8P0LukDzH0rg6cgTD8Q6z78U0UQ2c8ZD+F2P8xmP/McFc94S4DlfvazJyiciSPabl6VOKDGsh0rU6ZpqjkCdJjyOyxWGNHjPAISUsHN5KlChhV6cgqciTJ4/N7Wgke7PeJXYqX0JI4hEcqsnUDSLfrBMJMYrOTZ5M5J3aIoMxfWwgBTxxTRwW9C1btlSCfvny5TEKekIIcWZgbVy+T+TTxdDmTbfVfkVkXAeRItko4ImH5bpv1aqVWkPQ2zNejoUQQpyNQ5c0afS5SPfvTIV8vkwiCz4SWdqPQp54qEYPr3PEmttjlo9NCllCCElIbj/S5LPlInN2QaM3nT52YBORnnUROkctnnh4eB1C1gghxJUIi9DkO0wfuxqx8S/LobN0qSrySUuRTGko4In74XZx9IQQYj4Ov+GIyLCFIudumbZN5YIi4zuKlMpNAU/cFwp6Qojbcup61PSxW8xGEXOkj0p406Jc0kcHEZLQUNATQtyOh880mbBS5IetptPHBviK9G0o0ru+SAo/CnjiGVDQE0LcavrY2TtFxq4Quf/UdFubilHTx+ZITwFPPAsKekKIW7DjX02GLBA5cdW0vFTuqOljKxWkgCeeiUOC/q233lLrWbNmqfWhQ4fsmvqVEEISiot3NPlkkcjqf0zLM6UW+bS1yBuvcfpY4tk4JOhnz55tIuhLly6dpLnsCSGey5MQTSatFZm2EaFzptPHvl9PpH9jxMZTiyfEIUGfMWNGlSzn/v37nJOdEJJk08cu/Ftk1BKRm49MtzUqJfJZO5F8mSngCYmVoK9Ro4YsWbJEWrRoIZUrVzaUDx482Ob3JkyY4MhhCCHEIvvORU0fe+CCaXmRbFHTx9Z6hQKekDgJ+smTJ8vz589l/fr18scffxjKP//8c5vfo6AnhMSF6w+ipo9d9LdpedoUIkNbiHSvyeljCYkXQZ8tWzZZtWqVvHjxQpnws2bNqsoxHy4hhMQ3IWGaTNsgaiw+2Gz6WAj3Ic0xVzy1eELiPbwuefLkkiVLFmnfvr36P6ZJ7wkhxBHg4LvygChv+iv3TLfVKBplpi+WgwKekASPo1+wYEFcvk4IIdE4cjkqHv7PU6bleTKKjG0f5XDHtLWEJGLCnODgYJk4caKsWLFCzp8/r8ry5csnLVu2lH79+kmKFCnieghCiAdw90nU9LG/7hSJNIrYTeknMrCpSK+6In4+1OIJSVRB//DhQ6levbocPXpUfHx8pFChQqr8yJEjcuDAAVm4cKHs3LlT0qZNG5fDEELcfPpY5KT/fKXp9LGgU5WopDeZOX0sIbEmWey/KjJy5Egl5EuUKCEnT56UY8eOqQWfUYZto0aNisshCCFuzKajmlQZETWFrLGQr1hAZNtwkendvSjkCUlKQb9s2TK1njlzpjLX6+Dzt99+a7IPIYTonLmpSbtvNGn7DT6/bJfs6UR+fFdk/WCR0nlopickyU33N29GPaElS5aMtk0vu3HjRlwOQQhxIx4Ga/LFSpHvt2KmuZfl/j4iHzUQ6dNQJJDTxxLiPII+KChICfuzZ88qU70xKAMZMmSI2xkSQlyeF5GazPlDZMwykXtm08e2LC8yqo1IrgzU4AlxOtN948aN1Rre9Y8ePTJx0uvbt6/63KhRo7ieIyHEhdl1SpMao0X6/moq5EvkEln7scgvvbwo5AlxVo1+9OjRsmHDBtm6dasal69YsaJKdLF371418Q0S6WAfQojncemuJp8uEvn9gGl5hlQin7YS6VQVGe6oxRPi1Bo9UuIijO69994TPz8/WbduncqDj8/vv/++2oZ9CCGew7NQxMNrUmGYqZD3SS7Su77IgXEib1b3opAnxFUS5mTKlElmzJihltDQUFUGQU8I8bzpYxfvERm1FJPQmG6rX1JkbDuRAlmowRPicoLeGAp4QjyTA+ejpo/dF5Uc00ChrCLj2ovUfZUCnhC3EPSEEM/i5kNNafDz/zItT5Miama5t2uK+HhTyBOSlFDQE0Ic5nm4JjM2ikxcI/I0asROAd+6bjWi5ogPSkUBT4gzQEFPCLEbRNWsPijyyUJ41Ztuq1YkavrY4jkp4AlxJijoCSF2cfyqJkPmi+w8aVqeK4PIZ+1Empbh9LGEOCMU9IQQm9x7osm4FSK/7DCdPjbQT2RAY5H3X0cKW2rxhHiEoA8LC1NLypQp47NaQkgSEB6hyU/bRcb/LvIo2HRbh9dERrQSyZqOAp4Qt06YAy5fvizdunVT8fQIr0uVKpUq7927t7Rp00Zu3boVH+dJCElEthzTpOpIUSFzxkK+XD6RzcNEZr7tRSFPiCcI+vPnz0u5cuVk9uzZUrlyZZNtGTNmlKVLl8qPP/4Y13MkhCQS525p0n6KJq0niZwymngya1qR73qIbBwCYU8tnhCPEfRDhw6VO3fuqHz2v//+u8m2Zs2aqfWiRYvidoaEkATnUbAmwxdpUmm4yIbDL8v9vEX+11hk31iR9pW9JBlz0xPiWWP0mzZtUusePXpE25Y/f361Pn36dFwOQQhJ4Olj5/4ZNX3sncem25qVFRndViRPRmrwhHisoH/6NGrOybRp00bbFhkZqdbJksXZDYAQkgDsPhOVtvbwJdPyV3KITOiIuHgKeELE0wV9njx5lMaOpUSJEibbTp6MCrYtXLhw3M6QEBKvXLmnyYjFIsv2mZYHpRT5pCVmluP0sYS4E3FSt9u3b6/WY8eOVRmzjJk4caJad+zYMS6HIITEE8Ghmoz/XZPyw0yFvHdykffriRwYL9KtJqePJcTdiJNG//HHH6s56OFwd/jwSw+eMmXKyMGDB6VKlSrSp0+f+DhPQkgsQSd86V5RWvw1s+lj6xYXGdcBs8zRTE+IuxInjT4wMFB27Nghw4cPl/DwcEP5vXv3ZNiwYcpZz9fXNz7OkxASCw5d1KThBJEe35sK+QKZRRb1EVnSz4tCnhA3J86Z8VKkSKHC67AgKx60B85LT0jScuuRJqOXisz7Cxr9y/LUASIfNxN5p7aIL6ePJcQjiNcUuNTeCUlaQsM1mblZ5KvVIk+evyz38hLpWl1kWAuRjKlppifEk3BI0NetWzdWB9m8eXOsvkcIsQ9Y0tYdFhm2UOTCbdNtrxWKCpcrkYsCnhBPxCFBr4fMmcfL37gRlSszICBAvLy8JDg4Kjl21qxZGUdPSALz7zVNhi4Q2XbCtDxnUNT0sUh8g+eSEOKZOCTor169avL/gwcPpGnTpuLv76/y3VetWlWV79q1S7p27SrZsmWT1atXx+8ZE0Kinr+nmoz7XeTn7chw97JRUviK9Gsk8mF9kQBfCnhCPJ04jdFjhro///xTeddXq1bNUI7P33//vdSrV0+F16ETQAiJHyJeaGpueMwR/+CZ6bZ2lURGtBbJnp4CnhASD4J+zZo1al2pUqVo2/SyVatWxeUQhBAjtp/QZMh8kX+vmzZLmbwiEzqIVChAAU8IiUdBHxERodbXrl2LlupWN/Mbx9cTQmLHhduacrRbe8i0PHOaKA2+Q2XMK0EhTwiJ54Q5tWrVUutBgwZJSEiIoRyfUQZq164dl0MQ4tE8CdFk5BJNKg43FfK+3lHj8PvHirxRhdPHEkISSKP/+uuvZc+ePbJy5UopUKCASnkLMG5//fp1yZQpk9onKUFUQFxm0EPYEj2WSWITGanJ/L9ERi9D8hvTbU3KiIxpK5I3EzV4QkgCa/QFCxZUOe179uypBOLixYvVgs8oO3TokOoAJDYXL16Utm3bSqpUqcTHx0eKFSsmP/30k93fR1rfbt26Sf78+dX30WGBY+GWLVsS9LwJAXvOalJnrMgHv5gK+WLZRX4fIPLbB14U8oQQu/HSzKediwMw2UP7RbhdUnHz5k0pW7assigAaPPQ6gGsC/3797f5/bt370rGjBkN/+N6jJtoxowZ8t5779l9PvBVyJkzp1y5ckVy5MgRiysSiYgUWbxPpG15Ee84dc2IM3PtPsz0Iov3mJanC4zKaPdWDcw0Ry2eECIOyZZ4FRtImJOUQh6MGjVKCfnmzZurRD7Iv79kyRJ1Xph85/Zts7RhZkCw16hRQ2bNmiVnz55V30c9+ix8n3zyiaHjQEh8EBKmyReroqaPNRbyyZOJ9Kwj8s84kR61vSjkCSGJr9E3aNDArv3Wr18viQEEcIYMGZQGjl5OypQpDdtGjhypOgEzZ85UwwqxoVSpUmo6XiQKSps2rV3foUZPrIH7dMV+keGLRK7eN91Wq5jI+I4iRbJRgyeExE22xMkZD2Pwlsz3jx8/Vp8xtp2Yjmznzp1TQrh169YmQh60aNFCCfr9+/fHWtBjVr7s2bNLmjRp4umMiady+JImg+eL7D5jWp4vk8jY9iINSjJtLSEkfvCO63i4JaD1tmvXTvLmzSvLli2TxEKP3YeToDm6U6B5Gl97Wbdunezdu1dl/LPVeUEnR+/oAH0eAELAnceajFkmMmeX6fSxqfxFBjUVebeOiJ8PtXhCSPyRIK5dJUuWVE5rGzZsMMTTJwbPnz83+AqYkyJFCrU2jve3l927d0v79u2le/fu8s4779jcd+LEicqcoi8VKlRw+HjE/QiL0GTqBk3KDhX59Y+XQh59xi7VRA6ME+ndwItCnhAS7ySYD3fFihXVesGCBZJY6ML82TOzBOBGZfo+jqT5xfS8HTt2lB9++CHG/eHVjzETfYEVgHj2OPyGw5pU/jRqLP6xUT+zckGRbcNFpr7lJZnSUIsnhDih6d4es35sNOjYojsknD59Otq2U6dOqTW0bHuBmf7999+Xjz76SGnq9pA6dWq1EHLqelTa2s3HzO7T9CKj24q0LM9xeEKIkwt6xJxb0mAuXLggAwcOVP8bz2qX0MAnAF73SGwDp7x06dIZtiHEDthrSkco3meffabC6caMGZNg50zcj4fPNJmwUuSHrabTxwb4ivRpIPJRA5EUftTgCSEuIOiNE8tYokiRIjJ16lRJLJAc54033pApU6YoZ0AcO3PmzMohEBo5PPHhfW88KQ8WX19fQ5pc/N+jRw81tS689OFjoI/9G3vfMy0usTR9LMbfP1sucv+p6bbWFURGthHJGUQBTwhxoTj6wYMHRyuDwEQHAEK+fv36ccozHxvu3Lkj5cuXl0uXLkXbZp7Vrm/fvjJ58mQ1lW6TJk1U2bFjx+TVV1+1eYyjR49K8eLF7TofxtF7BjtPRoXLnTAL6iiZW2RCR4zHU8ATQlwwjn7ChAnibKCTAS95mNzh9f/06VMpWrSocpJD/ntjkMce2nny5MkNZeiYoMwWid15Ic7LxTuacrJb9Y9pecbUIp+2EulUhdPHEkJcWKOHRgy++eabWG33BKjRuydPn2syaa3ItA0ioREvy32Si7xXT+R/TURSB1CLJ4QkvWyJk6DXx6mtVRHTdk+Agt79po9d+LfIqCUiN82mj21YSuSzdiL5M1PAE0LcxHRvC92BDY5uhLgD+85FjcMfuGBaXiSbyLj2IrWLU8ATQpwPhwX9rl27Yix78eKFbNy40Wo6WkJciesPNBm1VGThbtPytClEhrQQ6V5DxMebQp4Q4iaC3lJcvLVYeW9vbxk2bFjszowQJ5g+dvpGkYlrRILDXpYn8xJ5u5bIkOYi6VNSwBNC3EzQG6eB1fO+m6eGhVc6ktVUqlRJsmbNGh/nSUiiAZ+SlQdEhi8WuWyWE6p6kajpY1/JQQFPCHFTQY9kMubT1BqXEeLKHL2iyZD5IruiMiYbyJMxytGucWmmrSWEuBZxcsabNm1a/J0JIUnI3SeajF0uMnunSKRRkEhKv6hQOYTMcfpYQojbC/rt27erdc2aNU3+jwl9f0KcjfAITX7YJjLhd9OZ5cAbVaKS3mRJSzM9IcRDBH2tWrVM4uL1/2PCk+PoifOy6WjU7HKnb5iWV8gflba2TF4KeEKIhwn6OXPm2PyfEFfgzE1Nhi0Q2XjUtDxbOpFRbUTaVOQ4PCHEQwV9586dbf5PiDPzMFiTL1eJfLcFM829LPf3EendQKRvQ5FATh9LCHEzEiwzHiHOwotITeb8N33s3Sem21qWj9Lic2WgmZ4Q4p7EyhnPUeiMR5KKXaei0tYeu2Ja/mrOqHH4KoUp4Akh7k2snPEchc54JLG5dFeTEYtFVuw3Lc+QSmR4S5HO1USSI8UdIYS4OXFyxiPE2XgW+nL62OfhL8u9k4v0rCMysCly1FPAE0I8hzg54xHiLMBqtHiPyMglmITGdFv9EiKftRcpmIUCnhDiecSLMx5mq/vnn3/k/Pnz6v98+fJJmTJlJHny5PFRPSE2+edC1Dj83nOm5QWziIzrIFLvVQp4QojnEmdBv3z5cunTp49cuWLq7ZQzZ06ZPHmytGzZMq6HIMQiNx9qMnqZyLw/TctTB4gMbi7yTi1OH0sIIXES9CtXrpTWrVsbzPp169ZVnzdv3ixz585V21asWCHNmjVjS5N443m4Jt9uEvl6tcjT0Jfl8K17q4bI0BZwuqMWTwghcRb0I0aMUGOjY8eOlaFDhxrKu3btKkWLFlVz0Y8cOZKCnsQLuNfWHBT5ZJHIxTum26oWjpo+9tWcFPCEEGJMMokDJ06cUOvu3btH29atWzeTfQiJ0712VZMWX4t0nm4q5HNlEJn9nsiqgRTyhBAS7xp9lixZ5PLly+LtHb0aHx8fwz6ExJb7TzUZt0Lk5+2m08cG+on0byzywetIYUstnhBCEkSjf++999R64cKF0bYtWLBArT/88MO4HIJ48PSx323RpMwQkR+3mQr59pVF9o0VGdDYi0KeEEISUqOvU6eOcrjr37+/XLp0ycQZDx73bdq0Uelv9+83TU9Wrly5uByWuDlbj2kydKHIyeum5WXzinz+hki5fNTgCSHEXry0OOSn9fKK3QvXk1LiXr16VYUaIvwwR44csaojIlJk8T6RtuVFvONkg3Fuzt2Kmh9+/WHT8ixpREa2EWlXSSQZ09YSQog4IlvipNFPnTqVzU3izOMQTb5aLSpkLtxo+lg/b5EP64v0aySS0p9aPCGExIY4CXqOv5O4Th8790+RMctE7jw23dasrMjotiJ5MlLAE0JIXOB89CRJ2H0mKm3t4Uum5a/kiIqHr16EAp4QQuIDCnqSqFy5p6mJZ5buNS1Pn1Lkk5Yib1bDTHMU8oQQ4jSCftOmTTJ9+nQ5efKk3L59WyIjI6Pt8/Dhw7gehrg4waGaTF4vMmW9SEiY6fSx79QW+RjTxwZSwBNCiFMJ+ilTpqgJbUDp0qWlWrVqsfbEJ+4JIiyW7RUZsUTk6n3TbXWKi4xrL1I4G+8ZQghxSkH/xRdfqPVPP/1kMQ0u8WwOXYwah//7rGl5/sxRAv71ErEP0SSEEJIIgv7+/SgVrX379nGphrgZtx5pypMeHvXGKRMwfeygpiLv1hHx9aaAJ4QQpxf0ZcuWlV27dsmdO3ckMDAw/s6KuCSh4UhbK/LlKpEnz1+WQ2mHkx2c7TKmpoAnhJDEJE551j7//HMJCAiQzz77zKITHvGccfh1hzSp/KnIp4tNhXzlgiLbh4tM7upFIU8IIa6m0b/22muyc+dOqVevnuzZs0cqVqwo/v7+0fabNm1aXA5DnJh/r2kydIHINrPZiHOkFxnTTqRFOY7DE0KIywp6hNS1a9dOhc9hOXbsmMX9KOjdjwdPNRm/UuSnbchw97I8wDcqZW3v+vhMMz0hhLi0oO/Vq5dcuHBBmjZtqsz3SLBPL2r3JuKFJrN2iIxdIfLgmem2thVFRrSBNk8BTwghbiHo9+6NSm82c+ZMyZYtW3ydE3FSdpzQZMgCkRPXTMtL5xGZ0FGkYgEKeEIIcStBnzlzZrl48aKkSJEi/s6IOB0XbmvyySKRNQdNyzOlFhnRWqTja5w+lhBC3NLrXp+9bs2aNfF1PsSJeBKCvPSaVBxuKuR9vUX6NhTZP06kU1UvzhFPCCHuqtHXqFFDOeO99957cv36dalcubJFr/ty5crF5TAkkYmM1GT+XyKjlyH5jem2xqVFPmsnkjcTzfSEEOL2gr58+fKGz4MGDbIZZ01cg71nNfl4vsjBi6blRbNFTR9bsxgFPCGEeIygnzp1avydCUlSrt3XZNRSkUV/m5anCxQZ1kLkrRqcPpYQQlwR7/gYo7fFixcv4nIIksCEhGkydYPIN2tFgo2mj02eTOTtWiJDmomkS0ktnhBCPHY+emucOXNGfv75Z5k9e7YavyfOBYZTft8vMnyxyJV7pttqFRMZ10GkaHYKeEIIcXXiVdAHBwfL4sWLlYBHalwQFBQUn4cg8cDhS1HTx+4+Y1qeN5PI2PYiDUsybS0hhLgL8SLokTgHc9IvWLBAHj9+rMpq164t77zzjrRq1So+DkHigTuPNflsucivf5hOH5vKX2RgU5GedUT8fKjFE0KIOxFrQX/37l2ZM2eOEvDHjx8Xb29vadSokaxcuVJt37JlS3yeJ4kDYRGafL9F5ItVIo9DTKeP7VRFZHgrkcxpKOAJIcQdcVjQr1u3TpnmIdDDwsKkWLFi8uWXX0qXLl1UpjzmuncuNh6Jml3u7C3T8ooFotLWls5DAU8IIe6Mw4IeWjvmoH/rrbeke/fuampa4nycuq7JsIUim80mFMyeTmR0W5FWFTgOTwghnoDDgj5ZsmQSEhIihw8fVkvRokUlderUCXN2xGEePtPk81UiP2zFTHMvy/19RPo0FOnTQCSFH7V4QgjxFBzOdX/p0iUZM2aM3LlzR3r27ClZsmRRZvutW7cyA14S8iJSk1+2a1J2qMi3m0yFfOsKIvvGigxp7kUhTwghHobDgj5HjhzyySefyNmzZ5XDXcuWLWXJkiVSp04dyZ8/v2E/jN8nJREREXLgwAHZsWOH3Lx5M8nqSAx2ntSk+iiRfnNE7j19WV4il8jaj0V+6uklOYOoxRNCiCcS69nr4HSHELq5c+fKjRs3ZPr06ZIuXTqTDsHAgQPl1KlTktisXr1acubMqSbTqVmzpmTPnl1ZHZ4/f56odSQ0F+9o8uYMTZp9KXL86svyjKlFprwlsm24yGuFKOAJIcST8dLiecYZjNsj5A4dgPv37yf6pDb//POPmkUPFoXChQurSIB9+/Ypv4KuXbvKrFmzEqUOnatXr6oOw5UrV1TnJzZERIos3ifStryIdzKRp881mbRWZNoGkdCIl/v5JBfpVVfkf01E0qSggCeEEHfFEdkSp/noLVGyZEmZMmWKSns7f/58qVu3riQmI0eOVAJ67NixcvLkSWV2h1UBDfLrr7+qssSoI6Gmj13wlyblhop8vcZUyDcoKfL3GJEx7bwo5AkhhCScoNfx8/OTDh06yKZNmySxgFl9w4YNkjt3bhk8eLChHAJ62LBhyrKwYsWKBK8joWj6pUivn0RuGs0RXziryNJ+Igs+8pL8manFE0IISaRJbZICaN3QxGvVqqXCAI2BsyA4evRogtcR3yz+WxNJ7iXem89KiWS+EuznK16pfKVTQz/p1sRPUqdzq5+REEJIPOJWEgIhf8DSeIVepu+TUHUg17+e7x/AUVEfZ8cSGzCb3LZTIvkf3ZfI8JeVnD0hMuxrEd+AZJI2s69a0mX2kzT4nCXqc9rMfpIus6/4p3Krn5oQQjyaCAfkiVu9/REOB5B33xwfHx+1Dg8PT9A6Jk6cKKNGjYpWvvqwSFCUzI8FUSb5ytPty0L47L/lGv558N9CCCHEbbh320MFfapUqdT6wYPokk0v0/dJqDr69+8vPXr0MNHoK1SoIE1KwiIgsSLihSbL//GSoJPX5NHtcHl4MzRquR0mj++GixZLS4E5/qmTSbpML60AaZRFwEfSZfGTtFn8JF0mX/EJSB4/ByOEEBJrrl4V6e2Jgl5P2HPkyJFo2/SyAgUKJGgdSAdsKSUwwuKwxEWjr90le7Q6XoRHyqM74fLgZqg8uBUqD26ERX1GR+BWmDy4Eao6A/YQfC9Sgu9FyLV/YQ+wTGAa7/8Ev69ap8M6KzoE+v9+4uOXYD6ehBBCxDF54laCHul4CxYsKDt37pQTJ06omfV0vv32W7WuXr16gteRmCT3SSbps/mpxRoRYZFK+4cV4MFNvSPwskOAz0/v29cZePYoQi1XT1nvDKRM76MsAkrwZ41aq45A1qiOQNpMvuLty84AIYQkBm4l6EGvXr1kwIAB0qBBAxk6dKhKdrNs2TKVpjdPnjxq9j0dxMNfvHhRypYtKxkzZoxVHa4AhGqGHP5qsUZ4aKQ8vGW5I/Dwv8/PHhoF7tsAnQYsV2xYBlIH+UhaJfijnAZfWgaiPqMzgE4MIYQQJ8uMl9TAUa5Zs2ayfv16k/LAwEBVVrVqVUNZ3759ZfLkybJq1Spp0qRJrOpIisx4SUVYyAt5cMvcMmD6OeSx0Ww6ccDLSyR1RnQCdEuAbhl4aSVIncFXknszdwAhxPO46oBscTuNHp7xa9asUSl4kfjm6dOnaipdzLQHbdwYlNevX18yZcoU6zo8Cd+A5JI5T4BarPH82YuXloEboRatBM+fxtwZQPfz0e0wtVw8ajRTjxHJkv/XGdB9BVQnwKhTkMVXUgf5SrLk7AwQQjwXt9PonQ130ujji5CnEcppMKoT8J8DoVGH4OGNUAkNiZ9QgmTeXmoY4KXwf9kR0NfwKUiWjJ0BQojr4NEaPXF+AlJ6S0BBb8lWMIXF7eh7hjx58V8nIKoDYGwl0DsF4c9j7gxERmhy/3qoWkSeWNzH28dLJRnSowbMOwLoHKRM561mbCSEEFeDgp44HRCoKVJ7qyV7oUCrnQF4/0cND/w3NKCHFt6CVSDKShARFrPBKiJck3tXQ9ViDYQM6pEDL0MJTTsHKdKwM0AIcT4o6InLdgZSpvVRS86iYrUzAO9/OBCaWAb++6znGngREXNnAFEJdy4/V4s19FTEBuEPp8HMLz/DkTAgVXJaBgghiQoFPXHrzkCqIF+15CqW0urUv0/uhZskGNIdB6M6BWHy8HaoRNoRTBAWEim3Lz5XizX8UiT7T/AbWQbgQGiUd8A/kI8lIST+4BuFeDRwwkuT0Vct8qrlfSJfaPL4bpjF3AJ62aM7YXalIg4NjpSb50PUYg1o/Xo+AT3JkHFHANv8UjAVMSHEPijoCYkBhOdBuGLJW9LyPAcw/0PYW+oIROUdiEpFbE+MCxwRQ54Ey42zwVb3gf+CSdZB3TKgz1qYxVd8/dkZIIRQ0BMSLyBxT/qsfmqxlYo4qjNglGzIOMzwZpgaRrCH4McRarl2ynpnAJECpvMSvExFnD5L1HTGPkxFTIjbQ42ekMR62HyTSVB2f7VYIxydgVthcv+/0EJDRIGRleDpAztTET+IUIutVMSpgnwsZh3UIwmYipgQ14eCnhAnAhp2hpz+arFG2PMXUULfOLeA7kz4n5UA2r49wIKA5fLxZ9ZTEWcwmqrYKOug3iGAfwNTERPivFDQE+JiYOw9U54AtVgjNPi/VMSG3AJ6J+BlRAF8AexKRXwnXC1iJRWxVzJRwt40yZCpZQDzEjAVMSFJAwU9IW4IvPIz502hFms8fxaVitiiZeC/z4gSiAlEG+A7WC4ctpGKGJ2B/6IGLKUkxjACUxETEv9Q0BPioSBeP2sBLLZTEZtYBizMXGh3KuIboWqxlooY5n+TrING0xbruQYwLwFTERPiGBT0hJAYUxFnK2g9FXEwUhFbmLbY2DJgTypihCjeuxaqFqsvLF+vqPBBs6yDxhEFgUxFTIgJFPSEkDh1BgLT+qglRxHrnQF4/+v5BMynLdYjCuxJRYwOw50rz9ViDR//ZNGmLTZPQMRUxMSToKAnhCR8KuL0PmrJaSMVsZqXwKwjYNw5eHg7TA0BxASGEmJMRYx5CSxkHTQOM8Qsi4S4A7yTCSFJDpzw4JmPJXdxG6mI70H4G1kEjKYtVqmIb9uZijgkUm6dD1GLNfxTJo82bXFUJ+BlGVMRE1eAgp4Q4jqpiDP5qSVPCeupiKPmJYiedTCqUxAmjzEvgR2piJ8/faHSENtKRRyQWu8MRJ+2WI8oYCpiktRQ0BNC3AZ47uvCVkpZ3udFeKQaBog2bfF/loGHN0LlsZ2piEMev5CQx8Fy/bT1zkBg2uipiE2sBFn8mIqYJCgU9IQQjyK5j52piG9HTzJknIAIPgX28OxhhFqunrSeihhhg+YWAeMwQyQkQgplQmIDBT0hhFhKRZzDXy3WCA+NfBk1YAgljLIMPPyvQ/DskZ3zEtwPV8uVE9ZTEat5CVRuAaMOgVGYYZpMTEVMLENBTwghscDHL5lkyh2gFpupiG+/zCfwMpJAtwyEKvN/TMCnANMcY7l0VGymIjaZtthsCmOmIvZMKOgJISQhUxHnCVCLzVTEepIhs8RDeqfg+bMXDqUivnjE8rwEyZL/Ny+BsWXAOMwwK1MRuyMU9IQQktSpiPNjsT4vQcgT8+yDxp2CqHVYiB2piF/If/uHWd1HT0VsPm0xytL/ZxlgKmLXgoKeEEKcnIBU3mrJVtDGvASPX8j9aJ0AU8sA/AriJRWxj5fptMX/WQOMLQOINojveQn2r70j2QsH2uwUkehQ0BNCiDvMS5DGWy05CltPRQzvfz2fgB5RoBwJjToEEeF2pCIO1+TuledqsZmKGJYBsxwDephheqQiTp3coc4AOiFjmh6UIq+llZqdskrx6uk4/bEdUNATQogHAIGaMp2PWnIWE6upiJ89QCriMDXToCGiwDgB0S0HUhFfeq4Wm6mIjS0DJiGGUeWwZOiUrBMkfgHn5ORfD9WSIae/1OiYRSq3yqwmXyKWYcsQQggxpCJOFeSrllyvWJ+X4Mm9cOuWgRuh8uhOmPIHsCsV8YUQtVjDPxDZB19aBuAfEPrfsAIsCku/uCirpl6WCk0zSs1O2awOb3gyFPSEEEIc6gzAcx9LHrExL4FKRWwUWmg0bTE6BegM2DMvASIObpwLUYs14Ii4a9EttRSumEZqdMoqJWqlp1n/PyjoCSGExP+8BJmjZgLMW9LKvAThkfLozn8zFhpnHTRKQIS8AY5yas8jtaTP5ifVO2aRKq0zq2mUPRkKekIIIUmSihjCGIs1IpCK+M7LrIPXzwTLhh+u2lX//euhsnbGFTmx66E075vbaofDE6CgJ4QQ4pQgv7/xvARzPz1rdd+g7H4q9C574RQq8iB7oUDJkMtfDTV4OhT0hBBCnJ6Tux/Kn0tuKU/9bIUgyFNI9iJRAh2fjb3ziSlsGUIIIU6Pf8rkMnJdGRVSRy3dMSjoCSGEOD15XvXcMfa4wgmOCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDfGW9yUf//9VzZu3ChPnz6VokWLSuPGjcXPz8/u71+5ckV27dolFy5ckAwZMkjJkiWlYsWKCXrOhBBCSHzjloL+008/lc8++0w0TTOUFSlSRAn+nDlz2vxucHCwNG/eXLZu3SqRkZEm22rWrCnz5s2TrFmzJti5E0IIIfGJ2wn6pUuXypgxY5T23rlzZ8mcObOsWrVKjh49Ku3bt5e//vorRkG/efNmyZUrl7z22muSN29euX37tixatEi2b98ub775pmzatCnRrocQQgiJC24n6L/88ku1Xr58uTRs2FB9HjlypFSvXl12794tf/zxh1SrVs3q9wMDA5Ugr127tiRL9tKFYejQoVK6dGnZsmWLPHv2TO1HCCGEODtu5Yz36NEj2bt3rxLIupAHPj4+MnDgQPV5/fr1NusICAiQunXrmgh5kC9fPilfvrwqT548eQJdASGEEBK/uJWgP3XqlBqXr1SpUrRtetnJkydjVTec+g4fPqyc+vz9/eN8roQQQojHmu5Xr14tf//9t137FitWTN544w31+eHDh2qdKVOmaPtlzJjRZB9HgFNet27d1Hry5Mk29338+LFadG7cuOHw8QghhBC3FvQwr0+fPt2ufeEhrwt6HWNve1tl9hAWFiZdu3ZVY/M4rzx58tjcf+LEiTJq1KhYHYsQQgjxCEHftGlTyZIli137Fi5c2PA5Xbp0ag0veXPu3Lljso+9Y/6tWrVSHvvbtm1TsfQx0b9/f+nRo4eJRl+hQgW7j0kIIYS4vaCvX7++WhwFQt/Ly0t515ujh9UheY49XL16VRo1aiT37t2THTt22P291KlTq4UQQghxBtzKGQ8CFk53cJpbuXKloTw0NFS++OIL9blBgwYx1nPs2DGpXLmyPHnyRIXj2SvkCSGEEGfDKTX6uDBo0CBp2bKltGnTRtq1a6cS5qxdu1Z521epUkUtOiiHpt+lSxfDEMD169elatWqymz/1ltvyc8//xztGB999JFFhz9CCCHE2XA7Qd+iRQsZPXq0SpIzd+5cQ3nx4sVlwYIFJvsiJS686GEF0AX9/fv3lZAHs2bNsniMDh06UNATQghxCdxO0IPhw4dLx44dVSpbfVKb119/XSXOMQYx8ZiwBnnwdWABQApdW2AfQgghxBXw0mIbd0bsdurDRDqYDS9HjhyxarWISJHF+0TalhfxdiuvCkIIIQktWyg2CCGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDeGgp4QQghxYyjoCSGEEDfGLRPmOBMRERFxnpcecfT3biNuknH0hBBCxCBTdBljCwr6BEafHjc+pqrtHQ/nQwghxL1kTJ48eWzuw8x4Cczz58/VfPYZM2YUb+/Y9av0Oe337t0rWbNmFU+H7cH24L3BZ8XT3x0RERFKyL/66qvi7+9vc19q9AkMfoDy5cvHS124MWObRtcdYXuwPXhv8Fnx5HdHnhg0eR064xFCCCFuDAU9IYQQ4sZQ0LsAqVOnlhEjRqg1YXvw/uCzwncH36WOQGc8QgghxI2hRk8IIYS4MRT0hBBCiBtDQU8IIYS4MRT0hBBCiBtDQU8IIYS4MRT0Scju3bulWbNmkjt3bilYsKC88847cu3atUSvw1mYM2eOVKtWTWWsKlmypIwePVqlELaH4OBg9f2WLVtKkSJFVFvUr19f5s2bJ5GRkeJq4LrHjBkjpUqVUu1RtWpVmT17dqzr27Bhg2TIkEEte/bsEVfj5s2b0qtXLylUqJC615s0aSK7du1yuJ4dO3ZIu3btpECBAqqubt26yenTp8XV2Ldvn7rXkRkN19K9e3e5fPmyQ+lTf/nlF6lTp47ky5dPChcurNp09erV4mrgfTd9+nSpW7euSjVeuXLlWNWzaNEiqVmzpnrekFb2k08+Ue8Vt0AjScK6des0b29vDT+B8ZItWzbt6tWriVaHszBs2LBo14Gldu3aWkRERIzfb9WqlcXvY2ncuLEWGRmpuQq43jp16li8FrSTozx+/FjLlSuXFhQUpOr4448/NFfi+vXrWo4cOaK1RfLkybXVq1fbXc/YsWMttmnWrFk1V2LLli2aj49PtOvIlCmTdvHiRbvqaNmypdXnZfjw4Zqr8OjRI83Ly8vk/AsXLuxwPePHj7fYFpUrV9ZCQ0M1V4eCPgkICwtTL179xX3hwgXtyJEjWvPmzVVZly5dEqUOZ+HEiRNasmTJtJQpU2pz5sxRnZTt27drRYoUUdfy008/xVhHp06dtDfffFNbsWKFqu/s2bPatGnTtBQpUqg6Vq1apbkKuF6cc8GCBbWtW7eq9pg3b56WOnVq1U64Pkfo2bOnVr58eW3AgAEuKei7deumzrtBgwbaoUOHlDAbM2aMKsuePbtdL+L169cbOgd4Xo4fP65dvnxZ++2337QaNWporsKLFy+0AgUKqGsZOHCgdu7cOe3YsWNa27ZtVRnWMYH9sS86fgsWLFDtieflm2++0Xx9fTV/f3/t+fPnmivw4MEDpdi8//772qZNm7SMGTM6LOgvXLigOk647h9//FE9b7t27dJKliyp2mny5Mmaq0NBnwRs3LhR3UDoVRuDhwuaC264J0+eJHgdzsLQoUMtPlB4IaG3XrVqVbtegJaYMGGCqvvLL7/UXIXq1aurcz5w4IBJ+XfffafKBw8ebHdd27ZtU52df//9V/v4449dTtCHhIRogYGB6gX+9OlTk23ozOJ67NHqoZlZuw9cydqzc+dOdR0NGzaM1vHPly+fElgQfraAEEMd6PiZ8/rrr6ttDx8+1FwB/HbGv1/mzJkdFvTjxo1T1wyLjzHoRKFjWKpUKc3V4Rh9EvD333+rdYcOHUzK/fz81LgbxmcPHz6c4HU4C9au5ZVXXpHixYur8cgXL17YrCNZMsu3cpYsWdQa45CuAPwJcL3wMShTpozJNowte3l5GdorJjC++Pbbb8vYsWOV34Irgimenz17psaPAwMDTbbp90tM7XH37l3ly5I+fXr56KOPom1Hm7oK1p4VHx8fad26tYSHh8uBAwds1lG6dGnJli2b/P7773Ls2DFVBqVv8+bNqn74g6RJk0ZcAfx2cf39/rbSpnhnYErbI0eOSEhIiLgyFPRJgO40Y+nlC6cY430Ssg5nAeeZLl06yZQpk8VrCQ0Nldu3bztcL156U6dOlaJFi0rTpk3FFcD80nipWPpd06ZNK5kzZ7b7dx0yZIjkzJlT+vTpI65KfNznJ06cUGs4Wp06dUoaNWpkcPgcOnSoPHnyRDypPVKkSKGcMzFVK5zO8D+m027YsKFyzlu8eLF4EpcvXxZfX1/JmzevxTZF5/vq1aviynA++iRA9+RMmTJltG16GbSYhK7DWcC1WLqOuFwLLABdunSRc+fOKe9saDyugK3fVS+3RzD99ddfykv/0KFDLqWxJsR9/vjxY7XGPYCojkePHhm8taGtwdMc7WWtzZ2J+Hru0QnW7wtdW/X2jhIHrhilEtc2DQwMtPicuNq71BrU6JMA9J6BJXOQHk4WEBCQ4HU4C7gWa6ax2FwLHlwMX2zZskW2bt2qhgBcBVu/q94eMbUF9kG41VdffaXCr1yZ+HxWoKki5HL//v1y5coV2bhxo9LqMTwwc+ZM8ZT2wLVXr15dzp49K/Pnz5cLFy4oS8ekSZNk3bp1UqtWLQkLCxNPwd/f32oYr6u9S61BQZ8EYHwMnD9/Pto2aKAAZrWErsNZwLVgHFXXvMyvBZoG4mPtNX3jRYWXOWKmMR7pSiDOHZqnpd8VL/cbN27E+LvOmjVLvbgHDx5siJ3HMmXKFLUd4934H3U5O/Fxn2fPnl2tMTSEvAply5ZVpvt69erJb7/9prbt3LlTXIH4aA/km3j69KlMnjxZjUujM4icAh9++KEMGjRI5RXAeL2nkC1bNsOzZa1NdV8fV4WCPgnQnaxWrlxpUg6HGJgRkydPrhKlJHQdzoJ+LatWrTIph2n1n3/+UQ55GEOLCWgoSJZx69Yt9eIuVqyYuBoQ8hg3hZYJTcuYtWvXqiEJCCpb4CUO7t27Z7LoWiBM1/g/JgdHZwBtgTbRr90Y/X6JqT3g2Jg6dWqlueG5MCZVqlRq7QptYeu519sD5ueYOrd4PmIy/8fGJ8ZVKWOlTfGMwIkTCYlcxTnRKknt9u+JIEwobdq0KnQDceMIDQsODtb69etnMXQmoepwFv78809Dop99+/apshs3bmi1atVS5Z9//nmMdezZs0eFYCH2HPHRrgyuF9eNsMJr166psn/++UfLmTOnKkd4lC1wH9y5cyfa8tFHHxnC0fC/tZBEZ6Np06bqvHv16qXue4RTLV68WMV8I7cAEgLFRI8ePVQdCOXUw05xn+A5QfnIkSM1VwDhs7jPkU8B+RbwGyIEESGXuA48MzExc+ZMtW+JEiW0gwcPqjLUg5Bd1I1teJ5ckdiE1x06dEiF8WbIkMHwbN2+fdtwb7hSAiFrUNAnEXpMNJaAgABDhjvEDCPxjTGFChVSMbJxqcPZ6dixo+FakDhHz3aFpDnPnj0z7Id4cCT6ME8IVKlSJcO1Y7v5EpuMckkFrldPFoR2SJUqlaFt0E7GzJo1S13f9OnTY6zXFePoAZLb4J7AueMex72ut4f5daMzgPbYv3+/STk6TFmyZDG0Ke4TvY7cuXNr9+7d01yF2bNnG84d+TL0LHn4bH7dr776qkoqZAw6Onnz5rVYh56YyJWoWbOm4TnHbwvlR/+/WbNmhv3QsUMZsmia884775i8f9CRwme0k6vkFLAFBX0Sgpe0nuUKN2iVKlUs9qRxc6ZJkyZOdbiCpgKtRE/T6ufnp7Vv316lPzXm6NGjajsyABpTsWJFqyk9sfTp00dzJWDRgFDHSxjnnz59em3QoEHRMpZ9++23dicEclVBDyDAkEhIfwGj44ssZpYyJGL77t27o21D9jfcN7AE6C/0N954w2A1cSXmzp2rFAD9uUdH15KlB0Iez5I5t27d0j788ENlRdM71dgXz6Bxx9oV0DPYWVqMsx5euHBBlSG9tDnh4eHap59+arBo4B5BMrJLly5p7oAX/iT18IGnAy9xjENaCwG7f/++WiPhR2zrcCUQPoZwF0tJcDCW+uDBA5UYSB9f1cedETJkDXjNmidccQUQ6oTQHuNrNfcKxpg8ri0mz2DcI1gQj6+HUrka+I2xIPbbEmgLtImta0SbYj+0qSuHHgL4XcDvwJoPC54VXG9QUJDVOpCnAs+VtTZ1dh4+fKgm6bEE3odp/htfRzvgXYq2gs9GbN4/rgoFPSGEEOLGuE+XhRBCCCHRoKAnhBBC3BgKekIIIcSNoaAnhBBC3BgKekIIIcSNoaAnhBBC3BgKekIIIcSNoaAnhBBC3BjXTI9FCIk1S5YsUVm/WrVqZbMsocEUoJs2bZLGjRtLzpw5JalActC//vpLzpw5o7LqtW/fXtKlS5dk50NIfMPMeIQkEJhq9s8//5RcuXJJo0aNnKadMX0x0sPu37/fZtnChQtVutCWLVsmyHksWLBAOnbsKOvWrZMGDRpIUoC0qPXr1zeZfx2/G6ZGtgWmccVUyEhPjH1tTZWLtKsbN25UqVpr1aolhQsXTvR6iWdDjZ6QBOLjjz9WQgw51W/evOnUucTbtm0bLbf3iBEjVM74hBL0zsCKFSuUkIeQrFKlisqNbmtOCTBlyhQZOHCghIWFGcpq164ty5YtM5m3fOvWrTJ+/HjZvn27IRf7L7/8YlUgJ1S9hFDQE5IAXLt2TWlbZcqUkX/++UcWL14sXbt2ddq2HjZsmHgi0N7BqlWrpGDBgjHuv3btWunTp4/qFDVs2FAyZMighh8gfLt37y5Lly417IvfH50IDAPkyZNHDh48mOj1EgIo6AlJAGbNmqVmBPv555+ladOm8tNPP1kU9HPnzlUaf7NmzeTy5cuya9cupfnDnKzPRgcNDy/2O3fuSMWKFaVIkSI267l06ZIaMoApHhohhEZMGI/R47x/+OEHZRLGsWfOnGnYr0uXLmpmr++//14JRpiMjcE495YtW9Q1Z8+e3VCOOmGSxrnly5dPqlWrZvN8rl69Krt371azzOXPn19p25ilzRGOHDmiFlCyZEl59dVXDdtgGp8zZ446J7By5Up1XTly5JAmTZpYrXPMmDFqPX/+fGnXrp1hhjj8LtC8jx07ZjD716lTR+rWrSs1a9aU3377Tbp165bo9RKiSOp5cglxNyIjI7X8+fNr5cqVU/8PGzZMzXF96tSpaPvmzp1bzZmNeeWTJ09umEc7b9682pUrV7Tjx4+rffRyzMc+Y8YMq/VMmzbNpJ7AwEBt4cKF0ebvLlu2rNWykJAQq/N745wAjtG1a9do5zFnzhy136ZNmwxlN27c0MqUKRNtnvDvv/9efV63bp1h3+fPn2s9e/Y0zDuvL6+88op25swZu9r/7t27Wr169aKde4MGDbT79++rfXAdlq7P0lzlOvfu3VNzt5cqVSrath9//FF9f8KECRa/+8svv6jtWCdWvYToUKMnJJ7B2Ck8ymfMmKH+h8Y1btw4pd1PmDAh2v7Qgnv37q20N2ive/bskdOnT0u/fv2UaRkOY3Bau3fvnjLnDh48WN544w2TcVuA78D8C8e6okWLyr///isHDhxQWji0WZTZAywBPXv2tOiMlzJlSofbA+eK4YtMmTJJjRo11Bzq0PrPnz8fbd8PPvhAWT9wbbAWYN5waOWHDh1SVgK0h7V55o2Ph3aCfwG0XrBt2zZZv369dO7cWdasWaOuA9cIb3vUCWuLv7+/zTZCe8JD35I1omrVqmp9/Phxh9snoeolxIBB5BNC4oXOnTtr/v7+2oMHDwxl1atX17JmzaqFh4eb7Ktr6z/88IOhLDQ0VCtatKgqr1u3rhYcHGzYNmbMGFW+dOlSi/VguzH6/tCS7dXodQoXLqxVrFjR4jXaq9EfOHBA/Q9tVdemwcmTJ7U0adKYaPTQ2KHZoq2ePHliUu/YsWPVvsuXL9dscfDgQbVfgQIFtOvXrxvKr169amijQ4cOGcr79Omjyu7cuaPFxMqVK9W+48aNi7bt0aNHalvjxo0d1rwTql5CdJgwh5B45NGjR8pxClowNEodOFTduHFDeeGbA4eqHj16GP6HFl2vXj31+ZNPPjGM1QPEnAOM55uDsfghQ4aYlOF/lGPsPymAr4B+Hcax6fAQ79Wrl8m+0PKh2UKrxtgzfAP0Bd7wYO/evTaPp18nnAuzZs1qKIe/gN42sW0LWFaAl5dXtG16xIK+jzPUS4gOTfeExCPz5s1Tpmk41Bk7sQUHB6s1zNIwQRuDOHtz4FhnaZteDic1c+DkZu6whv/z5s0rV65ckaQAww2gUKFC0baZl926dUutv/vuO6v1wUHQnuNZCjXTzfJ3796V2KAPlejHMEav03w4JSnrJUSHgp6QeASCXF/rn43B+DAEWubMmQ1lljQ5e7aZc/36dYvlsCToHYT4ws/PT3VoLB3LGP24ODdjr3dL56vvi8gBY23c0pi1NXQfAoQ3mqOXYdw/NugdE+OkQjrwhTDexxnqJUSHgp6QeAJOY3gxQ3OsXr16tO0XL16UDRs2yOzZs2XQoEHx3u4ISUOYXJs2bQxl+B/lHTp0cLg+DCE8efLE4jakrIXTIMLvsB+A4Me1GYM8AnoyGAxH6Kbox48fqxA+Y1577TW1hpA3toYYXx8c5myhZ5KbPHmytGjRwuC4h/NEmfE+jpItWzZlKdixY4cSyuXKlTOEDk6aNEl9Rtibs9RLiA4FPSHxhK7BIya6devW0bYjLhovdXjfJ4Sgh0YM73x4l+te97rgNR8PtwcMG8AC0b9/fylQoIAS0nocPbzZYWLHGv4I6BAgBhyx/sbAyx5x/0gIg1h4aOvoECCG3dwMj6gDCDTUC4GHtLjw1EdaWHSi4N/wxx9/2MwLgA4W4s0xDg+Bid8B4/5IWIRY9BIlSsQYw28LRDW8//778vrrr6s2xbnAJwPe++hAGFscMFyC9gPICaB7/yOfPjDO8Z9Q9RKiMLjlEUJiDeK/g4KCtEyZMmlhYWE2PfLx2O3atcsk/t0cPfb+woULJuXwTLfkXa/X8+6770aLDR8xYoTJvvZ63S9atMhqHP3FixfV9RpvK1KkiDZx4sRocfTwhM+QIYPJvrly5dK+/PLLaHH0iIGvXbu2xRj3nDlzamfPntVi4sSJE6p+8+/nyZMnWi4DR7zu9RwJiDawdG6nT5822RfXZS0fgfl1J1S9hABq9ITEAzDLw2Su50u3xoABA5RGrDuederUSYKCgqLtV6FCBRXnbT62DqcslFszP0MbhkYHzRfnAce/ypUrx5jX3loZ6oGFABOowPNbHwPPnTu3ij//9ddf1Vg7TM/Q9mFFwPkhw5wO4vpPnDihPOnRTnAOfPPNN1UcPfY1djhEW8D7HhnrkI8Azmgw5SOzHbIF2pMdT7dmQIs/fPiw8nPA93E9xhEMAL8XNGHzcmugLmQ9fOutt1SsPpwsixUrpoZGzH8rXBeuzxrG151Q9RKi7i9IezYFIa4NQvSwQDgSQogxjKMnhBBC3BgKekIIIcSN4Rg9IW6AtbF+QgjhGD0hhBDixtB0TwghhLgxFPSEEEKIG0NBTwghhLgxFPSEEEKIG0NBTwghhLgxFPSEEEKIG0NBTwghhLgxFPSEEEKIG0NBTwghhLgxFPSEEEKIuC//B62MHDtQAvuVAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 550x440 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "準備した振幅: [0.866 0.5  ]\n",
      "対角化した振幅: [ 0.9938 -0.1115]\n"
     ]
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(5, 4))\n",
    "ax.quiver([0, 0], [0, 0],\n",
    "          [before[0], best_coeffs[0]],\n",
    "          [before[1], best_coeffs[1]],\n",
    "          angles=\"xy\", scale_units=\"xy\", scale=1,\n",
    "          color=[\"#0f62fe\", \"#6929c4\"])\n",
    "ax.set_xlim(-0.05, 1.15)\n",
    "ax.set_ylim(-0.25, 0.75)\n",
    "ax.set_aspect(\"equal\")\n",
    "ax.axhline(0, color=\"#a6c8ff\", lw=0.7)\n",
    "ax.axvline(0, color=\"#a6c8ff\", lw=0.7)\n",
    "ax.set_xlabel(\"Amplitude of 0101\")\n",
    "ax.set_ylabel(\"Amplitude of 1010\")\n",
    "ax.set_title(\"Prepared state / Diagonalized state\")\n",
    "from matplotlib.lines import Line2D\n",
    "ax.legend(handles=[Line2D([0], [0], color=\"#0f62fe\", label=\"Prepared state\"),\n",
    "                   Line2D([0], [0], color=\"#6929c4\", label=\"Diagonalized state\")], loc=\"upper left\")\n",
    "plt.show()\n",
    "print(\"準備した振幅:\", np.round(before, 4))\n",
    "print(\"対角化した振幅:\", np.round(best_coeffs, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1c34ba3",
   "metadata": {},
   "source": [
    "**一番重要な違い：** 測定頻度（75%と25%）は、候補を選ぶ手掛かりです。SQDの最終状態の振幅（約+0.9938と-0.1115）は、**ハミルトニアンの対角化で新たに求めた値**です。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb6b0ed9",
   "metadata": {},
   "source": [
    "### E7. SQD体験：測定回数を変えてエネルギーを比べる\n",
    "\n",
    "**対応：スライド 25〜30**　|　1回しか測らなければ、片方の配置だけで1×1行列になる可能性があります。両方見つかれば2×2です。\n",
    "\n",
    "**操作してみる**\n",
    "\n",
    "`角度=0°`と`60°`、`測定回数=1`と`100`をそれぞれ比較します。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "5e873bc7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.819349Z",
     "iopub.status.busy": "2026-10-16T04:32:24.819301Z",
     "iopub.status.idle": "2026-10-16T04:32:24.820979Z",
     "shell.execute_reply": "2026-10-16T04:32:24.820815Z"
    }
   },
   "outputs": [],
   "source": [
    "def run_sqd_core(theta_deg, shots, seed=2026):\n",
    "    counts = measure(theta_deg, shots, seed)\n",
    "    chosen = [bits for bits in configs if counts.get(bits, 0) > 0]\n",
    "    ids = [configs.index(bits) for bits in chosen]\n",
    "    block = H_e[np.ix_(ids, ids)]\n",
    "    vals, vecs = np.linalg.eigh(block)\n",
    "    return counts, chosen, block, float(vals[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "8b8fe41d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.821775Z",
     "iopub.status.busy": "2026-10-16T04:32:24.821734Z",
     "iopub.status.idle": "2026-10-16T04:32:24.823596Z",
     "shell.execute_reply": "2026-10-16T04:32:24.823422Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "測定: {'0101': 1}\n",
      "採用: ['0101']\n",
      "行列: (1, 1)\n",
      "エネルギー: -1.837000 Ha\n"
     ]
    }
   ],
   "source": [
    "one_counts, one_configs, one_H, one_E = run_sqd_core(60, 1)\n",
    "print(\"測定:\", one_counts)\n",
    "print(\"採用:\", one_configs)\n",
    "print(\"行列:\", one_H.shape)\n",
    "print(\"エネルギー:\", f\"{one_E:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "127ea5c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.824338Z",
     "iopub.status.busy": "2026-10-16T04:32:24.824294Z",
     "iopub.status.idle": "2026-10-16T04:32:24.826059Z",
     "shell.execute_reply": "2026-10-16T04:32:24.825922Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "採用: ['0101', '1010']\n",
      "行列: (2, 2)\n",
      "エネルギー: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "many_counts, many_configs, many_H, many_E = run_sqd_core(60, 100)\n",
    "print(\"採用:\", many_configs)\n",
    "print(\"行列:\", many_H.shape)\n",
    "print(\"エネルギー:\", f\"{many_E:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f7ea2c8",
   "metadata": {},
   "source": [
    "### E8. 3つ目のスライダーで全体を比較する\n",
    "\n",
    "**対応：スライド 30〜32**　|　回路の角度と測定回数が、どのような配置を見つけるかに影響します。\n",
    "\n",
    "**操作してみる**\n",
    "\n",
    "`0° / 100回` → `60° / 1回` → `60° / 100回` の順に見ます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "id": "527c445c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.826754Z",
     "iopub.status.busy": "2026-10-16T04:32:24.826706Z",
     "iopub.status.idle": "2026-10-16T04:32:24.828172Z",
     "shell.execute_reply": "2026-10-16T04:32:24.828030Z"
    }
   },
   "outputs": [],
   "source": [
    "def show_sqd_core(theta_deg=60, shots=10, seed=2026):\n",
    "    counts, chosen, block, value = run_sqd_core(theta_deg, shots, seed)\n",
    "    print(\"測定:\", counts)\n",
    "    print(\"採用した配置:\", chosen)\n",
    "    print(\"行列のサイズ:\", block.shape)\n",
    "    print(\"選択した行列:\", np.round(block, 4))\n",
    "    print(f\"試行状態のエネルギー: {energy(theta_deg):.6f} Ha\")\n",
    "    print(f\"部分空間の最小エネルギー: {value:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "d38b5d6a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.828854Z",
     "iopub.status.busy": "2026-10-16T04:32:24.828813Z",
     "iopub.status.idle": "2026-10-16T04:32:24.833128Z",
     "shell.execute_reply": "2026-10-16T04:32:24.832970Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "測定: {'0101': 8, '1010': 2}\n",
      "採用した配置: ['0101', '1010']\n",
      "行列のサイズ: (2, 2)\n",
      "選択した行列: [[-1.837   0.1809]\n",
      " [ 0.1809 -0.2452]]\n",
      "試行状態のエネルギー: -1.282386 Ha\n",
      "部分空間の最小エネルギー: -1.857299 Ha\n"
     ]
    }
   ],
   "source": [
    "widgets.interact(\n",
    "    show_sqd_core,\n",
    "    theta_deg=widgets.IntSlider(value=60, min=-180, max=180, step=5,\n",
    "                                description=\"角度\", continuous_update=False),\n",
    "    shots=widgets.SelectionSlider(options=[1, 2, 3, 10, 30, 100, 1000],\n",
    "                                  value=10, description=\"測定回数\"),\n",
    "    seed=widgets.IntSlider(value=2026, min=2026, max=2036,\n",
    "                           description=\"乱数番号\", continuous_update=False),\n",
    ");"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fba52f9",
   "metadata": {},
   "source": [
    "### E9. 核間反発を加え、分子の全エネルギーにする\n",
    "\n",
    "**対応：スライド 13・29**　|　ここまでの行列は電子ハミルトニアンです。分子全体では原子核同士の反発も加えます。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "E_{\\mathrm{total}}=E_{\\mathrm{electronic}}+E_{\\mathrm{nuclear}}\n",
    "$$\n",
    "\n",
    "**結果の見方**\n",
    "\n",
    "約-1.1373 Ha。丸めた講義用の数値です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "d8b7e291",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.834390Z",
     "iopub.status.busy": "2026-10-16T04:32:24.834344Z",
     "iopub.status.idle": "2026-10-16T04:32:24.835770Z",
     "shell.execute_reply": "2026-10-16T04:32:24.835622Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "H2の全エネルギー: -1.137299 Ha\n"
     ]
    }
   ],
   "source": [
    "nuclear_repulsion = 0.7200\n",
    "E_total = E_sqd_core + nuclear_repulsion\n",
    "print(f\"H2の全エネルギー: {E_total:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "346c0a6b",
   "metadata": {},
   "source": [
    "### スライド31：精度について\n",
    "\n",
    "- 重要な配置を測れなければ、小さな行列でも正しいエネルギーに近づけません。\n",
    "- 今回の2配置はたまたま、このハミルトニアンの基底状態を表すのに十分です。\n",
    "- この簡単なH₂の例は**量子優位性の実証ではありません**。\n",
    "\n",
    "### スライド32：まとめ\n",
    "\n",
    "| 操作 | VQE | SQDの基本体験 |\n",
    "|---|---|---|\n",
    "| 量子回路 | 角度を変えて状態を調整 | 角度を固定して候補のビット列を測る |\n",
    "| 最適化するもの | 量子回路の角度 | 古典対角化で電子配置の係数 |\n",
    "| 今回の最小エネルギー | 約-1.8573 Ha | 約-1.8573 Ha |\n",
    "\n",
    "**体験終了：** これで新版スライド32までの内容に対応します。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7b0cd74",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## F. 発展編：スライド33〜39（任意）\n",
    "\n",
    "本編を理解するために、次の内容を覚える必要はありません。原論文レベルのSQDへ進みたい人向けの補足です。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c508cba",
   "metadata": {},
   "source": [
    "### F1. 何回測れば配置を発見できる？\n",
    "\n",
    "**対応：スライド 33**　|　確率が小さい配置は、多くのショットがないと見逃される可能性があります。\n",
    "\n",
    "**使う式**\n",
    "\n",
    "$$\n",
    "P_{\\mathrm{detect}}=1-(1-p)^N\n",
    "$$\n",
    "\n",
    "**変数**\n",
    "\n",
    "`p`：1回でその配置が出る確率。`N`：測定回数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "id": "e87b39e2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.836484Z",
     "iopub.status.busy": "2026-10-16T04:32:24.836385Z",
     "iopub.status.idle": "2026-10-16T04:32:24.837981Z",
     "shell.execute_reply": "2026-10-16T04:32:24.837838Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 回: 9.562%\n",
      "100 回: 63.397%\n",
      "1000 回: 99.996%\n"
     ]
    }
   ],
   "source": [
    "p = 0.01\n",
    "for shots in (10, 100, 1000):\n",
    "    found = 1 - (1 - p) ** shots\n",
    "    print(shots, \"回:\", f\"{found:.3%}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a86102a",
   "metadata": {},
   "source": [
    "### スライド34：変分原理\n",
    "\n",
    "選択部分空間を**広げて以前の配置をすべて残した場合**、その最小固有値は上がりません。ただし配置を入れ替えた場合、この単調性は保証されません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "29eedf72",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.838687Z",
     "iopub.status.busy": "2026-10-16T04:32:24.838647Z",
     "iopub.status.idle": "2026-10-16T04:32:24.840087Z",
     "shell.execute_reply": "2026-10-16T04:32:24.839930Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0101だけ: -1.837\n",
      "0101と1010: -1.857299\n"
     ]
    }
   ],
   "source": [
    "E_only_0101 = float(H_e[0, 0])\n",
    "E_two_config = float(np.linalg.eigvalsh(H_e[np.ix_([0, 3], [0, 3])])[0])\n",
    "print(\"0101だけ:\", E_only_0101)\n",
    "print(\"0101と1010:\", round(E_two_config, 6))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34bc5cd6",
   "metadata": {},
   "source": [
    "### スライド35〜36：バッチと大規模対角化\n",
    "\n",
    "大きな問題では、観測した配置が多すぎて一度に対角化できないことがあります。そこで、配置をいくつかの小さい集まり（バッチ）に分けたり、全行列を保存せず行列ベクトル積を繰り返すソルバーを使います。本編では扱いません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c08141c4",
   "metadata": {},
   "source": [
    "### スライド37：ノイズと電子数\n",
    "\n",
    "測定した配置が、想定したα電子・β電子の数を満たすかを調べることができます。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "3e0ecd30",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.840739Z",
     "iopub.status.busy": "2026-10-16T04:32:24.840701Z",
     "iopub.status.idle": "2026-10-16T04:32:24.841876Z",
     "shell.execute_reply": "2026-10-16T04:32:24.841740Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0100 は正しい電子数か: False\n"
     ]
    }
   ],
   "source": [
    "noisy_bits = \"0100\"\n",
    "print(noisy_bits, \"は正しい電子数か:\", is_valid(noisy_bits))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da824752",
   "metadata": {},
   "source": [
    "### スライド38〜39：占有数とconfiguration recovery\n",
    "\n",
    "原論文のSQDは、部分空間対角化後の軌道占有数を参考に、電子数の合わないビット列を確率的に修復し、繰り返し対角化します。これは入力の元の正しい配置を必ず復元する処理ではありません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "4102175c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.842575Z",
     "iopub.status.busy": "2026-10-16T04:32:24.842534Z",
     "iopub.status.idle": "2026-10-16T04:32:24.844101Z",
     "shell.execute_reply": "2026-10-16T04:32:24.843954Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "各配置の確率重み: [0.9876 0.0124]\n"
     ]
    }
   ],
   "source": [
    "selected_full = [\"0101\", \"1010\"]\n",
    "block = H_e[np.ix_([0, 3], [0, 3])]\n",
    "_, vecs = np.linalg.eigh(block)\n",
    "weights = np.abs(vecs[:, 0]) ** 2\n",
    "print(\"各配置の確率重み:\", np.round(weights, 4))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "38457c16",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.844775Z",
     "iopub.status.busy": "2026-10-16T04:32:24.844737Z",
     "iopub.status.idle": "2026-10-16T04:32:24.846229Z",
     "shell.execute_reply": "2026-10-16T04:32:24.846068Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ビット表記の左から見た占有数: [0.0124 0.9876 0.0124 0.9876]\n"
     ]
    }
   ],
   "source": [
    "occupation = np.zeros(4)\n",
    "for bits, weight in zip(selected_full, weights):\n",
    "    occupation += weight * np.array([int(x) for x in bits])\n",
    "print(\"ビット表記の左から見た占有数:\", np.round(occupation, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ccb1ff1d",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 発展：実際の分子積分から求めるSQD addon（任意・講義範囲外）\n",
    "\n",
    "ここまでの水素分子ハミルトニアンは**スライド13の丸めた数値**を利用しました。以下はPySCFで分子積分を求め、`qiskit-addon-sqd` に入力するための参考例です。\n",
    "\n",
    "- 分子積分を計算するので、前半の丸めた行列とは数値がわずかに異なります。\n",
    "- サンプルは模擬的な一様ビット列であり、量子優位性の実験ではありません。\n",
    "- この節のライブラリAPIは頻繁に変わるため、実行前に公式Quickstartを確認してください。\n",
    "- **授業の必須部分ではありません。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "c47ad354",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:24.846878Z",
     "iopub.status.busy": "2026-10-16T04:32:24.846841Z",
     "iopub.status.idle": "2026-10-16T04:32:25.273917Z",
     "shell.execute_reply": "2026-10-16T04:32:25.273546Z"
    }
   },
   "outputs": [],
   "source": [
    "%pip -q install \"qiskit-addon-sqd==0.14.0\" \"pyscf>=2.10,<3\"\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f264350",
   "metadata": {},
   "source": [
    "PySCFで水素分子の軌道積分を得て、参照となるFCIとSQDを比較します。以下のコードは前半とは独立しています。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "84914343",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.275300Z",
     "iopub.status.busy": "2026-10-16T04:32:25.275210Z",
     "iopub.status.idle": "2026-10-16T04:32:25.741499Z",
     "shell.execute_reply": "2026-10-16T04:32:25.741236Z"
    }
   },
   "outputs": [],
   "source": [
    "from pyscf import gto, scf, mcscf, ao2mo, fci\n",
    "from qiskit_addon_sqd.counts import generate_bit_array_uniform\n",
    "from qiskit_addon_sqd.fermion import diagonalize_fermionic_hamiltonian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "b7e9d578",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.742553Z",
     "iopub.status.busy": "2026-10-16T04:32:25.742462Z",
     "iopub.status.idle": "2026-10-16T04:32:25.764373Z",
     "shell.execute_reply": "2026-10-16T04:32:25.764183Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "HF全エネルギー: -1.116999 Ha\n"
     ]
    }
   ],
   "source": [
    "mol = gto.M(atom=\"H 0 0 0; H 0 0 0.735\", basis=\"sto-3g\",\n",
    "            unit=\"Angstrom\", verbose=0)\n",
    "mf = scf.RHF(mol).run()\n",
    "print(f\"HF全エネルギー: {mf.e_tot:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "a79b5b6e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.765194Z",
     "iopub.status.busy": "2026-10-16T04:32:25.765145Z",
     "iopub.status.idle": "2026-10-16T04:32:25.766965Z",
     "shell.execute_reply": "2026-10-16T04:32:25.766797Z"
    }
   },
   "outputs": [],
   "source": [
    "cas = mcscf.CASCI(mf, ncas=2, nelecas=(1, 1))\n",
    "h1, e_const = cas.get_h1eff()\n",
    "h2 = ao2mo.restore(1, cas.get_h2eff(), 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "c0ce2636",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.767644Z",
     "iopub.status.busy": "2026-10-16T04:32:25.767583Z",
     "iopub.status.idle": "2026-10-16T04:32:25.769408Z",
     "shell.execute_reply": "2026-10-16T04:32:25.769238Z"
    }
   },
   "outputs": [],
   "source": [
    "bit_array = generate_bit_array_uniform(2000, 4, rand_seed=np.random.default_rng(24))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "995910fd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.770149Z",
     "iopub.status.busy": "2026-10-16T04:32:25.770098Z",
     "iopub.status.idle": "2026-10-16T04:32:25.771380Z",
     "shell.execute_reply": "2026-10-16T04:32:25.771225Z"
    }
   },
   "outputs": [],
   "source": [
    "from functools import partial\n",
    "from qiskit_addon_sqd.fermion import solve_sci_batch\n",
    "sci_solver = partial(solve_sci_batch, spin_sq=0.0, max_cycle=200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "955472e7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.772082Z",
     "iopub.status.busy": "2026-10-16T04:32:25.772042Z",
     "iopub.status.idle": "2026-10-16T04:32:25.777914Z",
     "shell.execute_reply": "2026-10-16T04:32:25.777747Z"
    }
   },
   "outputs": [],
   "source": [
    "sqd_result = diagonalize_fermionic_hamiltonian(\n",
    "    h1, h2, bit_array,\n",
    "    samples_per_batch=20, norb=2, nelec=(1, 1),\n",
    "    num_batches=1, max_iterations=5,\n",
    "    sci_solver=sci_solver, symmetrize_spin=True,\n",
    "    seed=np.random.default_rng(32),\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "d9199aed",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.778607Z",
     "iopub.status.busy": "2026-10-16T04:32:25.778566Z",
     "iopub.status.idle": "2026-10-16T04:32:25.780345Z",
     "shell.execute_reply": "2026-10-16T04:32:25.780203Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "FCI参考値: -1.137306 Ha\n",
      "SQD参考値: -1.137306 Ha\n"
     ]
    }
   ],
   "source": [
    "fci_e, _ = fci.direct_spin1.kernel(h1, h2, 2, (1, 1))\n",
    "print(f\"FCI参考値: {fci_e + e_const:.6f} Ha\")\n",
    "print(f\"SQD参考値: {sqd_result.energy + e_const:.6f} Ha\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbb8c850",
   "metadata": {},
   "source": [
    "## 参考資料\n",
    "\n",
    "- 添付：**SQD講義・45分講義(2)**。本編はスライド1〜32、発展編はスライド33〜39。\n",
    "- VQE原論文：Peruzzo et al., *A variational eigenvalue solver on a photonic quantum processor*, Nature Communications 5, 4213 (2014)。\n",
    "- QSCI原論文：Kanno et al., *Quantum-Selected Configuration Interaction*, arXiv:2302.11320。\n",
    "- SQD原論文：Robledo-Moreno et al., *Chemistry Beyond the Scale of Exact Diagonalization on a Quantum-Centric Supercomputer*, Science Advances (2025)。\n",
    "- [Qiskit addon SQD公式Quickstart](https://qiskit.github.io/qiskit-addon-sqd/guides/quickstart.html)。\n",
    "\n",
    "**数値の扱い**：本編はスライド13の丸めた電子ハミルトニアンを直接入力します。全16×16行列や実機データは、添付スライドから復元していません。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a61ba53",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "## 実機実行：IBM Quantumで測定する（任意）\n",
    "\n",
    "この節は、IBM Quantum PlatformのアカウントとQuantum Computeインスタンスを利用して、**実際の量子プロセッサ（QPU）**へ回路を送ります。実行枠の消費や課金が発生する可能性があるため、利用プラン・残り枠を確認してください。\n",
    "\n",
    "APIキーはNotebookのコードや共有ファイルに記入せず、入力欄から渡します。**デフォルトではジョブを送信しません。** 実行する場合に限り `RUN_ON_QPU = True` に変更してください。\n",
    "\n",
    "IBM公式ガイド：[アカウント設定](https://quantum.cloud.ibm.com/docs/en/guides/initialize-account) ／ [Samplerの実行](https://quantum.cloud.ibm.com/docs/en/guides/get-started-with-sampler)\n",
    "\n",
    "\n",
    "「すべて実行」ではこの節をスキップします。実機を使う場合だけ、次のセルの `RUN_ON_QPU` を `True` に変更し、接続から順に実行してください。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "5473fa3a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.781008Z",
     "iopub.status.busy": "2026-10-16T04:32:25.780941Z",
     "iopub.status.idle": "2026-10-16T04:32:25.782367Z",
     "shell.execute_reply": "2026-10-16T04:32:25.782222Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "実機セクションはスキップしました。接続・ジョブ送信は行いません。\n"
     ]
    }
   ],
   "source": [
    "# 実機を使うときだけ True にし、この節を上から実行します。\n",
    "RUN_ON_QPU = False\n",
    "service = backend = isa_circuit = qpu_counts = None\n",
    "if RUN_ON_QPU:\n",
    "    %pip -q install \"qiskit-ibm-runtime==0.50.0\"\n",
    "else:\n",
    "    print(\"実機セクションはスキップしました。接続・ジョブ送信は行いません。\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5062dfaf",
   "metadata": {},
   "source": [
    "### 1. アカウントに接続\n",
    "\n",
    "IBM Quantum PlatformでAPIキーを確認してください。利用するインスタンスのCRNが分かる場合は入力します。CRNの欄は空欄でも自動選択できます。\n",
    "\n",
    "`getpass` で入力したAPIキーはセルの出力には表示されません。Notebookを共有する場合、念のため実行出力を消してから共有してください。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "91e26b9f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.783085Z",
     "iopub.status.busy": "2026-10-16T04:32:25.783041Z",
     "iopub.status.idle": "2026-10-16T04:32:25.784625Z",
     "shell.execute_reply": "2026-10-16T04:32:25.784474Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "実機接続はオフです。認証情報の入力は不要です。\n"
     ]
    }
   ],
   "source": [
    "if RUN_ON_QPU:\n",
    "    from getpass import getpass\n",
    "    from qiskit_ibm_runtime import QiskitRuntimeService\n",
    "    \n",
    "    ibm_api_key = getpass(\"IBM Cloud APIキー（画面には表示されません）: \")\n",
    "    ibm_crn = input(\"インスタンスCRN（自動選択する場合はEnter）: \").strip()\n",
    "    \n",
    "    service = QiskitRuntimeService(\n",
    "        channel=\"ibm_quantum_platform\",\n",
    "        token=ibm_api_key,\n",
    "        **({\"instance\": ibm_crn} if ibm_crn else {})\n",
    "    )\n",
    "    del ibm_api_key\n",
    "    print(\"IBM Quantum接続を確認しました。\")\n",
    "else:\n",
    "    print(\"実機接続はオフです。認証情報の入力は不要です。\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83229745",
   "metadata": {},
   "source": [
    "### 2. 実行する量子プロセッサを選ぶ\n",
    "\n",
    "利用可能なQPUから、必要な量子ビット数を満たすものを選びます。`backend` が実際の計算機、`pass_manager` は回路をその計算機の命令へ変換する処理です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "fa051795",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.785255Z",
     "iopub.status.busy": "2026-10-16T04:32:25.785217Z",
     "iopub.status.idle": "2026-10-16T04:32:25.786756Z",
     "shell.execute_reply": "2026-10-16T04:32:25.786595Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "QPUの選択・回路の変換はスキップしました。\n"
     ]
    }
   ],
   "source": [
    "if RUN_ON_QPU and service is not None:\n",
    "    from qiskit.transpiler import generate_preset_pass_manager\n",
    "    from qiskit_ibm_runtime.executor_sampler import Sampler\n",
    "    \n",
    "    backend = service.least_busy(\n",
    "        operational=True, simulator=False, min_num_qubits=4\n",
    "    )\n",
    "    print(\"QPU:\", backend.name)\n",
    "    \n",
    "    qpu_circuit = make_circuit(60)\n",
    "    qpu_circuit.measure_all()\n",
    "    pass_manager = generate_preset_pass_manager(backend=backend, optimization_level=1)\n",
    "    isa_circuit = pass_manager.run(qpu_circuit)\n",
    "    print(\"回路の量子ビット数:\", qpu_circuit.num_qubits)\n",
    "else:\n",
    "    print(\"QPUの選択・回路の変換はスキップしました。\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1b284fd",
   "metadata": {},
   "source": [
    "### 3. QPUで測定する\n",
    "\n",
    "`RUN_ON_QPU` を `True` にすると、実際に量子コンピュータへジョブを送信します。初期設定は `False` です。`shots=128` は同じ回路の測定を128回行う指定です。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "id": "663de87a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.787481Z",
     "iopub.status.busy": "2026-10-16T04:32:25.787443Z",
     "iopub.status.idle": "2026-10-16T04:32:25.788880Z",
     "shell.execute_reply": "2026-10-16T04:32:25.788727Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "送信していません。実機に送る場合は RUN_ON_QPU = True に変更してください。\n"
     ]
    }
   ],
   "source": [
    "qpu_counts = None\n",
    "\n",
    "if RUN_ON_QPU and isa_circuit is not None:\n",
    "    real_sampler = Sampler(mode=backend)\n",
    "    job = real_sampler.run([isa_circuit], shots=128)\n",
    "    print(\"Job ID:\", job.job_id())\n",
    "    qpu_counts = job.result()[0].data.meas.get_counts()\n",
    "    print(\"実機の測定結果:\", qpu_counts)\n",
    "else:\n",
    "    print(\"送信していません。実機に送る場合は RUN_ON_QPU = True に変更してください。\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0333c2d",
   "metadata": {},
   "source": [
    "### 4. 実機の測定結果から部分行列を作る\n",
    "\n",
    "`qpu_counts` は実機で観測されたビット列と回数です。これまでと同じ電子数の条件で候補を選び、`H_e` の行と列を取り出して古典対角化します。\n",
    "\n",
    "**ここでも配置回復やバッチ処理は行わず、SQDの中核となる部分空間対角化だけを実行します。** ノイズの影響で、`0101` と `1010` 以外の配置も観測されることがあります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "id": "99784ba8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-16T04:32:25.789531Z",
     "iopub.status.busy": "2026-10-16T04:32:25.789491Z",
     "iopub.status.idle": "2026-10-16T04:32:25.791270Z",
     "shell.execute_reply": "2026-10-16T04:32:25.791134Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "実機ジョブは未実行です。\n"
     ]
    }
   ],
   "source": [
    "if qpu_counts is None:\n",
    "    print(\"実機ジョブは未実行です。\")\n",
    "else:\n",
    "    valid_counts = {bits: qpu_counts.get(bits, 0) for bits in configs}\n",
    "    chosen = [bits for bits in configs if valid_counts[bits] > 0]\n",
    "    print(\"有効配置の出現回数:\", valid_counts)\n",
    "    print(\"選ばれた配置:\", chosen)\n",
    "\n",
    "    if chosen:\n",
    "        selected_indices = [configs.index(bits) for bits in chosen]\n",
    "        qpu_block = H_e[np.ix_(selected_indices, selected_indices)]\n",
    "        qpu_energy = float(np.linalg.eigvalsh(qpu_block)[0])\n",
    "        print(\"選択行列のサイズ:\", qpu_block.shape)\n",
    "        print(f\"部分空間の電子エネルギー: {qpu_energy:.6f} Ha\")\n",
    "        print(f\"4×4全空間の最小値: {E_reference:.6f} Ha\")\n",
    "    else:\n",
    "        print(\"有効配置が未観測です。サンプル数を増やすか回路を確認してください。\")"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "name": "h2_vqe_sqd_colab_fixed.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "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"
  },
  "qff_repair": {
   "date": "2026-10-16",
   "qpu_default": "disabled",
   "source": "Google Drive originals"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
