diff --git a/translations/ja/LICENSE.md b/translations/ja/LICENSE.md new file mode 100755 index 0000000..e69de29 diff --git a/translations/ja/about.ipynb b/translations/ja/about.ipynb new file mode 100644 index 0000000..8a41ab3 --- /dev/null +++ b/translations/ja/about.ipynb @@ -0,0 +1,60 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Recommended External Resources\n", + "\n", + "No single resource is best for everyone, learning often requires many different explanations with approaches. Here are some great resources that complement the textbook:\n", + "\n", + "- [David Mermin's Lecture Notes](http://www.lassp.cornell.edu/mermin/qcomp/CS483.html)\n", + "- [Quantum computing for the very curious](https://quantum.country/qcvc)\n", + "- [Professor Gilbert Strang's Linear Algebra Lectures](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Contact\n", + "\n", + "If you have any questions or suggestions about the textbook or would like to incorporate it into your curriculum, please contact Frank Harkins ([Francis.Harkins@ibm.com](mailto:Francis.Harkins@ibm.com)). In the true spirit of open-source, any chapter contributions are welcome in [this GitHub repository](https://github.com/qiskit-community/qiskit-textbook).\n", + "\n", + "## Contributors in Alphabetical Order\n", + "\n", + "**Learn Quantum Computation using Qiskit** is the work of several individuals. If you use it in your work, cite it using this [bib file](qiskit-textbook.bib) or directly as:\n", + "\n", + "> Abraham Asfaw, Luciano Bello, Yael Ben-Haim, Sergey Bravyi, Nicholas Bronn, Lauren Capelluto, Almudena Carrera Vazquez, Jack Ceroni, Richard Chen, Albert Frisch, Jay Gambetta, Shelly Garion, Leron Gil, Salvador De La Puente Gonzalez, Francis Harkins, Takashi Imamichi, David McKay, Antonio Mezzacapo, Zlatko Minev, Ramis Movassagh, Giacomo Nannicini, Paul Nation, Anna Phan, Marco Pistoia, Arthur Rattew, Joachim Schaefer, Javad Shabani, John Smolin, Kristan Temme, Madeleine Tod, Stephen Wood, James Wootton." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/bernstein-vazirani.ipynb b/translations/ja/ch-algorithms/bernstein-vazirani.ipynb new file mode 100644 index 0000000..b4af8ce --- /dev/null +++ b/translations/ja/ch-algorithms/bernstein-vazirani.ipynb @@ -0,0 +1,1689 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ベルンシュタイン・ヴァジラニ アルゴリズム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "本節では、まず、ベルンシュタイン・ヴァジラニ問題と、それを解くための古典的アルゴリズムと量子アルゴリズムを紹介します。次に、Qiskitを用いて量子アルゴリズムを実装し、シミュレーターと実デバイス上でそれぞれ実行します。\n", + "\n", + "## 目次\n", + "\n", + "1. [ベルンシュタイン・ヴァジラニ アルゴリズム](#algorithm) \n", + " 1.1 [ベルンシュタイン・ヴァジラニ問題](#bvproblem) \n", + " 1.2 [古典的な解法](#classical) \n", + " 1.3 [量子的な解法](#quantum) \n", + "2. [具体例](#example)\n", + "3. [Qiskitを用いた実装](#implementation) \n", + " 3.1 [シミュレーション](#simulation) \n", + " 3.2 [実デバイス](#device) \n", + "4. [演習](#problems)\n", + "5. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. ベルンシュタイン・ヴァジラニ アルゴリズム\n", + "\n", + "参考文献[1]で最初に紹介されたベルンシュタイン・ヴァジラニ アルゴリズムは、前節で取り上げたドイチ・ジョザ アルゴリズムの拡張として見ることができます。このアルゴリズムは、ドイチ・ジョザ問題と比較して、より複雑な問題の計算ツールとして量子コンピューターを使用することに利点があることを示しました。\n", + "\n", + "### 1.1 ベルンシュタイン・ヴァジラニ問題 \n", + "\n", + "我々は再び、以下のような隠されたブール関数 $f$ を与えられます。この関数は、ビットの文字列を入力として受け取り、$0$ か $1$ のどちらかを返します。\n", + "\n", + "$f(\\{x_0,x_1,x_2,...\\}) \\rightarrow$ 0または1 ( $x_n$ =0 または 1のとき)\n", + "\n", + "ドイチ・ジョザ問題のように、均等(balanced)または一定(constant)な関数のどちらかになるのではなく、この関数は入力$x$と文字列$s$のビットごとの内積を返すことが保証されています。つまり、入力$x$について$f(x) = s \\cdot x \\, \\text{(mod 2)}$を満たす関数です。我々は、そのときの$s$を見つけることを期待されています。リバーシブルな古典回路としてのベルンシュタイン・ヴァジラニのオラクルは以下のようにかけます。\n", + " \n", + "![classical reversible circuit](images/bv2.svg)\n", + "\n", + "\n", + "\n", + "### 1.2 古典的な解法 \n", + "\n", + "古典的には、オラクルは入力 $x$ に対して\n", + "$$f_s(x) = s \\cdot x \\mod 2$$ \n", + "を返します。\n", + "\n", + "隠れたビット文字列 $s$ の各ビットは以下の入力のシーケンスをオラクルに問合せすることで洗い出されます。\n", + "\n", + "|Input(x)|\n", + "|:-----:|\n", + "|100...0|\n", + "|010...0|\n", + "|001...0|\n", + "|000...1|\n", + "\n", + "例えば、`x = 1000...0` により $s$ の一番小さい桁のビットをみつけることができます。`x = 0100...0` により $s$ の二番目に小さい桁のビットをみつけることができます。つまり、関数 $f_s(x)$を $n$回呼び出す必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 量子的な解法 \n", + "\n", + "量子コンピューターを使うと、関数$f(x)$を1回呼び出すだけで、この問題を100%の確信度で解くことができます。隠れたビット文字列を見つける量子ベルンシュタイン・ヴァジラニ アルゴリズムは非常にシンプルです。\n", + "\n", + "1. 入力量子ビットを$|0\\rangle^{\\otimes n}$ に、出力量子ビットを$|-\\rangle$状態に初期化\n", + "2. アダマールゲートを入力量子ビットに適用\n", + "3. オラクルをクエリ\n", + "4. 入力レジスタにアダマールゲートを適用\n", + "5. 測定\n", + "\n", + "![Bernstein-Vazirani quantum circuit](images/bv1.svg)\n", + "\n", + "Tアルゴリズムを説明するために、各量子ビットにアダマールゲートを適用したときに何が起きるのかをみてみましょう。$n$ 量子ビットの量子状態 $|a \\rangle$ にアダマールゲートを適用すると以下の変換をみることができます。\n", + "\n", + "$$\n", + "|a\\rangle \\xrightarrow{H^{\\otimes n}} \\frac{1}{\\sqrt{2^n}} \\sum_{x\\in \\{0,1\\}^n} (-1)^{a\\cdot x}|x\\rangle.\n", + "$$\n", + "\n", + "\n", + "\n", + "
\n", + " 式を説明する (クリックして開く)\n", + "アダマールは1つの量子ビットに対して次のような変換を行うことを思い出しましょう。\n", + "\n", + "$$\n", + "H|0\\rangle = \\tfrac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle)\n", + "$$ $$\n", + "H|1\\rangle = \\tfrac{1}{\\sqrt{2}}(|0\\rangle - |1\\rangle)\n", + "$$\n", + "\n", + "総和記号を使うことで、以下のように書き換えられます。\n", + "\n", + "$$\n", + "H|a\\rangle = \\sum_{x\\in \\{0,1\\}} (-1)^{a\\cdot x}|x\\rangle.\n", + "$$\n", + "\n", + "2つの量子ビットに対して、それぞれにアダマールを適用すると、次のような変換が行われます。\n", + "\n", + "$$\n", + "H^{\\otimes 2}|00\\rangle = |00\\rangle + |01\\rangle + |10\\rangle + |11\\rangle\n", + "$$ $$\n", + "H^{\\otimes 2}|01\\rangle = |00\\rangle - |01\\rangle + |10\\rangle - |11\\rangle\n", + "$$ $$\n", + "H^{\\otimes 2}|10\\rangle = |00\\rangle + |01\\rangle - |10\\rangle - |11\\rangle\n", + "$$ $$\n", + "H^{\\otimes 2}|11\\rangle = |00\\rangle - |01\\rangle - |10\\rangle + |11\\rangle\n", + "$$\n", + "\n", + "総和記号で、以下のようにまとめて表現することができます。\n", + "\n", + "$$\n", + "H^{\\otimes 2}|a\\rangle = \\sum_{x\\in \\{0,1\\}^2} (-1)^{a\\cdot x}|x\\rangle\n", + "$$\n", + "\n", + "最初の式にたどり着く方法がこれで理解できるかと思います。\n", + "
\n", + "\n", + "特に、 $|00...0\\rangle$ に初期化された量子レジスタから始めて、 $n$ 個のアダマールゲートをかけると、おなじみの量子重ね合わせができます。\n", + "\n", + "$$\n", + "|00\\dots 0\\rangle \\xrightarrow{H^{\\otimes n}} \\frac{1}{\\sqrt{2^n}} \\sum_{x\\in \\{0,1\\}^n} |x\\rangle\n", + "$$\n", + "\n", + "この場合、$a$=0により$(-1)^{a\\cdot x}$ =1となることから、位相$(-1)^{a\\cdot x}$ が消えます。 \n", + "\n", + "さて、古典のオラクル $f_s$ は、$s \\cdot x\\mod 2 = 1$を満たす任意の入力 $x$ に対して $1$ を、それ以外のときは $0$ を返します。ドイチ・ジョザでも用いた $|{-}\\rangle$に対する位相キックバックのテクニックを利用することで、以下の変換を得られます。\n", + "\n", + "$$\n", + "|x \\rangle \\xrightarrow{f_s} (-1)^{s\\cdot x} |x \\rangle \n", + "$$\n", + "\n", + "隠れた文字列を明らかにするアルゴリズムは、 $|0\\rangle$ のアダマール変換から得られた量子的な重ね合わせで、量子オラクル$f_s$を問い合わせることで、自然に次のようになります。\n", + "\n", + "$$\n", + "|00\\dots 0\\rangle \\xrightarrow{H^{\\otimes n}} \\frac{1}{\\sqrt{2^n}} \\sum_{x\\in \\{0,1\\}^n} |x\\rangle \\xrightarrow{f_a} \\frac{1}{\\sqrt{2^n}} \\sum_{x\\in \\{0,1\\}^n} (-1)^{a\\cdot x}|x\\rangle\n", + "$$\n", + "\n", + "$n$ 個のアダマールゲートの逆行列は、再び $n$ 個のアダマールゲートなので、次のようにして $a$ を求めることができます。\n", + "\n", + "$$\n", + "\\frac{1}{\\sqrt{2^n}} \\sum_{x\\in \\{0,1\\}^n} (-1)^{a\\cdot x}|x\\rangle \\xrightarrow{H^{\\otimes n}} |a\\rangle\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 具体例 \n", + "\n", + "$n=2$ の量子ビットと秘密の文字列 $s=11$ で具体的な例を見てみましょう。ここでは、参考文献 [2] の定式に従って、1つのレジスタだけを使ってベルンシュタイン・ヴァジラニ量子オラクルのための回路を生成していることに注意してください。 \n", + "\n", + "
    \n", + "
  1. 2つの量子ビットのレジスタは0に初期化されています。\n", + " \n", + "\n", + "$$\\lvert \\psi_0 \\rangle = \\lvert 0 0 \\rangle$$\n", + "\n", + " \n", + "
  2. \n", + "\n", + "
  3. 両方の量子ビットにアダマールゲートを適用します。\n", + " \n", + "\n", + "$$\\lvert \\psi_1 \\rangle = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle + \\lvert 0 1 \\rangle + \\lvert 1 0 \\rangle + \\lvert 1 1 \\rangle \\right) $$\n", + "\n", + " \n", + "
  4. \n", + "\n", + "
  5. 文字列 $s=11$ に対して、量子オラクルは以下の演算を行います。\n", + "$$\n", + "|x \\rangle \\xrightarrow{f_s} (-1)^{x\\cdot 11} |x \\rangle. \n", + "$$\n", + "\n", + "$$\\lvert \\psi_2 \\rangle = \\frac{1}{2} \\left( (-1)^{00\\cdot 11}|00\\rangle + (-1)^{01\\cdot 11}|01\\rangle + (-1)^{10\\cdot 11}|10\\rangle + (-1)^{11\\cdot 11}|11\\rangle \\right)$$\n", + "\n", + "$$\\lvert \\psi_2 \\rangle = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle - \\lvert 0 1 \\rangle - \\lvert 1 0 \\rangle + \\lvert 1 1 \\rangle \\right)$$\n", + "\n", + " \n", + "
  6. \n", + "\n", + "
  7. 両方の量子ビットにアダマールゲートを適用します。\n", + " \n", + "\n", + "$$\\lvert \\psi_3 \\rangle = \\lvert 1 1 \\rangle$$\n", + "\n", + " \n", + "
  8. \n", + "\n", + "
  9. 秘密の文字列 $s=11$ を見つけるために測定します。\n", + "
  10. \n", + "\n", + "\n", + "
\n", + "\n", + "以下のウィジェット `bv_widget` を活用してください。ボタンを押してそれぞれのステップを適用し、アルゴリズムを実行してみてください。最初の2つの位置引数によって、入力量子ビットの数と秘密の文字列の値を変更することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7527f4488c994a27b571c49bbdbe7181", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='H⊗ⁿ', style=ButtonStyle()), Button(description='Oracle', style=ButtonStyle(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5779cd38795f4c12b301e0604cf030b4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTMLMath(value='$$ |00\\\\rangle = |00\\\\rangle $$')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5033beeb5ed64cd3b0a8643b779b114d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01*\\x00\\x00\\x00\\xcc\\x08\\x06\\x00\\x00\\x00\\xc4P\\xee\\x0…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import bv_widget\n", + "bv_widget(2, \"11\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskitを用いた実装 \n", + "\n", + "ここで、$s=011$の3量子ビットの関数について、Qiskitでのベルンシュタイン・ヴァジラニ アルゴリズムの実装を見ていきましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# initialization\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# importing Qiskit\n", + "from qiskit import IBMQ, Aer\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, transpile, assemble\n", + "\n", + "# import basic plot tools\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず、実験で使用する量子ビット数と、アルゴリズムが求める隠れたビット文字列 $s$ を設定します。隠れたビット文字列 $s$ は、量子オラクルの回路を決定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "n = 3 # number of qubits used to represent s\n", + "s = '011' # the hidden binary string" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "その後、Qiskitを使用してベルンシュタイン・ヴァジラニ アルゴリズムをプログラムします。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We need a circuit with n qubits, plus one ancilla qubit\n", + "# Also need n classical bits to write the output to\n", + "bv_circuit = QuantumCircuit(n+1, n)\n", + "\n", + "# put ancilla in state |->\n", + "bv_circuit.h(n)\n", + "bv_circuit.z(n)\n", + "\n", + "# Apply Hadamard gates before querying the oracle\n", + "for i in range(n):\n", + " bv_circuit.h(i)\n", + " \n", + "# Apply barrier \n", + "bv_circuit.barrier()\n", + "\n", + "# Apply the inner-product oracle\n", + "s = s[::-1] # reverse s to fit qiskit's qubit ordering\n", + "for q in range(n):\n", + " if s[q] == '0':\n", + " bv_circuit.i(q)\n", + " else:\n", + " bv_circuit.cx(q, n)\n", + " \n", + "# Apply barrier \n", + "bv_circuit.barrier()\n", + "\n", + "#Apply Hadamard gates after querying the oracle\n", + "for i in range(n):\n", + " bv_circuit.h(i)\n", + "\n", + "# Measurement\n", + "for i in range(n):\n", + " bv_circuit.measure(i, i)\n", + "\n", + "bv_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3a. シミュレーターでの実験 \n", + "\n", + "上記の回路をシミュレーター上で実行できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# use local simulator\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "shots = 1024\n", + "qobj = assemble(bv_circuit)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "測定の結果は、隠れた文字列 `011` であることがわかります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3b. 実デバイスでの実験 \n", + "\n", + "以下のように実デバイス上で回路を動作させることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmq_london\n" + ] + } + ], + "source": [ + "# Load our saved IBMQ accounts and get the least busy backend device with less than or equal to 5 qubits\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "provider.backends()\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits <= 5 and\n", + " x.configuration().n_qubits >= 2 and\n", + " not x.configuration().simulator and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# Run our circuit on the least busy backend. Monitor the execution of the job in the queue\n", + "from qiskit.tools.monitor import job_monitor\n", + "\n", + "shots = 1024\n", + "transpiled_bv_circuit = transpile(bv_circuit, backend)\n", + "job = backend.run(transpiled_bv_circuit, shots=shots)\n", + "\n", + "job_monitor(job, interval=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the results from the computation\n", + "results = job.result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "見ての通り、ほとんどの結果は`011`です。他の結果は量子計算の誤差によるものです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 演習 \n", + "\n", + "1. 以下のウィジットを使用してベルンシュタイン・ヴァジラニ アルゴリズムが異なるオラクルで動く様子を確認してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "94208c824e9f4267b7d336986115d5ec", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='H⊗ⁿ', style=ButtonStyle()), Button(description='Oracle', style=ButtonStyle(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1a9e3c846d7443569f0a72fd7e2d16c7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTMLMath(value='$$ |000\\\\rangle = |000\\\\rangle $$')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6c0ceaa4301d4a3a80c04cc008430557", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01*\\x00\\x00\\x01\\x08\\x08\\x06\\x00\\x00\\x00\\xe8^\\xb9\\x1…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import bv_widget\n", + "bv_widget(3, \"011\", hide_oracle=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2. 上記のベルンシュタイン・ヴァジラニの[実装](#implementation)は、秘密のビット文字列$s = 011$の場合のものです。秘密の文字列 $s = 1011$ の場合を実装してください。結果は期待通りでしたか?説明してみてください。\n", + "\n", + "3. 上記のベルンシュタイン・ヴァジラニの[実装](#implementation)は、秘密のビット文字列$s = 011$の場合のものです。秘密の文字列 $s = 1110110101$ の場合を実装してください。結果は期待通りでしたか?説明してみてください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 参考文献 \n", + "1. Ethan Bernstein and Umesh Vazirani (1997) \"Quantum Complexity Theory\" SIAM Journal on Computing, Vol. 26, No. 5: 1411-1473, [doi:10.1137/S0097539796300921](https://doi.org/10.1137/S0097539796300921).\n", + "2. Jiangfeng Du, Mingjun Shi, Jihui Wu, Xianyi Zhou, Yangmei Fan, BangJiao Ye, Rongdian Han (2001) \"Implementation of a quantum algorithm to solve the Bernstein-Vazirani parity problem without entanglement on an ensemble quantum computer\", Phys. Rev. A 64, 042306, [10.1103/PhysRevA.64.042306](https://doi.org/10.1103/PhysRevA.64.042306), [arXiv:quant-ph/0012114](https://arxiv.org/abs/quant-ph/0012114). " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.4" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "001719b724834bd98f8872d40118e0e1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_da96fd0548b94d8da9fc70d320a96186", + "style": "IPY_MODEL_fa650588f9694b1aa84160d58a085eb5", + "tooltip": "" + } + }, + "00a7b0899d2143c9be37ad212e045be7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "0d85dbd6194e48a9bdb7256f1e535e0b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "1371969b6f0b4315a65c31b6f33d87d3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1a9e3c846d7443569f0a72fd7e2d16c7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLMathModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLMathModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLMathView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_90ad24e72deb4bf5ace3104ba37d1f05", + "placeholder": "​", + "style": "IPY_MODEL_ebc0cbd70d264787af681277c44d80e5", + "value": "$$ |000\\rangle = |000\\rangle $$" + } + }, + "20d98d62f3a94a65bf7ccc63dfa548e0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2250860fda66422e9840c240db0b5d48": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2c8fd44d35304005929605be181aa37e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "H⊗ⁿ", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_c7d2541bc077433d9a2889112c54235c", + "style": "IPY_MODEL_e949fa1c378d4fd2a55c54bcfa91c876", + "tooltip": "" + } + }, + "329bb47ec5064c78b934f360e37a11fa": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3478c6f60f1e4268806e02f6809cd958": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "384670d94f1f4e4a981c318facf6c1b7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Oracle", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_1371969b6f0b4315a65c31b6f33d87d3", + "style": "IPY_MODEL_7383290977e149edb11377b40f2b6dd7", + "tooltip": "" + } + }, + "3cb4478b546a48e1916f0bcac4b21551": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3e9964df70e4446d87d40a91511e42da": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "5033beeb5ed64cd3b0a8643b779b114d": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_9823476df5104429bca663ef5fc069f5", + "value": {}, + "width": "" + } + }, + "5779cd38795f4c12b301e0604cf030b4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLMathModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLMathModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLMathView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ce020da7b5cb44d8819cd15cbec5064c", + "placeholder": "​", + "style": "IPY_MODEL_20d98d62f3a94a65bf7ccc63dfa548e0", + "value": "$$ |00\\rangle = |00\\rangle $$" + } + }, + "6a322f9bcdc04f83a600843380660380": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6c0ceaa4301d4a3a80c04cc008430557": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_6c360707064d43409a8cceadf4cd336f", + "value": {}, + "width": "" + } + }, + "6c360707064d43409a8cceadf4cd336f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7383290977e149edb11377b40f2b6dd7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "7527f4488c994a27b571c49bbdbe7181": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2c8fd44d35304005929605be181aa37e", + "IPY_MODEL_c401b1414cc64baa80d8fae6b957ef01", + "IPY_MODEL_edc9e6f1fee84899809df3201680e628" + ], + "layout": "IPY_MODEL_329bb47ec5064c78b934f360e37a11fa" + } + }, + "90ad24e72deb4bf5ace3104ba37d1f05": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "94208c824e9f4267b7d336986115d5ec": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_c04546f3acbd4849b868e53752739276", + "IPY_MODEL_384670d94f1f4e4a981c318facf6c1b7", + "IPY_MODEL_001719b724834bd98f8872d40118e0e1" + ], + "layout": "IPY_MODEL_6a322f9bcdc04f83a600843380660380" + } + }, + "9823476df5104429bca663ef5fc069f5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c04546f3acbd4849b868e53752739276": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "H⊗ⁿ", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_3cb4478b546a48e1916f0bcac4b21551", + "style": "IPY_MODEL_3e9964df70e4446d87d40a91511e42da", + "tooltip": "" + } + }, + "c401b1414cc64baa80d8fae6b957ef01": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Oracle", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_2250860fda66422e9840c240db0b5d48", + "style": "IPY_MODEL_00a7b0899d2143c9be37ad212e045be7", + "tooltip": "" + } + }, + "c7d2541bc077433d9a2889112c54235c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ce020da7b5cb44d8819cd15cbec5064c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "da96fd0548b94d8da9fc70d320a96186": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e949fa1c378d4fd2a55c54bcfa91c876": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "ebc0cbd70d264787af681277c44d80e5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "edc9e6f1fee84899809df3201680e628": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_3478c6f60f1e4268806e02f6809cd958", + "style": "IPY_MODEL_0d85dbd6194e48a9bdb7256f1e535e0b", + "tooltip": "" + } + }, + "fa650588f9694b1aa84160d58a085eb5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/defining-quantum-circuits.ipynb b/translations/ja/ch-algorithms/defining-quantum-circuits.ipynb new file mode 100644 index 0000000..9cacb7c --- /dev/null +++ b/translations/ja/ch-algorithms/defining-quantum-circuits.ipynb @@ -0,0 +1,139 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子回路" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [導入](#intro)\n", + "2. [量子回路とは何か?](#whatis)\n", + "3. [例: 量子テレポーテーション](#teleportation)\n", + "4. [例: 変分量子固有値ソルバー](#vqe)\n", + "5. [なぜ部分的に古典なのか?](#why-classical)\n", + "\n", + "## 1. 導入 \n", + "これまでに、様々な[単一量子ビットゲート](../ch-states/single-qubit-gates.html)や[複数量子ビットゲート](../ch-gates/introduction.html)を見てきました。また、これらのゲートを他の部品と組み合わせて量子回路を構築する方法も見てきました。\n", + "\n", + "量子アルゴリズムを実装するために量子回路を構築するので、実際の量子コンピューターに量子アルゴリズムを実装する前に、具体的に量子回路の定義を強調しておきます。\n", + "\n", + "\n", + "## 2. 量子回路とは何か? \n", + "\n", + "量子回路とは、 _量子データ(量子ビットなど)に対するコヒーレントな量子演算と、リアルタイム同時古典計算_ で構成される計算ルーチンのことです。量子回路は、 _量子ゲート_ 、 _測定_ 、 _リセット_ の順序立てられたシーケンスであり、これらはすべてリアルタイム古典計算のデータを使用した条件付ゲートが作用することがあります。\n", + "\n", + "量子データの任意のユニタリ変換が、集合内のゲートのシーケンスと同様に任意に効率的に近似できる場合、量子ゲートの集合は[ユニバーサル(普遍的)](../ch-gates/proving-universality.html)であると言われています。任意の量子プログラムは、量子回路と非連続古典計算のシーケンスで表現することができます。\n", + "\n", + "\n", + "## 3. 量子テレポーテーション \n", + "\n", + "以下の量子回路を見てください 次の章では[量子テレポーテーションアルゴリズム](../ch-algorithms/teleportation.html)の実装を学びます。今のところ,量子回路の構成要素を見れば十分です。\n", + "\n", + "![Quantum Teleportation Labeled](images/teleportation-labeled.png)\n", + "\n", + "量子回路は3つの量子ビットと2つの古典ビットを使っています。この量子回路には主に4つのコンポーネントがあります。\n", + "\n", + "### 初期化とリセット\n", + "まず、量子状態を定義して量子計算を開始する必要があります。これは、初期化とリセット操作を使用して実現されます。リセットは単一量子ゲートと、測定によって目的の状態を正常に作成できたかどうかをモニターするリアルタイムの古典的な同時計算の組み合わせによって実行することができます。$q_0$から所望の状態$\\vert\\psi\\rangle$への初期化には次に単一量子ビットゲートを適応します。\n", + "\n", + "### 量子ゲート\n", + "第二に、テレポーテーションアルゴリズムで必要とされるように、3つの量子ビットを操作する一連の量子ゲートを適用します。この場合、1量子ビットのアダマールゲート($H$)と2ビットの制御Xゲート($\\oplus$)を適用するだけでよいです。\n", + "\n", + "### 測定\n", + "第三に、3つの量子ビットのうち2つの量子ビットを測定します。古典コンピューターは、各量子ビットの測定値を古典的な結果(0と1)として解釈し、2つの古典ビットに格納します。\n", + "\n", + "### 古典条件付ゲート\n", + "第四に、3番目の量子ビットに単一量子ビットゲートの$Z$と$X$を適用します。これらのゲートは、2つの古典ビットに格納されている各測定結果が1の場合それぞれ作用します。この場合、古典計算の結果を、同じ量子回路内でリアルタイムに同時使用しています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.例: 変分量子固有値ソルバー \n", + "\n", + "ここに量子プログラムの例を示します。次の章では、このプログラムが[変分量子固有値ソルバー](../ch-applications/vqe-molecules.html)を実装していることを説明します。このプログラムでは、古典的なコンピューターと量子コンピューターが _非並行_ に動作します.\n", + "\n", + "![Variational Quantum Eigensolver Labeled](images/vqe-labeled.png)\n", + "\n", + "### 量子ブロック\n", + "上記の例1と同様に、単一量子ビットゲートと複数量子ビットゲートを用いたリセット処理の組み合わせにより、量子状態$\\vert\\Psi(\\theta)\\rangle$を準備します。ここでは、状態のパラメーターは$\\theta$で設定されます。一度準備された量子状態は、量子ゲートを使って操作され、測定されます。量子ブロック内のすべての操作は量子回路で構成されています。\n", + "\n", + "### 古典ブロック\n", + "量子状態が測定されると、古典コンピューターは、測定結果を解釈し、目的のアプリケーションのために選択されたコスト関数を使用して、そのコストを計算します。このコストに基づいて、古典的なコンピューターは、パラメーター$\\theta$の別の値を決定します。\n", + "\n", + "### 処理の組み合わせ\n", + "古典的なコンピューターが次のパラメーター$\\theta$を決定すると、一連のリセットと単一量子ビットゲート、複数量子ビットゲートを量子回路で使用して$\\vert\\Psi(\\theta)\\rangle$を準備し、このプロセスは測定された量子状態のコストが安定するまで、または別の事前に定められた結果と合致するまで続けられます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. なぜ部分的に古典なのか? \n", + "\n", + "ユニバーサルな量子コンピューターは古典的なコンピューターができることは何でもできますが、量子状態は壊れやすいので、量子回路に古典的な部分を追加することがよくあります。\n", + "\n", + "量子ビットを測定すると、その状態が崩れ、多くの情報が破壊されてしまいます。測定は情報を破壊するだけなので、理論的には常に最後に測定すれば計算上の優位性を失うことはありません。実際には、早期に測定することで、多くの実用的な利点が得られます。\n", + "\n", + "例えば、テレポーテーション回路では、量子チャネルの代わりに古典チャネルで情報を送ることができるように、量子ビットを測定しています。量子チャネルを作成するのが非常に難しいため、量子情報を他の人に送信する方法がない一方で、古典的なチャネルは非常に安定しています。\n", + "\n", + "変分量子固有値ソルバーの例では、計算をより小さな量子計算に分割することで、計算上の優位性が失われますが、ノイズの多いハードウェアでは、量子ビットの重ね合わせ時間を減らすことで、その分を補うことができます。これは、干渉が結果に不正確さをもたらす可能性が低いことを意味します。\n", + "\n", + "最後に、量子計算の結果を古典的な日常の世界で使うためには、計算の最後にこれらの状態を測定して解釈する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.5" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/deutsch-jozsa.ipynb b/translations/ja/ch-algorithms/deutsch-jozsa.ipynb new file mode 100644 index 0000000..2b53744 --- /dev/null +++ b/translations/ja/ch-algorithms/deutsch-jozsa.ipynb @@ -0,0 +1,1661 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ドイチ-ジョサのアルゴリズム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセクションでは、まずドイチ-ジョサ問題を紹介し、古典アルゴリズムと量子アルゴリズムによる解法を紹介します。また、Qiskitで量子アルゴリズムを実装し、シミュレーターと実デバイスでアルゴリズムの実験をします。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## 目次\n", + "\n", + "1. [はじめに](#introduction) \n", + " 1.1 [ドイチ-ジョサ問題](#djproblem) \n", + " 1.2 [古典的な解法](#classical-solution) \n", + " 1.3 [量子的な解法](#quantum-solution) \n", + " 1.4 [なぜこれで機能するのか?](#why-does-this-work) \n", + "2. [例](#example)\n", + "3. [量子オラクルの作成](#creating-quantum-oracles) \n", + "4. [Qiskit での実装](#implementation) \n", + " 4.1 [定値型のオラクル](#const_oracle) \n", + " 4.2 [分布型のオラクル](#balanced_oracle) \n", + " 4.3 [アルゴリズムの完成](#full_alg) \n", + " 4.4 [一般化された回路](#general_circs) \n", + "5. [実デバイスでの実験](#device) \n", + "6. [演習問題](#problems)\n", + "7. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ドイチ-ジョサのアルゴリズムは、古典アルゴリズムよりも優れたパフォーマンスを持つと発表された、最初の量子アルゴリズムです(参考文献[1]で最初に紹介されました)。ある特定の問題に対して量子コンピューターを使用する利点が証明された最初の量子アルゴリズムです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 ドイチ-ジョサ問題 \n", + "\n", + "ビット列を入力として受け取り、$0$ または$1$のいずれかを返す、以下のようなブール関数$f$があるとします。\n", + "\n", + "$\\hspace{15pt}\n", + "f(\\{x_0,x_1,x_2,...\\}) \\rightarrow 0$または$1\\hspace{15pt}$(ここで、$x_n$は$0$または$1$)\n", + "\n", + "このブール関数の特性は、分布型か定値型かのどちらかです。定値型の場合は、任意の入力に対してすべて0またはすべて1を返しますが、分布型の場合は、半分の入力に対して0を返し、残りの半分の入力には1を返します。問題は、与えられた関数が分布型か定値型かを判断することです。\n", + "\n", + "ドイチ-ジョサ問題は、1ビットであるドイチ問題のnビットへの拡張です。\n", + "\n", + "### 1.2 古典的な解法 \n", + "\n", + "古典的には、最も運が良い場合、オラクルへの2回の問い合わせで、このブール関数$f(x)$が分布型かどうかを判断できます。つまり、 $f(0,0,0,...)\\rightarrow 0$で$f(1,0,0,...) \\rightarrow 1$のとき、出力が異なる二つの値となるため、関数が分布型であることがわかります。\n", + "\n", + "最悪の場合、つまり、何回も試行を続けても、同じ出力が示される場合、 $f(x)$ が定値型であることを確認するためには、可能な入力の総数の半分+1をチェックする必要があります。可能な入力の総数は$2^n$であるため、つまり、最悪の場合には、$f(x)$ が定値型であることを確認するために、$2^{n-1}+1$の入力を試行する必要があります。たとえば、$4$ビットの場合、$16$ の可能な組み合わせのうち$8$つをチェックして、すべて$0$を取得した場合でも、$9$番目の入力が$1$を出力し、$f(x)$が分布型である可能性があります。確率的には、これは非常にありそうもない例です。実際、同じ結果が連続して得られる場合、関数が一定である確率を$k$個の入力の関数として次のように表すことができます。\n", + "\n", + "$\\hspace{15pt} P_\\textrm{constant}(k) = 1 - \\frac{1}{2^{k-1}} \\qquad\\hspace{15pt}$ (ここで、$ k \\leq 2^{n-1}$)\n", + "\n", + "現実的には、x%の確信があると言って、計算を早期に切り捨てることを選択できます。しかし、100% の自信を持ちたい場合は、$2^{n-1}+1$ の入力をチェックする必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 量子的な解法 \n", + "\n", + "量子コンピューターを使用すると、関数$f(x)$を1回呼び出すだけで、この問題を100%の信頼度で解決できます。ここで、関数$f$は、状態$\\vert x\\rangle \\vert y\\rangle $ を$ \\vert x\\rangle \\vert y \\oplus f(x)\\rangle$に変換する量子オラクルで、$\\oplus$ は$2$を法とする加算です。下の図はドイチ-ジョサのアルゴリズムの一般的な回路です。\n", + "\n", + "![image1](images/deutsch_steps.png)\n", + "\n", + "それでは、アルゴリズムの手順を見ていきましょう。\n", + "\n", + "
    \n", + "
  1. \n", + " 2つの量子レジスターを準備します。 1つ目は$|0\\rangle$に初期化された$n$量子ビットレジスターで、2つ目は$|1\\rangle$に初期化された1量子ビットのレジスターです。\n", + " \n", + "\n", + "$$\\vert \\psi_0 \\rangle = \\vert0\\rangle^{\\otimes n} \\vert 1\\rangle$$\n", + "\n", + "\n", + "
  2. \n", + " \n", + "
  3. \n", + " 各量子ビットにアダマールゲートを適用します。\n", + " \n", + "\n", + "$$\\vert \\psi_1 \\rangle = \\frac{1}{\\sqrt{2^{n+1}}}\\sum_{x=0}^{2^n-1} \\vert x\\rangle \\left(|0\\rangle - |1 \\rangle \\right)$$\n", + "\n", + "\n", + "
  4. \n", + " \n", + "
  5. \n", + " $\\vert x\\rangle \\vert y\\rangle$を$\\vert x\\rangle \\vert y \\oplus f(x)\\rangle$にする量子オラクルを適用すると、$f(x)$ は各$x$において、$0$または$1$のいずれかであるため以下のようになります。\n", + " $$\n", + " \\begin{aligned}\n", + " \\lvert \\psi_2 \\rangle \n", + " & = \\frac{1}{\\sqrt{2^{n+1}}}\\sum_{x=0}^{2^n-1} \\vert x\\rangle (\\vert f(x)\\rangle - \\vert 1 \\oplus f(x)\\rangle) \\\\ \n", + " & = \\frac{1}{\\sqrt{2^{n+1}}}\\sum_{x=0}^{2^n-1}(-1)^{f(x)}|x\\rangle ( |0\\rangle - |1\\rangle ) \n", + " \\end{aligned}\n", + " $$\n", + " \n", + "
  6. \n", + "\n", + "
  7. \n", + " この時点で、2番目の1量子ビットレジスターは無視できます。1番目のレジスターの各量子ビットにアダマールゲートを適用します。\n", + " $$\n", + " \\begin{aligned}\n", + " \\lvert \\psi_3 \\rangle \n", + " & = \\frac{1}{2^n}\\sum_{x=0}^{2^n-1}(-1)^{f(x)}\n", + " \\left[ \\sum_{y=0}^{2^n-1}(-1)^{x \\cdot y} \n", + " \\vert y \\rangle \\right] \\\\\n", + " & = \\frac{1}{2^n}\\sum_{y=0}^{2^n-1}\n", + " \\left[ \\sum_{x=0}^{2^n-1}(-1)^{f(x)}(-1)^{x \\cdot y} \\right]\n", + " \\vert y \\rangle\n", + " \\end{aligned}\n", + " $$\n", + " \n", + "ここで、$x \\cdot y = x_0y_0 \\oplus x_1y_1 \\oplus \\ldots \\oplus x_{n-1}y_{n-1}$ はビット単位の積の合計です。\n", + "
  8. \n", + "\n", + "
  9. \n", + " 1番目のレジスターを測定します。 $\\vert 0 \\rangle ^{\\otimes n} = \\lvert \\frac{1}{2^n}\\sum_{x=0}^{2^n-1}(-1)^{f(x)} \\rvert^2$の測定確率は、$f(x)$が定値型の場合は$1$に、$f(x)$が分布型の場合は$0$ になります。 \n", + "
  10. \n", + "\n", + "
\n", + "\n", + "### 1.4 なぜこれで機能するのか? \n", + "\n", + "- **定値型のオラクル**\n", + "\n", + "オラクルが*定値型*の場合、入力量子ビットからの影響を受けず(グローバル位相まで同じ)、オラクルに問い合わせする前後の量子状態は同じです。 Hゲートはそれ自体が可逆であるため、ステップ4でステップ2が逆になり、1番目のレジスターは初期量子状態の$|00\\dots 0\\rangle$になります。\n", + "\n", + "$$\n", + "H^{\\otimes n}\\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\\\ \\vdots \\\\ 0 \\end{bmatrix} \n", + "= \n", + "\\tfrac{1}{\\sqrt{2^n}}\\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ \\vdots \\\\ 1 \\end{bmatrix}\n", + "\\quad \\xrightarrow{\\text{after } U_f} \\quad\n", + "H^{\\otimes n}\\tfrac{1}{\\sqrt{2^n}}\\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ \\vdots \\\\ 1 \\end{bmatrix}\n", + "= \n", + "\\begin{bmatrix} 1 \\\\ 0 \\\\ 0 \\\\ \\vdots \\\\ 0 \\end{bmatrix} \n", + "$$\n", + "\n", + "- **分布型のオラクル**\n", + "\n", + "ステップ2の後、入力レジスターはすべての計算基底の均等な重ね合わせになります。オラクルが*分布型*の場合、位相キックバックで、この半分の状態に負の位相が追加されます。\n", + "\n", + "$$\n", + "U_f \\tfrac{1}{\\sqrt{2^n}}\\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ \\vdots \\\\ 1 \\end{bmatrix} \n", + "= \n", + "\\tfrac{1}{\\sqrt{2^n}}\\begin{bmatrix} -1 \\\\ 1 \\\\ -1 \\\\ \\vdots \\\\ 1 \\end{bmatrix}\n", + "$$\n", + "\n", + "オラクルに問い合わせをした後の量子状態は、オラクルに問い合わせをする前の量子状態と直交しています。よって、ステップ4で、Hゲートを適用すると、$|00\\dots 0\\rangle$に直交する量子状態になっているはずです。これは、状態がすべてゼロである結果は測定されないことを意味します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 例 \n", + "\n", + "\n", + "2ビットの分布型関数の例を見てみましょう。\n", + "\n", + "
    \n", + "
  1. 2つの量子ビットのうち最初のレジスターは $|00\\rangle$に初期化され、2番目の量子ビットレジスターは$|1\\rangle$ に初期化されます(量子ビットのインデックス付けに添え字1、2、3を使用していることに注意してください。「12」の添え字は 量子ビット1と2のレジスターを意味しhます。)\n", + "\n", + "$$\\lvert \\psi_0 \\rangle = \\lvert 0 0 \\rangle_{12} \\otimes \\lvert 1 \\rangle_{3} $$\n", + "\n", + " \n", + "
  2. \n", + " \n", + "
  3. 全量子ビットにアダマールをかけます。\n", + " \n", + "\n", + "$$\\lvert \\psi_1 \\rangle = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle + \\lvert 0 1 \\rangle + \\lvert 1 0 \\rangle + \\lvert 1 1 \\rangle \\right)_{12} \\otimes \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} $$\n", + "\n", + " \n", + "
  4. \n", + " \n", + "
  5. オラクル関数は $\\text{Q}_f = CX_{13}CX_{23}$ のように実装できます。 \n", + "$$\n", + " \\begin{align*}\n", + " \\lvert \\psi_2 \\rangle = \\frac{1}{2\\sqrt{2}} \\left[ \\lvert 0 0 \\rangle_{12} \\otimes \\left( \\lvert 0 \\oplus 0 \\oplus 0 \\rangle - \\lvert 1 \\oplus 0 \\oplus 0 \\rangle \\right)_{3} \\\\\n", + " + \\lvert 0 1 \\rangle_{12} \\otimes \\left( \\lvert 0 \\oplus 0 \\oplus 1 \\rangle - \\lvert 1 \\oplus 0 \\oplus 1 \\rangle \\right)_{3} \\\\\n", + " + \\lvert 1 0 \\rangle_{12} \\otimes \\left( \\lvert 0 \\oplus 1 \\oplus 0 \\rangle - \\lvert 1 \\oplus 1 \\oplus 0 \\rangle \\right)_{3} \\\\\n", + " + \\lvert 1 1 \\rangle_{12} \\otimes \\left( \\lvert 0 \\oplus 1 \\oplus 1 \\rangle - \\lvert 1 \\oplus 1 \\oplus 1 \\rangle \\right)_{3} \\right]\n", + " \\end{align*}\n", + " $$\n", + "
  6. \n", + " \n", + "
  7. これを単純化すると、次のようになります。\n", + " $$\n", + " \\begin{aligned}\n", + " \\lvert \\psi_2 \\rangle & = \\frac{1}{2\\sqrt{2}} \\left[ \\lvert 0 0 \\rangle_{12} \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} - \\lvert 0 1 \\rangle_{12} \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} - \\lvert 1 0 \\rangle_{12} \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} + \\lvert 1 1 \\rangle_{12} \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} \\right] \\\\\n", + " & = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle - \\lvert 0 1 \\rangle - \\lvert 1 0 \\rangle + \\lvert 1 1 \\rangle \\right)_{12} \\otimes \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} \\\\\n", + " & = \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{1} \\otimes \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{2} \\otimes \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3}\n", + " \\end{aligned}\n", + " $$\n", + "
  8. \n", + " \n", + "
  9. 最初のレジスターにアダマールをかけます\n", + " \n", + "\n", + "$$ \\lvert \\psi_3\\rangle = \\lvert 1 \\rangle_{1} \\otimes \\lvert 1 \\rangle_{2} \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right)_{3} $$\n", + "\n", + "\n", + "
  10. \n", + " \n", + "
  11. 最初の2量子ビットを測定すると、ゼロ以外の$11$が得られ、分布型関数ということがわかります。\n", + "
  12. \n", + "
\n", + "\n", + "\n", + "以下のウィジェットを使用して、この例を試すことができます。 ボタンを押してHゲートとオラクルを追加できます。`case=\"constant\"` に設定して、セルのrestartで別のオラクルも試すことができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "219558e838064f6d95f3c9d8921a7cdc", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='H⊗ⁿ', style=ButtonStyle()), Button(description='Oracle', style=ButtonStyle(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4ac5f7a776454bce8f1e83c115536366", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTMLMath(value='$$ |00\\\\rangle = |00\\\\rangle $$')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9f98dfe7908c48279b598606888f6d90", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01*\\x00\\x00\\x00\\xcc\\x08\\x06\\x00\\x00\\x00\\xc4P\\xee\\x0…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import dj_widget\n", + "dj_widget(size=\"small\", case=\"balanced\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 量子オラクルの作成 \n", + "\n", + "量子オラクルを作成するいくつかの異なる方法を見てみましょう。\n", + "\n", + "定値型関数の場合は簡単です。\n", + "\n", + "$\\qquad$ 1. f(x) = 0の場合、レジスター2の量子ビットに$I$ゲートを適用します。\n", + "\n", + "$\\qquad$ 2. f(x) = 1の場合、レジスター2の量子ビットに$X$ゲートを適用します。\n", + "\n", + "分布型の関数の場合、複数の異なる手法で回路を作成できます。例えば、レジスター1の各量子ビットを制御ビットで、レジスター2の量子ビットをターゲットにしてCNOTを実行することで、回路が分布型であることを保証できます。 例:\n", + "\n", + "![image2](images/deutsch_balanced1.svg)\n", + "\n", + "上の回路図では、上の3つの量子ビットが入力レジスターで、一番下の量子ビットが出力レジスターです。 以下の表で、どの入力状態がどの出力を与えるかを確認できます。\n", + "\n", + "| 出力0となる入力状態 | 出力1となる入力状態 |\n", + "|:--------------------------:|:--------------------------:|\n", + "| 000 | 001 |\n", + "| 011 | 100 |\n", + "| 101 | 010 |\n", + "| 110 | 111 |\n", + "\n", + "\n", + "制御ビットをXゲートでラップすることにより、分布型であることを保ちながら結果を変更できます。 たとえば、次の回路とその結果の表を確認してください。\n", + "\n", + "![other_balanced_circuit](images/deutsch_balanced2.svg)\n", + "\n", + "| 出力0となる入力状態 | 出力1となる入力状態 |\n", + "|:--------------------------:|:--------------------------:|\n", + "| 001 | 000 |\n", + "| 010 | 011 |\n", + "| 100 | 101 |\n", + "| 111 | 110 |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Qiskit での実装 \n", + "\n", + "ここで、例として3ビット関数でドイチ-ジョサのアルゴリズムを実装します。定値型のオラクルと分布型のオラクルの両方を実装します。 まず、必要なモジュールのインポートから始めます。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# initialization\n", + "import numpy as np\n", + "\n", + "# importing Qiskit\n", + "from qiskit import IBMQ, Aer\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit import QuantumCircuit, assemble, transpile\n", + "\n", + "# import basic plot tools\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次にオラクルの入力レジスターのサイズをセットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# set the length of the n-bit input string. \n", + "n = 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 定値型オラクル \n", + "定値型オラクルから作ります。定値型は、入力は出力に影響を与えないため、出力量子ビットは0または1にランダムに設定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# set the length of the n-bit input string. \n", + "n = 3\n", + "\n", + "const_oracle = QuantumCircuit(n+1)\n", + "\n", + "output = np.random.randint(2)\n", + "if output == 1:\n", + " const_oracle.x(n)\n", + "\n", + "const_oracle.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 分布型オラクル " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "balanced_oracle = QuantumCircuit(n+1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、分布型オラクルを作ります。 1bの節で見たように、各入力量子ビットを制御ビット、出力ビットをターゲットビットとしてCNOTを実装することで、分布型オラクルを作成できます。 一部の制御ビットをXゲートでラップすることにより、0または1を出力する入力状態の変更ができます。 まず、ラップする制御ビットを指定する長さ`n` のバイナリー文字列をセットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "b_str = \"101\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この文字列を、Xゲートを配置するためのキーとして使用します。 各量子ビットについて、`b_str`の対応する桁が`1`の場合はXゲートを置き、 `0`の場合は何も置きません" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "balanced_oracle = QuantumCircuit(n+1)\n", + "b_str = \"101\"\n", + "\n", + "# Place X-gates\n", + "for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " balanced_oracle.x(qubit)\n", + "balanced_oracle.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、各入力量子ビットを制御ビットとし、出力量子ビットをターゲットビットとして、制御NOTゲートを実装します。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "balanced_oracle = QuantumCircuit(n+1)\n", + "b_str = \"101\"\n", + "\n", + "# Place X-gates\n", + "for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " balanced_oracle.x(qubit)\n", + "\n", + "# Use barrier as divider\n", + "balanced_oracle.barrier()\n", + "\n", + "# Controlled-NOT gates\n", + "for qubit in range(n):\n", + " balanced_oracle.cx(qubit, n)\n", + "\n", + "balanced_oracle.barrier()\n", + "balanced_oracle.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、2つのセルからコードを繰り返して、制御ビットをXゲートでラップします。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "balanced_oracle = QuantumCircuit(n+1)\n", + "b_str = \"101\"\n", + "\n", + "# Place X-gates\n", + "for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " balanced_oracle.x(qubit)\n", + "\n", + "# Use barrier as divider\n", + "balanced_oracle.barrier()\n", + "\n", + "# Controlled-NOT gates\n", + "for qubit in range(n):\n", + " balanced_oracle.cx(qubit, n)\n", + "\n", + "balanced_oracle.barrier()\n", + "\n", + "# Place X-gates\n", + "for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " balanced_oracle.x(qubit)\n", + "\n", + "# Show oracle\n", + "balanced_oracle.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "分布型オラクルを作成できました。 あとは、ドイチ-ジョサのアルゴリズムがこの問題を解くことができるか確認するだけです。\n", + "\n", + "### 4.3 アルゴリズムの完成 \n", + "\n", + "それでは、すべてをまとめましょう。 アルゴリズムの最初のステップは、入力量子ビットを状態$|{+}\\rangle$ に、出力量子ビットを状態$|{-}\\rangle$に初期化することです。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dj_circuit = QuantumCircuit(n+1, n)\n", + "\n", + "# Apply H-gates\n", + "for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + "\n", + "# Put qubit in state |->\n", + "dj_circuit.x(n)\n", + "dj_circuit.h(n)\n", + "dj_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、オラクルを適用しましょう。ここでは、上記で作成した`balanced_oracle` を適用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dj_circuit = QuantumCircuit(n+1, n)\n", + "\n", + "# Apply H-gates\n", + "for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + "\n", + "# Put qubit in state |->\n", + "dj_circuit.x(n)\n", + "dj_circuit.h(n)\n", + "\n", + "# Add oracle\n", + "dj_circuit += balanced_oracle\n", + "dj_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "最後に、 $n$個の入力量子ビットにHゲートを適用し、入力レジスターを測定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dj_circuit = QuantumCircuit(n+1, n)\n", + "\n", + "# Apply H-gates\n", + "for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + "\n", + "# Put qubit in state |->\n", + "dj_circuit.x(n)\n", + "dj_circuit.h(n)\n", + "\n", + "# Add oracle\n", + "dj_circuit += balanced_oracle\n", + "\n", + "# Repeat H-gates\n", + "for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + "dj_circuit.barrier()\n", + "\n", + "# Measure\n", + "for i in range(n):\n", + " dj_circuit.measure(i, i)\n", + "\n", + "# Display circuit\n", + "dj_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "出力を見てみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# use local simulator\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "shots = 1024\n", + "qobj = assemble(dj_circuit, aer_sim)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の結果から、`000`を測定する可能性は0%であることがわかります。これにより、関数が分布型であることが正しく予測されます。\n", + "\n", + "### 4.4 一般化された回路 \n", + "\n", + "次のコードは、一般化されたドイチ-ジョサのオラクルを作成し、量子ゲートに変換する関数です。`case`で分布型か定値型かを区別し(`'balanced'`または `constant`)、また `n`は入力レジスターのサイズです:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def dj_oracle(case, n):\n", + " # We need to make a QuantumCircuit object to return\n", + " # This circuit has n+1 qubits: the size of the input,\n", + " # plus one output qubit\n", + " oracle_qc = QuantumCircuit(n+1)\n", + " \n", + " # First, let's deal with the case in which oracle is balanced\n", + " if case == \"balanced\":\n", + " # First generate a random number that tells us which CNOTs to\n", + " # wrap in X-gates:\n", + " b = np.random.randint(1,2**n)\n", + " # Next, format 'b' as a binary string of length 'n', padded with zeros:\n", + " b_str = format(b, '0'+str(n)+'b')\n", + " # Next, we place the first X-gates. Each digit in our binary string \n", + " # corresponds to a qubit, if the digit is 0, we do nothing, if it's 1\n", + " # we apply an X-gate to that qubit:\n", + " for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " oracle_qc.x(qubit)\n", + " # Do the controlled-NOT gates for each qubit, using the output qubit \n", + " # as the target:\n", + " for qubit in range(n):\n", + " oracle_qc.cx(qubit, n)\n", + " # Next, place the final X-gates\n", + " for qubit in range(len(b_str)):\n", + " if b_str[qubit] == '1':\n", + " oracle_qc.x(qubit)\n", + "\n", + " # Case in which oracle is constant\n", + " if case == \"constant\":\n", + " # First decide what the fixed output of the oracle will be\n", + " # (either always 0 or always 1)\n", + " output = np.random.randint(2)\n", + " if output == 1:\n", + " oracle_qc.x(n)\n", + " \n", + " oracle_gate = oracle_qc.to_gate()\n", + " oracle_gate.name = \"Oracle\" # To show when we display the circuit\n", + " return oracle_gate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このオラクルのゲートを入力して、ドイチ-ジョサのアルゴリズムを実行する関数も作成しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": true, + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def dj_algorithm(oracle, n):\n", + " dj_circuit = QuantumCircuit(n+1, n)\n", + " # Set up the output qubit:\n", + " dj_circuit.x(n)\n", + " dj_circuit.h(n)\n", + " # And set up the input register:\n", + " for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + " # Let's append the oracle gate to our circuit:\n", + " dj_circuit.append(oracle, range(n+1))\n", + " # Finally, perform the H-gates again and measure:\n", + " for qubit in range(n):\n", + " dj_circuit.h(qubit)\n", + " \n", + " for i in range(n):\n", + " dj_circuit.measure(i, i)\n", + " \n", + " return dj_circuit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、これらの関数を使用してアルゴリズムを試してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n = 4\n", + "oracle_gate = dj_oracle('balanced', n)\n", + "dj_circuit = dj_algorithm(oracle_gate, n)\n", + "dj_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路を実行した結果を見てみます。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "transpiled_dj_circuit = transpile(dj_circuit, aer_sim)\n", + "qobj = assemble(transpiled_dj_circuit)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 実デバイスでの実験 \n", + "\n", + "実デバイスでの回路の実行は、以下のようにして行います。まず、この回路が実行可能で最も空いているデバイスを探します。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmq_athens\n" + ] + } + ], + "source": [ + "# Load our saved IBMQ accounts and get the least busy backend device with greater than or equal to (n+1) qubits\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= (n+1) and\n", + " not x.configuration().simulator and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# Run our circuit on the least busy backend. Monitor the execution of the job in the queue\n", + "from qiskit.tools.monitor import job_monitor\n", + "\n", + "shots = 1024\n", + "transpiled_dj_circuit = transpile(dj_circuit, backend, optimization_level=3)\n", + "job = backend.run(transpiled_dj_circuit)\n", + "job_monitor(job, interval=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the results of the computation\n", + "results = job.result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ご覧のとおり、最も可能性の高い結果は`1111`です。他の結果は、量子計算の誤差によるものです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 演習問題 \n", + "\n", + "1. 異なる形の分布型、定値型のオラクルを作成できますか?" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit_textbook.problems import dj_problem_oracle\n", + "oracle = dj_problem_oracle(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "2. 上記の関数`dj_problem_oracle`は、`n = 4`のドイチ-ジョサオラクルをゲートの形式で返します。ゲートの入力は5量子ビットで、最後の量子ビット(`q_4`)が出力量子ビットです(上記のオラクルの例のように)。 `dj_problem_oracle` に1〜5の異なる整数を指定することで、異なるオラクルを取得できます。ドイチ-ジョサのアルゴリズムを使用して、各オラクルが分布型か定値型かを判断してください(**注**:実デバイスではなく、`qasm_simulator`を使用して試すことを強くお勧めします) 。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. 参考文献 \n", + "\n", + "1. David Deutsch and Richard Jozsa (1992). \"Rapid solutions of problems by quantum computation\". Proceedings of the Royal Society of London A. 439: 553–558. [doi:10.1098/rspa.1992.0167](https://doi.org/10.1098%2Frspa.1992.0167).\n", + "2. R. Cleve; A. Ekert; C. Macchiavello; M. Mosca (1998). \"Quantum algorithms revisited\". Proceedings of the Royal Society of London A. 454: 339–354. [doi:10.1098/rspa.1998.0164](https://doi.org/10.1098%2Frspa.1998.0164)." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "219558e838064f6d95f3c9d8921a7cdc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b1389a2fa3fa4386ad4a847644505aef", + "IPY_MODEL_f1a0220986014be4a5cbad3ca9055b35", + "IPY_MODEL_24d72d1cae9c48478063cb77e561f1b0" + ], + "layout": "IPY_MODEL_3269be2a067a49da82772a2e22215b46" + } + }, + "23c5f03881ef457288b1bb3e2e0aa17a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "24d72d1cae9c48478063cb77e561f1b0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_f42bdb19ded646978265747a7ac8862c", + "style": "IPY_MODEL_c44385a5daa84c2d91194417e05b50e1", + "tooltip": "" + } + }, + "3269be2a067a49da82772a2e22215b46": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "359a198022d54b698bcce7fc7180b189": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "417a45fc17324863bd0a4054e3b51d62": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4215437fca804e6cb4e9704bdcc56724": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "430565d5d5ec41368e9a76a4bbb16e43": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4ac5f7a776454bce8f1e83c115536366": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLMathModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLMathModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLMathView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_417a45fc17324863bd0a4054e3b51d62", + "placeholder": "​", + "style": "IPY_MODEL_4215437fca804e6cb4e9704bdcc56724", + "value": "$$ |00\\rangle = |00\\rangle $$" + } + }, + "9f98dfe7908c48279b598606888f6d90": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_a281658e97a04b65a00d7b86b51fb698", + "value": {}, + "width": "" + } + }, + "a281658e97a04b65a00d7b86b51fb698": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b1389a2fa3fa4386ad4a847644505aef": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "H⊗ⁿ", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_430565d5d5ec41368e9a76a4bbb16e43", + "style": "IPY_MODEL_fcac5488ba984fd4a7112a774260b34d", + "tooltip": "" + } + }, + "c44385a5daa84c2d91194417e05b50e1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "f1a0220986014be4a5cbad3ca9055b35": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Oracle", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_359a198022d54b698bcce7fc7180b189", + "style": "IPY_MODEL_23c5f03881ef457288b1bb3e2e0aa17a", + "tooltip": "" + } + }, + "f42bdb19ded646978265747a7ac8862c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fcac5488ba984fd4a7112a774260b34d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/grover.ipynb b/translations/ja/ch-algorithms/grover.ipynb new file mode 100644 index 0000000..8f971d0 --- /dev/null +++ b/translations/ja/ch-algorithms/grover.ipynb @@ -0,0 +1,1520 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# グローバーのアルゴリズム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセクションでは、グローバーのアルゴリズムの紹介と、それを使用して非構造化検索の問題を解決する方法を紹介します。 次に、Qiskitを使用して量子アルゴリズムを実装し、シミュレーターとデバイスで実行します。\n", + "\n", + "\n", + "## 目次\n", + "\n", + "1. [はじめに](#introduction)\n", + "2. [例: 2量子ビットの場合](#2qubits) \n", + " 2.1 [シミュレーション](#2qubits-simulation) \n", + " 2.2 [量子デバイス](#2qubits-device) \n", + "3. [例: 3量子ビットの場合](#3qubits) \n", + " 3.1 [シミュレーション](#3qubits-simulation) \n", + " 3.2 [量子デバイス](#3qubits-device) \n", + "4. [演習](#problems)\n", + "5. [グローバーのルゴリズムを使って数独を解く](#sudoku)\n", + "5. [リファレンス](#references)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "古典コンピューターを凌駕する量子コンピューターの数あるアドバンテージの1つに、データベース検索を高速に行えるというのを聞いたことがあるかも知れません。Groverのアルゴリズムはこの能力を実証します。Groverのアルゴリズムは、非構造化データの検索問題に対して二次のオーダーの高速化ができるだけではなく、検索問題以外にも利用することができます。つまり、その他様々のアルゴリズムの実行時間を二次のオーダーで改善する一般的なテクニック、もしくはサブルーチンとして利用することができます。これは振幅増幅テクニックと呼ばれています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 非構造化データの検索\n", + "\n", + "$N$個の大きなアイテムリストがあるとします。その中で、一つだけアタリ$w$があるとします。リスト内の各アイテムを特定の色のボックスと考えてください。 紫のアタリ$w$を除いて、リスト内のすべてのアイテムが灰色であるとします。\n", + "\n", + "![image1](images/grover_list.png)\n", + "\n", + "紫のアタリの箱(*マークのついたアイテム*)を見つけるためには、古典計算では平均で $N/2$ 個の箱を探す必要があります。 最悪の場合は、$N$ 個探す必要があります。ところが、量子コンピューターでは、グローバーの振幅増幅のテクニックを使って、 おおよそ $\\sqrt N$ ステップでマークされたアイテムを探し出すことができます。 二次の高速化は、大きなリスト内のマークされたアイテムを探すためには実際の所、大きな時間の節約になります。 さらに、このアルゴリズムはリスト自体の内部構造を利用しないので、*一般化*することができ、多くの古典の問題でも二次の速度向上をもたらしてくれます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### オラクルの作成\n", + "\n", + "この教科書の例では、「データベース」は、量子ビットが存在する可能性のあるすべての計算基底の状態で構成されています。例えば、3量子ビットの場合、リストは状態$|000\\rangle, |001\\rangle, \\dots |111\\rangle$ です。(つまり、状態$|0\\rangle \\rightarrow |7\\rangle$ です。)\n", + "\n", + "グローバーのアルゴリズムは、解となる状態に負の位相を追加するオラクルを解きます。 つまり 計算基底の任意の状態 $|x\\rangle$ において:\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle = \\bigg\\{\n", + "\\begin{aligned}\n", + "\\phantom{-}|x\\rangle \\quad \\text{if} \\; x \\neq \\omega \\\\\n", + "-|x\\rangle \\quad \\text{if} \\; x = \\omega \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "このオラクルは、対角行列になり、マークのついたアイテムに対応する要素は負の位相を持ちます。例えば、3量子ビットで$\\omega = \\text{101}$のとき、オラクルは以下の行列になります:\n", + "\n", + "$$\n", + "U_\\omega = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & -1 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\\n", + "\\end{bmatrix}\n", + "\\begin{aligned}\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\leftarrow \\omega = \\text{101}\\\\\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "\n", + "グローバーのアルゴリズムを非常に強力にしているのは、問題をこの形のオラクルに変換するのがとても簡単だからです。解を _見つける_ のは難しいけれども、解を _検証_ するのは比較的簡単な計算上の問題はたくさんあります。例えば、すべてのルールが満たされていることを確認することで、[数独](https://en.wikipedia.org/wiki/Sudoku)の解を簡単に確認できます。このような問題に対しては、提案された解$x$を取る関数 $f$で、$x$が解でない場合 ($x \\neq \\omega$)は$f(x) = 0$を返し、正しい解 の場合($x = \\omega$)は、$f(x) = 1$を返すような関数を作成できます。このようなオラクルは次のように書くことができます:\n", + "\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle = (-1)^{f(x)}|x\\rangle\n", + "$$\n", + "\n", + "そして、このオラクルの行列は対角行列で以下のような形をしています:\n", + "\n", + "$$\n", + "U_\\omega = \n", + "\\begin{bmatrix}\n", + "(-1)^{f(0)} & 0 & \\cdots & 0 \\\\\n", + "0 & (-1)^{f(1)} & \\cdots & 0 \\\\\n", + "\\vdots & 0 & \\ddots & \\vdots \\\\\n", + "0 & 0 & \\cdots & (-1)^{f(2^n)} \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "
\n", + " グローバーのオラクルの回路の構築(クリックして展開)\n", + "

\n", + "古典的な関数$f(x)$がある場合に、以下のような形の可逆な回路に変換できます:\n", + "

\n", + "\"A\n", + "

\n", + "「出力」量子ビットを$|{-}\\rangle$の状態に初期化すると、位相キックバックにより、これがグローバーのオラクルに変わります(ドイチ・ジョサのオラクルの動作と同じです):\n", + "

\n", + "\"Grover\n", + "

\n", + "補助量子ビット ($|{-}\\rangle$)は無視します。\n", + "

\n", + "
\n", + "\n", + "この章の次のパートでは、アルゴリズムのコアとなる概念を教えることを目指しています。事前に $\\omega$が分かっているオラクルの例を作成するので、これらのオラクルが役立つかどうかを気にする必要はありません。この章の終わりに、ある問題(数独)を解くオラクルを作成する例を取り上げます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 振幅増幅\n", + "\n", + "では、アルゴリズムはどのように動作するのでしょう?リストを調べる前は、私たちはマークされたアイテムがどこにあるのか知りません。従って、私たちの推測は、この式で表される均一な重ね合わせ状態での位置特定と大差ありません: $|s \\rangle = \\frac{1}{\\sqrt{N}} \\sum_{x = 0}^{N -1} | x\n", + "\\rangle.$ \n", + "\n", + "もしこの時点で標準基底 $\\{ | x \\rangle \\}$でこの重ね合わせ状態を測定した場合、5番目の量子法則に従って、 $\\frac{1}{N} = \\frac{1}{2^n}$の確率で、標準基底のうちの一つに収束します。予想通り、正しい$w$ を当てる確率は$2^n$ のうちの1つです。従って、正しいアイテムを推測するには、平均$N = 2^n$回トライする必要があります。\n", + "\n", + "そこで振幅増幅と呼ばれる処理を加えましょう。この処理により、量子コンピューターが正しいアイテムを見つける確率を大幅に高めることが出来ます。この処理では、マークされたアイテムの振幅を増幅し、その他のアイテムの振幅を小さくします。この結果、最終状態を測定すると、正しいアイテムをほぼ確実に取り出すことができるようになります。\n", + "\n", + "このアルゴリズムには2つの反転という面白い幾何学的解釈があり、2次元平面での回転として表せます。私たちが考慮すべきは、アタリ$| w \\rangle$と均一な重ね合わせ状態$| s \\rangle$ の2つの特別な状態のみです。この2つのベクトルは、ベクトル空間 $\\mathbb{C}^N.$ において、2次元の平面を張ります。$| w \\rangle$ 状態は、$N^{-1/2}$ の振幅で重ね合わせ状態に入っているため、これら2つのベクトルは完全に直交しているわけではありません。しかし、$|s \\rangle$ から $| w \\rangle$ を削除し、正規化し直す事で$| w \\rangle$ に直交する追加の状態 $|s'\\rangle$ を導入することができます\n", + "\n", + "**Step 1**: 振幅増幅は均一な重ね合わせ状態 $| s \\rangle$ から開始します。均一な重ね合わせ状態は、 $| s \\rangle = H^{\\otimes n} | 0 \\rangle^n$により簡単に作成できます。\n", + "\n", + "![image2](images/grover_step1.jpg)\n", + "\n", + "\n", + "左の図は、$|w\\rangle$ と $|s'\\rangle$ によって張られる、2次元平面に対応しています。初期状態が$|s\\rangle = \\sin \\theta | w \\rangle + \\cos \\theta | s' \\rangle$(ここで$\\theta = \\arcsin \\langle s | w \\rangle = \\arcsin \\frac{1}{\\sqrt{N}}$ )で表されます。\n", + "右の図は、$N = 2^2 = 4$の場合の、状態 $| s \\rangle$の振幅を表す棒グラフです。振幅の平均値は破線で示されています。\n", + "\n", + "**Step 2**: 反転のオラクル $U_f$ を状態$|s\\rangle$に適用します。\n", + "\n", + "![image3](images/grover_step2.jpg)\n", + "\n", + "幾何学的には、状態 $|s\\rangle$ を$|s'\\rangle$ に対して反転させることに対応しています。この変換が意味することは、$|w\\rangle$の状態の振幅が負の値になるということで、結果として平均振幅が低くなることを意味しています。(訳注:右側のグラフで破線が下がっていることに着目してください)。\n", + "\n", + "**Step 3**: 次に、$|s\\rangle$ に対する追加の反転 ($U_s$) を適用します:$U_s = 2|s\\rangle\\langle s| - \\mathbb{1}$. この変換の結果、状態は$U_s U_f| s \\rangle$ となり、変換 が完了します。(訳注:右側のグラフでwに対応する振幅が増幅されていることに着目してください)。\n", + "\n", + "![image4](images/grover_step3.jpg)\n", + "\n", + "\n", + "2つの反転は常に回転と対応しています。$U_s U_f$ による変換は、初期状態 $|s\\rangle$ をアタリ$|w\\rangle$ に近づけるような回転となります。(訳注:step 3の左側の図を参照)。$U_s$ による反転の効果は、振幅の棒グラフにおいて、平均振幅での反転と解釈できます。最初の反転で平均振幅の値が低くなったので、この変換は、負の振幅をもった $|w\\rangle$ をオリジナルの値から大雑把にいって約3倍程度増幅し、他の振幅は小さくします。その後、**step 2** に戻ってこれを繰り返します。アタリ $w$に近くなるまで、この処理を何回か繰り返します。\n", + "\n", + "\n", + "$t$ 回繰り返した後、状態は $| \\psi_t \\rangle = (U_s U_f)^t | s \\rangle$に変換されます。\n", + "\n", + "\n", + "回転を何回適用する必要があるでしょうか? おおよそ$\\sqrt{N}$ 回転で十分なことが分かっています。これは、状態 $| \\psi \\rangle$ の振幅を調べることで明確になります。$| w \\rangle$ の振幅が適用回数と共に線型的($\\sim t N^{-1/2}$)に増えていくことが見てとれます。確率ではなく振幅を扱っているので、ベクトル空間の値には平方根として入ります。そのため、この処理で増幅されるのは、ただの確率ではなく振幅です。\n", + "\n", + "もし解が複数、$M$個ある場合、おおよそ $\\sqrt{(N/M)}$ 回転で十分なことが分かっています。\n", + "\n", + "\n", + "![image5](images/grover_circuit_high_level.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 例: 2量子ビットの場合 \n", + "\n", + "では、 2量子ビットの場合の$N=4$のグローバーのアルゴリズムをみてみましょう。このケースでは、初期状態$|s\\rangle$をアタリ$|w\\rangle$にするために必要な回転は1回転です[3]:\n", + "\n", + "
    \n", + "
  1. \n", + " 上の導入に従って、$N=4$ の場合、\n", + "\n", + "$$\\theta = \\arcsin \\frac{1}{2} = \\frac{\\pi}{6}.$$\n", + "\n", + "
  2. \n", + "
  3. \n", + " $t$ 回の繰り返しの後、以下のようになります。 $$(U_s U_\\omega)^t | s \\rangle = \\sin \\theta_t | \\omega \\rangle + \\cos \\theta_t | s' \\rangle ,$$ここで $$\\theta_t = (2t+1)\\theta.$$\n", + "\n", + "
  4. \n", + "
  5. \n", + " $| \\omega \\rangle$を得るためには$\\theta_t = \\frac{\\pi}{2}$である必要があり、よって$\\theta=\\frac{\\pi}{6}$を上記の例に入れると $t=1$となります。つまり、 $t=1$回の回転後に、求めている要素が見つかると言うことです。\n", + "
  6. \n", + "
\n", + "\n", + "次にある特定のオラクルを使った例を示します。\n", + "\n", + "#### $\\lvert \\omega \\rangle = \\lvert 11 \\rangle$のオラクル\n", + "$\\lvert w \\rangle = \\lvert 11 \\rangle$の場合を見てみましょう。この場合のオラクル $U_\\omega$は以下のように振舞います:\n", + "\n", + "$$U_\\omega | s \\rangle = U_\\omega \\frac{1}{2}\\left( |00\\rangle + |01\\rangle + |10\\rangle + |11\\rangle \\right) = \\frac{1}{2}\\left( |00\\rangle + |01\\rangle + |10\\rangle - |11\\rangle \\right).$$\n", + "\n", + "または:\n", + "\n", + "$$\n", + "U_\\omega = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & -1 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "これは、制御Zゲートということが分かります。つまり、この例では、オラクルは制御Zゲートのみで作られます:\n", + "\n", + "![image6](images/grover_circuit_2qbuits_oracle_11.svg)\n", + "\n", + "#### 反転 $U_s$\n", + "回路を完成させるには、反転$U_s = 2|s\\rangle\\langle s| - \\mathbb{1}$を追加する必要があります。これは$|s\\rangle$に関する反転であるため、$|s\\rangle$に直交するすべての状態に負の位相を追加します。\n", + "\n", + "これを行う1つの方法は、状態を$|s\\rangle \\rightarrow |0\\rangle$に変換する操作を使用することです。これは、各量子ビットにアダマールゲートを適用することで実装できます。\n", + "\n", + "$$H^{\\otimes n}|s\\rangle = |0\\rangle$$\n", + "\n", + "次に、$|0\\rangle$に直行する状態に負の位相を追加する回路を適用します:\n", + "\n", + "$$U_0 \\frac{1}{2}\\left( \\lvert 00 \\rangle + \\lvert 01 \\rangle + \\lvert 10 \\rangle + \\lvert 11 \\rangle \\right) = \\frac{1}{2}\\left( \\lvert 00 \\rangle - \\lvert 01 \\rangle - \\lvert 10 \\rangle - \\lvert 11 \\rangle \\right)$$\n", + "\n", + "つまり、$\\lvert 00 \\rangle$を除いて、各状態の符号が反転します。 簡単に確認するために、$U_0$を実装する1つの方法を以下に示します:\n", + "\n", + "![Circuit for reflection around |0>](images/grover_circuit_2qbuits_reflection_0.svg)\n", + "\n", + "最後に、状態を$|0\\rangle \\rightarrow |s\\rangle$ に変換する操作を実行します(再びHゲートを使います):\n", + "\n", + "$$H^{\\otimes n}U_0 H^{\\otimes n} = U_s$$\n", + "\n", + "$U_s$ の回路の完成形は以下のようになります:\n", + "\n", + "![Circuit for reflection around |s>](images/grover_circuit_2qbuits_reflection.svg)\n", + "\n", + "\n", + "#### $\\lvert w \\rangle = |11\\rangle$の場合の全体の回路\n", + "$N=4$の特定のケースでは、必要な回転は1回のみなので、上記のコンポーネントを組み合わせて、$\\lvert w \\rangle = |11\\rangle$の場合のグローバーのアルゴリズムの全体の回路を構築できます:\n", + "\n", + "![image10](images/grover_circuit_2qubits_full_11.svg)\n", + "\n", + "### 2.1 Qiskitでの実装\n", + "\n", + "上記の$\\lvert w \\rangle = |11\\rangle$の場合の2量子ビットの例について、グローバーのアルゴリズムを実装します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# 初期化\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "# Qiskitをインポート\n", + "from qiskit import IBMQ, Aer, assemble, transpile\n", + "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", + "from qiskit.providers.ibmq import least_busy\n", + "\n", + "# 基本的な描画ツールをインポート\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず、2量子ビット回路を用意します:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "n = 2\n", + "grover_circuit = QuantumCircuit(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "あとは、上記の回路のコマンドを書き出すだけです。 まず、状態を$|s\\rangle$に初期化する必要があります。 (任意の数の量子ビットに対して)後で再び使用できるように、一般的な関数を作成しましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def initialize_s(qc, qubits):\n", + " \"\"\"qcの 'qubits' にH-gate を適用\"\"\"\n", + " for q in qubits:\n", + " qc.h(q)\n", + " return qc" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grover_circuit = initialize_s(grover_circuit, [0,1])\n", + "grover_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|w\\rangle = |11\\rangle$のためのオラクルを適用します。 このオラクルは2量子ビットに固有のものです。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grover_circuit.cz(0,1) # オラクル\n", + "grover_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、Diffuser($U_s$)を適用します。 $|s\\rangle$に初期化する回路と同様に、後で他の問題で使用できるように、一般的なDiffuser(任意の数の量子ビット用)を作成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Diffusion operator (U_s)\n", + "grover_circuit.h([0,1])\n", + "grover_circuit.z([0,1])\n", + "grover_circuit.cz(0,1)\n", + "grover_circuit.h([0,1])\n", + "grover_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで回路が完成しました。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.1 シミュレーターでの実験 \n", + "\n", + "シミュレーションで回路を実行してみましょう。 まず、正しい状態ベクトルかどうかを確認します:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "$$ |\\psi\\rangle =\\begin{bmatrix}\n", + "0 \\\\\n", + "0 \\\\\n", + "0 \\\\\n", + "1\\end{bmatrix} $" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sim = Aer.get_backend('aer_simulator')\n", + "# we need to make a copy of the circuit with the 'save_statevector'\n", + "# instruction to run on the Aer simulator\n", + "grover_circuit_sim = grover_circuit.copy()\n", + "grover_circuit_sim.save_statevector()\n", + "qobj = assemble(grover_circuit_sim)\n", + "result = sim.run(qobj).result()\n", + "statevec = result.get_statevector()\n", + "from qiskit_textbook.tools import vector2latex\n", + "vector2latex(statevec, pretext=\"|\\\\psi\\\\rangle =\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "予想どおり、$|11\\rangle$以外のすべての状態の振幅は0です。これは、$|11\\rangle$を測定する可能性が100%であることを意味します:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grover_circuit.measure_all()\n", + "\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "qobj = assemble(grover_circuit)\n", + "result = aer_sim.run(qobj).result()\n", + "counts = result.get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.2 実機での実験 \n", + "\n", + "実デバイスでは回路を以下のようにして実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/anaconda3/lib/python3.7/site-packages/qiskit/providers/ibmq/ibmqfactory.py:192: UserWarning: Timestamps in IBMQ backend properties, jobs, and job results are all now in local time instead of UTC.\n", + " warnings.warn('Timestamps in IBMQ backend properties, jobs, and job results '\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running on current least busy device: ibmq_burlington\n" + ] + } + ], + "source": [ + "# IBM Qアカウントをロードして、最も空いているバックエンドデバイスの情報を得ます。\n", + "provider = IBMQ.load_account()\n", + "provider = IBMQ.get_provider(\"ibm-q\")\n", + "device = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 3 and \n", + " not x.configuration().simulator and x.status().operational==True))\n", + "print(\"Running on current least busy device: \", device)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# 最も空いているバックエンドで回路を実行します。キュー内のジョブの実行をモニターします。\n", + "from qiskit.tools.monitor import job_monitor\n", + "transpiled_grover_circuit = transpile(grover_circuit, device, optimization_level=3)\n", + "job = device.run(transpiled_grover_circuit)\n", + "job_monitor(job, interval=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 計算結果を得ます\n", + "results = job.result()\n", + "answer = results.get_counts(grover_circuit)\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ほとんどの場合で、状態$|11\\rangle$が測定されていることが確認できます。$|11\\rangle$以外の結果は、量子計算のエラーによるものです。\n", + "\n", + "## 3. 例:3量子ビットの場合 \n", + "\n", + "3量子ビットのグローバーのアルゴリズムについて、2つのマークされた状態$\\lvert101\\rangle$と$\\lvert110\\rangle$を持つ例を参考文献[2]にある実装に従って見ていきます。\n", + "フェーズオラクルを使用して問題を解決するための量子回路は次のとおりです:\n", + "\n", + "![image11](images/grover_circuit_3qubits.png)\n", + "\n", + "
    \n", + "
  1. \n", + " $\\lvert000\\rangle$で初期化された3量子ビットにアダマールゲートを適用して、均一な重ね合わせを作成します:\n", + " $$\\lvert \\psi_1 \\rangle = \\frac{1}{\\sqrt{8}} \\left( \n", + " \\lvert000\\rangle + \\lvert001\\rangle + \\lvert010\\rangle + \\lvert011\\rangle + \n", + " \\lvert100\\rangle + \\lvert101\\rangle + \\lvert110\\rangle + \\lvert111\\rangle \\right) $$\n", + "
  2. \n", + "\n", + "
  3. \n", + " $\\lvert101\\rangle$ と $\\lvert110\\rangle$にフェーズオラクルを使って印をつけます:\n", + " $$\\lvert \\psi_2 \\rangle = \\frac{1}{\\sqrt{8}} \\left( \n", + " \\lvert000\\rangle + \\lvert001\\rangle + \\lvert010\\rangle + \\lvert011\\rangle + \n", + " \\lvert100\\rangle - \\lvert101\\rangle - \\lvert110\\rangle + \\lvert111\\rangle \\right) $$\n", + "
  4. \n", + "\n", + "
  5. \n", + " 平均振幅の周りで反転を行います:\n", + " \n", + "
      \n", + "
    1. アダマールゲートをかけます\n", + " $$\\lvert \\psi_{3a} \\rangle = \\frac{1}{2} \\left( \n", + " \\lvert000\\rangle +\\lvert011\\rangle +\\lvert100\\rangle -\\lvert111\\rangle \\right) $$\n", + "
    2. \n", + " \n", + "
    3. Xゲートをかけます\n", + " $$\\lvert \\psi_{3b} \\rangle = \\frac{1}{2} \\left( \n", + " -\\lvert000\\rangle +\\lvert011\\rangle +\\lvert100\\rangle +\\lvert111\\rangle \\right) $$\n", + "
    4. \n", + "\n", + "
    5. 制御制御Zをかけます(制御が1,2で標的が3です)\n", + " $$\\lvert \\psi_{3c} \\rangle = \\frac{1}{2} \\left( \n", + " -\\lvert000\\rangle +\\lvert011\\rangle +\\lvert100\\rangle -\\lvert111\\rangle \\right) $$\n", + "
    6. \n", + "
    7. Xゲートをかけます\n", + " $$\\lvert \\psi_{3d} \\rangle = \\frac{1}{2} \\left( \n", + " -\\lvert000\\rangle +\\lvert011\\rangle +\\lvert100\\rangle -\\lvert111\\rangle \\right) $$\n", + "
    8. \n", + "
    9. アダマールゲートをかけます\n", + " $$\\lvert \\psi_{3e} \\rangle = \\frac{1}{\\sqrt{2}} \\left( \n", + " -\\lvert101\\rangle -\\lvert110\\rangle \\right) $$\n", + "
    10. \n", + "
    \n", + "
  6. \n", + "\n", + "
  7. \n", + " $\\lvert101\\rangle$ と $\\lvert110\\rangle$の状態を得るために3量子ビットを測定します。\n", + "
  8. \n", + "
\n", + "\n", + "8個の可能性の中に2つの解があるため、1回の反復(ステップ2と3)を実行するだけでよいことに注意してください。\n", + "\n", + "### 3.1 Qiskit での実装 \n", + "\n", + "では、[上記の例](#3qubits) の$3$量子ビットのグローバーのアルゴリズムを実装し、2つの印のついた状態$\\lvert101\\rangle$ と $\\lvert110\\rangle$を検索します。 注:Qiskitは、この文献とは逆の方向に量子ビットを並べるため、回路が水平方向に反転して表示されていることに注意してください。\n", + "\n", + "状態$\\lvert101\\rangle$ と $\\lvert110\\rangle$に印をつけるフェーズオラクルを作成します(ステップ1)。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(3)\n", + "qc.cz(0, 2)\n", + "qc.cz(1, 2)\n", + "oracle_ex3 = qc.to_gate()\n", + "oracle_ex3.name = \"U$_\\omega$\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前のセクションでは、2量子ビットに固有のDiffuserを使用しました。下のセルでは、任意の数の量子ビット用の一般的なDiffuserを作成します。\n", + "\n", + "
\n", + " 詳細:一般的なDiffuserの作成(クリックして展開)\n", + "\n", + "\n", + "$U_s$を $U_0$から作ることを思い出してください:\n", + "\n", + "$$ U_s = H^{\\otimes n} U_0 H^{\\otimes n} $$\n", + "\n", + "そして、マルチ制御Zゲート ($MCZ$) は状態$|11\\dots 1\\rangle$の位相を反転します:\n", + "\n", + "$$\n", + "MCZ = \n", + "\\begin{bmatrix}\n", + " 1 & 0 & 0 & \\cdots & 0 \\\\\n", + " 0 & 1 & 0 & \\cdots & 0 \\\\\n", + " \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", + " 0 & 0 & 0 & \\cdots & -1 \\\\\n", + "\\end{bmatrix}\n", + "\\begin{aligned}\n", + "\\\\\n", + "\\\\\n", + "\\\\\n", + "\\leftarrow \\text{Add negative phase to} \\; |11\\dots 1\\rangle\\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "各量子ビットにXゲートを適用すると、変換が実行されます:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "|00\\dots 0\\rangle & \\rightarrow |11\\dots 1\\rangle\\\\\n", + "|11\\dots 1\\rangle & \\rightarrow |00\\dots 0\\rangle\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "よって:\n", + "\n", + "$$ U_0 = X^{\\otimes n} (MCZ) X^{\\otimes n} $$\n", + "\n", + "これらの特性を一緒に使用すると、Hゲート、Xゲート、および単一のマルチ制御Zゲートを使用して𝑈𝑠を作成できます:\n", + "\n", + "\n", + "$$ U_s = H^{\\otimes n} U_0 H^{\\otimes n} = H^{\\otimes n} X^{\\otimes n} (MCZ) X^{\\otimes n} H^{\\otimes n} $$\n", + " \n", + "この回路は-1のグローバル位相を追加することに注意してください。\n", + "\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def diffuser(nqubits):\n", + " qc = QuantumCircuit(nqubits)\n", + " # Hゲートで |s> -> |00..0> に変換\n", + " for qubit in range(nqubits):\n", + " qc.h(qubit)\n", + " # Xゲートで |00..0> -> |11..1> に変換\n", + " for qubit in range(nqubits):\n", + " qc.x(qubit)\n", + " # マルチ制御Zゲートをかけます\n", + " qc.h(nqubits-1)\n", + " qc.mct(list(range(nqubits-1)), nqubits-1) # マルチ制御トフォリ\n", + " qc.h(nqubits-1)\n", + " # |11..1> -> |00..0> に変換\n", + " for qubit in range(nqubits):\n", + " qc.x(qubit)\n", + " # |00..0> -> |s> に変換\n", + " for qubit in range(nqubits):\n", + " qc.h(qubit)\n", + " # Diffuserをゲートにします\n", + " U_s = qc.to_gate()\n", + " U_s.name = \"U$_s$\"\n", + " return U_s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、回路を完成させるために、最初の部分で均一な重ね合わせを作成し、最後の部分で測定を入れます。8つの可能性のうちから2つの解を求めるためがあるため、1回の反復を実行するだけでよいことに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n = 3\n", + "grover_circuit = QuantumCircuit(n)\n", + "grover_circuit = initialize_s(grover_circuit, [0,1,2])\n", + "grover_circuit.append(oracle_ex3, [0,1,2])\n", + "grover_circuit.append(diffuser(n), [0,1,2])\n", + "grover_circuit.measure_all()\n", + "grover_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1.1 シミュレーターでの実験 \n", + "\n", + "上記の回路をシミュレーターで実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aer_sim = Aer.get_backend('aer_simulator')\n", + "transpiled_grover_circuit = transpile(grover_circuit, aer_sim)\n", + "qobj = assemble(transpiled_grover_circuit)\n", + "results = aer_sim.run(qobj).result()\n", + "counts = results.get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ご覧のとおり、アルゴリズムは印のついた状態 $\\lvert101\\rangle$と$\\lvert110\\rangle$を検出します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1.2 実デバイスでの実験 \n", + "\n", + "実デバイスでは以下のようにして回路を実行できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmq_valencia\n" + ] + } + ], + "source": [ + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 3 and \n", + " not x.configuration().simulator and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# 最も空いているバックエンドで回路を実行します。キュー内のジョブの実行をモニターします。\n", + "from qiskit.tools.monitor import job_monitor\n", + "transpiled_grover_circuit = transpile(grover_circuit, device, optimization_level=3)\n", + "job = device.run(transpiled_grover_circuit)\n", + "job_monitor(job, interval=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 計算結果を得ます\n", + "results = job.result()\n", + "answer = results.get_counts(grover_circuit)\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(うまくいけば)$\\lvert101\\rangle$ と$\\lvert110\\rangle$を測定する可能性が高くなります。 他の結果は、量子計算のエラーによるものです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 問題 \n", + "\n", + "以下の関数`grover_problem_oracle`は、複数の量子ビット(`n`)と`variant`を取り、n量子ビットのオラクルを返します。 この関数は、同じ `n` と`variant`に対して常に同じオラクルを返します。 `grover_problem_oracle`を呼び出すときに、`print_solutions = True` を設定すると、各Oracleの解を確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit_textbook.problems import grover_problem_oracle\n", + "## 使用例\n", + "n = 4\n", + "oracle = grover_problem_oracle(n, variant=1) # n量子ビットのオラクルの0番目の変数\n", + "qc = QuantumCircuit(n)\n", + "qc.append(oracle, [0,1,2,3])\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. `grover_problem_oracle(4, variant=2)` は4量子ビットを使用していて、1つの解を持ちます。
\n", + " a. この解を測定する確率が90%を超えるには、何回の反復が必要ですか?
\n", + " b. グローバーのアルゴリズムを使用して、この解となる状態を見つけてください。
\n", + " c. 上記の問題1aで計算した反復数をさらに増やすとどうなりますか?それはなぜでしょうか?
\n", + "\n", + "2. 2つの解と4つの量子ビットの場合、解を測定する確率が90%を超えるには、何回の反復が必要ですか。 `grover_problem_oracle(4, variant=1)`を使用して回答をテストしてください(2つの解があります)。\n", + "\n", + "3. 以下を入力とする関数`grover_solver(oracle, iterations)` を作成してください:\n", + " - ゲートとしてのグローバーオラクル(`oracle`)\n", + " - 反復の数(整数)(`iterations`)\n", + " \n", + " その際、'`iterations`'の反復を使用して、'`oracle`' ゲートでグローバーのアルゴリズムを実行する `QuantumCircuit` を返すようにしてください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. グローバーのアルゴリズムで数独を解く \n", + "\n", + "この章でこれまで使われていたオラクルは、事前にその解が分かっているものから作成されています。ここでは、グローバーのアルゴリズムを使用して、事前に解を知らなくても解ける単純な問題を解きます。その問題は2×2のバイナリーの数独で、以下の2つのシンプルなルールに基づいています:\n", + "\n", + "- 同じ値を2回含む列はない\n", + "- 同じ値を2回含む行はない\n", + "\n", + "数独の各正方形を次の図のような変数に割り当てて:\n", + "\n", + "\n", + "![2×2 binary sudoku, with each square allocated to a different variable](images/binary_sudoku.png)\n", + "\n", + "回路にこの数独の解を出力させたいと思います。\n", + "\n", + "グローバーのアルゴリズムを使ってこの問題を解くのは実用的ではありませんが(おそらく頭の中で解決策を見つけることができます!)、この例では、古典的な[決定問題](https://en.wikipedia.org/wiki/Decision_problem)をグローバーのアルゴリズムのオラクルに変換することを示すことが目的です。\n", + "\n", + "\n", + "### 5.1 問題を回路に変換する\n", + "\n", + "この問題を解くためのオラクルを作成したいと考えています。まず、正しい解を特定する回路を作成します。 [計算の原子](../ch-states/atoms-computation.html) の章で量子回路を使用して古典的な加算器を作成した方法と同様に、可変ビットの状態が有効な解であるかどうかをチェックする _古典的な_ 関数を量子回路上に作成する必要があります。\n", + "\n", + "二つの列と行をそれぞれチェックする必要があるため、チェックすべき条件は4つです:\n", + "\n", + "\n", + "```\n", + "v0 ≠ v1 # 上の行をチェック\n", + "v2 ≠ v3 # 下の行をチェック\n", + "v0 ≠ v2 # 左の列をチェック\n", + "v1 ≠ v3 # 右の列をチェック\n", + "```\n", + "\n", + "古典的な(計算基底の)状態を比較していることを忘れないでください。 便宜上、この一連の比較を条項(clause)のlistにまとめます:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "clause_list = [[0,1],\n", + " [0,2],\n", + " [1,3],\n", + " [2,3]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "各変数の値を回路のビットに割り当てます。上記の条項を計算でチェックするために、`XOR` ゲートを使用します(`XOR` ゲートは、[計算の原子](../ch-states/atoms-computation.html) の章で学びました)。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def XOR(qc, a, b, output):\n", + " qc.cx(a, output)\n", + " qc.cx(b, output)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下の回路の`output0`のビットは、`input0 ≠ input1`の場合にのみ反転することを確認してください:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ビットに名前を付けるために別々のレジスタを使用します\n", + "in_qubits = QuantumRegister(2, name='input')\n", + "out_qubit = QuantumRegister(1, name='output')\n", + "qc = QuantumCircuit(in_qubits, out_qubit)\n", + "XOR(qc, in_qubits[0], in_qubits[1], out_qubit)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は、`input0 == input1` かどうかをチェックし、出力を`output0`に格納します。 各条項をチェックするために、`clause_list`のペアごとにこの回路を繰り返し、出力を新しいビットに格納します:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ビットに名前を付けるために別々のレジスタを作成します\n", + "var_qubits = QuantumRegister(4, name='v') # 変数ビット\n", + "clause_qubits = QuantumRegister(4, name='c') # 条項のチェック結果を格納するビット\n", + "\n", + "# 量子回路の作成\n", + "qc = QuantumCircuit(var_qubits, clause_qubits)\n", + "\n", + "# 各条項をチェックするためにXOR ゲートを使います\n", + "i = 0\n", + "for clause in clause_list:\n", + " XOR(qc, clause[0], clause[1], clause_qubits[i])\n", + " i += 1\n", + "\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`v0, v1, v2, v3`の割り当てがこの数独の解である場合、ビット`c0, c1, c2, c3`の最終状態はすべて`1`になります。 チェック回路を完了するには、すべての条項が満たされている場合にのみ、1ビットを`1` にする必要があります。このようにして、1ビットだけを調べて、この割り当てが解決策であるかどうかを確認します。これは、マルチコントロール・トフォリゲートを使用して行うことができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ビットに名前を付けるために別々のレジスタを作成します\n", + "var_qubits = QuantumRegister(4, name='v')\n", + "clause_qubits = QuantumRegister(4, name='c')\n", + "output_qubit = QuantumRegister(1, name='out')\n", + "qc = QuantumCircuit(var_qubits, clause_qubits, output_qubit)\n", + "\n", + "# 条項(clause)の計算\n", + "i = 0\n", + "for clause in clause_list:\n", + " XOR(qc, clause[0], clause[1], clause_qubits[i])\n", + " i += 1\n", + "\n", + "# すべての条項が満たされていたら、'output' ビットを反転\n", + "qc.mct(clause_qubits, output_qubit)\n", + "\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の回路は、ビット`v0`, `v1`, `v2` および `v3`の初期割り当てを入力として受け取り、他のすべてのビットは`0`に初期化する必要があります。回路の実行後、`out0`ビットの状態は、この割り当てが解決策であるかないかを教えてくれます; `out0 = 0`は、この割り当てが解 _ではない_ ことを意味し、`out0 = 1`は、この割り当てが解 _である_ ことを意味します。\n", + "\n", + "**重要:** この先を読み続ける前に、上記の回路を完全に理解し、上の段落で述べたように機能していることを確認しておいてください。\n", + "\n", + "### 5.2 逆計算、そしてオラクルの完了\n", + "\n", + "位相キックバックを使って、このチェック回路をGroverオラクルに変えることができます。 ここまでを要約すると、3つのレジスターがありました:\n", + "\n", + "- 数独変数($x = v_3, v_2, v_1, v_0$)を格納するレジスター\n", + "- 条項(clause)の結果を格納するレジスター(これは状態$|0000\\rangle$で始まり、$|0\\rangle$と略します)\n", + "- チェック回路の出力を格納する1量子ビット($|\\text{out}_0\\rangle$)\n", + "\n", + "オラクルを作成するには、変換を実行するための回路($U_\\omega$)が必要です:\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle|0\\rangle|\\text{out}_0\\rangle = |x\\rangle|0\\rangle|\\text{out}_0\\oplus f(x)\\rangle\n", + "$$\n", + "\n", + "量子ビット`out0`を重ね合わせ状態 $|{-}\\rangle$ に設定すると、次のようになります。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "U_\\omega|x\\rangle|0\\rangle|{-}\\rangle \n", + "&= U_\\omega|x\\rangle|0\\rangle\\otimes\\tfrac{1}{\\sqrt{2}}(|0\\rangle - |1\\rangle)\\\\\n", + "&= |x\\rangle|0\\rangle\\otimes\\tfrac{1}{\\sqrt{2}}(|0\\oplus f(x)\\rangle - |1\\oplus f(x)\\rangle)\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "$f(x) = 0$の場合、以下の状態になります:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "&= |x\\rangle|0\\rangle\\otimes \\tfrac{1}{\\sqrt{2}}(|0\\rangle - |1\\rangle)\\\\\n", + "&= |x\\rangle|0\\rangle|-\\rangle\\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "\n", + "(つまり、変更なしです。)しかし、$f(x) = 1$の場合(つまり$x = \\omega$の場合)、$|{-}\\rangle$の量子ビットに負の位相が導入されます。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "&= \\phantom{-}|x\\rangle|0\\rangle\\otimes\\tfrac{1}{\\sqrt{2}}(|1\\rangle - |0\\rangle)\\\\\n", + "&= \\phantom{-}|x\\rangle|0\\rangle\\otimes -\\tfrac{1}{\\sqrt{2}}(|0\\rangle - |1\\rangle)\\\\\n", + "&= -|x\\rangle|0\\rangle|-\\rangle\\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "これは、状態$|0\\rangle|{-}\\rangle$に2つの補助レジスターを使用して機能するオラクルです:\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle|0\\rangle|{-}\\rangle = \\Bigg\\{\n", + "\\begin{aligned}\n", + "\\phantom{-}|x\\rangle|0\\rangle|-\\rangle \\quad \\text{for} \\; x \\neq \\omega \\\\\n", + "-|x\\rangle|0\\rangle|-\\rangle \\quad \\text{for} \\; x = \\omega \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "チェック回路をGroverオラクルに適合させるには、2番目のレジスタ(`c`)のビットが計算後に常に状態$|0000\\rangle$に戻ることを保証する必要があります。これを行うには、回路の実行後に `c0 = c1 = c2 = c3 = 0`を保証する条項(clause)を計算する回路の部分を繰り返します。このステップを _「逆計算」_ と呼びます。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "var_qubits = QuantumRegister(4, name='v')\n", + "clause_qubits = QuantumRegister(4, name='c')\n", + "output_qubit = QuantumRegister(1, name='out')\n", + "cbits = ClassicalRegister(4, name='cbits')\n", + "qc = QuantumCircuit(var_qubits, clause_qubits, output_qubit, cbits)\n", + "\n", + "def sudoku_oracle(qc, clause_list, clause_qubits):\n", + " # 条項(clause)の計算\n", + " i = 0\n", + " for clause in clause_list:\n", + " XOR(qc, clause[0], clause[1], clause_qubits[i])\n", + " i += 1\n", + "\n", + " # すべての条項が満たされていたら、'output' ビットを反転\n", + " qc.mct(clause_qubits, output_qubit)\n", + "\n", + " # 条項を逆計算して条項のチェックビットを0にリセット\n", + " i = 0\n", + " for clause in clause_list:\n", + " XOR(qc, clause[0], clause[1], clause_qubits[i])\n", + " i += 1\n", + "\n", + "sudoku_oracle(qc, clause_list, clause_qubits)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まとめると、上記の回路は以下の内容を実行します:\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle|0\\rangle|\\text{out}_0\\rangle = \\Bigg\\{\n", + "\\begin{aligned}\n", + "|x\\rangle|0\\rangle|\\text{out}_0\\rangle \\quad \\text{for} \\; x \\neq \\omega \\\\\n", + "|x\\rangle|0\\rangle\\otimes X|\\text{out}_0\\rangle \\quad \\text{for} \\; x = \\omega \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "そして、$|\\text{out}_0\\rangle$の初期状態が$|{-}\\rangle$に等しい場合、以下のようになります:\n", + "\n", + "$$\n", + "U_\\omega|x\\rangle|0\\rangle|{-}\\rangle = \\Bigg\\{\n", + "\\begin{aligned}\n", + "\\phantom{-}|x\\rangle|0\\rangle|-\\rangle \\quad \\text{for} \\; x \\neq \\omega \\\\\n", + "-|x\\rangle|0\\rangle|-\\rangle \\quad \\text{for} \\; x = \\omega \\\\\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.3 アルゴリズム全体\n", + "\n", + "このオラクルをグローバーのアルゴリズムに入れます!" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "var_qubits = QuantumRegister(4, name='v')\n", + "clause_qubits = QuantumRegister(4, name='c')\n", + "output_qubit = QuantumRegister(1, name='out')\n", + "cbits = ClassicalRegister(4, name='cbits')\n", + "qc = QuantumCircuit(var_qubits, clause_qubits, output_qubit, cbits)\n", + "\n", + "# 'out0' を状態 |->に初期化\n", + "qc.initialize([1, -1]/np.sqrt(2), output_qubit)\n", + "\n", + "# 量子ビットを |s> の状態に初期化\n", + "qc.h(var_qubits)\n", + "qc.barrier() # for visual separation\n", + "\n", + "## 最初の反復\n", + "# オラクルの適用\n", + "sudoku_oracle(qc, clause_list, clause_qubits)\n", + "qc.barrier() # for visual separation\n", + "# diffuserを適用\n", + "qc.append(diffuser(4), [0,1,2,3])\n", + "\n", + "## 2回目の反復\n", + "sudoku_oracle(qc, clause_list, clause_qubits)\n", + "qc.barrier() # for visual separation\n", + "# diffuserを適用\n", + "qc.append(diffuser(4), [0,1,2,3])\n", + "\n", + "# 変数の量子ビットを測定\n", + "qc.measure(var_qubits, cbits)\n", + "\n", + "qc.draw(fold=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# シミュレーションして結果をプロットします\n", + "aer_simulator = Aer.get_backend('aer_simulator')\n", + "transpiled_qc = transpile(qc, aer_simulator)\n", + "qobj = assemble(transpiled_qc)\n", + "result = aer_sim.run(qobj).result()\n", + "plot_histogram(result.get_counts())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "他のどのビット文字列よりもはるかに高い測定確率を持つ2つのビット文字列、`0110`と`1001`があります。これらは以下の割り当てに対応します:\n", + "```\n", + "v0 = 0\n", + "v1 = 1\n", + "v2 = 1\n", + "v3 = 0\n", + "```\n", + "と\n", + "```\n", + "v0 = 1\n", + "v1 = 0\n", + "v2 = 0\n", + "v3 = 1\n", + "```\n", + "\n", + "これが私たちの数独の2つの解です!この章の目的は、実際の問題からGroverオラクルを作成する方法を示すことでした。今回の問題はささいなものでしたが、この問題を解くプロセスは任意の決定問題に適用できます(十分に大きさなサイズの回路を使います)。 以上をまとめると、今回の問題を解く手順は次のとおりです:\n", + "\n", + "1. 正しい解を特定する可逆な古典回路を作成する\n", + "2. 位相キックバックと逆計算を使って、この回路をオラクルに変える\n", + "3. グローバーのアルゴリズムを使って、このオラクルを解く" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "1. L. K. Grover (1996), \"A fast quantum mechanical algorithm for database search\", Proceedings of the 28th Annual ACM Symposium on the Theory of Computing (STOC 1996), [doi:10.1145/237814.237866](http://doi.acm.org/10.1145/237814.237866), [arXiv:quant-ph/9605043](https://arxiv.org/abs/quant-ph/9605043)\n", + "2. C. Figgatt, D. Maslov, K. A. Landsman, N. M. Linke, S. Debnath & C. Monroe (2017), \"Complete 3-Qubit Grover search on a programmable quantum computer\", Nature Communications, Vol 8, Art 1918, [doi:10.1038/s41467-017-01904-7](https://doi.org/10.1038/s41467-017-01904-7), [arXiv:1703.10535 ](https://arxiv.org/abs/1703.10535)\n", + "3. I. Chuang & M. Nielsen, \"Quantum Computation and Quantum Information\", Cambridge: Cambridge University Press, 2000." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.15.1',\n", + " 'qiskit-aer': '0.6.1',\n", + " 'qiskit-ignis': '0.4.0',\n", + " 'qiskit-ibmq-provider': '0.8.0',\n", + " 'qiskit-aqua': '0.7.5',\n", + " 'qiskit': '0.20.0'}" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/images/.gitkeep b/translations/ja/ch-algorithms/images/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/translations/ja/ch-algorithms/images/.gitkeep @@ -0,0 +1 @@ + diff --git a/translations/ja/ch-algorithms/images/bernsteinvazirani_steps.jpeg b/translations/ja/ch-algorithms/images/bernsteinvazirani_steps.jpeg new file mode 100644 index 0000000..17b9b41 Binary files /dev/null and b/translations/ja/ch-algorithms/images/bernsteinvazirani_steps.jpeg differ diff --git a/translations/ja/ch-algorithms/images/binary_sudoku.png b/translations/ja/ch-algorithms/images/binary_sudoku.png new file mode 100644 index 0000000..07a162d Binary files /dev/null and b/translations/ja/ch-algorithms/images/binary_sudoku.png differ diff --git a/translations/ja/ch-algorithms/images/bv1.svg b/translations/ja/ch-algorithms/images/bv1.svg new file mode 100644 index 0000000..a476e0f --- /dev/null +++ b/translations/ja/ch-algorithms/images/bv1.svg @@ -0,0 +1,935 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + s + diff --git a/translations/ja/ch-algorithms/images/bv2.svg b/translations/ja/ch-algorithms/images/bv2.svg new file mode 100644 index 0000000..1729c7c --- /dev/null +++ b/translations/ja/ch-algorithms/images/bv2.svg @@ -0,0 +1,685 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/defer_measurement.svg b/translations/ja/ch-algorithms/images/defer_measurement.svg new file mode 100644 index 0000000..5f8928e --- /dev/null +++ b/translations/ja/ch-algorithms/images/defer_measurement.svg @@ -0,0 +1,766 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/deutsch2.jpeg b/translations/ja/ch-algorithms/images/deutsch2.jpeg new file mode 100755 index 0000000..a745ce2 Binary files /dev/null and b/translations/ja/ch-algorithms/images/deutsch2.jpeg differ diff --git a/translations/ja/ch-algorithms/images/deutsch_balanced.png b/translations/ja/ch-algorithms/images/deutsch_balanced.png new file mode 100644 index 0000000..80b9eab Binary files /dev/null and b/translations/ja/ch-algorithms/images/deutsch_balanced.png differ diff --git a/translations/ja/ch-algorithms/images/deutsch_balanced1.svg b/translations/ja/ch-algorithms/images/deutsch_balanced1.svg new file mode 100644 index 0000000..043a0b0 --- /dev/null +++ b/translations/ja/ch-algorithms/images/deutsch_balanced1.svg @@ -0,0 +1,386 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/deutsch_balanced2.svg b/translations/ja/ch-algorithms/images/deutsch_balanced2.svg new file mode 100644 index 0000000..547cbc3 --- /dev/null +++ b/translations/ja/ch-algorithms/images/deutsch_balanced2.svg @@ -0,0 +1,583 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/deutsch_ex1.jpeg b/translations/ja/ch-algorithms/images/deutsch_ex1.jpeg new file mode 100755 index 0000000..af50fe8 Binary files /dev/null and b/translations/ja/ch-algorithms/images/deutsch_ex1.jpeg differ diff --git a/translations/ja/ch-algorithms/images/deutsch_steps.png b/translations/ja/ch-algorithms/images/deutsch_steps.png new file mode 100644 index 0000000..c95082f Binary files /dev/null and b/translations/ja/ch-algorithms/images/deutsch_steps.png differ diff --git a/translations/ja/ch-algorithms/images/fourierbasis-counting.gif b/translations/ja/ch-algorithms/images/fourierbasis-counting.gif new file mode 100644 index 0000000..e198ee1 Binary files /dev/null and b/translations/ja/ch-algorithms/images/fourierbasis-counting.gif differ diff --git a/translations/ja/ch-algorithms/images/grover_algorithm.png b/translations/ja/ch-algorithms/images/grover_algorithm.png new file mode 100644 index 0000000..aa13248 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_algorithm.png differ diff --git a/translations/ja/ch-algorithms/images/grover_boolean_oracle.svg b/translations/ja/ch-algorithms/images/grover_boolean_oracle.svg new file mode 100644 index 0000000..f4fc19c --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_boolean_oracle.svg @@ -0,0 +1,723 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_00.png b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_00.png new file mode 100644 index 0000000..3ce1399 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_00.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_01_10.png b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_01_10.png new file mode 100644 index 0000000..77b5531 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_01_10.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.png b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.png new file mode 100644 index 0000000..7472477 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.svg b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.svg new file mode 100644 index 0000000..6c83871 --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_oracle_11.svg @@ -0,0 +1,309 @@ + + + + + + + + 2020-08-28T11:02:11.469655 + image/svg+xml + + + Matplotlib v3.3.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Oracle + init + diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.png b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.png new file mode 100644 index 0000000..6f3ae5f Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.svg b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.svg new file mode 100644 index 0000000..09920f1 --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection.svg @@ -0,0 +1,358 @@ + + + + + + + + 2020-08-28T11:02:46.843761 + image/svg+xml + + + Matplotlib v3.3.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Diffuser (U + ) + s + diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.png b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.png new file mode 100644 index 0000000..9f2836b Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.svg b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.svg new file mode 100644 index 0000000..868fd7a --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_circuit_2qbuits_reflection_0.svg @@ -0,0 +1,219 @@ + + + + + + + + 2020-08-28T11:02:32.961526 + image/svg+xml + + + Matplotlib v3.3.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reflection U + 0 + diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_00.png b/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_00.png new file mode 100644 index 0000000..91c9c8f Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_00.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_11.svg b/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_11.svg new file mode 100644 index 0000000..6339906 --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_circuit_2qubits_full_11.svg @@ -0,0 +1,590 @@ + + + + + + + + 2020-08-28T11:03:12.892939 + image/svg+xml + + + Matplotlib v3.3.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + init + oracle + diffuser (U + ) + s + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/grover_circuit_3qubits.png b/translations/ja/ch-algorithms/images/grover_circuit_3qubits.png new file mode 100644 index 0000000..c71bfba Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_3qubits.png differ diff --git a/translations/ja/ch-algorithms/images/grover_circuit_high_level.png b/translations/ja/ch-algorithms/images/grover_circuit_high_level.png new file mode 100644 index 0000000..e1f0c3a Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_circuit_high_level.png differ diff --git a/translations/ja/ch-algorithms/images/grover_example.png b/translations/ja/ch-algorithms/images/grover_example.png new file mode 100644 index 0000000..1eb040c Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_example.png differ diff --git a/translations/ja/ch-algorithms/images/grover_list.png b/translations/ja/ch-algorithms/images/grover_list.png new file mode 100644 index 0000000..b0f760f Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_list.png differ diff --git a/translations/ja/ch-algorithms/images/grover_phase_oracle.svg b/translations/ja/ch-algorithms/images/grover_phase_oracle.svg new file mode 100644 index 0000000..aa398ef --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_phase_oracle.svg @@ -0,0 +1,809 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/grover_prob.svg b/translations/ja/ch-algorithms/images/grover_prob.svg new file mode 100644 index 0000000..2459435 --- /dev/null +++ b/translations/ja/ch-algorithms/images/grover_prob.svg @@ -0,0 +1,2090 @@ +]> 020406080100 Probability (%) 000001010011100101110111 Computational basis states \ No newline at end of file diff --git a/translations/ja/ch-algorithms/images/grover_search.png b/translations/ja/ch-algorithms/images/grover_search.png new file mode 100644 index 0000000..11320fe Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_search.png differ diff --git a/translations/ja/ch-algorithms/images/grover_step0.png b/translations/ja/ch-algorithms/images/grover_step0.png new file mode 100755 index 0000000..44d9e99 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step0.png differ diff --git a/translations/ja/ch-algorithms/images/grover_step1.jpg b/translations/ja/ch-algorithms/images/grover_step1.jpg new file mode 100644 index 0000000..f9f5f86 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step1.jpg differ diff --git a/translations/ja/ch-algorithms/images/grover_step1.png b/translations/ja/ch-algorithms/images/grover_step1.png new file mode 100644 index 0000000..44d9e99 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step1.png differ diff --git a/translations/ja/ch-algorithms/images/grover_step2.jpg b/translations/ja/ch-algorithms/images/grover_step2.jpg new file mode 100644 index 0000000..5566398 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step2.jpg differ diff --git a/translations/ja/ch-algorithms/images/grover_step2.png b/translations/ja/ch-algorithms/images/grover_step2.png new file mode 100644 index 0000000..bc8aac5 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step2.png differ diff --git a/translations/ja/ch-algorithms/images/grover_step3.jpg b/translations/ja/ch-algorithms/images/grover_step3.jpg new file mode 100644 index 0000000..518ab12 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step3.jpg differ diff --git a/translations/ja/ch-algorithms/images/grover_step3.png b/translations/ja/ch-algorithms/images/grover_step3.png new file mode 100644 index 0000000..5e46683 Binary files /dev/null and b/translations/ja/ch-algorithms/images/grover_step3.png differ diff --git a/translations/ja/ch-algorithms/images/markov_example.png b/translations/ja/ch-algorithms/images/markov_example.png new file mode 100644 index 0000000..f8272f7 Binary files /dev/null and b/translations/ja/ch-algorithms/images/markov_example.png differ diff --git a/translations/ja/ch-algorithms/images/qft.png b/translations/ja/ch-algorithms/images/qft.png new file mode 100755 index 0000000..a159b2c Binary files /dev/null and b/translations/ja/ch-algorithms/images/qft.png differ diff --git a/translations/ja/ch-algorithms/images/qkd_risk.svg b/translations/ja/ch-algorithms/images/qkd_risk.svg new file mode 100644 index 0000000..3bc00f3 --- /dev/null +++ b/translations/ja/ch-algorithms/images/qkd_risk.svg @@ -0,0 +1,1992 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/qpe.png b/translations/ja/ch-algorithms/images/qpe.png new file mode 100755 index 0000000..59ec2af Binary files /dev/null and b/translations/ja/ch-algorithms/images/qpe.png differ diff --git a/translations/ja/ch-algorithms/images/qpe_intuition.jpg b/translations/ja/ch-algorithms/images/qpe_intuition.jpg new file mode 100644 index 0000000..f2be0ad Binary files /dev/null and b/translations/ja/ch-algorithms/images/qpe_intuition.jpg differ diff --git a/translations/ja/ch-algorithms/images/qpe_intuition.png b/translations/ja/ch-algorithms/images/qpe_intuition.png new file mode 100644 index 0000000..879a94a Binary files /dev/null and b/translations/ja/ch-algorithms/images/qpe_intuition.png differ diff --git a/translations/ja/ch-algorithms/images/qpe_tex.png b/translations/ja/ch-algorithms/images/qpe_tex.png new file mode 100755 index 0000000..2255c72 Binary files /dev/null and b/translations/ja/ch-algorithms/images/qpe_tex.png differ diff --git a/translations/ja/ch-algorithms/images/qpe_tex_qz.png b/translations/ja/ch-algorithms/images/qpe_tex_qz.png new file mode 100755 index 0000000..816cdb6 Binary files /dev/null and b/translations/ja/ch-algorithms/images/qpe_tex_qz.png differ diff --git a/translations/ja/ch-algorithms/images/quantum_counting1.svg b/translations/ja/ch-algorithms/images/quantum_counting1.svg new file mode 100644 index 0000000..185b6a6 --- /dev/null +++ b/translations/ja/ch-algorithms/images/quantum_counting1.svg @@ -0,0 +1,400 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/quantum_counting2.svg b/translations/ja/ch-algorithms/images/quantum_counting2.svg new file mode 100644 index 0000000..f1aa802 --- /dev/null +++ b/translations/ja/ch-algorithms/images/quantum_counting2.svg @@ -0,0 +1,1758 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/quantum_counting3.svg b/translations/ja/ch-algorithms/images/quantum_counting3.svg new file mode 100644 index 0000000..15abb13 --- /dev/null +++ b/translations/ja/ch-algorithms/images/quantum_counting3.svg @@ -0,0 +1,374 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/shor_circuit_1.svg b/translations/ja/ch-algorithms/images/shor_circuit_1.svg new file mode 100644 index 0000000..19b9cc2 --- /dev/null +++ b/translations/ja/ch-algorithms/images/shor_circuit_1.svg @@ -0,0 +1,2372 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-algorithms/images/simon1.jpeg b/translations/ja/ch-algorithms/images/simon1.jpeg new file mode 100755 index 0000000..c4d5739 Binary files /dev/null and b/translations/ja/ch-algorithms/images/simon1.jpeg differ diff --git a/translations/ja/ch-algorithms/images/simon_ex1.jpeg b/translations/ja/ch-algorithms/images/simon_ex1.jpeg new file mode 100755 index 0000000..8618478 Binary files /dev/null and b/translations/ja/ch-algorithms/images/simon_ex1.jpeg differ diff --git a/translations/ja/ch-algorithms/images/simon_ex2.jpeg b/translations/ja/ch-algorithms/images/simon_ex2.jpeg new file mode 100755 index 0000000..2cfffac Binary files /dev/null and b/translations/ja/ch-algorithms/images/simon_ex2.jpeg differ diff --git a/translations/ja/ch-algorithms/images/simon_example.jpeg b/translations/ja/ch-algorithms/images/simon_example.jpeg new file mode 100644 index 0000000..2cfffac Binary files /dev/null and b/translations/ja/ch-algorithms/images/simon_example.jpeg differ diff --git a/translations/ja/ch-algorithms/images/simon_steps.jpeg b/translations/ja/ch-algorithms/images/simon_steps.jpeg new file mode 100644 index 0000000..c4d5739 Binary files /dev/null and b/translations/ja/ch-algorithms/images/simon_steps.jpeg differ diff --git a/translations/ja/ch-algorithms/images/superdense.jpg b/translations/ja/ch-algorithms/images/superdense.jpg new file mode 100644 index 0000000..9469649 Binary files /dev/null and b/translations/ja/ch-algorithms/images/superdense.jpg differ diff --git a/translations/ja/ch-algorithms/images/superdense.png b/translations/ja/ch-algorithms/images/superdense.png new file mode 100644 index 0000000..446650f Binary files /dev/null and b/translations/ja/ch-algorithms/images/superdense.png differ diff --git a/translations/ja/ch-algorithms/images/superdense_table1.png b/translations/ja/ch-algorithms/images/superdense_table1.png new file mode 100644 index 0000000..7d3aad2 Binary files /dev/null and b/translations/ja/ch-algorithms/images/superdense_table1.png differ diff --git a/translations/ja/ch-algorithms/images/superdense_table2.png b/translations/ja/ch-algorithms/images/superdense_table2.png new file mode 100644 index 0000000..62a5512 Binary files /dev/null and b/translations/ja/ch-algorithms/images/superdense_table2.png differ diff --git a/translations/ja/ch-algorithms/images/tele1.jpg b/translations/ja/ch-algorithms/images/tele1.jpg new file mode 100644 index 0000000..64aacc1 Binary files /dev/null and b/translations/ja/ch-algorithms/images/tele1.jpg differ diff --git a/translations/ja/ch-algorithms/images/tele1.png b/translations/ja/ch-algorithms/images/tele1.png new file mode 100644 index 0000000..8d5f09c Binary files /dev/null and b/translations/ja/ch-algorithms/images/tele1.png differ diff --git a/translations/ja/ch-algorithms/images/teleportation-labeled.png b/translations/ja/ch-algorithms/images/teleportation-labeled.png new file mode 100644 index 0000000..71b6596 Binary files /dev/null and b/translations/ja/ch-algorithms/images/teleportation-labeled.png differ diff --git a/translations/ja/ch-algorithms/images/teleportation-transformation.png b/translations/ja/ch-algorithms/images/teleportation-transformation.png new file mode 100644 index 0000000..4da4554 Binary files /dev/null and b/translations/ja/ch-algorithms/images/teleportation-transformation.png differ diff --git a/translations/ja/ch-algorithms/images/vazirani1.jpeg b/translations/ja/ch-algorithms/images/vazirani1.jpeg new file mode 100755 index 0000000..17b9b41 Binary files /dev/null and b/translations/ja/ch-algorithms/images/vazirani1.jpeg differ diff --git a/translations/ja/ch-algorithms/images/vazirani_ex1.jpeg b/translations/ja/ch-algorithms/images/vazirani_ex1.jpeg new file mode 100755 index 0000000..e355343 Binary files /dev/null and b/translations/ja/ch-algorithms/images/vazirani_ex1.jpeg differ diff --git a/translations/ja/ch-algorithms/images/vqe-labeled.png b/translations/ja/ch-algorithms/images/vqe-labeled.png new file mode 100644 index 0000000..f4f0456 Binary files /dev/null and b/translations/ja/ch-algorithms/images/vqe-labeled.png differ diff --git a/translations/ja/ch-algorithms/images/zbasis-counting.gif b/translations/ja/ch-algorithms/images/zbasis-counting.gif new file mode 100644 index 0000000..359c55d Binary files /dev/null and b/translations/ja/ch-algorithms/images/zbasis-counting.gif differ diff --git a/translations/ja/ch-algorithms/index.md b/translations/ja/ch-algorithms/index.md new file mode 100644 index 0000000..9bd9835 --- /dev/null +++ b/translations/ja/ch-algorithms/index.md @@ -0,0 +1,9 @@ +# このセクションについて + +これまでの章で、量子コンピューティングの基本を説明できたので、量子プロトコルとアルゴリズムを紹介する準備が整いました。これから紹介するアルゴリズムを通じて、前章の概念が実際に動作していることを確認し、また、新しいアイデアと手法を学びます。あなたが学ぶ最初のアルゴリズムのいくつかは、量子コンピューターの利点を実証するために開発された概念実証型のアルゴリズムです。これは、学び始めるのに最適なアルゴリズムで、後に量子コンピューティング界に興奮を巻き起こした「有用な」アルゴリズムに適応された技術です。それらは私たちが最も単純な形で核となるアイデアに取り組むことを可能にします。 概念実証型のアルゴリズムは、ハードウェアをテストする際のベンチマークとしても役立ちます。 + +# 今後の予定 + +現在、テキストブックに追加するために以下のトピックを開発中です。 + +- NISQハードウェアのための量子アルゴリズムの概要 diff --git a/translations/ja/ch-algorithms/quantum-counting.ipynb b/translations/ja/ch-algorithms/quantum-counting.ipynb new file mode 100644 index 0000000..c476353 --- /dev/null +++ b/translations/ja/ch-algorithms/quantum-counting.ipynb @@ -0,0 +1,773 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子数え上げ" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このアルゴリズムを理解するためには、最初にグローバーのアルゴリズムと量子位相推定アルゴリズムの両方を理解することは大切なことです。グローバーアルゴリズムがオラクルの解を見つけようとするのに対し、量子数え上げのアルゴリズムは、この問題の解の数を見つけます。このアルゴリズムは量子探索アルゴリズムと量子位相推定アルゴリズムの両方を結びつけるので、大変興味深いものです。\n", + "\n", + "\n", + "## 目次\n", + "\n", + "1. [概要](#overview) \n", + " 1.1 [知識](#intuition) \n", + " 1.2 [より詳しく見る](#closer_look) \n", + "2. [コード](#code) \n", + " 2.1 [コードの初期化](#init_code) \n", + " 2.2 [制御グローバ探索の反復](#cont_grover) \n", + " 2.3 [逆量子フーリエ変換](#inv_qft) \n", + " 2.4 [合わせてみましょう!](#putting_together) \n", + "3. [シミュレーション](#simulating) \n", + "4. [解の数(M)を見つける](#finding_m)\n", + "5. [練習問題](#exercises)\n", + "6. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 概要" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 知識" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "グローバー探索の反復の固有値を見つけるために量子位相推定アルゴリズムを使います。グローバー探索の反復演算$G$は、$|\\omega\\rangle$、$|s'\\rangle$基底で、状態ベクトルを$\\theta$回転させるものであることを覚えているでしょう。:\n", + "\n", + "![image1](images/quantum_counting1.svg)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "探索空間の解の数の割合は$|s\\rangle$と$|s’\\rangle$の違いに依存します。例えば、もしたくさんの解がないならば、基底$|s\\rangle$は基底$|s’\\rangle$に近く、そして角度$\\theta$ はとても小さいでしょう。グローバーの反復の固有値は$e^{\\pm i\\theta}$であることが分かり、量子位相推定を使って、解の数($M$)を推定します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 より詳しく見る " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|\\omega\\rangle$、$|s'\\rangle$ 基底で、グローバー反復演算は以下の行列で書き表せます。:\n", + "\n", + "$$\n", + "G =\n", + "\\begin{pmatrix}\n", + "\\cos{\\theta} && -\\sin{\\theta}\\\\\n", + "\\sin{\\theta} && \\cos{\\theta}\n", + "\\end{pmatrix}\n", + "$$\n", + "\n", + "行列$G$は以下の固有ベクトルを持ちます。:\n", + "\n", + "$$\n", + "\\begin{pmatrix}\n", + "-i\\\\\n", + "1\n", + "\\end{pmatrix}\n", + ",\n", + "\\begin{pmatrix}\n", + "i\\\\\n", + "1\n", + "\\end{pmatrix}\n", + "$$\n", + "\n", + "前述の通り、固有値は$e^{\\pm i\\theta}$です。幸運なことに、$|s\\rangle$の状態は、$|\\omega\\rangle$と$|s’\\rangle$で張られている空間にあるため、$|s\\rangle$は以下のように2つのベクトルの重ね合わせとなります。\n", + "\n", + "$$\n", + "|s\\rangle = \\alpha |\\omega\\rangle + \\beta|s'\\rangle\n", + "$$\n", + "\n", + "その結果、QPEアルゴリズムの出力は2つの位相の重ね合わせになり、レジスターを測定すると、これら2つの値のいずれかが得られます!次に、いくつかの簡単な数学を使用して、$𝑀$の推定値を取得できます。\n", + "\n", + "![image2](images/quantum_counting2.svg)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. コード " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 コードの初期化 \n", + "\n", + "最初に、ここで必要なものを全てインポートしましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import math\n", + "\n", + "# importing Qiskit\n", + "import qiskit\n", + "from qiskit import QuantumCircuit, transpile, assemble, Aer\n", + "\n", + "# import basic plot tools\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このガイドでは、回路の最初の4量子ビットをカウントし(カウント量子ビットの数を$t$と呼ぶため、$t=4$)、最後の4量子ビットを「探索」します($n=4$)。これを使って、回路の構成ブロックを作ります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 制御グローバー探索の反復" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "グローバーのアルゴリズムの章で、既に「グローバー反復」を扱いました。これは、拡散オペレーターが組み込まれた、16の状態($N = 2^n = 16$)のうち5つの解($M = 5$) をもつオラクルの例です。:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def example_grover_iteration():\n", + " \"\"\"Small circuit with 5/16 solutions\"\"\"\n", + " # 回路を作る\n", + " qc = QuantumCircuit(4)\n", + " # オラクル\n", + " qc.h([2,3])\n", + " qc.ccx(0,1,2)\n", + " qc.h(2)\n", + " qc.x(2)\n", + " qc.ccx(0,2,3)\n", + " qc.x(2)\n", + " qc.h(3)\n", + " qc.x([1,3])\n", + " qc.h(2)\n", + " qc.mct([0,1,3],2)\n", + " qc.x([1,3])\n", + " qc.h(2)\n", + " # 拡散\n", + " qc.h(range(3))\n", + " qc.x(range(3))\n", + " qc.z(3)\n", + " qc.mct([0,1,2],3)\n", + " qc.x(range(3))\n", + " qc.h(range(3))\n", + " qc.z(3)\n", + " return qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Python関数は入力を受け取らず、4量子ビットの`QuantumCircuit`オブジェクトを返すことに注意してください。過去にあなたが作った関数は既存の回路を変更するものだったかもしれませんが、この関数は QuantumCircuitオブジェクトを単一制御ゲートに変えることができます。\n", + "\n", + "回路から制御ゲートを作り出すために`.to_gate()`と`.control()`を使います。私たちはグローバー反復演算を`grit`と呼び、制御グローバー反復演算を`cgrit`と呼びます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# 制御されたグローバーの作成\n", + "grit = example_grover_iteration().to_gate()\n", + "grit.label = \"Grover\"\n", + "cgrit = grit.control()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 逆量子フーリエ変換\n", + "\n", + "逆量子フーリエ変換を作成する必要があります。このコードは$n$量子ビットのQFTで実装します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def qft(n):\n", + " #n量子ビットのQFT回路を作成\n", + " \"\"\"Creates an n-qubit QFT circuit\"\"\"\n", + " circuit = QuantumCircuit(4)\n", + " def swap_registers(circuit, n):\n", + " for qubit in range(n//2):\n", + " circuit.swap(qubit, n-qubit-1)\n", + " return circuit\n", + " def qft_rotations(circuit, n):\n", + " #swapゲートなしで回路で最初にn量子ビットのQFTを実装する\n", + " \"\"\"Performs qft on the first n qubits in circuit (without swaps)\"\"\"\n", + " if n == 0:\n", + " return circuit\n", + " n -= 1\n", + " circuit.h(n)\n", + " for qubit in range(n):\n", + " circuit.cp(np.pi/2**(n-qubit), qubit, n)\n", + " qft_rotations(circuit, n)\n", + " \n", + " qft_rotations(circuit, n)\n", + " swap_registers(circuit, n)\n", + " return circuit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでも、別の`QuantumCircuit`オブジェクトを返すことを選んだことに注意してください。これは、ゲートを簡単に反転できるようにするためです。\n", + "このガイドで選択したカウント量子ビット数である、$t = 4$量子ビットでゲートを作成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true, + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":17: DeprecationWarning: The QuantumCircuit.cu1 method is deprecated as of 0.16.0. It will be removed no earlier than 3 months after the release date. You should use the QuantumCircuit.cp method instead, which acts identically.\n", + " circuit.cu1(np.pi/2**(n-qubit), qubit, n)\n" + ] + } + ], + "source": [ + "qft_dagger = qft(4).to_gate().inverse()\n", + "qft_dagger.label = \"QFT†\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 合わせてみましょう! \n", + "回路を完成するために必要な全てのものが揃いました。これを全て合わせてみましょう!\n", + "\n", + "最初に、全ての量子ビットを$|+\\rangle$の状態にする必要があります。:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
     ┌───┐┌─────────┐                                                       »\n",
+       "q_0: ┤ H ├┤0        ├───────────────────────────────────────────────────────»\n",
+       "     ├───┤│         │┌─────────┐┌─────────┐                                 »\n",
+       "q_1: ┤ H ├┤         ├┤0        ├┤0        ├─────────────────────────────────»\n",
+       "     ├───┤│         ││         ││         │┌─────────┐┌─────────┐┌─────────┐»\n",
+       "q_2: ┤ H ├┤         ├┤         ├┤         ├┤0        ├┤0        ├┤0        ├»\n",
+       "     ├───┤│         ││         ││         ││         ││         ││         │»\n",
+       "q_3: ┤ H ├┤         ├┤         ├┤         ├┤         ├┤         ├┤         ├»\n",
+       "     ├───┤│  Grover ││         ││         ││         ││         ││         │»\n",
+       "q_4: ┤ H ├┤1        ├┤1 Grover ├┤1 Grover ├┤1        ├┤1        ├┤1        ├»\n",
+       "     ├───┤│         ││         ││         ││  Grover ││  Grover ││  Grover │»\n",
+       "q_5: ┤ H ├┤2        ├┤2        ├┤2        ├┤2        ├┤2        ├┤2        ├»\n",
+       "     ├───┤│         ││         ││         ││         ││         ││         │»\n",
+       "q_6: ┤ H ├┤3        ├┤3        ├┤3        ├┤3        ├┤3        ├┤3        ├»\n",
+       "     ├───┤│         ││         ││         ││         ││         ││         │»\n",
+       "q_7: ┤ H ├┤4        ├┤4        ├┤4        ├┤4        ├┤4        ├┤4        ├»\n",
+       "     └───┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘»\n",
+       "c: 4/═══════════════════════════════════════════════════════════════════════»\n",
+       "                                                                            »\n",
+       "«                                                                       »\n",
+       "«q_0: ──────────────────────────────────────────────────────────────────»\n",
+       "«                                                                       »\n",
+       "«q_1: ──────────────────────────────────────────────────────────────────»\n",
+       "«     ┌─────────┐                                                       »\n",
+       "«q_2: ┤0        ├───────────────────────────────────────────────────────»\n",
+       "«     │         │┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐»\n",
+       "«q_3: ┤         ├┤0        ├┤0        ├┤0        ├┤0        ├┤0        ├»\n",
+       "«     │         ││         ││         ││         ││         ││         │»\n",
+       "«q_4: ┤1        ├┤1        ├┤1        ├┤1        ├┤1        ├┤1        ├»\n",
+       "«     │  Grover ││         ││         ││         ││         ││         │»\n",
+       "«q_5: ┤2        ├┤2 Grover ├┤2 Grover ├┤2 Grover ├┤2 Grover ├┤2 Grover ├»\n",
+       "«     │         ││         ││         ││         ││         ││         │»\n",
+       "«q_6: ┤3        ├┤3        ├┤3        ├┤3        ├┤3        ├┤3        ├»\n",
+       "«     │         ││         ││         ││         ││         ││         │»\n",
+       "«q_7: ┤4        ├┤4        ├┤4        ├┤4        ├┤4        ├┤4        ├»\n",
+       "«     └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘»\n",
+       "«c: 4/══════════════════════════════════════════════════════════════════»\n",
+       "«                                                                       »\n",
+       "«                                      ┌───────┐┌─┐         \n",
+       "«q_0: ─────────────────────────────────┤0      ├┤M├─────────\n",
+       "«                                      │       │└╥┘┌─┐      \n",
+       "«q_1: ─────────────────────────────────┤1      ├─╫─┤M├──────\n",
+       "«                                      │  QFT† │ ║ └╥┘┌─┐   \n",
+       "«q_2: ─────────────────────────────────┤2      ├─╫──╫─┤M├───\n",
+       "«     ┌─────────┐┌─────────┐┌─────────┐│       │ ║  ║ └╥┘┌─┐\n",
+       "«q_3: ┤0        ├┤0        ├┤0        ├┤3      ├─╫──╫──╫─┤M├\n",
+       "«     │         ││         ││         │└───────┘ ║  ║  ║ └╥┘\n",
+       "«q_4: ┤1        ├┤1        ├┤1        ├──────────╫──╫──╫──╫─\n",
+       "«     │         ││         ││         │          ║  ║  ║  ║ \n",
+       "«q_5: ┤2 Grover ├┤2 Grover ├┤2 Grover ├──────────╫──╫──╫──╫─\n",
+       "«     │         ││         ││         │          ║  ║  ║  ║ \n",
+       "«q_6: ┤3        ├┤3        ├┤3        ├──────────╫──╫──╫──╫─\n",
+       "«     │         ││         ││         │          ║  ║  ║  ║ \n",
+       "«q_7: ┤4        ├┤4        ├┤4        ├──────────╫──╫──╫──╫─\n",
+       "«     └─────────┘└─────────┘└─────────┘          ║  ║  ║  ║ \n",
+       "«c: 4/═══════════════════════════════════════════╩══╩══╩══╩═\n",
+       "«                                                0  1  2  3 
" + ], + "text/plain": [ + " ┌───┐┌─────────┐ »\n", + "q_0: ┤ H ├┤0 ├───────────────────────────────────────────────────────»\n", + " ├───┤│ │┌─────────┐┌─────────┐ »\n", + "q_1: ┤ H ├┤ ├┤0 ├┤0 ├─────────────────────────────────»\n", + " ├───┤│ ││ ││ │┌─────────┐┌─────────┐┌─────────┐»\n", + "q_2: ┤ H ├┤ ├┤ ├┤ ├┤0 ├┤0 ├┤0 ├»\n", + " ├───┤│ ││ ││ ││ ││ ││ │»\n", + "q_3: ┤ H ├┤ ├┤ ├┤ ├┤ ├┤ ├┤ ├»\n", + " ├───┤│ Grover ││ ││ ││ ││ ││ │»\n", + "q_4: ┤ H ├┤1 ├┤1 Grover ├┤1 Grover ├┤1 ├┤1 ├┤1 ├»\n", + " ├───┤│ ││ ││ ││ Grover ││ Grover ││ Grover │»\n", + "q_5: ┤ H ├┤2 ├┤2 ├┤2 ├┤2 ├┤2 ├┤2 ├»\n", + " ├───┤│ ││ ││ ││ ││ ││ │»\n", + "q_6: ┤ H ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├»\n", + " ├───┤│ ││ ││ ││ ││ ││ │»\n", + "q_7: ┤ H ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├»\n", + " └───┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘»\n", + "c: 4/═══════════════════════════════════════════════════════════════════════»\n", + " »\n", + "« »\n", + "«q_0: ──────────────────────────────────────────────────────────────────»\n", + "« »\n", + "«q_1: ──────────────────────────────────────────────────────────────────»\n", + "« ┌─────────┐ »\n", + "«q_2: ┤0 ├───────────────────────────────────────────────────────»\n", + "« │ │┌─────────┐┌─────────┐┌─────────┐┌─────────┐┌─────────┐»\n", + "«q_3: ┤ ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├»\n", + "« │ ││ ││ ││ ││ ││ │»\n", + "«q_4: ┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├»\n", + "« │ Grover ││ ││ ││ ││ ││ │»\n", + "«q_5: ┤2 ├┤2 Grover ├┤2 Grover ├┤2 Grover ├┤2 Grover ├┤2 Grover ├»\n", + "« │ ││ ││ ││ ││ ││ │»\n", + "«q_6: ┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├»\n", + "« │ ││ ││ ││ ││ ││ │»\n", + "«q_7: ┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├»\n", + "« └─────────┘└─────────┘└─────────┘└─────────┘└─────────┘└─────────┘»\n", + "«c: 4/══════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« ┌───────┐┌─┐ \n", + "«q_0: ─────────────────────────────────┤0 ├┤M├─────────\n", + "« │ │└╥┘┌─┐ \n", + "«q_1: ─────────────────────────────────┤1 ├─╫─┤M├──────\n", + "« │ QFT† │ ║ └╥┘┌─┐ \n", + "«q_2: ─────────────────────────────────┤2 ├─╫──╫─┤M├───\n", + "« ┌─────────┐┌─────────┐┌─────────┐│ │ ║ ║ └╥┘┌─┐\n", + "«q_3: ┤0 ├┤0 ├┤0 ├┤3 ├─╫──╫──╫─┤M├\n", + "« │ ││ ││ │└───────┘ ║ ║ ║ └╥┘\n", + "«q_4: ┤1 ├┤1 ├┤1 ├──────────╫──╫──╫──╫─\n", + "« │ ││ ││ │ ║ ║ ║ ║ \n", + "«q_5: ┤2 Grover ├┤2 Grover ├┤2 Grover ├──────────╫──╫──╫──╫─\n", + "« │ ││ ││ │ ║ ║ ║ ║ \n", + "«q_6: ┤3 ├┤3 ├┤3 ├──────────╫──╫──╫──╫─\n", + "« │ ││ ││ │ ║ ║ ║ ║ \n", + "«q_7: ┤4 ├┤4 ├┤4 ├──────────╫──╫──╫──╫─\n", + "« └─────────┘└─────────┘└─────────┘ ║ ║ ║ ║ \n", + "«c: 4/═══════════════════════════════════════════╩══╩══╩══╩═\n", + "« 0 1 2 3 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 量子回路の作成\n", + "t = 4 # カウントする量子ビットの数\n", + "n = 4 # 探索する量子ビットの数\n", + "qc = QuantumCircuit(n+t, t) # 古典ビットとn+t量子ビットの回路\n", + "\n", + "# 全ての量子ビットを |+>に初期化する\n", + "for qubit in range(t+n):\n", + " qc.h(qubit)\n", + "\n", + "# Begin controlled Grover iterations\n", + "iterations = 1\n", + "for qubit in range(t):\n", + " for i in range(iterations):\n", + " qc.append(cgrit, [qubit] + [*range(t, n+t)])\n", + " iterations *= 2\n", + " \n", + "# Do inverse QFT on counting qubits\n", + "qc.append(qft_dagger, range(t))\n", + "\n", + "# Measure counting qubits\n", + "qc.measure(range(t), range(t))\n", + "\n", + "# Display the circuit\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "素晴らしい!結果をいくつか確かめましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "scrolled": true + }, + "source": [ + "## 3. シミュレーション" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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lFmzZrFo0SLq6up45JFHWLly5d7lX/ziF3nuued47rnnmDJlSl7ej+SekqYk0kknncTKlStpaGhg586d3H///Zxxxhn7rLN+/fq9V5WLFi1iz5499OvXr81tU7/EHn74YY499tj8vSlJvLh96bfffjtnn302/fv331v24osv8p73vIcePXpQXFzMpEmTmD17dj7DlzxQ0pREKi4uZsaMGZx22mkcd9xxfPKTn2Ts2LHMnDlz792uDz74IOXl5VRUVHDllVdy//33Y2atbgvw1a9+lfLycsaNG8eTTz7J9OnTC/k2JWHi9KU3NjYye/ZsLr744n3Ky8vLmT9/Pps2beKNN95gzpw5+7R4zJgxg3HjxnH++eezZcuWjn0j0mGKCx2ASGumTJmyXzNW6hfV5ZdfzuWXXx57W0DNsdKmOH3pV111FTfffDNFRUX7lB933HFcc801TJ48mZ49e1JRUUFxcfiKveSSS7j++usxM66//nq+/OUvc88993TcG5EOo6QpIhKJ0x9eW1vLueeeC8Brr73GnDlzKC4u5swzz+SCCy7gggsuAOBrX/sapaWlAAwYMGDv9tOmTeP000/v6LciHURJU0QkktofPmTIEO6//35+/etf77NOQ0PD3p+nTp3K6aefvvfO7Y0bN9K/f39eeuklfve731FTUwPAK6+8wqBBgwCYPXs25eXl+XlDknNKmiIikdT+8ObmZs4///y9fenAfv2Y6c4++2w2bdrE4Ycfzh133EGfPn0A+MpXvsJzzz2HmTF06FDuuuuuDn8v0jE0jZ6m0RMRkRSaRk9ERCQHlDRFRERiUtIUERGJSUlTREQkJiVNERGRmJQ0RUREYlLSFBERiUlJU0REJCbNCCQFNe22QkfQullXFToCEUkaXWmKiIjEpKQpIiISk5KmiIhITOrTFJFDjvrS5WDpSlNERCQmJU0REZGYlDRFRERiUtIUERGJSUlTREQkJiVNERGRmJQ0RUREYlLSFBERiUlJU0REJCYlTRERkZiUNEVERGJS0hQREYlJSVNERCQmJU0REZGYlDRFRERiynvSNLNLzazBzN40s8VmdkrM7Uaa2TYz255WfqqZeYZ/x3bMOxARkUNVXpOmmZ0DTAduAE4A/go8ZmZHHWC7bsD9wPw2VhsLDEr5tzIXMYuIiLTI95Xml4B73X2Wu7/o7lcArwCX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\n", + "text/plain": [ + "
" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 実行してみましょう。そして結果を確かめてみましょう。\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "transpiled_qc = transpile(qc, aer_sim)\n", + "qobj = assemble(transpiled_qc)\n", + "job = aer_sim.run(qobj)\n", + "hist = job.result().get_counts()\n", + "plot_histogram(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "他の測定値より測定確率が高い2つの値(0101と1011)をシミュレーションから確認することができます。これら2つの値は$e^{i\\theta}$と$e^{-i\\theta}$に対応します。しかし、まだ解の数を確かめることはできません。この情報を取得するためにもう少し処理する必要があるため、最初に出力を処理できるもの(`int`)に入れましょう。\n", + "\n", + "出力データから最も可能性の高い結果の文字列を取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "measured_str = max(hist, key=hist.get)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これを整数として保存しましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Register Output = 5\n" + ] + } + ], + "source": [ + "measured_int = int(measured_str,2)\n", + "print(\"Register Output = %i\" % measured_int)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 解の数(M)を見つける \n", + "\n", + "レジスターの10進の整数出力、カウント量子ビット($t$)の数、および探索量子ビット($n$)の数を入力とする関数`calculate_M()`を作成します。\n", + "\n", + "最初に、`measured_int`から$\\theta$を得ましょう。QPEは固有値$e^{2\\pi i\\phi}$から$\\text{測定値} = 2^n \\phi$として得るため、$\\theta$を得るために以下をする必要があります。:\n", + "\n", + "$$\n", + "\\theta = \\text{測定値}\\times\\frac{2\\pi}{2^t}\n", + "$$\n", + "\n", + "または、以下のコード:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Theta = 1.96350\n" + ] + } + ], + "source": [ + "theta = (measured_int/(2**t))*math.pi*2\n", + "print(\"Theta = %.5f\" % theta)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " $|s\\rangle$と$|s’\\rangle$の内積から角度$\\theta/2$を得ることができることを覚えているかもしれません。:\n", + "\n", + "\n", + "![image3](images/quantum_counting3.svg)\n", + "\n", + "$$\n", + "\\langle s'|s\\rangle = \\cos{\\tfrac{\\theta}{2}}\n", + "$$\n", + "\n", + "このベクトルの内積は:\n", + "\n", + "$$\n", + "\\langle s'|s\\rangle = \\sqrt{\\frac{N-M}{N}}\n", + "$$\n", + "\n", + "\n", + "これらの方程式を組み合わせて、三角法と代数を使用して次のことを示すことができます。\n", + "\n", + "$$\n", + "N\\sin^2{\\frac{\\theta}{2}} = M\n", + "$$\n", + "\n", + "[グローバーのアルゴリズム](../ch-algorithms/grover.html)の章から、拡散演算子 $U_s$を作成する一般的な方法は、実際は$-U_s$を実装することを覚えているでしょう。 この実装は、この章で提供されるグローバー反復で使用されます。通常のグローバー探索では、この位相はグローバルであり、無視できますが、グローバー反復を制御ゲートとして使っているため、この位相には意味があり、そのため、解ではない状態が探索されます。量子数え上げアルゴリズムにより、解ではない状態の数がわかります。 これを修正するには、$N-M$を計算するだけです。\n", + "\n", + "以下、コード:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No. of Solutions = 4.9\n" + ] + } + ], + "source": [ + "N = 2**n\n", + "M = N * (math.sin(theta/2)**2)\n", + "print(\"No. of Solutions = %.1f\" % (N-M))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "おおよそ、正しい解を得ることができました!この解のエラーは以下で概算できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error < 2.85\n" + ] + } + ], + "source": [ + "m = t - 1 # Upper bound: Will be less than this \n", + "err = (math.sqrt(2*M*N) + N/(2**(m+1)))*(2**(-m))\n", + "print(\"Error < %.2f\" % err)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "誤差の計算の説明はこの節の範囲外です。\n", + "しかし、説明は[1]で確かめることができます。\n", + "\n", + "とうとう、最終的な関数`calculate_M()`を得ることができます。:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def calculate_M(measured_int, t, n):\n", + " \"\"\"For Processing Output of Quantum Counting\"\"\"\n", + " # Calculate Theta\n", + " theta = (measured_int/(2**t))*math.pi*2\n", + " print(\"Theta = %.5f\" % theta)\n", + " # Calculate No. of Solutions\n", + " N = 2**n\n", + " M = N * (math.sin(theta/2)**2)\n", + " print(\"No. of Solutions = %.1f\" % (N-M))\n", + " # Calculate Upper Error Bound\n", + " m = t - 1 #Will be less than this (out of scope) \n", + " err = (math.sqrt(2*M*N) + N/(2**(m+1)))*(2**(-m))\n", + " print(\"Error < %.2f\" % err)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 練習問題 \n", + "\n", + "1.\t異なった解の数でオラクルを作成することができますか?量子数え上げアルゴリズムの精度はどのように変化しますか?\n", + "2.\t回路を調整して、カウント量子ビットを増減して、結果の精度を変えることはできますか?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "[1] Michael A. Nielsen and Isaac L. Chuang. 2011. Quantum Computation and Quantum Information: 10th Anniversary Edition (10th ed.). Cambridge University Press, New York, NY, USA. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.16.1',\n", + " 'qiskit-aer': '0.7.2',\n", + " 'qiskit-ignis': '0.5.1',\n", + " 'qiskit-ibmq-provider': '0.11.1',\n", + " 'qiskit-aqua': '0.8.1',\n", + " 'qiskit': '0.23.2'}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/quantum-fourier-transform.ipynb b/translations/ja/ch-algorithms/quantum-fourier-transform.ipynb new file mode 100644 index 0000000..99be3ff --- /dev/null +++ b/translations/ja/ch-algorithms/quantum-fourier-transform.ipynb @@ -0,0 +1,1996 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子フーリエ変換" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このチュートリアルでは、量子フーリエ変換(QFT)の紹介と、回路の導出、Qiskitを使用した実装を紹介します。実装においては、シミュレーターと5量子ビットデバイスでQFTを実行する方法を示します。\n", + "\n", + "## 目次\n", + "1. [はじめに](#introduction)\n", + "2. [直感的解釈](#intuition) \n", + " 2.1 [フーリエ基底での計算](#counting-fourier) \n", + "3. [例 1: 1量子ビットQFT](#example1)\n", + "4. [量子フーリエ変換](#qfteqn)\n", + "5. [QFTを実装する回路](#circuit)\n", + "6. [例 2: 3量子ビットQFT](#example2)\n", + "7. [QFT回路の形式に関する注意](#formnote)\n", + "8. [Qiskitでの実装](#implementation) \n", + " 8.1 [3量子ビットでの例](#threeqft) \n", + " 8.2 [一般的なQFT関数](#generalqft) \n", + " 8.3 [実量子デバイスでのQFTの実行](#implementationdev) \n", + "9. [問題](#problems)\n", + "10. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "フーリエ変換は、信号処理からデータ圧縮、複雑性理論など、古典コンピューティングのさまざまな分野で活用されています。 量子フーリエ変換(QFT)は、波動関数の振幅に対する離散フーリエ変換の量子実装です。 これは、多くの量子アルゴリズムに使われていて、特にShorの因数分解アルゴリズムと量子位相推定の一部として使われています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "離散フーリエ変換は、次の式に従って、ベクトル$(x_0, ..., x_{N-1})$ をベクトル$(y_0, ..., y_{N-1})$ にマッピングします。\n", + "\n", + "\n", + "$$y_k = \\frac{1}{\\sqrt{N}}\\sum_{j=0}^{N-1}x_j\\omega_N^{jk}$$\n", + "\n", + "\n", + "ここで $\\omega_N^{jk} = e^{2\\pi i \\frac{jk}{N}}$ です。\n", + "\n", + "同様に、量子フーリエ変換は、次式に従って、量子状態$\\sum_{i=0}^{N-1} x_i \\vert i \\rangle$を量子状態$\\sum_{i=0}^{N-1} y_i \\vert i \\rangle$にマッピングします。\n", + "\n", + "\n", + "$$y_k = \\frac{1}{\\sqrt{N}}\\sum_{j=0}^{N-1}x_j\\omega_N^{jk}$$\n", + "\n", + "\n", + "$\\omega_N^{jk}$は、上記で定義したものと同じです。状態の振幅のみがこの変換の影響を受けることに注意してください。\n", + "\n", + "これは以下のマッピングとして表すこともできます:\n", + "\n", + "$$\\vert x \\rangle \\mapsto \\frac{1}{\\sqrt{N}}\\sum_{y=0}^{N-1}\\omega_N^{xy} \\vert y \\rangle$$\n", + "\n", + "または、以下のユニタリー行列としても表すことができます:\n", + "\n", + "$$ U_{QFT} = \\frac{1}{\\sqrt{N}} \\sum_{x=0}^{N-1} \\sum_{y=0}^{N-1} \\omega_N^{xy} \\vert y \\rangle \\langle x \\vert$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 直感的解釈 \n", + "\n", + "量子フーリエ変換(QFT)は、2つの基底、計算 (Z) 基底とフーリエ基底、の間を変換します。 Hゲートは1量子ビットQFTであり、Z基底の状態$|0\\rangle$と$|1\\rangle$をX基底の状態$|{+}\\rangle$ と $|{-}\\rangle$に変換します。 同様に、計算基底のすべての複数量子ビット状態は、対応するフーリエ基底の状態をもっています。 QFTは、これらの基底間を変換する関数です。\n", + "\n", + "$\\hspace{15pt}|$ 計算基底 $\\rangle \\rightarrow$ QFT $\\rightarrow |$ フーリエ基底 $\\rangle$\n", + "\n", + "\n", + "$\\hspace{15pt}\n", + "\\text{QFT}|x\\rangle = |\\widetilde{x}\\rangle$\n", + "\n", + "(ティルダ(〜)を使用してフーリエ基底の状態を書くことが多いです。)\n", + "\n", + "### 2.1 フーリエ基底での計算: \n", + "\n", + "\n", + "計算基底では、 $|0\\rangle$ と $|1\\rangle$の状態を使用して数値を2進数で格納します:\n", + "\n", + "![zbasiscounting](images/zbasis-counting.gif)\n", + "\n", + "\n", + "それぞれの量子ビットが変化するスピードをみてください。一番左の量子ビットは、数値が増えるたびに反転し、その隣は2つ増えるごとに反転、3番目の量子ビットは4つ増えると反転します。次に、フーリエ基底では、Z軸を中心とした回転で数値を格納します:\n", + "\n", + "![fbasiscounting](images/fourierbasis-counting.gif)\n", + " \n", + "\n", + "保存する数によって、各量子ビットがZ軸を中心に回転する角度が決まります。 $|\\widetilde{0}\\rangle$状態では、すべての量子ビットは$|{+}\\rangle$状態にあります。 上の例に見られるように、4量子ビットで状態$|\\widetilde{5}\\rangle$をエンコードするには、左端の量子ビットを全回転に対して$\\tfrac{5}{2^n} = \\tfrac{5}{16}$($\\tfrac{5}{16}\\times 2\\pi$ラジアン)回転させます。 次の量子ビットはその2倍になり($\\tfrac{10}{16}\\times 2\\pi$ ラジアン、つまり全回転の$10/16$)、この角度が次の量子ビットでは2倍になり、以下同様に続きます。\n", + "\n", + "繰り返しますが、各量子ビットが変化するスピードに注意してください。 この場合、左端の量子ビット(`qubit 0`)の周波数が最も低く、右端の量子ビットが最も高くなります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 例 1: 1量子ビット QFT \n", + "\n", + "\n", + "上で定義したQFT演算子が1量子ビット状態 $\\vert\\psi\\rangle = \\alpha \\vert 0 \\rangle + \\beta \\vert 1 \\rangle$にどのように作用するかを考えてみましょう。この場合、$x_0 = \\alpha$, $x_1 = \\beta$ , $N = 2$ なので:\n", + "\n", + "$$y_0 = \\frac{1}{\\sqrt{2}}\\left( \\alpha \\exp\\left(2\\pi i\\frac{0\\times0}{2}\\right) + \\beta \\exp\\left(2\\pi i\\frac{1\\times0}{2}\\right) \\right) = \\frac{1}{\\sqrt{2}}\\left(\\alpha + \\beta\\right)$$\n", + "\n", + "\n", + "\n", + "と\n", + "\n", + "\n", + "$$y_1 = \\frac{1}{\\sqrt{2}}\\left( \\alpha \\exp\\left(2\\pi i\\frac{0\\times1}{2}\\right) + \\beta \\exp\\left(2\\pi i\\frac{1\\times1}{2}\\right) \\right) = \\frac{1}{\\sqrt{2}}\\left(\\alpha - \\beta\\right)$$\n", + "\n", + "\n", + "で、最終結果が次の状態になります。\n", + "\n", + "\n", + "$$U_{QFT}\\vert\\psi\\rangle = \\frac{1}{\\sqrt{2}}(\\alpha + \\beta) \\vert 0 \\rangle + \\frac{1}{\\sqrt{2}}(\\alpha - \\beta) \\vert 1 \\rangle$$\n", + "\n", + "\n", + "\n", + "\n", + "この操作は、量子ビットにアダマール演算子($H$)を適用した結果とまったく同じです:\n", + "\n", + "\n", + "$$H = \\frac{1}{\\sqrt{2}}\\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}$$\n", + "\n", + "\n", + "\n", + "\n", + "$H$演算子を状態$\\vert\\psi\\rangle = \\alpha \\vert 0 \\rangle + \\beta \\vert 1 \\rangle$に適用すると、新しい状態が得られます:\n", + "\n", + "$$\\frac{1}{\\sqrt{2}}(\\alpha + \\beta) \\vert 0 \\rangle + \\frac{1}{\\sqrt{2}}(\\alpha - \\beta) \\vert 1 \\rangle \n", + "\\equiv \\tilde{\\alpha}\\vert 0 \\rangle + \\tilde{\\beta}\\vert 1 \\rangle$$\n", + "\n", + "\n", + "アダマールゲートが、状態の振幅に対して$N = 2$の離散フーリエ変換を実行しているということに注意してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 量子フーリエ変換" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "では、量子フーリエ変換は、より大きな$N$に対してどのように見えるのでしょうか? $N=2^n$で、 $QFT_N$が、状態$\\vert x \\rangle = \\vert x_1\\ldots x_n \\rangle$ に作用するときの変換を導き出しましょう。ここで、$x_1$は最上位ビットです。 この数学は、それが役立つと思う人のためにあります。あなたが、この数学に苦労する場合でも心配はいりません。2章の直感的解釈を理解していれば、次の章に進むことができます。\n", + "\n", + "$QFT_{N}| x \\rangle = \\frac{1}{\\sqrt{N}} \\sum_{y=0}^{N-1}\\omega_N^{xy} | y \\rangle $ \n", + "\n", + "$\\hspace{30pt}= \\frac{1}{\\sqrt{N}} \\sum_{y=0}^{N-1} e^{2 \\pi i xy / 2^n} \\vert y \\rangle\\hspace{15pt}$ ($\\omega_N^{xy} = e^{2\\pi i \\frac{xy}{N}}$ と$N = 2^n$ より)\n", + "\n", + "\n", + "$\\hspace{30pt}= \\frac{1}{\\sqrt{N}} \\sum_{y=0}^{N-1} e^{2 \\pi i \\left(\\sum_{k=1}^n y_k/2^k\\right) x} \\vert y_1 \\ldots y_n \\rangle\\hspace{15pt}$ (二進数への書き換え $y = y_1\\ldots y_n, y/2^n = \\sum_{k=1}^n y_k/2^k $ より)\n", + "\n", + "$\\hspace{30pt}= \\frac{1}{\\sqrt{N}} \\sum_{y=0}^{N-1} \\prod_{k=1}^n e^{2 \\pi i x y_k/2^k } \\vert y_1 \\ldots y_n \\rangle\\hspace{15pt}$ (指数の積に展開して)\n", + " \n", + "$\\hspace{30pt} = \\frac{1}{\\sqrt{N}} \\bigotimes_{k=1}^n \\left(\\vert0\\rangle + e^{2 \\pi i x /2^k } \\vert1\\rangle \\right)\\hspace{15pt}$ (和と積を入れ替え、$\\sum_{y=0}^{N-1} = \\sum_{y_1=0}^{1}\\sum_{y_2=0}^{1}\\ldots\\sum_{y_n=0}^{1} $ を使って)\n", + "\n", + "$\\hspace{30pt} = \\frac{1}{\\sqrt{N}}\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2}x} \\vert1\\rangle\\right) \n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^2}x} \\vert1\\rangle\\right) \n", + "\\otimes \n", + "\\ldots\n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^{n-1}}x} \\vert1\\rangle\\right) \n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^n}x} \\vert1\\rangle\\right) \n", + "$\n", + "\n", + "\n", + "以上が直感的解釈の章にあったアニメーションの数学的な記述です:\n", + "\n", + "![fbasiscounting](images/fourierbasis-counting.gif)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. QFTを実装する回路 \n", + "\n", + "QFTを実装する回路は2つのゲートを使用します。 最初のものは、すでに知っている1量子ビットのアダマールゲート$H$です。上の [例 1](#example1) の説明から、1量子ビット状態 $\\vert x_k\\rangle$に対する$H$ の作用は、次のようになることをみてきました。\n", + "\n", + "$$H\\vert x_k \\rangle = \\frac{1}{\\sqrt{2}}\\left(\\vert0\\rangle + \\exp\\left(\\frac{2\\pi i}{2}x_k\\right)\\vert1\\rangle\\right)$$\n", + "\n", + "\n", + "\n", + "2番目は、次のようにブロック対角形式で与えられる2量子ビットの制御回転 $CROT_k$です。\n", + "\n", + "$$CROT_k = \\left[\\begin{matrix}\n", + "I&0\\\\\n", + "0&UROT_k\\\\\n", + "\\end{matrix}\\right]$$\n", + "\n", + "\n", + "ここで\n", + "\n", + "$$UROT_k = \\left[\\begin{matrix}\n", + "1&0\\\\\n", + "0&\\exp\\left(\\frac{2\\pi i}{2^k}\\right)\\\\\n", + "\\end{matrix}\\right]$$\n", + "\n", + "です。\n", + "\n", + "2量子ビット状態$\\vert x_jx_k\\rangle$での$CROT_k$の動作(最初の量子ビットがコントロールで、2番目がターゲットである)は以下で与えられます。\n", + "\n", + "$$CROT_k\\vert 0x_j\\rangle = \\vert 0x_j\\rangle$$\n", + "\n", + "\n", + "\n", + "$$CROT_k\\vert 1x_j\\rangle = \\exp\\left( \\frac{2\\pi i}{2^k}x_j \\right)\\vert 1x_j\\rangle$$\n", + "\n", + "\n", + "\n", + "\n", + "これらの2つのゲートが与えられたら、 [n量子ビットのQFT](#qfteqn) を実装する回路は以下のようになります。\n", + "\n", + "![image1](images/qft.png)\n", + "\n", + "\n", + "回路は次のように動作します。 n量子ビット入力状態$\\vert x_1x_2\\ldots x_n\\rangle$から始めます。\n", + "\n", + "
    \n", + "
  1. qubit 1の最初のアダマールゲートの後、状態は入力状態から以下のように変換されます。\n", + " \n", + " \n", + " \n", + " \n", + "\n", + "$$\n", + "H_1\\vert x_1x_2\\ldots x_n\\rangle = \n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \\exp\\left(\\frac{2\\pi i}{2}x_1\\right)\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\vert x_2x_3\\ldots x_n\\rangle\n", + "$$\n", + "\n", + "
  2. qubit 2によって制御されるqubit 1の$UROT_2$ゲートの後、状態は次のように変換されます。\n", + "\n", + " \n", + "$$\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \\exp\\left(\\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\\right)\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\vert x_2x_3\\ldots x_n\\rangle\n", + "$$\n", + "\n", + "
  3. qubit $n$によって制御されるqubit 1に最後の $UROT_n$ゲートを適用すると、状態は次のようになります。\n", + "\n", + " \n", + " \n", + "$$\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^n}x_n + \n", + "\\frac{2\\pi i}{2^{n-1}}x_{n-1} + \n", + "\\ldots + \n", + "\\frac{2\\pi i}{2^2}x_2 + \n", + "\\frac{2\\pi i}{2}x_1\n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\vert x_2x_3\\ldots x_n\\rangle\n", + "$$\n", + "\n", + "ここで\n", + " \n", + "\n", + "$$\n", + "x = 2^{n-1}x_1 + 2^{n-2}x_2 + \\ldots + 2^1x_{n-1} + 2^0x_n\n", + "$$\n", + "\n", + "を使うと、以下のように書き換えられます。\n", + "\n", + "$$\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^n}x \n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\vert x_2x_3\\ldots x_n\\rangle\n", + "$$\n", + "\n", + "
  4. qubits $2\\ldots n$に同じ一連のゲートを適用すると、最終状態は次のようになります:\n", + " \n", + "$$\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^n}x \n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^{n-1}}x \n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\ldots\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^{2}}x \n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^{1}}x \n", + "\\right)\n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "\n", + "出力状態では量子ビットの順序が逆になりますが、上記 で導いた入力状態をQFTした結果とまったく同じです。\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 例 2: 3量子ビット QFT \n", + "\n", + "$\\vert y_3y_2y_1\\rangle = QFT_8\\vert x_3x_2x_1\\rangle$の回路を作成する手順は次のとおりです:\n", + "\n", + "
    \n", + "
  1. $\\vert x_1 \\rangle$にアダマールゲートをかけます。\n", + "\n", + "$$\n", + "\\psi_1 = \n", + "\\vert x_3\\rangle\n", + "\\otimes\n", + "\\vert x_2\\rangle\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\\frac{2\\pi i}{2}x_1\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "
  2. $\\vert x_2\\rangle$を制御ビットとして$\\vert x_1\\rangle$に $UROT_2$ ゲートをかけます。\n", + "\n", + "$$\n", + "\\psi_2 = \n", + "\\vert x_3\\rangle\n", + "\\otimes\n", + "\\vert x_2\\rangle\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "
  3. $\\vert x_3\\rangle$を制御ビットとして$\\vert x_1\\rangle$に$UROT_3$ ゲートをかけます。\n", + " \n", + "$$\n", + "\\psi_3 = \n", + "\\vert x_3\\rangle\n", + "\\otimes\n", + "\\vert x_2\\rangle\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^3}x_3 + \\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "
  4. $\\vert x_2 \\rangle$にアダマールゲートをかけます。\n", + "\n", + "$$\n", + "\\psi_4 = \n", + "\\vert x_3\\rangle\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2}x_2\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^3}x_3 + \\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "
  5. $\\vert x_3\\rangle$を制御ビットとして$\\vert x_2\\rangle$ に $UROT_2$ゲートをかけます。\n", + "\n", + "$$\n", + "\\psi_5 = \n", + "\\vert x_3\\rangle\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^2}x_3 + \\frac{2\\pi i}{2}x_2\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^3}x_3 + \\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "
  6. $\\vert x_3\\rangle$ にアダマールゲートをかけます。\n", + "\n", + "$$\n", + "\\psi_6 = \n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2}x_3\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^2}x_3 + \\frac{2\\pi i}{2}x_2\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "\\otimes\n", + "\\frac{1}{\\sqrt{2}}\n", + "\\left[\n", + "\\vert0\\rangle + \n", + "\\exp\\left(\n", + "\\frac{2\\pi i}{2^3}x_3 + \\frac{2\\pi i}{2^2}x_2 + \\frac{2\\pi i}{2}x_1\n", + "\\right) \n", + "\\vert1\\rangle\\right]\n", + "$$\n", + "\n", + "\n", + "
  7. 目的とするQFTに対して出力状態の順序が逆になることに注意してください。 よって、量子ビットの順序を逆にする必要があります(この場合は$y_1$と $y_3$を入れ替えます)。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7.QFT回路の形式に関する注意 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の例は、$N=2^n$のQFTの非常に便利な形式を示しています。 最後の量子ビットだけが他のすべての入力量子ビットの値に依存し、それ以降の各ビットは量子ビットの入力値にだんだん依存しなくなることに注意してください。 これはQFTの物理的な実装で重要になります。実デバイスでは、遠い量子ビット間の結合よりも近傍の量子ビット間の結合を実現する方が簡単です。\n", + "\n", + "そして、QFT回路が大きくなるにつれて、わずかな回転を行うために費やされる時間がますます増えます。 特定のしきい値を下回る回転を無視しても、適切な結果を得られることが知られています。これは、近似QFTとして知られています。 操作の数を減らすとデコヒーレンスと潜在的なゲートエラーを大幅に減らすことができるため、これは物理的な実装でも重要です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 8. Qiskit での実装\n", + "\n", + "Qiskitでは、上記の議論で使用された$CROT$ゲートは、制御位相回転ゲートで実装します。 このゲートは [OpenQASM](https://github.com/QISKit/openqasm) で次のように定義されています。\n", + "\n", + "$$\n", + "CU_1(\\theta) =\n", + "\\begin{bmatrix} 1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & e^{i\\theta}\\end{bmatrix}\n", + "$$\n", + "\n", + "\n", + "よって、上記の説明の$CROT_k$ゲートから$CU_1$ ゲートへのマッピングは、次の式から得られます:\n", + "\n", + "$$\n", + "\\theta = 2\\pi/2^k = \\pi/2^{k-1}\n", + "$$\n", + "\n", + "### 8.1 3量子ビットでの例 " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from numpy import pi\n", + "# Qiskitをインポートする\n", + "from qiskit import QuantumCircuit, transpile, assemble, Aer, IBMQ\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit.tools.monitor import job_monitor\n", + "from qiskit.visualization import plot_histogram, plot_bloch_multivector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$n$量子ビットの場合に一般化する前に、3量子ビットの場合のコードを理解しておくと便利です。 まず、量子回路を定義する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**注意**:Qiskitの最下位ビットは最も小さいインデックス(0)であることを忘れないでください。したがって、回路は5章の画像に対して水平方向に反転されます。最初に、qubit 2にHゲートを適用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.h(2)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、qubit 1の状態が$|1\\rangle$の場合、これを1/4回転させます:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.cp(pi/2, 1, 2) # qubit 1 から qubit 2へのCROT \n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして、最下位量子ビットqubit (0) が$|1\\rangle$:の場合、さらに1/8回転:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.cp(pi/4, 0, 2) # qubit 0から qubit 2へのCROT \n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "qubit 2の演算が終わったので、qubits 0 と1に同じロジックを使用して、プロセスを繰り返します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.h(1)\n", + "qc.cp(pi/2, 0, 1) # qubit 0からqubit 1へのCROT \n", + "qc.h(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、QFTを完了するために、qubits 0と2をスワップする必要があります:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.swap(0,2)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8.2 一般的なQFT関数 \n", + "\n", + "QiskitでQFTの一般的な回路を作成します。 このような大規模な一般的な回路が作成できるところが、Qiskitが優れている点です。\n", + "\n", + "量子ビットを上下逆にしてQFTを実装する回路を構築し、後でそれらをスワップする方が簡単です。 まず、量子ビットを正しく回転させる関数を作成します。 3量子ビットの例で行ったように、最上位の量子ビット(インデックスが最も高い量子ビット)を正しく回転させることから始めましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def qft_rotations(circuit, n):\n", + " if n == 0: # 回路が空の場合は関数を終了します\n", + " return circuit\n", + " n -= 1 # インデックスは0から始める\n", + " circuit.h(n) # Hゲートを最上位量子ビットに適用する\n", + " for qubit in range(n):\n", + " # 量子ビットごとに、Indexが小さい方が\n", + " # 角度の小さい制御回転を実行\n", + " circuit.cp(pi/2**(n-qubit), qubit, n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これがどのように見えるか見てみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(4)\n", + "qft_rotations(qc,4)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のウィジェットを使用して、この回路が量子ビットの数に応じてどのようにスケーリングするかを確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ce30d21977994913a3923af2c401f4a8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntSlider(value=4, max=8, min=1)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c724fc703dfc434aa012189f53972321", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x02W\\x00\\x00\\x01\\x08\\x08\\x06\\x00\\x00\\x00r\\x0b\\xd1;\\x…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import scalable_circuit\n", + "scalable_circuit(qft_rotations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "すばらしいです! これは、QFTの最初の部分です。最上位の量子ビットを正しく回転できたので、2番目に上位の量子ビットを正しく回転させます。 次に、3番目に上位のビットを処理させます。ところで、このためのコードをたくさん書く必要があるでしょうか?次の `qft_rotations()`関数の最後に、次の`n-1` 量子ビットでプロセスを繰り返すコードがあります。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def qft_rotations(circuit, n):\n", + " \"\"\"回路の最初のn量子ビットでqftを実行します(スワップなしで)\"\"\"\n", + " if n == 0:\n", + " return circuit\n", + " n -= 1\n", + " circuit.h(n)\n", + " for qubit in range(n):\n", + " circuit.cp(pi/2**(n-qubit), qubit, n)\n", + " # この関数の最後で、次の量子ビットで同じ関数を再度呼び出します\n", + " # (関数の前の方ですでにnを1つ減らしています)。\n", + " qft_rotations(circuit, n)\n", + "\n", + "# どうみえるか見てみましょう\n", + "qc = QuantumCircuit(4)\n", + "qft_rotations(qc,4)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "簡単でしたね! 別の関数内で関数を使用することを「再帰」と呼びます。 コードを大幅に簡略化できます。 以下のウィジェットを使用して、これがどのようにスケーリングするかを再度確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e31f90a64cbd477b9a8fec4a87be0976", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntSlider(value=4, max=8, min=1)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4fd47ced489b4853ba6026cb79ddefc8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x04u\\x00\\x00\\x01\\x08\\x08\\x06\\x00\\x00\\x00\\xd1\\x16\\xc8…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scalable_circuit(qft_rotations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、QFTの定義に一致させるために、QFT関数の最後にスワップを追加する必要があります。 これを最終的な関数`qft()`に付け加えます。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def swap_registers(circuit, n):\n", + " for qubit in range(n//2):\n", + " circuit.swap(qubit, n-qubit-1)\n", + " return circuit\n", + "\n", + "def qft(circuit, n):\n", + " \"\"\"回路の最初のn量子ビットでQFT\"\"\"\n", + " qft_rotations(circuit, n)\n", + " swap_registers(circuit, n)\n", + " return circuit\n", + "\n", + "# どうみえるか見てみましょう\n", + "qc = QuantumCircuit(4)\n", + "qft(qc,4)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これが、量子フーリエ変換の一般化された回路です。 以下のウィジェットを使用して、これがどのようにスケーリングするかを再度確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7e0dcaa24b66419fa288f739e8e335ff", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntSlider(value=4, max=8, min=1)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f887efdea1c34983955ed1abb15f4ea7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x04\\xb1\\x00\\x00\\x01\\x08\\x08\\x06\\x00\\x00\\x00\\xa0BfN\\x…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "scalable_circuit(qft)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、この回路が正しく機能することをデモしてみましょう。そのためには、まず計算基底で数値をエンコードする必要があります。 2進数の5が `101`であることがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0b101'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bin(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(`0b`は、これが2進数であることを示すための記号です)。 これを量子ビットにエンコードしましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 回路を作ります\n", + "qc = QuantumCircuit(3)\n", + "\n", + "# 5の状態をエンコードします\n", + "qc.x(0)\n", + "qc.x(2)\n", + "qc.draw() # 画像をフィットさせます" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "状態ベクトルシミュレーターを使用して量子ビットの状態をチェックしましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim = Aer.get_backend(\"aer_simulator\")\n", + "qc_init = qc.copy()\n", + "qc_init.save_statevector()\n", + "statevector = sim.run(qc_init).result().get_statevector()\n", + "plot_bloch_multivector(statevector)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "QFT関数を使用して、量子ビットの最終状態を表示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qft(qc,3)\n", + "qc.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.save_statevector()\n", + "statevector = sim.run(qc).result().get_statevector()\n", + "plot_bloch_multivector(statevector)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "QFT関数が正しく機能していることがわかります。 状態$|\\widetilde{0}\\rangle = |{+}{+}{+}\\rangle$と比較すると、Qubit 0は$\\tfrac{5}{8}$回転、Qubit 1は$\\tfrac{10}{8}$回転(1周の$\\tfrac{1}{4}$に相当)、そしてqubit 2は$\\tfrac{20}{8}$ 回転(1周の$\\tfrac{1}{2}$ に相当)しています。 \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 8.3 実量子デバイスでのQFTの実行" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "8.2章の後に、実デバイスで回路を実行しようとすると、すべての量子ビットが$|0\\rangle$と $|1\\rangle$の等しい重ね合わせにあるため、結果は完全にランダムになってしまいます。 実際のハードウェアで動作するQFTをデモして結果を調べたい場合は、代わりに8.2章の最後の状態$|\\widetilde{5}\\rangle$を先に作成し、QFTを逆に実行することで、出力が期待どおりに状態$|5\\rangle$になることを確認します。 \n", + "\n", + "まず、QiskitでQFT演算を逆にしましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def inverse_qft(circuit, n):\n", + " \"\"\"Does the inverse QFT on the first n qubits in circuit\"\"\"\n", + " # まず、正しいサイズのQFT回路を作成します。\n", + " qft_circ = qft(QuantumCircuit(n), n)\n", + " # 次に、この回路の逆をとります\n", + " invqft_circ = qft_circ.inverse()\n", + " # そして、それを既存の回路の最初のn量子ビットに追加します。\n", + " circuit.append(invqft_circ, circuit.qubits[:n])\n", + " return circuit.decompose() # .decompose() で個々のゲートを確認できます" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "では、量子ビットを$|\\widetilde{5}\\rangle$状態にします。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nqubits = 3\n", + "number = 5\n", + "qc = QuantumCircuit(nqubits)\n", + "for qubit in range(nqubits):\n", + " qc.h(qubit)\n", + "qc.p(number*pi/4,0)\n", + "qc.p(number*pi/2,1)\n", + "qc.p(number*pi,2)\n", + "\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして、これが実際にフーリエ状態$|\\widetilde{5}\\rangle$であることがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_init = qc.copy()\n", + "qc_init.save_statevector()\n", + "sim = Aer.get_backend(\"aer_simulator\")\n", + "statevector = sim.run(qc_init).result().get_statevector()\n", + "plot_bloch_multivector(statevector)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、逆QFTを適用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = inverse_qft(qc, nqubits)\n", + "qc.measure_all()\n", + "qc.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmq_london\n" + ] + } + ], + "source": [ + "# 保存してあるIBMQアカウントをロードし、n量子ビット以下で最も混んでいないでバックエンドデバイスを取得します\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= nqubits \n", + " and not x.configuration().simulator \n", + " and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "shots = 2048\n", + "transpiled_qc = transpile(qc, backend, optimization_level=3)\n", + "job = backend.run(transpiled_qc, shots=shots)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "counts = job.result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "私たちは(うまくいけば)最も高い確率が101になることを確認できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 9. 問題" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. QFTの[上記の実装](#implementationdev)は、$\\text{QFT}^{\\dagger}|\\widetilde{5}\\rangle = |101\\rangle$であるフーリエ状態 $|\\widetilde{5}\\rangle$を準備することによってテストしました。 $\\text{QFT}^{\\dagger}|a\\rangle = |100\\rangle$となるような状態$|a\\rangle$を見つけてみてください。\n", + "2. $\\text{QFT}^{\\dagger}|b\\rangle = |011\\rangle$となるような状態$|b\\rangle$を見つけてください。\n", + "3. 再帰なしでQFT関数を記述してください。 Qiskitのユニタリーシミュレーターを使用して、結果を確認してください。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 10. 参考文献" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. M. Nielsen and I. Chuang, Quantum Computation and Quantum Information, Cambridge Series on Information and the Natural Sciences (Cambridge University Press, Cambridge, 2000)." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "4fd47ced489b4853ba6026cb79ddefc8": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_f50c3bad79fc4dcea09b2ac7fcc7ae86", + "value": {}, + "width": "" + } + }, + "5303ce14bda94a4fa6d3bd8d968fd88e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "69415be121604172a807ba54f8950d2c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "69bb4ea7eb934781ae0443455b05fd83": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "79bcb116617c4b47910fef4ffc9d3cfd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "7e0dcaa24b66419fa288f739e8e335ff": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "IntSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "IntSliderView", + "continuous_update": true, + "description": "", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_69415be121604172a807ba54f8950d2c", + "max": 8, + "min": 1, + "orientation": "horizontal", + "readout": true, + "readout_format": "d", + "step": 1, + "style": "IPY_MODEL_79bcb116617c4b47910fef4ffc9d3cfd", + "value": 4 + } + }, + "82ebabe44bff4dd18c0fb94fb2229f5b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "a31a90c7257640c29979cd97290f1d3f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c661cd0f46614dfcbd58714fa1ed42b0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c724fc703dfc434aa012189f53972321": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_5303ce14bda94a4fa6d3bd8d968fd88e", + "value": {}, + "width": "" + } + }, + "ce30d21977994913a3923af2c401f4a8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "IntSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "IntSliderView", + "continuous_update": true, + "description": "", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_a31a90c7257640c29979cd97290f1d3f", + "max": 8, + "min": 1, + "orientation": "horizontal", + "readout": true, + "readout_format": "d", + "step": 1, + "style": "IPY_MODEL_ddb2442024714fd18c60080f267b8e17", + "value": 4 + } + }, + "ddb2442024714fd18c60080f267b8e17": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } + }, + "e31f90a64cbd477b9a8fec4a87be0976": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "IntSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "IntSliderView", + "continuous_update": true, + "description": "", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_69bb4ea7eb934781ae0443455b05fd83", + "max": 8, + "min": 1, + "orientation": "horizontal", + "readout": true, + "readout_format": "d", + "step": 1, + "style": "IPY_MODEL_82ebabe44bff4dd18c0fb94fb2229f5b", + "value": 4 + } + }, + "f50c3bad79fc4dcea09b2ac7fcc7ae86": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f887efdea1c34983955ed1abb15f4ea7": { + "buffers": [ + { + "data": "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", + "encoding": "base64", + "path": [ + "value" + ] + } + ], + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ImageModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ImageView", + "format": "png", + "height": "", + "layout": "IPY_MODEL_c661cd0f46614dfcbd58714fa1ed42b0", + "value": {}, + "width": "" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/quantum-key-distribution.ipynb b/translations/ja/ch-algorithms/quantum-key-distribution.ipynb new file mode 100644 index 0000000..40b2740 --- /dev/null +++ b/translations/ja/ch-algorithms/quantum-key-distribution.ipynb @@ -0,0 +1,1499 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子鍵配送" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## 目次\n", + "\n", + "1. はじめに\n", + "2. プロトコルの概要\n", + "3. Qiskitの例: 盗聴なし\n", + "4. Qiskitの例: 盗聴あり\n", + "5. リスク分析" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに\n", + "\n", + "アリスとボブが、安全でない通信路(例えばインターネット)上で秘密のメッセージ(例えばボブのオンラインバンクの詳細)をやりとりしたい場合、メッセージを暗号化することが必要です。暗号は広い分野で、そのほとんどはこのテキストの範囲外なので、アリスとボブが他の誰にも知られていない秘密鍵を持っていればそれが役に立ち、共通鍵暗号で通信できる、ということを信頼するほかはありません。\n", + "\n", + "アリスとボブがイブの古典的通信路を使って鍵を共有したい場合、イブが自分用にこの鍵のコピーを作ったかどうかを知ることは不可能です。つまり、盗聴されていないということについて、イブを全面的に信頼するしかありません。ところが、もしイブが量子的通信路を提供しているのであれば、アリスとボブはもはやイブを信頼する必要はありません。つまり、ボブのメッセージがアリスに届く前にイブがそれを読もうとすれば、彼らにはそのことがわかるのです。\n", + "\n", + "量子的通信路が物理的にどのように実装されるのか、そのイメージをお伝えするとわかりやすい方もいるかもしれません。古典的通信路は例えば電話線に例えることができます。電話線を通じて、電気信号であらわされたメッセージ(ないしビット列)を送ります。提案されている量子的通信路の例としては、例えばある種の光ファイバーケーブルを挙げることができるでしょう。これを通じて1個ずつの光子(光の粒子)を送ることができます。光子には _偏光_ と呼ばれる特性があり、この偏光は2つの状態のうちのいずれかを取ることができます。これを使って、量子ビットを表現することができます。\n", + "\n", + "\n", + "## 2. プロトコルの概要 \n", + "\n", + "このプロトコルは、量子ビットを測定するとその量子ビットの状態が変化しうる、という事実を利用しています。アリスがボブに量子ビットを送り、ボブが測定する前に盗聴者(イブ)が測定を試みると、イブの測定によって量子ビットの状態が変化し、アリスが送信した量子ビットの状態がボブに届かない可能性があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Imports Successful\n" + ] + } + ], + "source": [ + "from qiskit import QuantumCircuit, Aer, transpile, assemble\n", + "from qiskit.visualization import plot_histogram, plot_bloch_multivector\n", + "from numpy.random import randint\n", + "import numpy as np\n", + "print(\"Imports Successful\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスが状態 $|+\\rangle$ (X基底で `0`) の量子ビットを準備し、ボブがそれをX基底で測定すれば、ボブは必ず `0` を得ます:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1,1)\n", + "# Alice prepares qubit in state |+>\n", + "qc.h(0)\n", + "qc.barrier()\n", + "# Alice now sends the qubit to Bob\n", + "# who measures it in the X-basis\n", + "qc.h(0)\n", + "qc.measure(0,0)\n", + "\n", + "# Draw and simulate circuit\n", + "display(qc.draw())\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "job = aer_sim.run(assemble(qc))\n", + "plot_histogram(job.result().get_counts())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "しかしこの量子ビットがボブに届く前にイブがZ基底での測定を試みると、量子ビットの状態を $|+\\rangle$ から $|0\\rangle$ または $|1\\rangle$ のどちらかに変えることになり、ボブが測定して0を得ることはもはや確実ではなくなります:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1,1)\n", + "# Alice prepares qubit in state |+>\n", + "qc.h(0)\n", + "# Alice now sends the qubit to Bob\n", + "# but Eve intercepts and tries to read it\n", + "qc.measure(0, 0)\n", + "qc.barrier()\n", + "# Eve then passes this on to Bob\n", + "# who measures it in the X-basis\n", + "qc.h(0)\n", + "qc.measure(0,0)\n", + "\n", + "# Draw and simulate circuit\n", + "display(qc.draw())\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "job = aer_sim.run(assemble(qc))\n", + "plot_histogram(job.result().get_counts())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このように、ボブは50%の確率で `1` を測定する可能性があることがわかります。そしてもし `1` を測定すれば、彼とアリスは自分たちが使っている通信路に何か問題があるということがわかります。\n", + "\n", + "量子鍵配送プロトコルは、このプロセスをじゅうぶんな回数繰り返して、盗聴者がこの迎撃から逃れる可能性がほとんどなくなるようにする方法です。おおまかには次のようになります:\n", + "\n", + "**- ステップ1**\n", + "\n", + "アリスはランダムなビット列を選びます。たとえば:\n", + "\n", + "`1000101011010100`\n", + "\n", + "そして、各ビットに対応するランダムな基底を選びます:\n", + "\n", + "`ZZXZXXXZXZXXXXXX`\n", + "\n", + "アリスは、この2種類の情報を自分だけの秘密として持っておきます。\n", + "\n", + "**- ステップ2**\n", + "\n", + "次にアリスは、各ビットを自分が選んだ基底を使って量子ビット列上にエンコードします。そうすると、各量子ビットは、ランダムに選ばれた $|0\\rangle$, $|1\\rangle$, $|+\\rangle$, $|-\\rangle$ のいずれかの状態になります。この場合、量子ビット列は次のようになるでしょう:\n", + "\n", + "$$ |1\\rangle|0\\rangle|+\\rangle|0\\rangle|-\\rangle|+\\rangle|-\\rangle|0\\rangle|-\\rangle|1\\rangle|+\\rangle|-\\rangle|+\\rangle|-\\rangle|+\\rangle|+\\rangle\n", + "$$\n", + "\n", + "これが、彼女がボブに送るメッセージになります。\n", + "\n", + "**- ステップ3**\n", + "\n", + "次にボブは、それぞれの量子ビットをランダムに測定します。たとえば次のような基底を使うかもしれません:\n", + "\n", + "`XZZZXZXZXZXZZZXZ`\n", + "\n", + "そしてボブはその測定結果を秘密にしておきます。\n", + "\n", + "**- ステップ4**\n", + "\n", + "そうしてからボブとアリスは、各量子ビットに対して自分たちが使った基底を公開しあいます。アリスがある量子ビットを用意したときに使った基底と同じ基底を使って、ボブがその量子ビットを測定していた場合には、彼らが共有する秘密鍵の一部としてそのビットを使用することにします。そうでなかった場合には、そのビットについての情報は捨てます。\n", + "\n", + "**- ステップ5**\n", + "\n", + "最後に、ボブとアリスは彼らの鍵のなかからランダムなサンプルを共有します。そのサンプルが一致していれば、(誤りの余地が少しばかりありますが)伝送が成功したと信じることができます。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskitの例: 盗聴なし\n", + "\n", + "まず最初に、誰も盗聴していない場合にこのプロトコルがうまくいくことを見ましょう。それから、アリスとボブが盗聴者をどうやって検出することができるのかを示します。いつものように、最初にまず必要なものをすべてインポートしましょう:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "擬似ランダム鍵を生成するには、numpyの `randint` 関数を使います。このページに示したのと同じ結果が再現していただけるよう、種には 0 を設定しておきます:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(seed=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスの最初のメッセージの長さを `n` と呼ぶことにします。この例では、アリスは100量子ビットの長さのメッセージを送ります:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "n = 100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 ステップ1:\n", + "\n", + "アリスはランダムなビット列を生成します:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 1 0\n", + " 1 1 0 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0\n", + " 0 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 1 0 0 1 1 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "print(alice_bits)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この時点では、ビット列 '`alice_bits`' はアリスしか知りません。アリスだけが知っている情報は何か、ボブだけが知っている情報は何か、イブの通信路を流れたのは何か、をこのような表で追跡することにします:\n", + "\n", + "| Alice's Knowledge |Over Eve's Channel| Bob's Knowledge |\n", + "|:-----------------:|:----------------:|:---------------:|\n", + "| alice_bits | |   |\n", + "\n", + "### 3.2 ステップ2:\n", + "\n", + "アリスは各ビットを、ランダムに選んだ $X$ または $Z$基底を使って量子ビット上にエンコードします。選んだ基底は `alice_bases` に保持します。ここでは、 `0` は「$Z$基底を使った」、`1` は「$X$基底を使った」ことを意味します。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 0 1 0\n", + " 0 0 0 1 1 0 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0\n", + " 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "## Step 1\n", + "#Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "print(alice_bases)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスはこれも秘密にしておきます:\n", + "\n", + "| Alice's Knowledge |Over Eve's Channel| Bob's Knowledge |\n", + "|:-----------------:|:----------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | |   |\n", + "\n", + "下記の `encode_message` 関数は `QuantumCircuit` のリストを生成します。リストの各要素が、アリスのメッセージに含まれる個々の量子ビットを表しています:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def encode_message(bits, bases):\n", + " message = []\n", + " for i in range(n):\n", + " qc = QuantumCircuit(1,1)\n", + " if bases[i] == 0: # Prepare qubit in Z-basis\n", + " if bits[i] == 0:\n", + " pass \n", + " else:\n", + " qc.x(0)\n", + " else: # Prepare qubit in X-basis\n", + " if bits[i] == 0:\n", + " qc.h(0)\n", + " else:\n", + " qc.x(0)\n", + " qc.h(0)\n", + " qc.barrier()\n", + " message.append(qc)\n", + " return message" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " `alices_bits` に含まれる最初のビットが `0` であり、アリスがこれをエンコードした基底は $X$基底( `1` で表される)である、ということがわかります:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bit = 0\n", + "basis = 1\n" + ] + } + ], + "source": [ + "print('bit = %i' % alice_bits[0])\n", + "print('basis = %i' % alice_bases[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして `message` に含まれる最初の回路(アリスのメッセージに含まれる最初の量子ビットを表している)を見ると、アリスが状態 $|+\\rangle$ の量子ビットを用意したことを確かめることができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "message[0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "別の例として、 `alice_bits` の4番目のビットは `1` であり、 $Z$基底でエンコードされていることがわかります。アリスは対応する量子ビットを $|1\\rangle$ の状態で準備しているわけです:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bit = 1\n", + "basis = 0\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('bit = %i' % alice_bits[4])\n", + "print('basis = %i' % alice_bases[4])\n", + "message[4].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この量子ビット列のメッセージはこの後、イブの量子的通信路を使ってボブに送られます:\n", + "\n", + "| Alice's Knowledge |Over Eve's Channel| Bob's Knowledge |\n", + "|:-----------------:|:----------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "\n", + "### 3.3 ステップ3:\n", + "\n", + "さてボブは、各量子ビットをランダムに $X$ または $Z$基底で測定してその情報を保持します:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1\n", + " 0 1 0 0 1 0 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 1 1 1 1 1 0\n", + " 0 0 1 0 1 0 1 1 0 0 0 1 0 0 1 1 1 1 0 1 0 0 0 0 1 1]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "\n", + "## Step 3\n", + "# Decide which basis to measure in:\n", + "bob_bases = randint(2, size=n)\n", + "print(bob_bases)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " `bob_bases` には、ボブが各量子ビットを測定するのに選んだ基底が保持されます。\n", + "\n", + "| Alice's Knowledge |Over Eve's Channel| Bob's Knowledge |\n", + "|:-----------------:|:----------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "\n", + "下記の関数 `measure_message` が対応する測定に使われ、各量子ビットを測定した結果をシミュレートします。測定した結果は `bob_results` に保持します。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def measure_message(message, bases):\n", + " backend = Aer.get_backend('aer_simulator')\n", + " measurements = []\n", + " for q in range(n):\n", + " if bases[q] == 0: # measuring in Z-basis\n", + " message[q].measure(0,0)\n", + " if bases[q] == 1: # measuring in X-basis\n", + " message[q].h(0)\n", + " message[q].measure(0,0)\n", + " aer_sim = Aer.get_backend('aer_simulator')\n", + " qobj = assemble(message[q], shots=1, memory=True)\n", + " result = aer_sim.run(qobj).result()\n", + " measured_bit = int(result.get_memory()[0])\n", + " measurements.append(measured_bit)\n", + " return measurements" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "\n", + "## Step 3\n", + "# Decide which basis to measure in:\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " `message[0]` (ゼロ番目の量子ビットを表している)の回路が、ボブによって $X$測定を施されたことがわかります:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "message[0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ボブはアリスがエンコードしたときと同じ基底をたまたま選んで測定したので、ボブは `0` という結果を得ることが保証されています。下に示すように6番目の量子ビットでは、ボブがランダムに選んだ測定はアリスが選んだものとは同じでないため、ボブの結果がアリスのものと一致する可能性は50%しかありません。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "message[6].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0]\n" + ] + } + ], + "source": [ + "print(bob_results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ボブは自分の結果を秘密にしておきます。\n", + "\n", + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "\n", + "### 3.4 ステップ4:\n", + "\n", + "この後、アリスはどの量子ビットがどの基底でエンコードされたかを(イブの通信路を使って)公開します:\n", + "\n", + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "\n", + "そしてボブはそれぞれの量子ビットをどの基底で測定したかを公開します:\n", + "\n", + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "| bob_bases | bob_bases |   |\n", + "\n", + "ボブがたまたまあるビットを、アリスが用意したときと同じ基底で測定していれば、 `bob_results` 中のその箇所は `alice_bits` 中の対応する箇所と一致し、このビットを彼らの鍵の一部として使うことができます。2人が別々の基底で測定していれば、ボブの結果はランダムになるので、両者ともその箇所は捨てます。`remove_garbage` はこれを行うための関数です:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": true, + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def remove_garbage(a_bases, b_bases, bits):\n", + " good_bits = []\n", + " for q in range(n):\n", + " if a_bases[q] == b_bases[q]:\n", + " # If both used the same basis, add\n", + " # this to the list of 'good' bits\n", + " good_bits.append(bits[q])\n", + " return good_bits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスとボブは使えないビットを捨て、残ったビットを使って彼らの秘密鍵を作ります:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "\n", + "## Step 3\n", + "# Decide which basis to measure in:\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "\n", + "## Step 4\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)\n", + "print(alice_key)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "| bob_bases | bob_bases | |\n", + "| alice_key | |   |" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "\n", + "## Step 3\n", + "# Decide which basis to measure in:\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "\n", + "## Step 4\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)\n", + "bob_key = remove_garbage(alice_bases, bob_bases, bob_results)\n", + "print(bob_key)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "| bob_bases | bob_bases | |\n", + "| alice_key | | bob_key |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.5 Step 5:\n", + "\n", + "最後に、ボブとアリスは自分たちの鍵からいくつかのビットをランダムに選んで比較し、このプロトコルが正常に機能していることを確認します:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def sample_bits(bits, selection):\n", + " sample = []\n", + " for i in selection:\n", + " # use np.mod to make sure the\n", + " # bit we sample is always in \n", + " # the list range\n", + " i = np.mod(i, len(bits))\n", + " # pop(i) removes the element of the\n", + " # list at index 'i'\n", + " sample.append(bits.pop(i))\n", + " return sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスとボブは比較した部分を公開します。公開した部分はもはや秘密でなくなってしまうので、鍵から除去します:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " bob_sample = [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]\n", + "alice_sample = [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=0)\n", + "n = 100\n", + "\n", + "## Step 1\n", + "# Alice generates bits\n", + "alice_bits = randint(2, size=n)\n", + "\n", + "## Step 2\n", + "# Create an array to tell us which qubits\n", + "# are encoded in which bases\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "\n", + "## Step 3\n", + "# Decide which basis to measure in:\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "\n", + "## Step 4\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)\n", + "bob_key = remove_garbage(alice_bases, bob_bases, bob_results)\n", + "\n", + "## Step 5\n", + "sample_size = 15\n", + "bit_selection = randint(n, size=sample_size)\n", + "\n", + "bob_sample = sample_bits(bob_key, bit_selection)\n", + "print(\" bob_sample = \" + str(bob_sample))\n", + "alice_sample = sample_bits(alice_key, bit_selection)\n", + "print(\"alice_sample = \"+ str(alice_sample))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "| bob_bases | bob_bases | |\n", + "| alice_key | | bob_key |\n", + "| bob_sample | bob_sample | bob_sample |\n", + "| alice_sample | alice_sample | alice_sample |" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "プロトコルが妨害されずに正しく機能していれば、両者のサンプルは一致するはずです:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bob_sample == alice_sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "サンプルが一致すれば、(高い確率で) `alice_key == bob_key` であるということになります。こうして、2人はメッセージの暗号化に使うことができる秘密鍵を共有しました!\n", + "\n", + "| Alice's Knowledge | Over Eve's Channel | Bob's Knowledge |\n", + "|:-----------------:|:------------------:|:---------------:|\n", + "| alice_bits | | |\n", + "| alice_bases | | |\n", + "| message | message | message |\n", + "| | | bob_bases |\n", + "| | | bob_results |\n", + "| | alice_bases | alice_bases |\n", + "| bob_bases | bob_bases | |\n", + "| alice_key | | bob_key |\n", + "| bob_sample | bob_sample | bob_sample |\n", + "| alice_sample | alice_sample | alice_sample |\n", + "| shared_key | | shared_key |" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0]\n", + "[1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0]\n", + "key length = 33\n" + ] + } + ], + "source": [ + "print(bob_key)\n", + "print(alice_key)\n", + "print(\"key length = %i\" % len(alice_key))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Qiskitの例:盗聴 *あり* \n", + "\n", + "さてこんどは、アリスとボブの量子メッセージをイブが盗聴しようとしていたかどうかを、2人が知ることができるかどうかを見てみましょう。妨害がない場合と同じ手順を繰り返しますが、ボブが量子ビットを受信する前に、イブが情報を取り出そうと試みます。再現可能な特定の「ランダムな」結果を得られるように、先ほどとは別の乱数種を使いましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(seed=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 ステップ1:\n", + "\n", + "アリスはランダムなビット列を生成します:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 0 1 1 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 1\n", + " 0 0 1 1 0 0 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 1\n", + " 1 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 1 1]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "print(alice_bits)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 ステップ2:\n", + "\n", + "アリスはランダムに選んだ $Z$ および $X$基底を使ってこれらをエンコードし、イブの量子的通信路を使ってボブに送信します:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0 0\n", + " 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 1\n", + " 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 1 1 1]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "## Step 2\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "print(alice_bases)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この例の場合、アリスのメッセージの最初の量子ビットは $|+\\rangle$ 状態です:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "message[0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 盗聴!\n", + "\n", + "おっと、いけません! イブは、通信路を流れている途中でメッセージを盗聴します。ボブがのちにするのと同じやり方で、ランダムに選んだ基底による量子ビットの測定を試みます。" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "## Step 2\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "## Interception!!\n", + "eve_bases = randint(2, size=n)\n", + "intercepted_message = measure_message(message, eve_bases)\n", + "print(intercepted_message)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ゼロ番目の量子ビットの場合を以下に示します。イブがランダムに選んだ基底はアリスが選んだものと同じではないため、量子ビットは $|+\\rangle$ の状態から、$Z$基底では50%の確率で $|0\\rangle$ または $|1\\rangle$ の状態に変化します:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "message[0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.3 ステップ3:\n", + "\n", + "そうしてイブはこの量子ビット列をボブに送り、ボブはそれをランダムに測定します。この例では、アリスが量子ビットを準備したときと同じ基底をボブが(たまたま)選んで測定しました。盗聴がなければ、ボブは `0` を測定することが保証されていたのですが、イブがメッセージの読み取りを試みたために、ボブが `0` でなく `1` を測定する可能性が50%になっています。" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "## Step 2\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "## Interception!!\n", + "eve_bases = randint(2, size=n)\n", + "intercepted_message = measure_message(message, eve_bases)\n", + "## Step 3\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "message[0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.4 ステップ4:\n", + "\n", + "ボブとアリスは自分たちが選んだ基底を公表し、使えないビットを捨てます:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "## Step 2\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "## Interception!!\n", + "eve_bases = randint(2, size=n)\n", + "intercepted_message = measure_message(message, eve_bases)\n", + "## Step 3\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "## Step 4\n", + "bob_key = remove_garbage(alice_bases, bob_bases, bob_results)\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.5 Step 5:\n", + "\n", + "ボブとアリスは彼らの鍵の同じ位置をランダムに選んで、量子ビットが盗聴されたかどうかを調べます:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " bob_sample = [1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1]\n", + "alice_sample = [1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]\n" + ] + } + ], + "source": [ + "np.random.seed(seed=3)\n", + "## Step 1\n", + "alice_bits = randint(2, size=n)\n", + "## Step 2\n", + "alice_bases = randint(2, size=n)\n", + "message = encode_message(alice_bits, alice_bases)\n", + "## Interception!!\n", + "eve_bases = randint(2, size=n)\n", + "intercepted_message = measure_message(message, eve_bases)\n", + "## Step 3\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "## Step 4\n", + "bob_key = remove_garbage(alice_bases, bob_bases, bob_results)\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)\n", + "## Step 5\n", + "sample_size = 15\n", + "bit_selection = randint(n, size=sample_size)\n", + "bob_sample = sample_bits(bob_key, bit_selection)\n", + "print(\" bob_sample = \" + str(bob_sample))\n", + "alice_sample = sample_bits(alice_key, bit_selection)\n", + "print(\"alice_sample = \"+ str(alice_sample))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bob_sample == alice_sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ダメです。ボブの鍵とアリスの鍵は一致しません。イブがステップ2とステップ3の間でメッセージを読もうと試み、量子ビットの状態を変えたためである、ということが私たちにはわかっています。アリスとボブが知りうる範囲においては、これは通信路のノイズによるものであるかもしれません。しかしいずれにしろ、2人は結果をすべて捨て去り、やり直さなければなりません―イブの盗聴の試みは失敗したのです。\n", + "\n", + "## 5. リスク分析\n", + "\n", + "イブがすべての量子ビットを測定するこのタイプの盗聴においては、ボブとアリスのサンプルが一致し、そのためにアリスが脆弱なメッセージをイブの通信路で送ってしまう可能性がわずかにあります。この確率を計算し、量子鍵配送がどの程度危険であるかを見てみましょう。\n", + "\n", + "- アリスとボブが量子ビットの結果を使うためには、2人が同じ基底を選んでいる必要があります。イブもこの基底を選んだ場合には、誤りを引き起こすことなく盗聴に成功します。これが起こる可能性は50%です。\n", + "- イブが *間違った* 基底、つまりアリスやボブとは異なった基底を選んだ場合、ボブには依然として、アリスが送ろうとした値を測定する可能性が50%あります。この場合には、盗聴もまた検出されません。\n", + "- しかしイブが *間違った* 基底、つまりアリスやボブとは異なった基底を選んだ場合、50%の確率で、アリスが送ろうとした値をボブは測定で得られないことになります。これにより、2人の鍵には違いが *生じます* 。\n", + "\n", + "![risk probability tree](images/qkd_risk.svg)\n", + "\n", + "アリスとボブが鍵のうちの1ビットを比較すると、ビットが一致する確率は $0.75$ であり、一致すればイブの盗聴には気が付かないでしょう。2ビットを比較すれば、盗聴が気づかれない可能性は $0.75^2 = 0.5625$ となります。アリスとボブが比較するのに選んだビット数 ($x$) によって、イブが気づかれない可能性を次のように計算できることがわかります:\n", + "\n", + "$$ P(\\text{undetected}) = 0.75^x $$\n", + "\n", + "上で行ったような方法で15ビットを比較することにすれば、イブが気づかれない可能性は1.3%です。これでは危険すぎるというのであれば、15ビットでなく50ビットにしてもよいでしょう。そうすれば知られずに覗き見られてしまう可能性は0.00006%になります。\n", + "\n", + "下に示したセルを実行することで、プロトコルをもう一度試してみることができます。 `sample_size` を小さな値に変えて、アリスとボブの鍵をイブが盗聴するのがどのくらい容易になるかを見てみてください。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eve's interference was detected.\n" + ] + } + ], + "source": [ + "n = 100\n", + "# Step 1\n", + "alice_bits = randint(2, size=n)\n", + "alice_bases = randint(2, size=n)\n", + "# Step 2\n", + "message = encode_message(alice_bits, alice_bases)\n", + "# Interception!\n", + "eve_bases = randint(2, size=n)\n", + "intercepted_message = measure_message(message, eve_bases)\n", + "# Step 3\n", + "bob_bases = randint(2, size=n)\n", + "bob_results = measure_message(message, bob_bases)\n", + "# Step 4\n", + "bob_key = remove_garbage(alice_bases, bob_bases, bob_results)\n", + "alice_key = remove_garbage(alice_bases, bob_bases, alice_bits)\n", + "# Step 5\n", + "sample_size = 15 # Change this to something lower and see if \n", + " # Eve can intercept the message without Alice\n", + " # and Bob finding out\n", + "bit_selection = randint(n, size=sample_size)\n", + "bob_sample = sample_bits(bob_key, bit_selection)\n", + "alice_sample = sample_bits(alice_key, bit_selection)\n", + "\n", + "if bob_sample != alice_sample:\n", + " print(\"Eve's interference was detected.\")\n", + "else:\n", + " print(\"Eve went undetected!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/quantum-phase-estimation.ipynb b/translations/ja/ch-algorithms/quantum-phase-estimation.ipynb new file mode 100644 index 0000000..cb7499a --- /dev/null +++ b/translations/ja/ch-algorithms/quantum-phase-estimation.ipynb @@ -0,0 +1,820 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子位相推定" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [概要](#overview) \n", + " 1.1 [直感的解釈](#intuition) \n", + " 1.2 [基礎となる数学](#maths)\n", + "2. [例:Tゲート](#example_t_gate) \n", + " 2.1 [回路の作成](#creating_the_circuit) \n", + " 2.2 [結果](#results) \n", + "3. [より精度を高める](#getting_more_precision) \n", + " 3.1 [問題](#the_problem) \n", + " 3.2 [解決策](#the_solution) \n", + "4. [実デバイスでの実験](#real_devices) \n", + " 4.1 [2.1の回路で](#circuit_2.1) \n", + "5. [練習問題](#exercises) \n", + "6. [今後の展望](#looking_forward)\n", + "7. [参考文献](#references)\n", + "8. [寄稿者](#contributors)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子位相推定は、量子計算における最も重要なサブルーチンの1つです。 多くの量子アルゴリズムの中心的な構成要素として機能します。このアルゴリズムの目的は次のとおりです。\n", + "\n", + "ユニタリ演算子$U$が、 $U\\vert\\psi \\rangle =e^{\\boldsymbol{2\\pi i} \\theta }|\\psi \\rangle$のように与えられた場合に、$\\theta$を推定します。 ここで、$|\\psi\\rangle$ は固有ベクトルであり、$e^{\\boldsymbol{2\\pi i}\\theta}$は対応する固有値です。$U$ はユニタリーなので、すべての固有値のノルムは1です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 概要 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "位相推定の一般的な量子回路を以下に示します。 上側のレジスターには$t$個の「カウント」量子ビットがあり、下のレジスターには$|\\psi\\rangle$の状態の量子ビットがあります:\n", + "![image1](images/qpe_tex_qz.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 直感的解釈 \n", + "\n", + "量子位相推定アルゴリズムは、位相キックバックを使用して、$U$の(フーリエ基底における)位相をカウントレジスターの$t$ 量子ビットに書き込みます。次に、逆QFTを使用して、フーリエ基底から計算基底に変換し、測定します。\n", + "\n", + "(QFTの章から)フーリエ基底では、 $0$から数えて$2^t$回で最上位の量子ビットが1回転したことを覚えているでしょう。 $0$から$2^t$の間の数である$x$を数えるには、この量子ビットをz軸を中心に$\\tfrac{x}{2^t}$ 回転させます。 次の量子ビットでは$\\tfrac{2x}{2^t}$回転し、3番目の量子ビットでは$\\tfrac{4x}{2^t}$回転します。\n", + "\n", + "![image2](images/qpe_intuition.jpg)\n", + "\n", + "\n", + "制御$U$ゲートを使うと、量子ビットは(キックバックにより)位相 $e^{2i\\pi\\theta}$に比例して回転します。 連続して$CU$ゲートを使用して、フーリエ基底で$0$ 〜 $2^t$の数値として位相$\\theta$をエンコードできるところまで、この回転を適切な回数繰り返します。\n", + "\n", + "次に、$QFT^\\dagger$を使用してこれを計算基底に変換します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 基礎となる数学 \n", + "\n", + "上記のように、この回路はユニタリー演算子$U$の位相を推定します。$U\\vert\\psi \\rangle =e^{\\boldsymbol{2\\pi i} \\theta }|\\psi \\rangle$において、$|\\psi\\rangle$は固有ベクトル、$e^{\\boldsymbol{2\\pi i}\\theta}$は対応する固有値で、$\\theta$を推定します。回路は次の手順です。\n", + "\n", + "i. **準備**:$\\vert\\psi\\rangle$を1量子ビットレジスターにセットします。 別の$n$個の量子ビットのセットは、値$2^n\\theta$を格納するカウントレジスターです。\n", + "\n", + "\n", + "$$ \\psi_0 = \\lvert 0 \\rangle^{\\otimes n} \\lvert \\psi \\rangle$$\n", + "\n", + " \n", + "\n", + "ii. **重ね合わせ**:$n$ビットのアダマールゲート操作$H^{\\otimes n}$をカウントレジスターに適用します。\n", + "\n", + "\n", + "\n", + "$$ \\psi_1 = {\\frac {1}{2^{\\frac {n}{2}}}}\\left(|0\\rangle +|1\\rangle \\right)^{\\otimes n} \\lvert \\psi \\rangle$$\n", + "\n", + "\n", + "\n", + "iii. **制御ユニタリー演算**:制御ビットが$|1\\rangle$の場合にのみ、ターゲットレジスターにユニタリー演算子 $U$ を適用する、制御ユニタリー演算$C-U$を導入する必要があります。$U$は、$U|\\psi \\rangle =e^{\\boldsymbol{2\\pi i} \\theta }|\\psi \\rangle$となる固有ベクトル$|\\psi\\rangle$ のユニタリー演算子であるため、次のようになります。\n", + "\n", + "\n", + "$$U^{2^{j}}|\\psi \\rangle =U^{2^{j}-1}U|\\psi \\rangle =U^{2^{j}-1}e^{2\\pi i\\theta }|\\psi \\rangle =\\cdots =e^{2\\pi i2^{j}\\theta }|\\psi \\rangle$$\n", + "\n", + "\n", + "すべての𝑛制御演算子 $C − U^{2^j}$を$0\\leq j\\leq n-1$において適用し、$|0\\rangle \\otimes |\\psi \\rangle +|1\\rangle \\otimes e^{2\\pi i\\theta }|\\psi \\rangle =\\left(|0\\rangle +e^{2\\pi i\\theta }|1\\rangle \\right)\\otimes |\\psi \\rangle$を使用すると以下のようになります。\n", + "\n", + "\n", + "\\begin{aligned}\n", + "\\psi_{2} & =\\frac {1}{2^{\\frac {n}{2}}} \\left(|0\\rangle+{e^{\\boldsymbol{2\\pi i} \\theta 2^{n-1}}}|1\\rangle \\right) \\otimes \\cdots \\otimes \\left(|0\\rangle+{e^{\\boldsymbol{2\\pi i} \\theta 2^{1}}}\\vert1\\rangle \\right) \\otimes \\left(|0\\rangle+{e^{\\boldsymbol{2\\pi i} \\theta 2^{0}}}\\vert1\\rangle \\right) \\otimes |\\psi\\rangle\\\\\\\\\n", + "& = \\frac{1}{2^{\\frac {n}{2}}}\\sum _{k=0}^{2^{n}-1}e^{\\boldsymbol{2\\pi i} \\theta k}|k\\rangle \\otimes \\vert\\psi\\rangle\n", + "\\end{aligned}\n", + "\n", + "ここで、$k$ はnビットの2進数の整数表現です。\n", + "\n", + "iv. **逆フーリエ変換**:上の式は、[量子フーリエ変換とそのQiskit実装](../ch-algorithms/quantum-fourier-transform.html)のnotebookで導出したように、量子フーリエ変換を適用した結果であることに注意してください。 QFTがn量子ビットの入力状態$\\vert x\\rangle$を出力として以下のようにマップすることを思い出してください。\n", + "\n", + "$$\n", + "QFT\\vert x \\rangle = \\frac{1}{2^\\frac{n}{2}}\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2}x} \\vert1\\rangle\\right) \n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^2}x} \\vert1\\rangle\\right) \n", + "\\otimes \n", + "\\ldots\n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^{n-1}}x} \\vert1\\rangle\\right) \n", + "\\otimes\n", + "\\left(\\vert0\\rangle + e^{\\frac{2\\pi i}{2^n}x} \\vert1\\rangle\\right) \n", + "$$\n", + "\n", + "上の式で$x$を$2^n\\theta$ に置き換えると、上記のステップ2で導出された式が正確に得られます。したがって、状態$\\vert2^n\\theta\\rangle$を復元するには、補助レジスターに逆フーリエ変換を適用します。そうすることで、以下を得られます。\n", + "$$\n", + "\\vert\\psi_3\\rangle = \\frac {1}{2^{\\frac {n}{2}}}\\sum _{k=0}^{2^{n}-1}e^{\\boldsymbol{2\\pi i} \\theta k}|k\\rangle \\otimes | \\psi \\rangle \\xrightarrow{\\mathcal{QFT}_n^{-1}} \\frac {1}{2^n}\\sum _{x=0}^{2^{n}-1}\\sum _{k=0}^{2^{n}-1} e^{-\\frac{2\\pi i k}{2^n}(x - 2^n \\theta)} |x\\rangle \\otimes |\\psi\\rangle\n", + "$$ \n", + "\n", + "v. **測定**:上記の式は$x = 2^n\\theta$付近でピークになります。$2^n\\theta$が整数の場合、計算基底で測定すると、高い確率で補助レジスターに位相が得られます。\n", + "\n", + "\n", + "$$ |\\psi_4\\rangle = | 2^n \\theta \\rangle \\otimes | \\psi \\rangle$$\n", + "\n", + "\n", + "$2^n\\theta$が整数でない場合、上記の式は $x = 2^n\\theta$ の近くでピークに達し、その確率は$4/\\pi^2 \\approx 40\\%$よりも高いものになります[1]。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 例:Tゲート " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "みなさんがよく知っている$T$ゲートを例として取り上げ、量子位相推定を使用してその位相を推定します。$T$ゲートは状態$|1\\rangle$に位相$e^\\frac{i\\pi}{4}$ を追加することを思い出してください。\n", + "\n", + "$$ T|1\\rangle = \n", + "\\begin{bmatrix}\n", + "1 & 0\\\\\n", + "0 & e^\\frac{i\\pi}{4}\\\\ \n", + "\\end{bmatrix}\n", + "\\begin{bmatrix}\n", + "0\\\\\n", + "1\\\\ \n", + "\\end{bmatrix}\n", + "= e^\\frac{i\\pi}{4}|1\\rangle $$\n", + "\n", + "\n", + "以下の式で与えられる $\\theta$ についてQPEを使って、\n", + "\n", + "\n", + "$$ T|1\\rangle = e^{2i\\pi\\theta}|1\\rangle $$\n", + "\n", + "\n", + "\n", + "$\\theta$を見つけることができます:\n", + "\n", + "\n", + "$$\\theta = \\frac{1}{8}$$\n", + "\n", + "\n", + "この例では、3量子ビットを使用して、 _正確な_ 結果(推定ではありません!)を得ます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 回路の作成 \n", + "まず、環境を準備しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#initialization\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import math\n", + "\n", + "# importing Qiskit\n", + "from qiskit import IBMQ, Aer, transpile, assemble\n", + "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", + "\n", + "# import basic plot tools\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、量子回路を設定します。 4量子ビットを使用します。qubit 0〜2はカウント量子ビットとして、qubit 3はユニタリー演算子($T$)の固有状態として使用します。\n", + "\n", + "$X$ ゲートを適用して、$\\vert\\psi\\rangle = \\vert1\\rangle$と初期化します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qpe = QuantumCircuit(4, 3)\n", + "qpe.x(3)\n", + "qpe.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "カウント量子ビットにアダマールゲートをかけます:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "for qubit in range(3):\n", + " qpe.h(qubit)\n", + "qpe.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、制御ユニタリー演算を実行します。**注意**:Qiskitでは量子ビットが上の画像とは逆のむきに並びます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "repetitions = 1\n", + "for counting_qubit in range(3):\n", + " for i in range(repetitions):\n", + " qpe.cp(math.pi/4, counting_qubit, 3); # This is C-U\n", + " repetitions *= 2\n", + "qpe.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "逆量子フーリエ変換を適用して、カウントレジスターの状態を変換します。 ここでは、$QFT^\\dagger$のコードを以下のように与えます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def qft_dagger(qc, n):\n", + " \"\"\"n-qubit QFTdagger the first n qubits in circ\"\"\"\n", + " # Don't forget the Swaps!\n", + " for qubit in range(n//2):\n", + " qc.swap(qubit, n-qubit-1)\n", + " for j in range(n):\n", + " for m in range(j):\n", + " qc.cp(-math.pi/float(2**(j-m)), m, j)\n", + " qc.h(j)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、カウントレジスターを測定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "qpe.barrier()\n", + "# Apply inverse QFT\n", + "qft_dagger(qpe, 3)\n", + "# Measure\n", + "qpe.barrier()\n", + "for n in range(3):\n", + " qpe.measure(n,n)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qpe.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 結果 " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aer_sim = Aer.get_backend('aer_simulator')\n", + "shots = 2048\n", + "t_qpe = transpile(qpe, aer_sim)\n", + "qobj = assemble(t_qpe, shots=shots)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果(`001`)のみが得られ、これは10進数に変換されると `1`となります。$\\theta$の結果を得るには、結果(`1`)を$2^n$で割る必要があります。\n", + "\n", + "\n", + "\n", + "$$ \\theta = \\frac{1}{2^3} = \\frac{1}{8} $$\n", + "\n", + "\n", + "\n", + "これはまさに私たちが期待した結果です!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 例:より精度を高める \n", + "### 3.1 問題 \n", + "\n", + "\n", + "$T$ゲートの代わりに、$\\theta = \\frac{1}{3}$のゲートを使用してみましょう。上の例のように回路を準備しました。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create and set up circuit\n", + "qpe2 = QuantumCircuit(4, 3)\n", + "\n", + "# Apply H-Gates to counting qubits:\n", + "for qubit in range(3):\n", + " qpe2.h(qubit)\n", + "\n", + "# Prepare our eigenstate |psi>:\n", + "qpe2.x(3)\n", + "\n", + "# Do the controlled-U operations:\n", + "angle = 2*math.pi/3\n", + "repetitions = 1\n", + "for counting_qubit in range(3):\n", + " for i in range(repetitions):\n", + " qpe2.cp(angle, counting_qubit, 3);\n", + " repetitions *= 2\n", + "\n", + "# Do the inverse QFT:\n", + "qft_dagger(qpe2, 3)\n", + "\n", + "# Measure of course!\n", + "for n in range(3):\n", + " qpe2.measure(n,n)\n", + "\n", + "qpe2.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's see the results!\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "shots = 4096\n", + "t_qpe2 = transpile(qpe2, aer_sim)\n", + "qobj = assemble(t_qpe2, shots=shots)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "予測される結果は$\\theta = 0.3333\\dots$です。実行の結果、最も可能性の高い結果は`010(bin) = 2(dec)` と`011(bin) = 3(dec)`であることが見てわかります。 これらの2つの結果から、それぞれ$\\theta = 0.25$ (off by 25%) と$\\theta = 0.375$ (off by 13%)が得られます。$\\theta$ の真の値は、カウントビットから取得できる値の間にあり、この回路は、不確実であり不正確であることがわかります。\n", + "\n", + "### 3.2 解決策 \n", + "より精度を上げるには、カウント量子ビットを追加するだけです。 さらに2つのカウント量子ビットを追加しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create and set up circuit\n", + "qpe3 = QuantumCircuit(6, 5)\n", + "\n", + "# Apply H-Gates to counting qubits:\n", + "for qubit in range(5):\n", + " qpe3.h(qubit)\n", + "\n", + "# Prepare our eigenstate |psi>:\n", + "qpe3.x(5)\n", + "\n", + "# Do the controlled-U operations:\n", + "angle = 2*math.pi/3\n", + "repetitions = 1\n", + "for counting_qubit in range(5):\n", + " for i in range(repetitions):\n", + " qpe3.cp(angle, counting_qubit, 5);\n", + " repetitions *= 2\n", + "\n", + "# Do the inverse QFT:\n", + "qft_dagger(qpe3, 5)\n", + "\n", + "# Measure of course!\n", + "qpe3.barrier()\n", + "for n in range(5):\n", + " qpe3.measure(n,n)\n", + "\n", + "qpe3.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "### Let's see the results!\n", + "aer_sim = Aer.get_backend('aer_simulator')\n", + "shots = 4096\n", + "t_qpe3 = transpile(qpe3, aer_sim)\n", + "qobj = assemble(t_qpe3, shots=shots)\n", + "results = aer_sim.run(qobj).result()\n", + "answer = results.get_counts()\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最も可能性の高い2つの測定結果は、`01011`(10進数の11)と`01010` (10進数の10)です。 これらから、次のように$\\theta$が求められます。\n", + "\n", + "$$\n", + "\\theta = \\frac{11}{2^5} = 0.344,\\;\\text{ or }\\;\\; \\theta = \\frac{10}{2^5} = 0.313\n", + "$$\n", + "\n", + "この2つの結果の$\\frac{1}{3}$ との誤差は、それぞれ3%と6%です。さきほどよりずっと優れた精度の結果が得られました!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 実デバイスでの実験 \n", + "### 4.1 2.1の回路で \n", + "\n", + "2.1節の回路は実際のデバイスで実行できます。回路を思い出してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qpe.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "IBMQ.load_account()\n", + "from qiskit.tools.monitor import job_monitor\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "santiago = provider.get_backend('ibmq_santiago')\n", + "\n", + "# Run with 2048 shots\n", + "shots = 2048\n", + "t_qpe = transpile(qpe, santiago, optimization_level=3)\n", + "job = santiago.run(t_qpe, shots=shots)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get the results from the computation\n", + "results = job.result()\n", + "answer = results.get_counts(qpe)\n", + "\n", + "plot_histogram(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "うまくいけば、最も可能性の高い結果は、シミュレーターから期待される結果である `001` になることがわかります。 シミュレーターとは異なり、 `001`以外も測定される可能性があります。これは、量子コンピューターにおけるノイズとゲートエラーによるものです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 練習問題 \n", + "\n", + "1. 異なるゲート($\\text{CNOT}$, 制御$S$, 制御$T^\\dagger$)で上記の実験を試してください。どのような結果が期待できますか? どのような結果が得られますか?\n", + "\n", + "2. 制御$Y$ゲートを使って実験してみてください。正しい結果が得られますか? (ヒント:$|\\psi\\rangle$ が$Y$の固有状態であることを確認してください!)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 今後の展望 \n", + "\n", + "制御$U$演算を実行するには $\\theta$ を知っている必要があったため、量子位相推定アルゴリズムは無意味に見えるかもしれません。後の章で、$\\theta$ が不明な状態で回路を作る方法を学び、この$\\theta$ について学習することで、非常に有用な情報が得られることが分かります(最も有名なのは、数を因数分解する方法です!)。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. 参考文献 \n", + "\n", + "[1] Michael A. Nielsen and Isaac L. Chuang. 2011. Quantum Computation and Quantum Information: 10th Anniversary Edition (10th ed.). Cambridge University Press, New York, NY, USA. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 8. 寄稿者 \n", + "03/20/2020 — Hwajung Kang (@HwajungKang) — Fixed inconsistencies with qubit ordering" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/quantum-walk-search-algorithm.ipynb b/translations/ja/ch-algorithms/quantum-walk-search-algorithm.ipynb new file mode 100644 index 0000000..afbc995 --- /dev/null +++ b/translations/ja/ch-algorithms/quantum-walk-search-algorithm.ipynb @@ -0,0 +1,954 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ba9d6e23", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子ウォークによる探索アルゴリズム" + ] + }, + { + "cell_type": "markdown", + "id": "fb9cec4d", + "metadata": {}, + "source": [ + "量子ウォークは古典のマルコフ連鎖の量子版であり、多くの量子アルゴリズムにとって重要なものです。この章ではグラフ上にマークした要素を見つける量子ウォークによる探索アルゴリズムを実装します。このアルゴリズムは古典に比べて二次加速を持ちます。\n", + "## 目次\n", + "1. [古典マルコフ連鎖](#markov)\n", + "2. [量子ウォーク](#qwalks)\n", + " 1. [コイン量子ウォーク](#coined)\n", + " 2. [セゲディ量子ウォーク](#szegedy)\n", + " 3. [コインとセゲディ量子ウォークの等価性](#equivalence)\n", + "3. [例: 超立方体上の量子ウォーク](#example1)\n", + "4. [量子ウォークによる探索アルゴリズム](#qwalkalgo)\n", + "5. [例: 4次元超立方体上の量子ウォークによる探索](#qiskiti)\n", + "6. [リファレンス](#references)\n", + "\n", + "## 1. 古典マルコフ連鎖 \n", + "マルコフ連鎖は現実のプロセスをモデル化するためによく使われる確率過程です。状態と遷移確率からなり、各時間ステップでの状態間の確率の移動を記述します。ここで紹介する離散時間マルコフ連鎖では、時間ステップは離散的です。マルコフ連鎖はマルコフ性を満たします、つまり次のステップでの確率過程は現在のステップのみに依存して、それ以前には依存しません。マルコフ連鎖は状態間の確率の移動を表現する遷移行列 P を持ちます。ここで、マルコフ連鎖の例と、その遷移行列 $P$ を示します。\n", + "\\begin{equation}\n", + "P=\n", + "\\begin{pmatrix}\n", + "0.1 & 0.3 & 0.3\\\\\n", + "0.1 & 0.1 & 0.2 \\\\\n", + "0.8 & 0.6 & 0.5\n", + "\\end{pmatrix}\n", + "\\label{eq:matrix_example}\n", + "\\end{equation}\n", + "\n", + "\n", + "遷移行列 $P$ が与えられると、$t$ 時間ステップ後の確率分布を $P^t$ により計算できます。\n", + "\n", + "## 2. 量子ウォーク \n", + "量子ウォークは古典のマルコフ連鎖の量子版です。測定するまでは、量子ウォークは全ての可能な経路の重ね合わせを取ります。また、量子干渉によりある状態は打ち消しあいます。この現象を、間違えた答えを消去するような設計に利用することで、量子ウォークアルゴリズムをランダムウォークよりも速くします。コイン量子ウォークとセゲディ量子ウォークがよく用いられ、これらはある条件下では等価になります。コイン量子ウォークはグラフ上の頂点を、セゲディ量子ウォークは辺を動きます。量子ウォークの実装の前にこの二つのモデルを紹介します。\n", + "\n", + " $\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle}$\n", + " $\\newcommand{\\bra}[1]{\\left\\langle{#1}\\right|}$\n", + "### 2.1 コイン量子ウォーク \n", + " コイン量子ウォークの簡単な例は、無限長の整数上の運動です。この場合、整数 $\\mathbb{Z}$ 上での位置を $\\{\\ket{j} : j \\in \\mathbb{Z} \\}$ とします。そして、コインの計算基底は $\\{\\ket{0}, \\ket{1}\\}$ とし、コインが $\\ket{0}$ の場合はある方向に動き、コインが $\\ket{1}$ の場合はもう一方に動きます。\n", + "\n", + "コイン量子ウォークはグラフの頂点上を動くので、頂点を状態とします。辺で繋がっている状態間のみ動くことができます。コインモデルでは、二つの量子状態空間と二つの演算子を使います。一つ目の状態空間は位置を表す位置状態です。上記の運動では、整数上のどこでも移動できるので、整数となります。もう一方は、コイン状態です。コイン状態は次のステップでどのように動くかを決定します。このコイン状態と位置状態とを合わせて、ヒルベルト空間上のベクトルとして表現できます。コイン状態を $\\mathcal{H}_C$ のベクトルとして表し、位置状態を $\\mathcal{H}_P$ のベクトルとして表すと、運動のすべての量子状態空間は $\\mathcal{H} = \\mathcal{H}_C \\otimes \\mathcal{H}_P$ となります。\n", + "\n", + "すでに述べたように、モデルには二つの演算子がありコイン演算子 $C$ とシフト演算子 $S$ です。コイン演算子は時間ステップ毎に $\\mathcal{H}_C$ に作用して重ね合わせ状態を作るため、全ての可能な経路を同時に動きます。整数上の運動では、時間ステップ毎に左と右の両方に動くことになります。いろいろなコイン演算子がありますが、よく用いられるのはアダマールコインとグローバーコインです。アダマールコインはアダマールゲートにより等確率での重ね合わせ状態を作ります: \n", + "\n", + "\\begin{equation}\n", + " H = \\frac{1}{\\sqrt{2}}\n", + "\\begin{bmatrix}\n", + "1 & 1 \\\\\n", + "1 & -1 \n", + "\\end{bmatrix}\n", + "\\end{equation}\n", + "\n", + "グローバーコインはグローバーのアルゴリズムにあるグローバーの拡散演算子を用い、以下のように定義します\n", + "\n", + "\\begin{equation}\n", + " G = \n", + " \\begin{bmatrix}\n", + "\\frac{2}{n} -1 & \\frac{2}{n} & \\ldots & \\frac{2}{n}\\\\\n", + "\\frac{2}{n} & \\frac{2}{n} - 1 & \\ldots & \\frac{2}{n} \\\\\n", + "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", + "\\frac{2}{n} & \\frac{2}{n} & \\ldots & \\frac{2}{n} -1\n", + "\\end{bmatrix}\n", + "\\end{equation}\n", + "\n", + "アダマールコインのようにグローバーコインも重ね合わせ状態を作ります。しかし、振る舞いは少し異なります。位置 $\\ket{000}$ にグローバーコインを作用させると、下図のような状態ベクトルの確率分布を得ます。このように、アダマールコインのような等確率の重ね合わせ状態を作りません。他の状態に比べて、$\\ket{000}$ により大きな確率を持ちます。\n", + "\n", + "\n", + "\n", + "モデルのもう一つの演算子のシフト演算子は $\\mathcal{H}_P$ に作用して、次の位置に移動させます。整数上の運動では、シフト演算子により、コインが $\\ket{0}$ の時は左に動き、コインが $\\ket{1}$ の時は右に動きます: \n", + "\n", + "\\begin{equation}\n", + " S \\ket{0}\\ket{j} = \\ket{0}\\ket{j+1}\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + " S \\ket{1}\\ket{j} = \\ket{1}\\ket{j-1}\n", + "\\end{equation}\n", + "\n", + "\n", + "上記で定義されたシフト演算子で、一ステップ分のコイン量子ウォークを以下のユニタリ演算子として表現できます\n", + "\\begin{equation}\n", + " U = SC,\n", + "\\end{equation}\n", + "\n", + "ここで C はコイン演算子です。整数上の量子ウォークでアダマールコインを用いましたが、C はアダマールコインでも、グローバーコインでも、その他のコイン演算子でも用いることができます。\n", + "\n", + "\n", + "先に進みましょう。$t$ 時間ステップ後の量子状態 $\\ket{\\psi}$ は以下で表すことができます\n", + "\\begin{equation}\n", + " \\ket{\\psi (t)} = U^t \\ket{\\psi(0)},\n", + "\\end{equation}\n", + "ここで、$\\ket{\\psi(0)}$ は初期状態で、U は一ステップ分の演算子です[1]。\n", + "\n", + "コイン量子ウォークは多くの正則グラフ(全ての頂点で隣接する頂点の数が同じグラフ)で安定しています[2]。 もう一つのモデルであるセゲディ量子ウォークは非正則グラフに適しており、次の章で解説します。\n", + "\n", + "### 2.2 セゲディ量子ウォーク \n", + "コイン量子ウォークはグラフの頂点を動きましたが、セゲディ量子ウォークは元のグラフの二部二重被覆グラフ上の辺を動きます。二重被覆グラフとは元のグラフの二倍の頂点を持つグラフです。二部二重被覆グラフの二つの頂点は、元のグラフでその頂点が繋がっている場合にのみ、辺で繋がります。このモデルを作るには、古典のランダムウォークの遷移確率行列 P から始めます。1 章で示したように、古典の離散時間ランダムウォークは遷移行列 P で記述されます。任意の $N \\times N$ の遷移行列 $P$ を持つ $N$-頂点グラフに対して、離散時間量子ウォークをヒルベルト空間 $\\mathcal{H}^N \\otimes \\mathcal{H}^N$ 上のユニタリ演算子として定義できます。$P_{jk}$ を $j$ から $k$ へ遷移する確率と定義しましょう。運動を定義する前に、正規化された状態を定義します\n", + "\n", + "\\begin{equation}\n", + " \\ket{\\psi_j} := \\sum_{k=1}^N \\sqrt{P_{kj}} \\ket{j,k}, \\; j=1,...,N\n", + "\\end{equation}\n", + "\n", + "そして、${\\ket{\\psi_j}}:j=1,...,N$ への射影は\n", + "\n", + "\\begin{equation}\n", + " \\Pi := \\sum_{j=1}^N \\ket{\\psi_j} \\bra{\\psi_j}\n", + "\\label{eq:sz_pi}\n", + "\\end{equation}\n", + "\n", + "シフト演算子を導入します:\n", + "\n", + "\\begin{equation}\n", + " S := \\sum_{j,k=1}^N \\ket{j,k} \\bra{k,j}\n", + "\\label{eq:sz_s}\n", + "\\end{equation}\n", + "\n", + "上で定義した $S$ と $\\Pi$ を用いて一ステップ分の離散時間量子ウォークを定義します:\n", + "\n", + "\\begin{equation}\n", + " U := S(2 \\Pi - 1),\n", + "\\label{eq:sz_op}\n", + "\\end{equation}\n", + "\n", + "ここで、$(2 \\Pi - 1)$ は反射演算子です。また、$t$ ステップ後の状態は $U^t$ により定義できます[2]。\n", + "\n", + "### 2.3 コインとセゲディ量子ウォークの等価性 \n", + "グローバーコインによるコイン量子ウォークはセゲディ量子ウォークと等価であることが知られています。詳細は Thomas G. Wong による文献[3]を参照ください、文献では演算子の等価性についても示されています。\n", + "\n", + "\n", + "## 3. 例: 超立方体上の量子ウォーク \n", + "超立方体は $3$次元の立方体を $n$次元化したものです。全ての頂点の次数は $n$ で、超立方体は $N=2^n$個の頂点を持ちます。二値の $n$タプルを用いて超立方体の頂点を表現できます。隣接する頂点の二値表現は一つの二値のみが異なります。例えば4次元超立方体の場合、頂点 $0000$ の隣接頂点は $0001$, $0010$, $0100$, $1000$ です。したがって、ハミング距離が1の全ての頂点と接続しています。辺も同時にラベルできます。二つの隣接する頂点のa番目のビットが異なる場合、$a$とラベルされた辺で繋がります。\n", + "\n", + "超立方体のコイン量子ウォークを表現するヒルベルト空間は $\\mathcal{H} = \\mathcal{H}^n \\otimes \\mathcal{H}^{2^n}$ です、ここで、$\\mathcal{H}^n$ はコイン空間で、$\\mathcal{H}^{2^n}$ は位置です。計算基底では\n", + "\n", + "\\begin{equation}\n", + " \\big\\{ \\ket{a,\\vec{v}}, 0 \\leq a \\leq n-1, \\vec{v} \\in \\{(00...00), (00...01), ....., (11...11 )\\} \\big\\}. \n", + "\\end{equation}\n", + "\n", + "辺 $a$ を表すコイン計算基底 $a$ は、移動の方向を表します。$a=0$ の場合、現在の辺とは一番目の二値が異なる辺へ移動します。また、$a=1$ の場合、現在の辺とは二番目の二値が異なる辺へ移動します。$\\vec{e}_a$ を $a$ 以外は全て $0$ をとる二値の n タプルとします。そして、シフト演算子 $S$ は 状態 $\\ket{a} \\ket{\\vec{v}}$ を $\\ket{a} \\ket{\\vec{v} \\oplus \\vec{e}_a}$ へ移動します。\n", + "\n", + "\\begin{equation}\n", + " S \\ket{a} \\ket{\\vec{v}} = \\ket{a} \\ket{\\vec{v} \\oplus \\vec{e}_a}.\n", + "\\end{equation}\n", + "\n", + "ここでは、グローバーコイン $G$ を用います。そして発展演算子は\n", + "\n", + "\\begin{equation}\n", + " U = SG.\n", + "\\end{equation}\n", + "\n", + "次に、4次元超立方体の量子ウォークをどのように実装するのかを紹介します。コイン演算子とシフト演算子の実装が必要となります。Qiskitから必要なライブラリをインポートするところから始めます。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "de5e4475", + "metadata": {}, + "outputs": [], + "source": [ + "# Importing standard Qiskit libraries\n", + "from qiskit import QuantumCircuit, execute, Aer, IBMQ, QuantumRegister, ClassicalRegister\n", + "from qiskit.compiler import transpile, assemble\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.visualization import *\n", + "from qiskit.circuit.library import QFT\n", + "from numpy import pi\n", + "from qiskit.quantum_info import Statevector\n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "# Loading your IBM Q account(s)\n", + "provider = IBMQ.load_account()" + ] + }, + { + "cell_type": "markdown", + "id": "5f13edaa", + "metadata": {}, + "source": [ + "回路は位置に4個、コインに2個用いて、6量子ビットからなります。前に述べたようにコインはグローバーコインで、グローバーのアルゴリズムの拡散演算子です。この実装からはじめます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "427c1f4a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_step_circuit = QuantumCircuit(6, name=' ONE STEP') \n", + "# Coin operator\n", + "one_step_circuit.h([4,5])\n", + "one_step_circuit.z([4,5])\n", + "one_step_circuit.cz(4,5)\n", + "one_step_circuit.h([4,5])\n", + "one_step_circuit.draw() " + ] + }, + { + "cell_type": "markdown", + "id": "ef61d782", + "metadata": {}, + "source": [ + "次にシフト演算子を実装します。隣接する頂点にだけ移動します、また、全ての隣接する頂点は一ビットだけ異なります。コインに従って移動するため、頂点の量子ビットの一つに対してNOTゲートを作用します。コインが $\\ket{11}$ 状態の時は、一番目の頂点の量子ビットが異なる状態に移動します。コインが $\\ket{10}$ または $\\ket{01}$ 状態の時は、それぞれ二番目、三番目の量子ビットが異なる状態に移動します。最後にグローバーコインが $\\ket{00}$ の時は、4番目の量子ビットを反転します。これは、グローバーコインの後に、CCNOTゲートとNOTゲートにより実装します。これら全てで4次元超立方体の量子ウォークの一ステップ分になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d3ab5492", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Shift operator function for 4d-hypercube\n", + "def shift_operator(circuit):\n", + " for i in range(0,4):\n", + " circuit.x(4)\n", + " if i%2==0:\n", + " circuit.x(5)\n", + " circuit.ccx(4,5,i)\n", + "\n", + "shift_operator(one_step_circuit)\n", + "\n", + "one_step_gate = one_step_circuit.to_instruction() \n", + "one_step_circuit.draw() " + ] + }, + { + "cell_type": "markdown", + "id": "159bca03", + "metadata": {}, + "source": [ + "## 4. 量子ウォークによる探索アルゴリズム \n", + "次にグラフ上にマークした要素を見つける量子ウォークによる探索アルゴリズムを実装します。はじめにアルゴリズムを紹介し、その後で実装します。量子ウォークによる探索アルゴリズムは、量子ウォークを用いて、グラフ上にマークした要素を見つける問題を解きます。つまり、ある頂点集合 $|M|$ をマークして、グラフ上の任意の頂点から始め、マークした複数の頂点を見つけるまで移動します。量子ウォークによる探索では基底として、現在の頂点と直前の頂点に対応する二つのレジスタを必要とします。つまりグラフの辺に対応します。遷移行列 $P$ による古典マルコフ連鎖を基にして、$\\mathcal{H}$ 上のユニタリ演算子 $W(P)$ により量子ウォークを記述します。また、頂点 $x$ に隣接する頂点の一様な重ね合わせ状態として $\\ket{p_x} = \\sum_y \\sqrt{P_{xy}}\\ket{y}$ を定義します。$\\ket{x}\\ket{y}$ を一つの基底とします。もし $x$ がマークした頂点の場合、基底 $\\ket{x}\\ket{y}$ を ''good'' と定義します。それ以外を ''bad'' とします。そして、''good'' と ''bad'' 状態は: \n", + "\n", + "\\begin{equation}\n", + " \\ket{G} = \\frac{1}{\\sqrt{|M|}} \\sum_{x \\in M} \\ket{x} \\ket{p_x}, \\;\n", + " \\ket{B} = \\frac{1}{\\sqrt{N-|M|}} \\sum_{x \\notin M} \\ket{x} \\ket{p_x},\n", + "\\end{equation}\n", + "\n", + "これらは good および bad の基底の重ね合わせ状態です。次に、$\\epsilon = |M|/N$ と $\\theta = \\arcsin(\\sqrt{\\epsilon})$ を定義します。\n", + "\n", + "\n", + "まとめると、アルゴリズムは以下の三つのステップからなります:\n", + "\n", + "\n", + "1. 初期状態として全ての辺の一様な重ね合わせ状態を準備 $\\ket{U} = \\frac{1}{\\sqrt{N}} \\sum_{x} \\ket{x} \\ket{p_x} = \\sin{\\theta} \\ket{G} + \\cos{\\theta} \\ket{B}$\n", + "2. $O(1/\\sqrt{\\epsilon})$ 回繰り返し:\n", + " \n", + " (a) $\\ket{B}$ での反射\n", + " \n", + " (b) $\\ket{U}$ での反射\n", + "\n", + "3. 計算基底での測定を実施\n", + "\n", + "\n", + "ステップ $1$ は、アダマールゲートと、$x$ が一つ目のレジスタと等しい時にだけ位相をシフトする位相オラクルを用いて反射を行うことで簡単に実装できます。\n", + "\n", + "\n", + "ステップ 2(b) は以下の写像を行うユニタリ変換 $R(P)$ を探すことと等価です:\n", + "\\begin{align}\n", + "\\label{eq:mapping_1}\n", + " \\ket{U} &\\mapsto \\ket{U}, \\: \\text{と} \\\\\n", + " \\ket{\\psi} &\\mapsto -\\ket{\\psi}, \\: \\forall \\ket{\\psi} \\text{$\\ket{U}$ に直交する $W(P)$ の固有ベクトルに含まれる場合}\n", + "\\label{eq:mapping_2}\n", + "\\end{align}\n", + "\n", + "この演算子を探すために、$W(P)$ の位相推定を行います。上記で $W(P)$ をランダムウォークの発展演算子として定義しました。2.1 章で見たように、これはユニタリ演算子です。従って、$W(P)$ の固有値のノルムは $1$ となります。そこで、$W(P)$ の固有値を $e^{\\pm 2i\\theta_j}$ と書き直します。ユニタリ演算子 $W(P)$ は固有値が $1$ の固有ベクトル $\\ket{U}$ を持ちます。これは、$\\theta_1=0$ により得られます。$R(P)$ は補助量子ビットを加えて $O(1/\\sqrt{\\delta})$ の精度で位相推定を行うことで $\\ket{U}$ を見つけます、ここで、$\\delta$ は $P$ のスペクトルギャップです。これを行うには、$W(P)$ を $O(1/\\sqrt{\\delta})$ 回作用する必要があります。$\\ket{w}$ を $W(P)$ の固有ベクトルで、固有値 $e^{\\pm 2i\\theta_j}$ を持つとしましょう。 $\\tilde{\\theta_j}$ を位相推定による $\\theta_j$ のもっとも良い推定値と仮定します。ステップ 2(b) の $\\ket{w}$ の写像を与える演算子 $R(P)$ は文献[4]で与えられています。\n", + "\n", + "\\begin{equation}\n", + " \\ket{w} \\ket{0} \\mapsto \\ket{w} \\ket{\\tilde{\\theta_j}} \\mapsto (-1)^{|\\tilde{\\theta_j} \\neq 0|} \\ket{w} \\ket{\\tilde{\\theta_j}} \\mapsto (-1)^{|\\tilde{\\theta_j} \\neq 0|} \\ket{w} \\ket{0}\n", + "\\end{equation}\n", + "\n", + "\n", + "## 5.例: 4次元超立方体上の量子ウォークによる探索 \n", + "\n", + "\n", + "量子ウォークによる探索アルゴリズムは $O(1/\\sqrt{\\epsilon})$ ステップでマークされた頂点の集合を探すことができます、ここで $\\epsilon = |M|/N$、$M$ はマークした頂点数、$N$ は全ての頂点数です。このアルゴリズムは元はセゲディ量子ウォークを使い、量子状態を表現する二つの頂点レジスタを用いました。しかしグローバーコインを用いるコイン量子ウォークはセゲディ量子ウォークと等価で、コイン量子ウォークは一般的に簡素に実装できるため、コイン量子ウォークによる実装を選びます。3 章で紹介した4次元超立方体を用います。\n", + "\n", + "まとめると、以下のようにアルゴリズムを実装します。ステップ 1 を行うには、頂点レジスタの全ての量子ビットにアダマールゲートを作用させて全ての辺の一様な重ね合わせ状態を作ります。ステップ 2(a) では、位相オラクルを実装します。ステップ 2(b) は、超立方体の量子ウォークの一ステップ分の位相推定と、$\\theta \\neq 0$ となるすべての量子状態のマークを行います。これを補助量子ビットの回転により行います。最後のステップは、位相推定の逆演算を行います。位相推定に必要な量子ビットは $\\theta$ の精度に依存します。\n", + "\n", + "以下、4次元超立方体の量子ウォークによる探索アルゴリズムを実装します。" + ] + }, + { + "cell_type": "markdown", + "id": "5e1296db", + "metadata": {}, + "source": [ + "このアルゴリズムでは、一ステップ分のゲートに対して以前実装した反転を必要とします。これはビルトイン関数 inverse() で行えます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "60fb5044", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_step_circuit.inverse().draw() " + ] + }, + { + "cell_type": "markdown", + "id": "a30255e6", + "metadata": {}, + "source": [ + "一ステップ分のゲートの反転は後で位相推定の逆計算に使用します。3 章で実装した一ステップ分のゲートとその反転のゲートは、制御ゲートを必要とします。これらを後に制御量子ビットに応じて使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "cb819da1", + "metadata": {}, + "outputs": [], + "source": [ + "# Make controlled gates\n", + "inv_cont_one_step = one_step_circuit.inverse().control()\n", + "inv_cont_one_step_gate = inv_cont_one_step.to_instruction()\n", + "cont_one_step = one_step_circuit.control()\n", + "cont_one_step_gate = cont_one_step.to_instruction()" + ] + }, + { + "cell_type": "markdown", + "id": "ed43f489", + "metadata": {}, + "source": [ + "制御された一ステップ分のゲートと、制御された一ステップ分の反転ゲートは位相推定に用いられます。位相推定には量子フーリエ変換も用います。Qiskit では量子フーリエ変換を実装した QFT 関数があります。位相推定には逆量子フーリエ変換を用いますが、位相推定の逆計算にも通常の QFT を使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e5cb4a98", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inv_qft_gate = QFT(4, inverse=True).to_instruction() \n", + "qft_gate = QFT(4, inverse=False).to_instruction()\n", + "\n", + "QFT(4, inverse=True).decompose().draw(\"mpl\")" + ] + }, + { + "cell_type": "markdown", + "id": "253629e1", + "metadata": {}, + "source": [ + "位相推定を実装する前に、1011 と 1111 をマークする位相オラクルを実装します。その後、回路を作成します。これはアルゴリズムのステップ 2(a) です。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "29d92511", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "phase_circuit = QuantumCircuit(6, name=' phase oracle ')\n", + "# Mark 1011\n", + "phase_circuit.x(2)\n", + "phase_circuit.h(3)\n", + "phase_circuit.mct([0,1,2], 3)\n", + "phase_circuit.h(3)\n", + "phase_circuit.x(2)\n", + "# Mark 1111\n", + "phase_circuit.h(3)\n", + "phase_circuit.mct([0,1,2],3)\n", + "phase_circuit.h(3)\n", + "phase_oracle_gate = phase_circuit.to_instruction()\n", + "# Phase oracle circuit\n", + "phase_oracle_circuit = QuantumCircuit(11, name=' PHASE ORACLE CIRCUIT ')\n", + "phase_oracle_circuit.append(phase_oracle_gate, [4,5,6,7,8,9])\n", + "phase_circuit.draw() " + ] + }, + { + "cell_type": "markdown", + "id": "d940c64e", + "metadata": {}, + "source": [ + "他の量子ビットがゼロでない場合に補助量子ビットを回転するゲートを実装します。このゲートは位相推定で用いられ、$\\theta \\neq 0$ の時に補助量子ビットを回転します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e180e3cb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Mark q_4 if the other qubits are non-zero \n", + "mark_auxiliary_circuit = QuantumCircuit(5, name=' mark auxiliary ')\n", + "mark_auxiliary_circuit.x([0,1,2,3,4])\n", + "mark_auxiliary_circuit.mct([0,1,2,3], 4)\n", + "mark_auxiliary_circuit.z(4)\n", + "mark_auxiliary_circuit.mct([0,1,2,3], 4)\n", + "mark_auxiliary_circuit.x([0,1,2,3,4])\n", + "\n", + "mark_auxiliary_gate = mark_auxiliary_circuit.to_instruction()\n", + "mark_auxiliary_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "id": "abfa2ff1", + "metadata": {}, + "source": [ + "次にアルゴリズムのステップ 2(b) を実装します。このステップは、量子ウォーク一ステップ分の位相推定と、$\\theta \\neq 0$ の時の補助量子ビットの回転操作を含みます。このために、直前に作成した mark_auxiliary_gate を用います。その後、位相推定の逆演算を行います。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "0b18ab93", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Phase estimation\n", + "phase_estimation_circuit = QuantumCircuit(11, name=' phase estimation ')\n", + "phase_estimation_circuit.h([0,1,2,3])\n", + "for i in range(0,4):\n", + " stop = 2**i\n", + " for j in range(0,stop):\n", + " phase_estimation_circuit.append(cont_one_step, [i,4,5,6,7,8,9])\n", + "\n", + "# Inverse fourier transform\n", + "phase_estimation_circuit.append(inv_qft_gate, [0,1,2,3])\n", + "\n", + "# Mark all angles theta that are not 0 with an auxiliary qubit\n", + "phase_estimation_circuit.append(mark_auxiliary_gate, [0,1,2,3,10])\n", + "\n", + "# Reverse phase estimation\n", + "phase_estimation_circuit.append(qft_gate, [0,1,2,3]) \n", + "\n", + "for i in range(3,-1,-1):\n", + " stop = 2**i\n", + " for j in range(0,stop):\n", + " phase_estimation_circuit.append(inv_cont_one_step, [i,4,5,6,7,8,9])\n", + "phase_estimation_circuit.barrier(range(0,10))\n", + "phase_estimation_circuit.h([0,1,2,3])\n", + "\n", + "# Make phase estimation gate\n", + "phase_estimation_gate = phase_estimation_circuit.to_instruction()\n", + "phase_estimation_circuit.draw() " + ] + }, + { + "cell_type": "markdown", + "id": "101cce65", + "metadata": {}, + "source": [ + "ここで、これまで作成したゲートを用いて、量子ウォークによる探索アルゴリズムの全体を実装します。最初は、ステップ 1 の頂点とコインの量子ビットにアダマールゲートを作用させます。その後、ステップ 2(a) と 2(b) の位相オラクルゲートと位相推定ゲートを繰り返し作用させます。4 章でアルゴリズムを説明したように、$O(1/\\sqrt{\\epsilon})$ 回の繰り返しが必要です。最後に頂点量子ビットを測定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "5573b106", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Implementation of the full quantum walk search algorithm\n", + "theta_q = QuantumRegister(4, 'theta')\n", + "node_q = QuantumRegister(4, 'node')\n", + "coin_q = QuantumRegister(2, 'coin')\n", + "auxiliary_q = QuantumRegister(1, 'auxiliary')\n", + "creg_c2 = ClassicalRegister(4, 'c')\n", + "circuit = QuantumCircuit(theta_q, node_q, coin_q, auxiliary_q, creg_c2)\n", + "# Apply Hadamard gates to the qubits that represent the nodes and the coin\n", + "circuit.h([4,5,6,7,8,9])\n", + "iterations = 2\n", + "\n", + "for i in range(0,iterations):\n", + " circuit.append(phase_oracle_gate, [4,5,6,7,8,9])\n", + " circuit.append(phase_estimation_gate, [0,1,2,3,4,5,6,7,8,9,10])\n", + "\n", + "circuit.measure(node_q[0], creg_c2[0])\n", + "circuit.measure(node_q[1], creg_c2[1])\n", + "circuit.measure(node_q[2], creg_c2[2])\n", + "circuit.measure(node_q[3], creg_c2[3])\n", + "circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "id": "2b4e8cdb", + "metadata": {}, + "source": [ + "最後に、この実装を qasm シミュレータで実行します。マークした状態へとはっきりと集まっていることが分かります。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "682d2f40", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend = Aer.get_backend('qasm_simulator') \n", + "job = execute( circuit, backend, shots=1024 ) \n", + "hist = job.result().get_counts() \n", + "plot_histogram( hist )" + ] + }, + { + "cell_type": "markdown", + "id": "be8303f3", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "1. Renato Portugal. Quantum Walks and Search Algorithms. New York, NY: Springer New York, 2013\n", + "2. Markus G. Kuhn.Some Introductory Notes on Quantum Computing. Apr. 2000\n", + "3. Thomas G. Wong. “Equivalence of Szegedy’s and coined quantum walks”. In: Quantum InformationProcessing 16.9 (July 2017). ISSN: 1573-1332. DOI:10.1007/s11128-017-1667-y. URL:http://dx.doi.org/10.1007/s11128-017-1667-y.37\n", + "4. Ronald de Wolf. Quantum Computing: Lecture Notes. 2021. arXiv:1907.09415 [quant-ph]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7c11b1c1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/anaconda3/lib/python3.7/site-packages/qiskit/aqua/__init__.py:86: DeprecationWarning: The package qiskit.aqua is deprecated. It was moved/refactored to qiskit-terra For more information see \n", + " warn_package('aqua', 'qiskit-terra')\n" + ] + }, + { + "data": { + "text/html": [ + "

    Version Information

    Qiskit SoftwareVersion
    qiskit-terra0.18.0
    qiskit-aer0.8.2
    qiskit-ignis0.6.0
    qiskit-ibmq-provider0.15.0
    qiskit-aqua0.9.4
    qiskit0.28.0
    System information
    Python3.7.7 (default, May 6 2020, 04:59:01) \n", + "[Clang 4.0.1 (tags/RELEASE_401/final)]
    OSDarwin
    CPUs8
    Memory (Gb)32.0
    Tue Oct 05 13:51:31 2021 BST
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "0779c1df85ec49dfae1f685fa4ef119a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "grid_area": "right", + "padding": "0px 0px 0px 0px", + "width": "70px" + } + }, + "1887d032331a4010bde8fa0c23dc9399": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "19e4514e0e9a4a5db426b984bfbf1fe6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "1ae82382b59649ffb36c2f3685f8615a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_29dd58b2090c4d30b8a5dbc31fb23f5a", + "style": "IPY_MODEL_19e4514e0e9a4a5db426b984bfbf1fe6", + "value": "
    Message
    " + } + }, + "23af9ca06e1d4e7c91f9ee9326848d52": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_e8ebc71a038343909fd2f05e5cc38c69", + "style": "IPY_MODEL_31507f054b5a4eec9e65de3cae81718f", + "value": "
    Queue
    " + } + }, + "29dd58b2090c4d30b8a5dbc31fb23f5a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "29f374721ba043318ae1f2bab7cee291": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "margin": "0px 0px 10px 0px" + } + }, + "31507f054b5a4eec9e65de3cae81718f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "31916a00a6ce46448b8b6d1387087441": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "190px" + } + }, + "32fb1e52cf48418fb654235bc5546868": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "95px" + } + }, + "44d2f02f85d64f06adff0a5a16a5fe1b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "145px" + } + }, + "67ffb89bdb414c20942b6b08c3aecc38": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "button_style": "primary", + "description": "Clear", + "layout": "IPY_MODEL_0779c1df85ec49dfae1f685fa4ef119a", + "style": "IPY_MODEL_f66d8db8683f44f0a0f446d0ceac3f91" + } + }, + "6f3eccaca0354b1b89186efd010a53db": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_a5bef5e487bf4eb0824d61c258ca140c", + "IPY_MODEL_def9a66611c24580a426662fb8fd30e7", + "IPY_MODEL_9e100310b7e44a079ee980bf34f6f5da", + "IPY_MODEL_23af9ca06e1d4e7c91f9ee9326848d52", + "IPY_MODEL_1ae82382b59649ffb36c2f3685f8615a" + ], + "layout": "IPY_MODEL_b867f46a07da4384b52f5feb1a54fbe4" + } + }, + "7182db07564244618d8912e746b43ed5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "width": "100%" + } + }, + "7353ef14545f4eeea2d6164e790d4d7b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_29f374721ba043318ae1f2bab7cee291", + "style": "IPY_MODEL_1887d032331a4010bde8fa0c23dc9399", + "value": "

    Circuit Properties

    " + } + }, + "89016c1491e643a09e6cab322bf41364": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "9369465b46244cd7b3e647d0b702cf3e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "9e100310b7e44a079ee980bf34f6f5da": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_32fb1e52cf48418fb654235bc5546868", + "style": "IPY_MODEL_9369465b46244cd7b3e647d0b702cf3e", + "value": "
    Status
    " + } + }, + "a5bef5e487bf4eb0824d61c258ca140c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_31916a00a6ce46448b8b6d1387087441", + "style": "IPY_MODEL_89016c1491e643a09e6cab322bf41364", + "value": "
    Job ID
    " + } + }, + "b867f46a07da4384b52f5feb1a54fbe4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "margin": "0px 0px 0px 37px", + "width": "600px" + } + }, + "def9a66611c24580a426662fb8fd30e7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_44d2f02f85d64f06adff0a5a16a5fe1b", + "style": "IPY_MODEL_df813729b1c74dcfa409477185519365", + "value": "
    Backend
    " + } + }, + "df813729b1c74dcfa409477185519365": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "e8ebc71a038343909fd2f05e5cc38c69": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "70px" + } + }, + "ef6a9c18f270452d8496eef2fa55d962": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "children": [ + "IPY_MODEL_67ffb89bdb414c20942b6b08c3aecc38" + ], + "layout": "IPY_MODEL_7182db07564244618d8912e746b43ed5" + } + }, + "f66d8db8683f44f0a0f446d0ceac3f91": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/translations/ja/ch-algorithms/shor.ipynb b/translations/ja/ch-algorithms/shor.ipynb new file mode 100644 index 0000000..bf5025d --- /dev/null +++ b/translations/ja/ch-algorithms/shor.ipynb @@ -0,0 +1,1259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ショアのアルゴリズム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ショア(Shor)のアルゴリズムは、多項式時間で整数を因数分解することで有名です。最もよく知られている古典的なアルゴリズムは、2つの素数の積の因数分解に超多項式時間が必要です。よって、広く使われている暗号システムRSAは、十分大きな整数の場合、因数分解が不可能であることを前提としています。\n", + "\n", + "この章では、ショアのアルゴリズムの量子部分に焦点を当てます。それは、実際には、_周期発見_ の問題を解きます。因数分解の問題は多項式時間の周期発見問題に変換できるため、ショアのアルゴリズムによる効率的な周期発見アルゴリズムを使用して整数を効率的に因数分解することができます。\n", + "$a^x\\bmod N$ の周期を効率的に計算できれば、効率的に因数分解できることを示すのに十分です。周期発見はそれ自体で価値のある問題なので、最初にこれを説明し、次にこれを使用して5章でどのように因数分解できるかについて説明します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Imports Successful\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from qiskit import QuantumCircuit, Aer, execute\n", + "from qiskit.visualization import plot_histogram\n", + "from math import gcd\n", + "from numpy.random import randint\n", + "from tabulate import tabulate\n", + "from fractions import Fraction\n", + "print(\"Imports Successful\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 問題: 周期発見\n", + "\n", + "周期関数を見てみましょう:\n", + "\n", + "$$ f(x) = a^x \\bmod{N}$$\n", + "\n", + "
    \n", + " 注意: モジュロ(Modulo) & モジュラー演算 (ここをクリックして開く)\n", + "\n", + "\n", + "モジュロ演算(「mod」と省略)は、ある数値を別の数値で割ったときの剰余を見つけることを意味します。例えば:\n", + "\n", + "$$ 17 \\bmod 5 = 2 $$\n", + "\n", + "$17 \\div 5 = 3$ なので、余りは$2$ です(つまり、$17 = (3\\times 5) + 2$)。 Pythonでは、モジュロ演算は% 記号で示されます。 \n", + " \n", + "この動作は、数値が特定の値(モジュラス)に達した後に数値が「折り返される」モジュラー演算で使用されます。モジュラー演算を使用して、次のように書くことができます:\n", + "\n", + "$$ 17 = 2 \\pmod 5$$\n", + "\n", + "ここで、$\\pmod 5$ は、式の左側にのみ適用される上記の式とは異なり、(括弧内にあるため)式全体に適用されます。\n", + "
    \n", + "\n", + "ここで、$a$ と$N$ は正の整数で、$a$ は$N$ 未満であり、共通の因数はありません。周期または次数($r$) は、次の式を満たす最小(ゼロ以外)の整数です:\n", + "\n", + "$$a^r \\bmod N = 1 $$ \n", + "\n", + "以下のグラフに、この関数の例を示します。 ポイント間の線は周期性を確認するためのものであり、x印の間の中間値を表していないことに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "N = 35\n", + "a = 3\n", + "\n", + "# プロットするデータを計算する\n", + "xvals = np.arange(35)\n", + "yvals = [np.mod(a**x, N) for x in xvals]\n", + "\n", + "# matplotlibを使って描画\n", + "fig, ax = plt.subplots()\n", + "ax.plot(xvals, yvals, linewidth=1, linestyle='dotted', marker='x')\n", + "ax.set(xlabel='$x$', ylabel='$%i^x$ mod $%i$' % (a, N),\n", + " title=\"Example of Periodic Function in Shor's Algorithm\")\n", + "try: # グラフ上にrをプロット\n", + " r = yvals[1:].index(1) +1 \n", + " plt.annotate(text='', xy=(0,1), xytext=(r,1), arrowprops=dict(arrowstyle='<->'))\n", + " plt.annotate(text='$r=%i$' % r, xy=(r/3,1.5))\n", + "except:\n", + " print('Could not find period, check a < N and have no common factors.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 解法\n", + "\n", + "ショアの解決策は、以下のユニタリー演算子において[量子位相推定](./quantum-phase-estimation.html)を使用します:\n", + "\n", + "$$ U|y\\rangle \\equiv |ay \\bmod N \\rangle $$\n", + "\n", + "これがどのように役立つかを確認するために、Uの固有状態がどのように見えるかを考えてみましょう。$|1\\rangle$の状態から開始した場合、Uが連続して適用され、つまり、レジスターの状態に$a \\pmod N$ を乗算します。Uを$r$ 回適用すると、再び状態$|1\\rangle$になることがわかります。たとえば、$a = 3$ および$N = 35$ の場合:\n", + "\n", + "$$\\begin{aligned}\n", + "U|1\\rangle &= |3\\rangle & \\\\\n", + "U^2|1\\rangle &= |9\\rangle \\\\\n", + "U^3|1\\rangle &= |27\\rangle \\\\\n", + "& \\vdots \\\\\n", + "U^{(r-1)}|1\\rangle &= |12\\rangle \\\\\n", + "U^r|1\\rangle &= |1\\rangle \n", + "\\end{aligned}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": false, + "tags": [ + "hide-input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ax.set(xlabel='UNumber of applications of U', ylabel='End state of register',\n", + " title=\"Effect of Successive Applications of U\")\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "したがって、このサイクルの重ね合わせ($|u_0\\rangle$)は、$U$の固有状態になります:\n", + "\n", + "$$|u_0\\rangle = \\tfrac{1}{\\sqrt{r}}\\sum_{k=0}^{r-1}{|a^k \\bmod N\\rangle} $$\n", + "\n", + "\n", + "
    \n", + " クリックして開く:$a = 3$ 、 $N=35$のときの例\n", + "\n", + "$$\\begin{aligned}\n", + "|u_0\\rangle &= \\tfrac{1}{\\sqrt{12}}(|1\\rangle + |3\\rangle + |9\\rangle \\dots + |4\\rangle + |12\\rangle) \\\\[10pt]\n", + "U|u_0\\rangle &= \\tfrac{1}{\\sqrt{12}}(U|1\\rangle + U|3\\rangle + U|9\\rangle \\dots + U|4\\rangle + U|12\\rangle) \\\\[10pt]\n", + " &= \\tfrac{1}{\\sqrt{12}}(|3\\rangle + |9\\rangle + |27\\rangle \\dots + |12\\rangle + |1\\rangle) \\\\[10pt]\n", + " &= |u_0\\rangle\n", + "\\end{aligned}$$\n", + "
    \n", + "\n", + "\n", + "この固有状態は、固有値1を持ちますが、これでは問題があまり面白くありません。より面白い固有状態は、これらの各計算基底の状態にそれぞれ対応した位相を持つものでしょう。具体的に、$k$番目の状態の位相が$k$に比例する場合を見てみましょう:\n", + "\n", + "$$\\begin{aligned}\n", + "|u_1\\rangle &= \\tfrac{1}{\\sqrt{r}}\\sum_{k=0}^{r-1}{e^{-\\tfrac{2\\pi i k}{r}}|a^k \\bmod N\\rangle}\\\\[10pt]\n", + "U|u_1\\rangle &= e^{\\tfrac{2\\pi i}{r}}|u_1\\rangle \n", + "\\end{aligned}\n", + "$$\n", + "\n", + "
    \n", + " クリックして開く:$a = 3$ 、 $N=35$のときの例\n", + "\n", + "$$\\begin{aligned}\n", + "|u_1\\rangle &= \\tfrac{1}{\\sqrt{12}}(|1\\rangle + e^{-\\tfrac{2\\pi i}{12}}|3\\rangle + e^{-\\tfrac{4\\pi i}{12}}|9\\rangle \\dots + e^{-\\tfrac{20\\pi i}{12}}|4\\rangle + e^{-\\tfrac{22\\pi i}{12}}|12\\rangle) \\\\[10pt]\n", + "U|u_1\\rangle &= \\tfrac{1}{\\sqrt{12}}(|3\\rangle + e^{-\\tfrac{2\\pi i}{12}}|9\\rangle + e^{-\\tfrac{4\\pi i}{12}}|27\\rangle \\dots + e^{-\\tfrac{20\\pi i}{12}}|12\\rangle + e^{-\\tfrac{22\\pi i}{12}}|1\\rangle) \\\\[10pt]\n", + "U|u_1\\rangle &= e^{\\tfrac{2\\pi i}{12}}\\cdot\\tfrac{1}{\\sqrt{12}}(e^{\\tfrac{-2\\pi i}{12}}|3\\rangle + e^{-\\tfrac{4\\pi i}{12}}|9\\rangle + e^{-\\tfrac{6\\pi i}{12}}|27\\rangle \\dots + e^{-\\tfrac{22\\pi i}{12}}|12\\rangle + e^{-\\tfrac{24\\pi i}{12}}|1\\rangle) \\\\[10pt]\n", + "U|u_1\\rangle &= e^{\\tfrac{2\\pi i}{12}}|u_1\\rangle\n", + "\\end{aligned}$$\n", + "\n", + "(位相の分母に$r = 12$ が現れていることがわかります。)\n", + "
    \n", + "\n", + "これは$r$を含むため、特に興味深い固有値です。実際、$r$は、$r$個の計算基底の状態間の位相差が等しくなるようにセットされる必要があります。上記の状態はこの振る舞いをする唯一の固有状態ではありません。一般化するために、整数$s$をこの位相差にかけると、欲しい固有値が出てきます: \n", + "\n", + "$$\\begin{aligned}\n", + "|u_s\\rangle &= \\tfrac{1}{\\sqrt{r}}\\sum_{k=0}^{r-1}{e^{-\\tfrac{2\\pi i s k}{r}}|a^k \\bmod N\\rangle}\\\\[10pt]\n", + "U|u_s\\rangle &= e^{\\tfrac{2\\pi i s}{r}}|u_s\\rangle \n", + "\\end{aligned}\n", + "$$\n", + "\n", + "
    \n", + " クリックして開く:$a = 3$ 、 $N=35$のときの例\n", + "\n", + "$$\\begin{aligned}\n", + "|u_s\\rangle &= \\tfrac{1}{\\sqrt{12}}(|1\\rangle + e^{-\\tfrac{2\\pi i s}{12}}|3\\rangle + e^{-\\tfrac{4\\pi i s}{12}}|9\\rangle \\dots + e^{-\\tfrac{20\\pi i s}{12}}|4\\rangle + e^{-\\tfrac{22\\pi i s}{12}}|12\\rangle) \\\\[10pt]\n", + "U|u_s\\rangle &= \\tfrac{1}{\\sqrt{12}}(|3\\rangle + e^{-\\tfrac{2\\pi i s}{12}}|9\\rangle + e^{-\\tfrac{4\\pi i s}{12}}|27\\rangle \\dots + e^{-\\tfrac{20\\pi i s}{12}}|12\\rangle + e^{-\\tfrac{22\\pi i s}{12}}|1\\rangle) \\\\[10pt]\n", + "U|u_s\\rangle &= e^{\\tfrac{2\\pi i s}{12}}\\cdot\\tfrac{1}{\\sqrt{12}}(e^{-\\tfrac{2\\pi i s}{12}}|3\\rangle + e^{-\\tfrac{4\\pi i s}{12}}|9\\rangle + e^{-\\tfrac{6\\pi i s}{12}}|27\\rangle \\dots + e^{-\\tfrac{22\\pi i s}{12}}|12\\rangle + e^{-\\tfrac{24\\pi i s}{12}}|1\\rangle) \\\\[10pt]\n", + "U|u_s\\rangle &= e^{\\tfrac{2\\pi i s}{12}}|u_s\\rangle\n", + "\\end{aligned}$$\n", + "\n", + "
    \n", + "\n", + "これで、$0 < s < r-1$である$s$の整数値ごとに固有の固有状態がでました。これらの固有状態をすべて合計すると、さまざまな位相で、$|1\\rangle$ を除くすべての計算基底の状態がキャンセルされます:\n", + "\n", + "$$ \\tfrac{1}{\\sqrt{r}}\\sum_{s=0}^{r-1} |u_s\\rangle = |1\\rangle$$\n", + "\n", + "
    \n", + " クリックして開く:$a = 7$ 、 $N=15$のときの例\n", + "\n", + "ここでは、$a = 7$ と $N=15$ の小さな例を見てみましょう。$r=4$の場合に:\n", + " \n", + "$$\\begin{aligned}\n", + "\\tfrac{1}{2}(\\quad|u_0\\rangle &= \\tfrac{1}{2}(|1\\rangle \\hphantom{e^{-\\tfrac{2\\pi i}{12}}}+ |7\\rangle \\hphantom{e^{-\\tfrac{12\\pi i}{12}}} + |4\\rangle \\hphantom{e^{-\\tfrac{12\\pi i}{12}}} + |13\\rangle)\\dots \\\\[10pt]\n", + "+ |u_1\\rangle &= \\tfrac{1}{2}(|1\\rangle + e^{-\\tfrac{2\\pi i}{4}}|7\\rangle + e^{-\\tfrac{\\hphantom{1}4\\pi i}{4}}|4\\rangle + e^{-\\tfrac{\\hphantom{1}6\\pi i}{4}}|13\\rangle)\\dots \\\\[10pt]\n", + "+ |u_2\\rangle &= \\tfrac{1}{2}(|1\\rangle + e^{-\\tfrac{4\\pi i}{4}}|7\\rangle + e^{-\\tfrac{\\hphantom{1}8\\pi i}{4}}|4\\rangle + e^{-\\tfrac{12\\pi i}{4}}|13\\rangle)\\dots \\\\[10pt]\n", + "+ |u_3\\rangle &= \\tfrac{1}{2}(|1\\rangle + e^{-\\tfrac{6\\pi i}{4}}|7\\rangle + e^{-\\tfrac{12\\pi i}{4}}|4\\rangle + e^{-\\tfrac{18\\pi i}{4}}|13\\rangle)\\quad) = |1\\rangle \\\\[10pt]\n", + "\\end{aligned}$$\n", + "\n", + "
    \n", + "\n", + "計算基底の状態$|1\\rangle$ がこれらの固有状態の重ね合わせであるため、状態$|1\\rangle$ を使用して$U$に対してQPE(量子位相推定)を実行すると、位相が測定されます:\n", + "\n", + "$$\\phi = \\frac{s}{r}$$\n", + "\n", + "ここで、$s$は$0$ と$r-1$ の間のランダムな整数です。最後に、$\\phi$の[連分数アルゴリズム](https://en.wikipedia.org/wiki/Continued_fraction) を使用して$r$ を見つけます。回路図は次のようになります(ここではビット配列がQiskitの量子ビット順を使っています。):\n", + "\n", + "\n", + "\n", + "次に、Qiskitのシミュレーターでショアのアルゴリズムを紹介します。このデモでは、説明なしで$U$ の回路を与えますが、4章で、$U^{2^j}$の回路を効率的に構築する方法について説明します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskit での実装\n", + "\n", + "この例では、$a=7$ と$N=15$ の周期発見問題を解きます。 $U$を以下のようにセットしたときの回路を与えます:\n", + "\n", + "$$U|y\\rangle = |ay\\bmod 15\\rangle $$\n", + "\n", + "ここでは説明はありませんが、$U^x$ を作成するには、この回路を$x$ 回繰り返します。 次の章で、これらの回路を効率的に作成する一般的な方法について説明します。 関数`c_amod15` は、`a` に関して制御Uゲートを`power` 回繰り返します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def c_amod15(a, power):\n", + " \"\"\"mod 15による制御ゲートをかける\"\"\"\n", + " if a not in [2,7,8,11,13]:\n", + " raise ValueError(\"'a' must be 2,7,8,11 or 13\")\n", + " U = QuantumCircuit(4) \n", + " for iteration in range(power):\n", + " if a in [2,13]:\n", + " U.swap(0,1)\n", + " U.swap(1,2)\n", + " U.swap(2,3)\n", + " if a in [7,8]:\n", + " U.swap(2,3)\n", + " U.swap(1,2)\n", + " U.swap(0,1)\n", + " if a == 11:\n", + " U.swap(1,3)\n", + " U.swap(0,2)\n", + " if a in [7,11,13]:\n", + " for q in range(4):\n", + " U.x(q)\n", + " U = U.to_gate()\n", + " U.name = \"%i^%i mod 15\" % (a, power)\n", + " c_U = U.control()\n", + " return c_U" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "測定用ビットとして8量子ビットを使います:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# Specify variables\n", + "n_count = 8 # number of counting qubits\n", + "a = 7" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "また、逆QFTの回路も与えます(詳細については、[量子フーリエ変換の章](./quantum-fourier-transform.html#generalqft)を参照してください):" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def qft_dagger(n):\n", + " \"\"\"n量子ビットの逆QFTを回路の最初のn量子ビットにかける\"\"\"\n", + " qc = QuantumCircuit(n)\n", + " # Swapsを忘れない!\n", + " for qubit in range(n//2):\n", + " qc.swap(qubit, n-qubit-1)\n", + " for j in range(n):\n", + " for m in range(j):\n", + " qc.cu1(-np.pi/float(2**(j-m)), m, j)\n", + " qc.h(j)\n", + " qc.name = \"QFT†\"\n", + " return qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらの構成要素があれば、ショアのアルゴリズムの回路を簡単に構築することができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
          ┌───┐                                                            »\n",
    +       " q_0: ┤ H ├───────■────────────────────────────────────────────────────»\n",
    +       "      ├───┤       │                                                    »\n",
    +       " q_1: ┤ H ├───────┼──────────────■─────────────────────────────────────»\n",
    +       "      ├───┤       │              │                                     »\n",
    +       " q_2: ┤ H ├───────┼──────────────┼──────────────■──────────────────────»\n",
    +       "      ├───┤       │              │              │                      »\n",
    +       " q_3: ┤ H ├───────┼──────────────┼──────────────┼──────────────■───────»\n",
    +       "      ├───┤       │              │              │              │       »\n",
    +       " q_4: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n",
    +       "      ├───┤       │              │              │              │       »\n",
    +       " q_5: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n",
    +       "      ├───┤       │              │              │              │       »\n",
    +       " q_6: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n",
    +       "      ├───┤       │              │              │              │       »\n",
    +       " q_7: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n",
    +       "      └───┘┌─────┴┼──────┐┌─────┴┼──────┐┌─────┴┼──────┐┌─────┴┼──────┐»\n",
    +       " q_8: ─────┤0     │      ├┤0     │      ├┤0     │      ├┤0     │      ├»\n",
    +       "           │             ││             ││             ││             │»\n",
    +       " q_9: ─────┤1            ├┤1            ├┤1            ├┤1            ├»\n",
    +       "           │  7^1 mod 15 ││  7^2 mod 15 ││  7^4 mod 15 ││  7^8 mod 15 │»\n",
    +       "q_10: ─────┤2            ├┤2            ├┤2            ├┤2            ├»\n",
    +       "      ┌───┐│             ││             ││             ││             │»\n",
    +       "q_11: ┤ X ├┤3            ├┤3            ├┤3            ├┤3            ├»\n",
    +       "      └───┘└─────────────┘└─────────────┘└─────────────┘└─────────────┘»\n",
    +       " c_0: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_1: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_2: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_3: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_4: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_5: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_6: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       " c_7: ═════════════════════════════════════════════════════════════════»\n",
    +       "                                                                       »\n",
    +       "«                                                                       »\n",
    +       "« q_0: ─────────────────────────────────────────────────────────────────»\n",
    +       "«                                                                       »\n",
    +       "« q_1: ─────────────────────────────────────────────────────────────────»\n",
    +       "«                                                                       »\n",
    +       "« q_2: ─────────────────────────────────────────────────────────────────»\n",
    +       "«                                                                       »\n",
    +       "« q_3: ─────────────────────────────────────────────────────────────────»\n",
    +       "«                                                                       »\n",
    +       "« q_4: ───────■─────────────────────────────────────────────────────────»\n",
    +       "«             │                                                         »\n",
    +       "« q_5: ───────┼───────────────■─────────────────────────────────────────»\n",
    +       "«             │               │                                         »\n",
    +       "« q_6: ───────┼───────────────┼───────────────■─────────────────────────»\n",
    +       "«             │               │               │                         »\n",
    +       "« q_7: ───────┼───────────────┼───────────────┼────────────────■────────»\n",
    +       "«      ┌──────┴───────┐┌──────┴───────┐┌──────┴───────┐┌──────┴┼───────┐»\n",
    +       "« q_8: ┤0             ├┤0             ├┤0             ├┤0      │       ├»\n",
    +       "«      │              ││              ││              ││               │»\n",
    +       "« q_9: ┤1             ├┤1             ├┤1             ├┤1              ├»\n",
    +       "«      │  7^16 mod 15 ││  7^32 mod 15 ││  7^64 mod 15 ││  7^128 mod 15 │»\n",
    +       "«q_10: ┤2             ├┤2             ├┤2             ├┤2              ├»\n",
    +       "«      │              ││              ││              ││               │»\n",
    +       "«q_11: ┤3             ├┤3             ├┤3             ├┤3              ├»\n",
    +       "«      └──────────────┘└──────────────┘└──────────────┘└───────────────┘»\n",
    +       "« c_0: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_1: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_2: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_3: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_4: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_5: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_6: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "« c_7: ═════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                       »\n",
    +       "«      ┌───────┐┌─┐                     \n",
    +       "« q_0: ┤0      ├┤M├─────────────────────\n",
    +       "«      │       │└╥┘┌─┐                  \n",
    +       "« q_1: ┤1      ├─╫─┤M├──────────────────\n",
    +       "«      │       │ ║ └╥┘┌─┐               \n",
    +       "« q_2: ┤2      ├─╫──╫─┤M├───────────────\n",
    +       "«      │       │ ║  ║ └╥┘┌─┐            \n",
    +       "« q_3: ┤3      ├─╫──╫──╫─┤M├────────────\n",
    +       "«      │  QFT† │ ║  ║  ║ └╥┘┌─┐         \n",
    +       "« q_4: ┤4      ├─╫──╫──╫──╫─┤M├─────────\n",
    +       "«      │       │ ║  ║  ║  ║ └╥┘┌─┐      \n",
    +       "« q_5: ┤5      ├─╫──╫──╫──╫──╫─┤M├──────\n",
    +       "«      │       │ ║  ║  ║  ║  ║ └╥┘┌─┐   \n",
    +       "« q_6: ┤6      ├─╫──╫──╫──╫──╫──╫─┤M├───\n",
    +       "«      │       │ ║  ║  ║  ║  ║  ║ └╥┘┌─┐\n",
    +       "« q_7: ┤7      ├─╫──╫──╫──╫──╫──╫──╫─┤M├\n",
    +       "«      └───────┘ ║  ║  ║  ║  ║  ║  ║ └╥┘\n",
    +       "« q_8: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n",
    +       "«                ║  ║  ║  ║  ║  ║  ║  ║ \n",
    +       "« q_9: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n",
    +       "«                ║  ║  ║  ║  ║  ║  ║  ║ \n",
    +       "«q_10: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n",
    +       "«                ║  ║  ║  ║  ║  ║  ║  ║ \n",
    +       "«q_11: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n",
    +       "«                ║  ║  ║  ║  ║  ║  ║  ║ \n",
    +       "« c_0: ══════════╩══╬══╬══╬══╬══╬══╬══╬═\n",
    +       "«                   ║  ║  ║  ║  ║  ║  ║ \n",
    +       "« c_1: ═════════════╩══╬══╬══╬══╬══╬══╬═\n",
    +       "«                      ║  ║  ║  ║  ║  ║ \n",
    +       "« c_2: ════════════════╩══╬══╬══╬══╬══╬═\n",
    +       "«                         ║  ║  ║  ║  ║ \n",
    +       "« c_3: ═══════════════════╩══╬══╬══╬══╬═\n",
    +       "«                            ║  ║  ║  ║ \n",
    +       "« c_4: ══════════════════════╩══╬══╬══╬═\n",
    +       "«                               ║  ║  ║ \n",
    +       "« c_5: ═════════════════════════╩══╬══╬═\n",
    +       "«                                  ║  ║ \n",
    +       "« c_6: ════════════════════════════╩══╬═\n",
    +       "«                                     ║ \n",
    +       "« c_7: ═══════════════════════════════╩═\n",
    +       "«                                       
    " + ], + "text/plain": [ + " ┌───┐ »\n", + " q_0: ┤ H ├───────■────────────────────────────────────────────────────»\n", + " ├───┤ │ »\n", + " q_1: ┤ H ├───────┼──────────────■─────────────────────────────────────»\n", + " ├───┤ │ │ »\n", + " q_2: ┤ H ├───────┼──────────────┼──────────────■──────────────────────»\n", + " ├───┤ │ │ │ »\n", + " q_3: ┤ H ├───────┼──────────────┼──────────────┼──────────────■───────»\n", + " ├───┤ │ │ │ │ »\n", + " q_4: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n", + " ├───┤ │ │ │ │ »\n", + " q_5: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n", + " ├───┤ │ │ │ │ »\n", + " q_6: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n", + " ├───┤ │ │ │ │ »\n", + " q_7: ┤ H ├───────┼──────────────┼──────────────┼──────────────┼───────»\n", + " └───┘┌─────┴┼──────┐┌─────┴┼──────┐┌─────┴┼──────┐┌─────┴┼──────┐»\n", + " q_8: ─────┤0 │ ├┤0 │ ├┤0 │ ├┤0 │ ├»\n", + " │ ││ ││ ││ │»\n", + " q_9: ─────┤1 ├┤1 ├┤1 ├┤1 ├»\n", + " │ 7^1 mod 15 ││ 7^2 mod 15 ││ 7^4 mod 15 ││ 7^8 mod 15 │»\n", + "q_10: ─────┤2 ├┤2 ├┤2 ├┤2 ├»\n", + " ┌───┐│ ││ ││ ││ │»\n", + "q_11: ┤ X ├┤3 ├┤3 ├┤3 ├┤3 ├»\n", + " └───┘└─────────────┘└─────────────┘└─────────────┘└─────────────┘»\n", + " c_0: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_1: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_2: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_3: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_4: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_5: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_6: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + " c_7: ═════════════════════════════════════════════════════════════════»\n", + " »\n", + "« »\n", + "« q_0: ─────────────────────────────────────────────────────────────────»\n", + "« »\n", + "« q_1: ─────────────────────────────────────────────────────────────────»\n", + "« »\n", + "« q_2: ─────────────────────────────────────────────────────────────────»\n", + "« »\n", + "« q_3: ─────────────────────────────────────────────────────────────────»\n", + "« »\n", + "« q_4: ───────■─────────────────────────────────────────────────────────»\n", + "« │ »\n", + "« q_5: ───────┼───────────────■─────────────────────────────────────────»\n", + "« │ │ »\n", + "« q_6: ───────┼───────────────┼───────────────■─────────────────────────»\n", + "« │ │ │ »\n", + "« q_7: ───────┼───────────────┼───────────────┼────────────────■────────»\n", + "« ┌──────┴───────┐┌──────┴───────┐┌──────┴───────┐┌──────┴┼───────┐»\n", + "« q_8: ┤0 ├┤0 ├┤0 ├┤0 │ ├»\n", + "« │ ││ ││ ││ │»\n", + "« q_9: ┤1 ├┤1 ├┤1 ├┤1 ├»\n", + "« │ 7^16 mod 15 ││ 7^32 mod 15 ││ 7^64 mod 15 ││ 7^128 mod 15 │»\n", + "«q_10: ┤2 ├┤2 ├┤2 ├┤2 ├»\n", + "« │ ││ ││ ││ │»\n", + "«q_11: ┤3 ├┤3 ├┤3 ├┤3 ├»\n", + "« └──────────────┘└──────────────┘└──────────────┘└───────────────┘»\n", + "« c_0: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_1: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_2: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_3: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_4: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_5: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_6: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« c_7: ═════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« ┌───────┐┌─┐ \n", + "« q_0: ┤0 ├┤M├─────────────────────\n", + "« │ │└╥┘┌─┐ \n", + "« q_1: ┤1 ├─╫─┤M├──────────────────\n", + "« │ │ ║ └╥┘┌─┐ \n", + "« q_2: ┤2 ├─╫──╫─┤M├───────────────\n", + "« │ │ ║ ║ └╥┘┌─┐ \n", + "« q_3: ┤3 ├─╫──╫──╫─┤M├────────────\n", + "« │ QFT† │ ║ ║ ║ └╥┘┌─┐ \n", + "« q_4: ┤4 ├─╫──╫──╫──╫─┤M├─────────\n", + "« │ │ ║ ║ ║ ║ └╥┘┌─┐ \n", + "« q_5: ┤5 ├─╫──╫──╫──╫──╫─┤M├──────\n", + "« │ │ ║ ║ ║ ║ ║ └╥┘┌─┐ \n", + "« q_6: ┤6 ├─╫──╫──╫──╫──╫──╫─┤M├───\n", + "« │ │ ║ ║ ║ ║ ║ ║ └╥┘┌─┐\n", + "« q_7: ┤7 ├─╫──╫──╫──╫──╫──╫──╫─┤M├\n", + "« └───────┘ ║ ║ ║ ║ ║ ║ ║ └╥┘\n", + "« q_8: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n", + "« ║ ║ ║ ║ ║ ║ ║ ║ \n", + "« q_9: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n", + "« ║ ║ ║ ║ ║ ║ ║ ║ \n", + "«q_10: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n", + "« ║ ║ ║ ║ ║ ║ ║ ║ \n", + "«q_11: ──────────╫──╫──╫──╫──╫──╫──╫──╫─\n", + "« ║ ║ ║ ║ ║ ║ ║ ║ \n", + "« c_0: ══════════╩══╬══╬══╬══╬══╬══╬══╬═\n", + "« ║ ║ ║ ║ ║ ║ ║ \n", + "« c_1: ═════════════╩══╬══╬══╬══╬══╬══╬═\n", + "« ║ ║ ║ ║ ║ ║ \n", + "« c_2: ════════════════╩══╬══╬══╬══╬══╬═\n", + "« ║ ║ ║ ║ ║ \n", + "« c_3: ═══════════════════╩══╬══╬══╬══╬═\n", + "« ║ ║ ║ ║ \n", + "« c_4: ══════════════════════╩══╬══╬══╬═\n", + "« ║ ║ ║ \n", + "« c_5: ═════════════════════════╩══╬══╬═\n", + "« ║ ║ \n", + "« c_6: ════════════════════════════╩══╬═\n", + "« ║ \n", + "« c_7: ═══════════════════════════════╩═\n", + "« " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# n_count個の測定用量子ビットとUを操作するための4量子ビットで\n", + "# 量子回路を作る\n", + "qc = QuantumCircuit(n_count + 4, n_count)\n", + "\n", + "# 測定用量子ビットを\n", + "# |+>状態に初期化\n", + "for q in range(n_count):\n", + " qc.h(q)\n", + " \n", + "# アンシラレジスターを|1>の状態にする\n", + "qc.x(3+n_count)\n", + "\n", + "# 制御Uを操作\n", + "for q in range(n_count):\n", + " qc.append(c_amod15(a, 2**q), \n", + " [q] + [i+n_count for i in range(4)])\n", + "\n", + "# 逆QFTを操作\n", + "qc.append(qft_dagger(n_count), range(n_count))\n", + "\n", + "# 回路を測定\n", + "qc.measure(range(n_count), range(n_count))\n", + "qc.draw('text')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果として何が測定されるか見てみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend = Aer.get_backend('qasm_simulator')\n", + "results = execute(qc, backend, shots=2048).result()\n", + "counts = results.get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3つの量子ビットがあるため、これらの結果は次の測定された位相に相当します:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Register Output Phase\n", + "------------------------ --------------\n", + "00000000(bin) = 0(dec) 0/256 = 0.00\n", + "10000000(bin) = 128(dec) 128/256 = 0.50\n", + "11000000(bin) = 192(dec) 192/256 = 0.75\n", + "01000000(bin) = 64(dec) 64/256 = 0.25\n" + ] + } + ], + "source": [ + "rows, measured_phases = [], []\n", + "for output in counts:\n", + " decimal = int(output, 2) # 2進数を10進数に変換します\n", + " phase = decimal/(2**n_count) # 固有値を探します\n", + " measured_phases.append(phase)\n", + " # これらの値をテーブルの行に追加します:\n", + " rows.append([\"%s(bin) = %i(dec)\" % (output, decimal), \n", + " \"%i/%i = %.2f\" % (decimal, 2**n_count, phase)])\n", + "# tabulateを使って、ASCIIテーブルとして行を印刷します:\n", + "print(tabulate(rows, \n", + " headers=[\"Register Output\", \"Phase\"], \n", + " colalign=(\"left\",\"right\")))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、連分数アルゴリズムを使用して、$s$と$r$を見つけることができます。 Pythonの組み込みの`fractions`(分数)モジュールを使用して、浮動小数点を`Fraction`オブジェクトに変換できます。例えば:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(5998794703657501, 9007199254740992)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Fraction(0.666)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.666" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "5998794703657501/9007199254740992" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、正確な結果(この場合は、`0.6660000...`)を返す分数をが得られるため、上のようなやっかいな結果になる可能性があります。`.limit_denominator()` メソッドを使って、分母が特定の値を下回る、浮動小数点に最も近い分数を取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Fraction(2, 3)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 分母が15未満の\n", + "# 0.666に最も近い分数を取得\n", + "Fraction(0.666).limit_denominator(15)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ずっといいですね!次数(r)はN未満でなければならないので、最大分母を`15`に設定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Phase Fraction Guess for r\n", + "------- ---------- -------------\n", + " 0 0/1 1\n", + " 0.5 1/2 2\n", + " 0.75 3/4 4\n", + " 0.25 1/4 4\n" + ] + } + ], + "source": [ + "rows = []\n", + "for phase in measured_phases:\n", + " frac = Fraction(phase).limit_denominator(15)\n", + " rows.append([phase, \"%i/%i\" % (frac.numerator, frac.denominator), frac.denominator])\n", + "# ASCIIテーブルを表示\n", + "print(tabulate(rows, \n", + " headers=[\"Phase\", \"Fraction\", \"Guess for r\"], \n", + " colalign=('right','right','right')))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "測定された固有値のうちの2つが正しい結果を与えたことがわかります:$r=4$。そしてショアのアルゴリズムが失敗する可能性があることもわかります。これらの悪い結果は、$s = 0$、または$s$と$r$が素数ではなく、$r$の代わりに$r$の因数が与えられるためです。これに対する最も簡単な解決策は、$r$について満足のいく結果が得られるまで実験を繰り返すことです。\n", + "\n", + "### 簡単な演習\n", + "\n", + "- 上記の回路を$a = 2, 8, 11$ の値に変更します。どのような結果が得られますか?またその理由は何ですか?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 剰余指数化\n", + "\n", + "$U$を繰り返すことによって$U^{2^j}$ゲートを作成する方法は、$j$とともに指数関数的に増加し、多項式時間のアルゴリズムにはなりません。演算子を作成する方法が必要です:\n", + "\n", + "$$ U^{2^j}|y\\rangle = |a^{2^j}y \\bmod N \\rangle $$\n", + "\n", + "これは、$j$とともに多項式に成長します。 幸いなことに、以下の計算:\n", + "\n", + "$$ a^{2^j} \\bmod N$$\n", + "\n", + "は効率的に可能です。古典コンピューターでは、 _反復二乗_ と呼ばれるアルゴリズムを使用して指数を計算できます。 この例では、$2^j$の形式の指数のみを扱っているため、反復二乗アルゴリズムは非常に単純になります:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def a2jmodN(a, j, N):\n", + " \"\"\"二乗を繰り返してa^{2^j} (mod N) を計算\"\"\"\n", + " for i in range(j):\n", + " a = np.mod(a**2, N)\n", + " return a" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "47" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a2jmodN(7, 2049, 53)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pythonで効率的なアルゴリズムが可能であれば、量子コンピューターで同じアルゴリズムを使用できます。残念ながら、$j$で多項式にスケーリングしても、モジュラー指数回路は単純ではなく、ショアのアルゴリズムのボトルネックになっています。初心者にやさしい実装は、参考文献[1]にあります。\n", + "\n", + "## 5. 周期発見から因数分解へ\n", + "\n", + "すべての因数分解の問題が難しいわけではありません;偶数をすぐに見つけて、その因数の1つが2であることが分かる場合もあります。実際、因数分解が難しい数値を選択するための[特定の基準](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf#%5B%7B%22num%22%3A127%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C70%2C223%2C0%5D)がありますが、基本的な考え方は、2つの大きな素数の積を選択することです。\n", + "\n", + "一般的な因数分解アルゴリズムは、まず、その整数を因数分解するための近道があるかどうかを確認します(つまり、その数が偶数かどうか?$N = a^b$ の形をしていないか?を確認します)。その後、最悪のシナリオの場合にショアの周期発見を使います。アルゴリズムの量子部分に焦点を合わせることを目的としているため、Nが2つの素数の積である場合を考えます。\n", + "\n", + "### 例: 15の因数分解\n", + "\n", + "小さな量子ビット数での因数分解の例を示すために、15を因数分解します。これは、それほど大きくない素数3と5の積であることは誰もが知っています。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "N = 15" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最初のステップは、$1$ から $N-1$ の間の乱数 $x$ を選択することです:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + } + ], + "source": [ + "np.random.seed(1) # 再現可能な結果が確実に得られるようにするため\n", + "a = randint(2, 15)\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、$N$ の自明でない因数でないことをすばやく確認します:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from math import gcd # 最大公約数\n", + "gcd(a, 15)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "素晴らしい。次に、`a = 7`および`N = 15`に対してショアの位相発見アルゴリズムを実行します。測定する位相は$s/r$ になることに注意してください。ここで、\n", + "\n", + "$$ a^r \\bmod N = 1 $$\n", + "\n", + "であり、$s$ は0と$r-1$ の間のランダムな整数です。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def qpe_amod15(a):\n", + " n_count = 3\n", + " qc = QuantumCircuit(4+n_count, n_count)\n", + " for q in range(n_count):\n", + " qc.h(q) # 測定用量子ビットを|+>に初期化\n", + " qc.x(3+n_count) # アンシラレジスターを|1>に\n", + " for q in range(n_count): # 制御Uを行う\n", + " qc.append(c_amod15(a, 2**q), \n", + " [q] + [i+n_count for i in range(4)])\n", + " qc.append(qft_dagger(n_count), range(n_count)) # 逆QFTを行う\n", + " qc.measure(range(n_count), range(n_count))\n", + " # 結果をシミュレート\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 以下でmemory = Trueに設定し、各順次読み取りのリストを表示できます\n", + " result = execute(qc, backend, shots=1, memory=True).result()\n", + " readings = result.get_memory()\n", + " print(\"Register Reading: \" + readings[0])\n", + " phase = int(readings[0],2)/(2**n_count)\n", + " print(\"Corresponding Phase: %f\" % phase)\n", + " return phase" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この位相から、$r$を簡単に推定することができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Register Reading: 000\n", + "Corresponding Phase: 0.000000\n" + ] + }, + { + "data": { + "text/plain": [ + "(0, 1)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.seed(3) # 再現可能な結果が確実に得られるようにするため\n", + "phase = qpe_amod15(a) # 位相 = s/r\n", + "phase.as_integer_ratio() # 分母が(うまくいけば!)rを教えてくれます" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "frac = Fraction(phase).limit_denominator(15)\n", + "s, r = frac.numerator, frac.denominator\n", + "print(r)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで$r$が出たので、これを使って$N$の因数を見つけることができるかもしれません:\n", + "\n", + "$$a^r \\bmod N = 1 $$\n", + "\n", + "よって:\n", + "\n", + "$$(a^r - 1) \\bmod N = 0 $$\n", + "\n", + "これは、$N$ が$a^r-1$を割るという意味です。 そして、$r$ が偶数の場合でも、次のように書くことができます:\n", + "\n", + "$$a^r -1 = (a^{r/2}-1)(a^{r/2}+1)$$\n", + "\n", + "($r$が偶数でない場合、先に進むことはできず、別の値の$a$で再試行する必要があります。) その場合、$a^{r/2}-1$ または$a^{r/2}+1$ の最大公約数が$N$ の因数である確率が高くなります[2]。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[15, 1]\n" + ] + } + ], + "source": [ + "guesses = [gcd(a**(r//2)-1, N), gcd(a**(r//2)+1, N)]\n", + "print(guesses)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルは、15の因数が少なくとも1つ見つかるまでアルゴリズムを繰り返します。セルを数回再実行して、セルの動作を確認する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Attempt 1:\n", + "Register Reading: 110\n", + "Corresponding Phase: 0.750000\n", + "Result: r = 4\n", + "Guessed Factors: 3 and 5\n", + "*** Non-trivial factor found: 3 ***\n", + "*** Non-trivial factor found: 5 ***\n" + ] + } + ], + "source": [ + "a = 7\n", + "factor_found = False\n", + "attempt = 0\n", + "while not factor_found:\n", + " attempt += 1\n", + " print(\"\\nAttempt %i:\" % attempt)\n", + " phase = qpe_amod15(a) # 位相 = s/r\n", + " frac = Fraction(phase).limit_denominator(15) # 分母は(うまくいけば!)私たちにrを伝えます\n", + " r = frac.denominator\n", + " print(\"Result: r = %i\" % r)\n", + " if phase != 0:\n", + " # 因数をgcd(x^{r/2} ±1 , 15)から推定します\n", + " guesses = [gcd(a**(r//2)-1, 15), gcd(a**(r//2)+1, 15)]\n", + " print(\"Guessed Factors: %i and %i\" % (guesses[0], guesses[1]))\n", + " for guess in guesses:\n", + " if guess != 1 and (15 % guess) == 0: # 推定した因数が正しいか確認します\n", + " print(\"*** Non-trivial factor found: %i ***\" % guess)\n", + " factor_found = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献\n", + "\n", + "1. Stephane Beauregard, _Circuit for Shor's algorithm using 2n+3 qubits,_ [arXiv:quant-ph/0205095](https://arxiv.org/abs/quant-ph/0205095)\n", + "\n", + "2. M. Nielsen and I. Chuang, _Quantum Computation and Quantum Information,_ Cambridge Series on Information and the Natural Sciences (Cambridge University Press, Cambridge, 2000). (Page 633)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/simon.ipynb b/translations/ja/ch-algorithms/simon.ipynb new file mode 100644 index 0000000..b97ced6 --- /dev/null +++ b/translations/ja/ch-algorithms/simon.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# サイモンのアルゴリズム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " このセクションでは、最初にSimon(サイモン)の問題を紹介し、古典コンピューターと量子コンピューターのそれぞれでその問題を解く方法を紹介します。その後、Qiskitを用いて量子アルゴリズムを実装し、シミュレーターとデバイス上で実行してみます。\n", + "\n", + "\n", + "## 目次\n", + "\n", + "1. [はじめに](#introduction) \n", + " 1.1 [サイモンの問題](#problem) \n", + " 1.2 [サイモンのアルゴリズム](#algorithm)\n", + "2. [例](#example)\n", + "3. [Qiskit による実装](#implementation) \n", + " 3.1 [シミュレーター上での実行](#simulation) \n", + " 3.2 [実機上での実行](#device) \n", + "4. [量子オラクル](#oracle)\n", + "5. [演習](#problems)\n", + "6. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "サイモンのアルゴリズム[1]は、特定の問題を解く古典的なアルゴリズムに比べて指数関数的な高速化を実現した最初の量子アルゴリズムです。このアルゴリズムに触発され、量子フーリエ変換として知られている離散フーリエ変換の量子アルゴリズムが生まれました。これは最も有名な量子アルゴリズムである ショアの素因数分解アルゴリズムの内部で使われています。\n", + "\n", + "### 1.1. サイモンの問題 \n", + "\n", + "まず、1対1対応関数、または2対1対応関数 $ f $ を考えます。$ f $ は以下のような特徴を持ちます:\n", + "\n", + "- **1対1対応**: 全ての出力値に対して唯一の入力値が対応する。例えば4つの入力を取る関数は:\n", + "\n", + "$$f(1) \\rightarrow 1, \\quad f(2) \\rightarrow 2, \\quad f(3) \\rightarrow 3, \\quad (4) \\rightarrow 4.$$\n", + "\n", + "- **2対1対応**: 全ての出力値に対して、必ず2つの入力値が対応する。例えば4つの入力を取る関数は:\n", + "\n", + " $$ f(1) \\rightarrow 1, \\quad f(2) \\rightarrow 2, \\quad f(3) \\rightarrow 1, \\quad f(4) \\rightarrow 2. $$\n", + " \n", + " この2対1対応写像は、ある秘密ビット列 $ b $ を用いたもので、2つの入力 $ x_1, x_2 $ について $ f(x_1) = f(x_2) $ が成り立つとき、$ x_1 \\oplus x_2 = b $ が必ず成り立ちます。ここで $ \\oplus $ はビットごとのXORです。\n", + "\n", + "\n", + "与えられたブラックボックス関数 $ f $ が、1対1対応関数なのか2対1対応関数なのか、どうしたら高速に判定できるでしょうか? さらにもし $ f $ が2対1対応関数の場合、どうしたら高速に $ b $ を特定できるでしょうか? これらは 秘密ビット列 $ b $ を特定する問題に帰着されます。なぜなら $ b={000...} $ の場合は $ f $ は 1対1対応関数とわかり、そうでないなら2対1対応関数と即座にわかるためです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2. サイモンのアルゴリズム \n", + "\n", + "#### 古典的な解法\n", + "\n", + "与えられた関数 $ f $ に対し秘密ビット列 $ b $ が全ての入出力に対して矛盾がないことを確認するためには、最大で $ 2^{n−1}+1 $ 個の入力値と出力値を確認しなければなりません。ここで $ n $ は入力値のビット数です。つまり、同じ出力値に対して2つの入力値を見つけるまで、可能な全ての入力値の半分を確認することを意味しています。Deutsch-Jozsaの問題と同様に、運が良ければ最初の2回の試行だけでこの問題は解決します。しかしもし $ f $ が1対1対応関数だった場合や、2対1対応関数を最も不幸な順で確認した場合に、 $ 2^{n−1}+1 $ 回の確認が必要となります。古典コンピューター上で、回数の下限が $ \\Omega(2^{n/2}) $ となるアルゴリズム[2]が知られていますが、やはり必要な確認回数は $ n $ に対して指数関数的に増加します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 量子的な解法\n", + "\n", + "サイモンのアルゴリズムを実装した量子回路を以下に示します。\n", + "\n", + "\"images/simon_steps.jpeg\"\n", + "\n", + "ここで、問い合わせ関数 $ \\text{Q}_f $ は、2つの量子レジスター$ \\lvert x \\rangle, \\lvert a \\rangle $を入力として働きます。$ \\text{Q}_f $ 適用前後の全体の状態は\n", + "\n", + "$$ \\lvert x \\rangle \\lvert a \\rangle \\rightarrow \\lvert x \\rangle \\lvert a \\oplus f(x) \\rangle $$\n", + "\n", + "となります。2個目の量子レジスターは状態 $ |0\\rangle = |00 \\dots 0 \\rangle $ で初期化され、そのまま$ \\text{Q}_f $ に入力されるため、$ \\text{Q}_f $ 適用前後の全体の状態は\n", + "\n", + "$$ \\lvert x \\rangle \\lvert 0 \\rangle \\rightarrow \\lvert x \\rangle \\lvert f(x) \\rangle $$\n", + "\n", + "となります。\n", + "\n", + "このアルゴリズムは以下のステップで実行されていきます。\n", + "\n", + "
      \n", + "\n", + "
    1. 2つの $n$ 量子ビットの入力レジスターをゼロに初期化します:\n", + " \n", + " $$\\lvert \\psi_1 \\rangle = \\lvert 0 \\rangle^{\\otimes n} \\lvert 0 \\rangle^{\\otimes n} $$\n", + " \n", + "
    2. \n", + "\n", + "
    3. 1つ目のレジスターにアダマール変換を適用します:\n", + "\n", + " $$\\lvert \\psi_2 \\rangle = \\frac{1}{\\sqrt{2^n}} \\sum_{x \\in \\{0,1\\}^{n} } \\lvert x \\rangle\\lvert 0 \\rangle^{\\otimes n} $$\n", + "\n", + "
    4. \n", + "\n", + "
    5. 問い合わせ関数 $\\text{Q}_f$ を適用します: \n", + "\n", + " $$ \\lvert \\psi_3 \\rangle = \\frac{1}{\\sqrt{2^n}} \\sum_{x \\in \\{0,1\\}^{n} } \\lvert x \\rangle \\lvert f(x) \\rangle $$\n", + "\n", + "
    6. \n", + " \n", + "
    7. 2つ目の量子レジスタを測定します。ある値 $ f(x) $ が測定されたものとします。この問題の設定上、測定値 $ f(x) $ は2つの入力 $ x $ と $ y = x \\oplus b $ に対応します。したがって、1つ目のレジスターは以下のようになります:\n", + "\n", + " $$\\lvert \\psi_4 \\rangle = \\frac{1}{\\sqrt{2}} \\left( \\lvert x \\rangle + \\lvert y \\rangle \\right)$$\n", + "\n", + " ここで、2つ目のレジスタは測定されているため省略しました。ここで $ \\lvert \\psi_4 \\rangle $ はこれまでの $ 2n $ ではなく $ n $ 量子ビットで構成されていることに注意してください。
      \n", + "\n", + "
    8. \n", + "\n", + "
    9. 1つ目のレジスターにアダマール変換を適用します:\n", + "\n", + " $$ \\lvert \\psi_5 \\rangle = \\frac{1}{\\sqrt{2^{n+1}}} \\sum_{z \\in \\{0,1\\}^{n} } \\left[ (-1)^{x \\cdot z} + (-1)^{y \\cdot z} \\right] \\lvert z \\rangle $$\n", + " \n", + " ここで $ x \\cdot y $ はドット積と呼ばれる二項演算で、ビットごとの積のXOR $ x_0 y_0 \\oplus x_1 y_1 \\oplus \\cdots \\oplus x_n y_n $ の値です。\n", + " \n", + "
    10. \n", + " \n", + "
    11. 1つ目のレジスターの測定は、以下の出力を与えます:\n", + " \n", + " $$ (-1)^{x \\cdot z} = (-1)^{y \\cdot z} $$\n", + "\n", + " つまり\n", + " $$ x \\cdot z = y \\cdot z \\\\\n", + " x \\cdot z = \\left( x \\oplus b \\right) \\cdot z \\\\\n", + " x \\cdot z = x \\cdot z \\oplus b \\cdot z \\\\\n", + " b \\cdot z = 0 \\text{ (mod 2)} $$\n", + " \n", + " $ b $ との内積が $ 0 $ となる数値 $ z $ が測定されます。すなわち、このアルゴリズムをおよそ$ n $ 回計算することで、$ n $ 個の異なる $ z $ を得ます。そして、以下のような連立方程式を考えます:\n", + " \n", + " $$ \\begin{cases}\n", + " b \\cdot z_1 = 0 \\\\\n", + " b \\cdot z_2 = 0 \\\\\n", + " \\quad \\vdots \\\\\n", + " b \\cdot z_n = 0\n", + " \\end{cases}$$\n", + "\n", + " この連立方程式を(例えばガウスの消去法などを使って)解くことによって、秘密ビット列$ b $ を特定することができます。\n", + "\n", + "
    12. \n", + "
    \n", + "\n", + "この問題に対しては、量子アルゴリズムは古典アルゴリズムに比べて指数関数的に少ない回数しか実行されません。繰り返しになりますが、このアルゴリズムの実用的な応用を考えるのは難しいです。しかしながら、このアルゴリズムは具体的な問題の解決を量子コンピューターを利用して指数関数的に高速化した最初の例となり、ショアのアルゴリズムの発見に寄与しました。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 例 \n", + "\n", + "サイモンのアルゴリズムの実行例を、2 量子ビットで 秘密ビット列 $ b=11 $ の場合について見ていきます。もし $ y = x \\oplus b $ ならば、$ f(x) = f(y) $ となるような関数が対象となります。この問題を解く量子回路は以下のようになります。\n", + "\n", + "\"images/simon_steps.jpeg\"\n", + "\n", + "
      \n", + "
    1. 2つの $2$-量子ビットの入力レジスターはゼロで初期化されます:\n", + " \n", + " $$\\lvert \\psi_1 \\rangle = \\lvert 0 0 \\rangle_1 \\lvert 0 0 \\rangle_2 $$\n", + "\n", + "
    2. \n", + " \n", + "
    3. $ 1 $ 個目のレジスターにアダマールゲートを適用します:\n", + " \n", + " $$\\lvert \\psi_2 \\rangle = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle_1 + \\lvert 0 1 \\rangle_1 + \\lvert 1 0 \\rangle_1 + \\lvert 1 1 \\rangle_1 \\right) \\lvert 0 0 \\rangle_2 $$\n", + "\n", + "
    4. \n", + " \n", + "
    5. 秘密ビット列 $ b = 11 $ に対して、上の図にあるように問い合わせ関数は$\\text{Q}_f = CX_{1_a 2_a}CX_{1_a 2_b}CX_{1_b 2_a}CX_{1_b 2_b}$ と実装されます。すなわち、問い合わせ関数適用後の状態は\n", + " \n", + "$$\n", + "\\begin{aligned}\n", + "\\lvert \\psi_3 \\rangle = \\frac{1}{2} ( \\; \n", + " & \\lvert 0 0 \\rangle_1 \\; \\lvert 0\\oplus 0 \\oplus 0, & 0 \\oplus 0 \\oplus 0 \\rangle_2 &\\\\[5pt]\n", + "+ & \\lvert 0 1 \\rangle_1 \\; \\lvert 0\\oplus 0 \\oplus 1, & 0 \\oplus 0 \\oplus 1 \\rangle_2 &\\\\[6pt]\n", + "+ & \\lvert 1 0 \\rangle_1 \\; \\lvert 0\\oplus 1 \\oplus 0, & 0 \\oplus 1 \\oplus 0 \\rangle_2 &\\\\[6pt]\n", + "+ & \\lvert 1 1 \\rangle_1 \\; \\lvert 0\\oplus 1 \\oplus 1, & 0 \\oplus 1 \\oplus 1 \\rangle_2 & \\; )\\\\\n", + "\\end{aligned}\n", + "$$\n", + " \n", + "したがって、\n", + "\n", + "$$ \n", + "\\begin{aligned} \n", + "\\lvert \\psi_3 \\rangle = \\frac{1}{2} ( \\quad\n", + "& \\lvert 0 0 \\rangle_1 \\lvert 0 0 \\rangle_2 & \\\\[6pt]\n", + "+ & \\lvert 0 1 \\rangle_1 \\lvert 1 1 \\rangle_2 & \\\\[6pt]\n", + "+ & \\lvert 1 0 \\rangle_1 \\lvert 1 1 \\rangle_2 & \\\\[6pt]\n", + "+ & \\lvert 1 1 \\rangle_1 \\lvert 0 0 \\rangle_2 & \\; )\\\\\n", + "\\end{aligned}\n", + "$$\n", + "となります。\n", + "
    6. \n", + " \n", + "
    7. ここで、2 つ目のレジスターを測定します。$ 50\\% $ の確率で $\\lvert 00 \\rangle_2 $ または $ \\lvert 11 \\rangle_2 $ が測定されます。ここでは $\\lvert 11 \\rangle_2$ が測定されたものと仮定します。状態ベクトルは以下のようになります:\n", + "\n", + " $$ \\lvert \\psi_4 \\rangle = \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 1 \\rangle_1 + \\lvert 1 0 \\rangle_1 \\right) $$\n", + "\n", + "ここで、$ 2 $ つ目のレジスターは測定されているため省略して表記しました。\n", + "\n", + "
    8. \n", + " \n", + "
    9. 1つ目のレジスターにアダーマール変換を適用します。\n", + "\n", + "\\begin{eqnarray*}\n", + " \\lvert \\psi_5 \\rangle &=& \\frac{1}{2\\sqrt{2}} \\left[ \\left( \\lvert 0 \\rangle + \\lvert 1 \\rangle \\right) \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right) + \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right) \\otimes \\left( \\lvert 0 \\rangle + \\lvert 1 \\rangle \\right) \\right] \\\\\n", + " &=& \\frac{1}{2\\sqrt{2}} \\left[ \\lvert 0 0 \\rangle_1 - \\lvert 0 1 \\rangle_1 + \\lvert 1 0 \\rangle_1 - \\lvert 1 1 \\rangle_1 + \\lvert 0 0 \\rangle_1 + \\lvert 0 1 \\rangle_1 - \\lvert 1 0 \\rangle_1 - \\lvert 1 1 \\rangle_1 \\right] \\\\\n", + " &=& \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 0 \\rangle_1 - \\lvert 1 1 \\rangle_1 \\right)\n", + "\\end{eqnarray*}\n", + "\n", + " \n", + "
    10. \n", + " \n", + "
    11. このあと1つ目のレジスターを測定すれば、$\\lvert 0 0 \\rangle_1 $ または $\\lvert 11 \\rangle_1 $ を得ます。\n", + "
    12. \n", + "\n", + "
    13. ここでは $ \\lvert 11 \\rangle_1 $ を測定したものとすると、\n", + " \n", + " $$ b \\cdot 11 = 0 $$\n", + "\n", + " という方程式が一つ得られます。これにより、$ b $ は $ 01 $ でもなく $ 10 $ でもない事がわかります。すなわち求める $ b $ は $ 00 $ または $ 11 $ だとわかります。$ b $ は $ 2 $ ビットなので、これだけでは特定することができません。もう一つの方程式が得られるまで何回かアルゴリズムを実施する必要があります。何回か実行して、以下のような2種類の方程式を得られたとします。\n", + "\n", + " $$ b \\cdot 11 = 0 $$\n", + " $$ b \\cdot 00 = 0 $$\n", + " \n", + " この連立方程式を満たす $ b $ を求めれば $ 11 $ ただ一つに定まります。\n", + " 得られた $ b=11 $ は適当に選んだ入力 $x_i$ とその出力 $ f(x_i) = f(x_i \\oplus b) $ を調べることで検証できます。例えば、\n", + "\n", + " $$ 01 \\oplus b = 10 $$\n", + " $$ f(01) = f(10) = 11 .$$\n", + "\n", + "
    14. \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskit による実装 \n", + "\n", + "$ 3 $ 量子ビット、秘密ビット列 $ b=110 $ の場合を解く サイモンのアルゴリズムを qiskit で実装します。" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# Qiskit をインポートする\n", + "from qiskit import IBMQ, BasicAer\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit import QuantumCircuit, execute\n", + "\n", + "# 基本的なプロットツールをインポートする\n", + "from qiskit.visualization import plot_histogram\n", + "\n", + "# Simonオラクルをインポートする\n", + "from qiskit_textbook.tools import simon_oracle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上でインポートされる関数 `simon_oracle` はビット列 $ b $ に対応するSimonオラクルを生成する関数です。ここでは説明無しで使用しますが、 [section 4](#oracle)で解説します。インポートするには、[Setting Up Your Environment](../ch-prerequisites/setting-the-environment.html)を参考に`qiskit_textbook`モジュールをインストールする必要があります。\n", + "\n", + "Qiskit では、測定は量子回路の最後で行います。そのため、このSimonのアルゴリズムでは、1つ目のレジスターの測定を最後に移動させます。また、ここでは2つ目のレジスターについては無視します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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c14bAOzGrHl9Kc7q0aNHa/Xq1Ya/bnJysqZPn27461oVJc6HXQekrXvMTgEA8IV5bZzVq1ersLDQ7BiXPA6nwkN2drbZEQDYGDMEMAYlDh5GjRpldgQANsYMAYxBiYOHPn36mB0BgI0xQwBjUOLgobS01OwIAGyMGQIYgxIHAABgQ5Q4eEhMTDQ7AgAbY4YAxuAWI/Awd+5csyMAsDFmCM7mcDjUo0cP9ezZU126dFGjRo104sQJbdiwQcuXL9eSJUtUUVFR6zlhYWGaNWuWli5dqpdeesmk5NZHiYOHcePG6be//a3ZMQDYFDMEkhQREaGRI0dq5MiR6tChw3nXKy4u1iuvvKIXX3xRR48eVVhYmP7yl79o8ODBGjBggP72t79pzx5uAFgXS5e4yspKTZ06Va+88op27typjh076qWXXtLw4cOVlpamV1991eyIISk3N5cBHESHj0uLt0grt0vHT0lNG0mp8VKPa6VIS/+NtJ99ZdKizdJXxdKpcunKxtINHaTkWKlBmNnp6lZRKa0ulhZvlvYcliLCpKRY6cYOUkxjs9P5hxmClJQUvfXWW3K5XJKknTt36pNPPtHq1at18OBBNW7cWElJScrIyFB8fLx+97vfadiwYTUfgwcP1uHDh9W3b18KnBeW/pExdOhQzZs3T88884xSUlK0ePFiDR48WKWlpXriiSfMjlenvGfTFdvlNvW652m/luPSsmOv9KdPpeOnzywrOyHlfikt3CRl3yo1bmhevlCy4Vvp9c+k8rOO0pSdkLaVuovdiAwpKty8fHU5WS69mu/+rQMOSVX/XZ6/QfpskzTkZqlLGzMThhbmdXDcfffdys3NVWRkpDZt2qQnn3xS77//viorKz3WdTgcuu222/T888/ruuuu08cffyyn06nDhw/rzjvv1JIlS0z4E9iHZS9smD17tnJycjR//nz94he/UEZGhp566in17t1b5eXl6t69u9kRgXo5fkp6JV86cbr28uof1N8fkt5caHiskLS/zF3gzjnNpua9/qZU+vtSw2P5lPflmV8bVXXOY5WV7u+P0iOGxwL8duONN9YUuFdeeUXJycl677336ixwklRVVaWPP/5YvXv31vr16+V0OlVVVaWJEydS4Pxg2RI3adIk9e3bV2lpabWWx8fHKzw8XElJSZLc514kJCTI6XQqLy/PjKghh9+H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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = '110'\n", + "\n", + "n = len(b)\n", + "simon_circuit = QuantumCircuit(n*2, n)\n", + "\n", + "# オラクルに入力する前にアダマールゲートを適用する\n", + "simon_circuit.h(range(n)) \n", + " \n", + "# 可視性の向上のため、境界を挿入する\n", + "simon_circuit.barrier()\n", + "\n", + "simon_circuit += simon_oracle(b)\n", + "\n", + "# 可視性の向上のため、境界を挿入する\n", + "simon_circuit.barrier()\n", + "\n", + "# 入力レジスターにアダマールゲートを適用する\n", + "simon_circuit.h(range(n))\n", + "\n", + "# 量子ビットを測定する\n", + "simon_circuit.measure(range(n), range(n))\n", + "simon_circuit.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 シミュレーター上での実行 \n", + "\n", + "シミューレーターを用いて上記の回路を実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# ローカルシミュレーターを利用する\n", + "backend = BasicAer.get_backend('qasm_simulator')\n", + "shots = 1024\n", + "results = execute(simon_circuit, backend=backend, shots=shots).result()\n", + "counts = results.get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3ビット数値の可能性は $ 000 $ から $ 111 $ までの $ 8 $ 種類ですが、ここでは $ z $ として $ 4 $ 種類しか測定されませんでした。以下のように、ビット列 $ b = 110 $ をこの $ z $ で検証すれば、$ 4 $ 種類全てで $ b \\cdot z = 0 \\pmod{2}$ が成り立つことがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "110.000 = 0 (mod 2)\n", + "110.111 = 0 (mod 2)\n", + "110.001 = 0 (mod 2)\n", + "110.110 = 0 (mod 2)\n" + ] + } + ], + "source": [ + "# 4つの z の出力とのドット内積を計算し検証する\n", + "def bdotz(b, z):\n", + " accum = 0\n", + " for i in range(len(b)):\n", + " accum += int(b[i]) * int(z[i])\n", + " return (accum % 2)\n", + "\n", + "for z in counts:\n", + " print( '{}.{} = {} (mod 2)'.format(b, z, bdotz(b,z)) )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この得られた4種類の$ z $ を用いて、連立方程式を解いて $ b = 110 $ を求める事ができます。例えば、最初の測定値 `001`から\n", + "\n", + "$$\n", + "\\require{cancel}\n", + "\\begin{aligned}\n", + " b \\cdot 001 &= 0 \\\\\n", + " (b_2 \\cdot 0) + (b_1 \\cdot 0) + (b_0 \\cdot 1) & = 0 \\\\\n", + " (\\cancel{b_2 \\cdot 0}) + (\\cancel{b_1 \\cdot 0}) + (b_0 \\cdot 1) & = 0 \\\\\n", + " b_0 & = 0\\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "すなわち、 $ b_0=0 $ である事がわかります。そして次に `111` を測定し\n", + "\n", + "$$\n", + "\\require{cancel}\n", + "\\begin{aligned}\n", + " b \\cdot 111 &= 0 \\\\\n", + " (b_2 \\cdot 1) + (b_1 \\cdot 1) + (\\cancel{0 \\cdot 1}) & = 0 \\\\\n", + " (b_2 \\cdot 1) + (b_1 \\cdot 1) & = 0 \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "が得られ、 $ b_2 = b_1 $ が明らかになります。つまり $ b $ は\n", + "\n", + "$$ b_2 = b_1 = 0, \\quad b = 000 $$\n", + "\n", + "または\n", + "\n", + "$$ b_2 = b_1 = 1, \\quad b = 110 $$\n", + "\n", + "のいずれかであることがわかります。\n", + "\n", + "このうち自明な解 $ b = 000 $ の場合は $ f $ は1対1対応関数となります。$ b = 110 $ は自明でない解で、この場合は $ f $ は 2対1対応となります。こうした連立方程式は $ O(n^3) $ で動作する[ガウスの消去法](https://mathworld.wolfram.com/GaussianElimination.html) で解くことができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2. 実機上での実行 \n", + "\n", + "[section 3.1](#simulation) の量子回路は $ 2n = 6 $ 量子ビットを使います。しかしこの記事の執筆時、殆どのIBM 量子デバイスは 5 量子ビットしか持っていません。そのため、同じコードを使いますが section2 と同じように$ b = 11 $ を用いれば必要な量子ビット数は $ 4 < 5 $ となり実機の動作範囲に収まります。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = '11'\n", + "n = len(b)\n", + "simon_circuit_2 = QuantumCircuit(n*2, n)\n", + "\n", + "# オラクルに入力する前にアダマールゲートを適用する\n", + "simon_circuit_2.h(range(n))\n", + "\n", + "# オラクルに入力する\n", + "simon_circuit_2 += simon_oracle(b)\n", + "\n", + "# 入力レジスターにアダマールゲートを適用する\n", + "simon_circuit_2.h(range(n))\n", + "\n", + "# 量子ビットを測定する\n", + "simon_circuit_2.measure(range(n), range(n))\n", + "simon_circuit_2.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は [section 2](#example) と比較すると少し異なります。出力は異なりますが、衝突関係は同じです。すなわち、$ f(x) = f(x \\oplus 11) $ が成り立っています。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmqx2\n", + "Job Status: job has successfully run\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# IBMQ アカウントを読み込み、5 量子ビットのデバイスを取得する\n", + "IBMQ.save_account('YOUR_TOKEN')\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= n*2 and \n", + " not x.configuration().simulator and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)\n", + "\n", + "# ジョブを実行し監視する\n", + "from qiskit.tools.monitor import job_monitor\n", + "shots = 1024\n", + "job = execute(simon_circuit_2, backend=backend, shots=shots, optimization_level=3)\n", + "job_monitor(job, interval = 2)\n", + "\n", + "# 結果を取得しプロットする\n", + "device_counts = job.result().get_counts()\n", + "plot_histogram(device_counts)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "b = 11\n", + "11.00 = 0 (mod 2) (49.2%)\n", + "11.11 = 0 (mod 2) (32.0%)\n", + "11.10 = 1 (mod 2) (9.1%)\n", + "11.01 = 1 (mod 2) (9.7%)\n" + ] + } + ], + "source": [ + "# 4つの z の出力とのドット内積を計算し検証する\n", + "def bdotz(b, z):\n", + " accum = 0\n", + " for i in range(len(b)):\n", + " accum += int(b[i]) * int(z[i])\n", + " return (accum % 2)\n", + "\n", + "print('b = ' + b)\n", + "for z in device_counts:\n", + " print( '{}.{} = {} (mod 2) ({:.1f}%)'.format(b, z, bdotz(b,z), device_counts[z]*100/shots))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、最も重要な結果は $ b \\cdot z = 0$ (mod 2) です。この情報と古典コンピューターを利用して連立方程式を解くことで、秘密ビット列 $ b = 11$ を得ることができます。それ以外の測定結果は間違いですが、低い測定確率を持ちます。間違いを観測することは起こりにくいと仮定すれば、得られた測定値から古典コンピューターを用いて連立方程式を解き、$ b $ を求めることができます。この$ n = 2 $ の場合、$ b = 11 $ です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 量子オラクル \n", + "\n", + "上のSimonのアルゴリズムの[例](#example)と[実装](#implementation) は、特定の秘密ビット列に特化しています。このアルゴリズムを任意の秘密ビット列に対応するように拡張するには、問い合わせ関数についてより詳細に考察する必要があります。\n", + "\n", + "サイモンのアルゴリズムは秘密ビット列 $ b \\in \\{0,1\\}^n$ を、全ての $x \\in \\{0,1\\}^n$ と対応する $y = x \\oplus b $ に対して $f_b(x) = f_b(y) $ が成り立つようなオラクル $ f_b $ から探し出します。ここで、$\\oplus$ はビットごとの XOR 演算子です。したがって、もし $b = 0\\ldots 0$ (全てのビットが $0$) ならば、$f_b$ は 1対1対応関数であることがわかります。もし $b \\neq 0\\ldots 0$ ならば、$f_b$ は 2対1対応関数であることがわかります。\n", + "\n", + "このアルゴリズムでは、オラクルは $|x\\rangle |0\\rangle$ を入力として受け取ります。事前に定められた $b$ のもと、全ての $x \\in \\{0,1\\}^n$ に対して $f(x) = f(x\\oplus b)$ となるようにオラクルは2つめの量子レジスタに書き込み、入力を$|x\\rangle|f_s(x)\\rangle$ に変換します。\n", + "\n", + "このようなブラックボックス関数は、以下のような手順で実装できます。\n", + "\n", + "1. 1個目のレジスタの内容を2個目のレジスタにコピーします。\n", + "$$\n", + "|x\\rangle|0\\rangle \\rightarrow |x\\rangle|x\\rangle\n", + "$$\n", + "\n", + "2. **(1対1 または 2対1 写像を作る)** もし $ b $ が $ 0 $ でない場合, $ j $ ビットめの値が $b_j = 1$ となる最も小さなインデックス $ j $ が存在します。もし $x_j = 0$ ならば、$2$個目のレジスターに $ b $ に関して XOR を適用します。そうでなければ、何もしません。\n", + "$$\n", + "|x\\rangle|x\\rangle \\rightarrow |x\\rangle|x \\oplus b\\rangle ~\\mbox{(もし}~x_j = 0~\\mbox{ならば)}\n", + "$$\n", + "\n", + "3. **(ランダムな置換を行う)** $2$個目のレジスターの量子ビットをランダムに置換します。\n", + "$$\n", + "|x\\rangle|y\\rangle \\rightarrow |x\\rangle|f_b(y)\\rangle\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 演習 \n", + "\n", + "1. Qiskitを使って、一般の サイモンの量子オラクルを実装して下さい。\n", + "2. シミュレーターまたは実機上で実装した サイモンの量子オラクルに対して、秘密ビット列 $b=1001$ をテストして下さい。結果が想定通りだったか確認し、どうしてそうなったか説明してみてください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "1. Daniel R. Simon (1997) \"On the Power of Quantum Computation\" SIAM Journal on Computing, 26(5), 1474–1483, [doi:10.1137/S0097539796298637](https://doi.org/10.1137/S0097539796298637)\n", + "2. Guangya Cai and Daowen Qiu. Optimal separation in exact query complexities for Simon's problem. Journal of Computer and System Sciences 97: 83-93, 2018, [https://doi.org/10.1016/j.jcss.2018.05.001](https://doi.org/10.1016/j.jcss.2018.05.001)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.16.1',\n", + " 'qiskit-aer': '0.7.1',\n", + " 'qiskit-ignis': '0.5.1',\n", + " 'qiskit-ibmq-provider': '0.11.1',\n", + " 'qiskit-aqua': '0.8.1',\n", + " 'qiskit': '0.23.1'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "翻訳担当: 野ヶ山尊秀 (nogayama @jp.ibm.com)\n", + "\n", + "## 訳注\n", + "\n", + "### [section 1.1](#algorithm) で使用される ドット積とXORの分配法則の証明\n", + "\n", + "Step 6 にて、$ (x \\oplus y ) \\cdot z = (x \\cdot z ) \\oplus ( y \\cdot z ) $ と変換されていくが、これはドット積とXORの間に分配法則が成り立つためである。以下にこの分配法則を証明する。\n", + "\n", + "$$\n", + "\\begin{eqnarray*}\n", + "(x \\oplus y ) \\cdot z \\\n", + " & = & \\bigoplus_{i=0}^{n} ( x_i \\oplus y_i ) z_i \\\\\n", + " & = & \\bigoplus_{i=0}^{n} x_i z_i \\oplus y_i z_i \\\\\n", + " & = & \\left( \\bigoplus_{i=0}^{n} x_i z_i \\right) \\oplus \\left( \\bigoplus_{i=0}^{n} y_i z_i \\right) \\\\\n", + " & = & (x \\cdot z ) \\oplus ( y \\cdot z )\n", + "\\end{eqnarray*}\n", + "$$\n", + "\n", + "ここで、$ (x_i \\oplus y_i) z_i $ = $ x_i z_i \\oplus y_i z_i $ は以下の表を用いて導出した。\n", + "\n", + "| $ x_i $ | $ y_i $ | $ z_i $ | $ x_i \\oplus y_i $ | $ x_i z_i $ | $ y_i z_i $ | $ (x_i \\oplus y_i) z_i $ | $ x_i z_i \\oplus y_i z_i $ |\n", + "| ------- | ------- | ------- | ------------------ | ----------- | ----------- | ------------------------ | -------------------------- |\n", + "| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |\n", + "| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |\n", + "| 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 |\n", + "| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### [section 2](#example) の量子回路で構成される関数 $ f $ の$x$に対する値と対応する $ y $ と $ b $ とのドット積\n", + "\n", + "| x | f(x) | y (=x $ \\oplus $ b) | x $ \\cdot $ b |\n", + "| ---- | ---- | ------------------- | ------------- |\n", + "| 00 | 00 | 11 | 0 |\n", + "| 01 | 11 | 10 | 1 |\n", + "| 10 | 11 | 01 | 1 |\n", + "| 11 | 00 | 00 | 0 |\n", + "\n", + "シミュレーターでは $ x \\cdot b = 0 $ となる $ x $ だけが測定される。\n", + "\n", + "### [section 3](#implementation) の量子回路で構成される関数 $ f $ の$x$に対する値と対応する $ y $ と $ b $ とのドット積\n", + "\n", + "| x | f(x) | y (=x $ \\oplus $ b) | x $ \\cdot $ b |\n", + "| ---- | ---- | ------------------- | ------------- |\n", + "| 000 | 000 | 110 | 0 |\n", + "| 001 | 001 | 111 | 0 |\n", + "| 010 | 100 | 100 | 1 |\n", + "| 011 | 101 | 101 | 1 |\n", + "| 100 | 100 | 010 | 1 |\n", + "| 101 | 101 | 011 | 1 |\n", + "| 110 | 000 | 000 | 0 |\n", + "| 111 | 001 | 001 | 0 |\n", + "\n", + "シミュレーターでは $ x \\cdot b = 0 $ となる $ x $ だけが測定される。\n", + "\n", + "### [section 3.2](#device) の量子回路で構成される関数 $ f $ の$x$に対する値と対応する $ y $ と $ b $ とのドット積\n", + "\n", + "| x | f(x) | y (=x $ \\oplus $ b) | x $ \\cdot $ b |\n", + "| ---- | ---- | ------------------- | ------------- |\n", + "| 00 | 00 | 11 | 0 |\n", + "| 01 | 10 | 10 | 1 |\n", + "| 10 | 10 | 01 | 1 |\n", + "| 11 | 00 | 00 | 0 |\n", + "\n", + "ノイズを持つ実機では $ x \\cdot b = 0 $ となる $ x $ の測定確率が高く、そうでない $ x $ の測定確率は低い。\n" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-algorithms/superdense-coding.ipynb b/translations/ja/ch-algorithms/superdense-coding.ipynb new file mode 100644 index 0000000..ba095cd --- /dev/null +++ b/translations/ja/ch-algorithms/superdense-coding.ipynb @@ -0,0 +1,543 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OQYW8N5rPyGC", + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 超密度符号化(Superdense Coding)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OQYW8N5rPyGC" + }, + "source": [ + "この notebook では量子コンピューティングにおける超密度符号化(Superdense Coding: SDC)を紹介します。まず初めに作成した量子回路を Qiskit のシミュレーターを使ってテストし、実際の量子コンピューターで動かしてみます。\n", + "\n", + "## 目次\n", + "\n", + "1. [超密度符号化と量子テレポーテーション](#difference)\n", + "2. [処理手順](#process) \n", + " 2.1 [Step 1](#step1) \n", + " 2.2 [Step 2](#step2) \n", + " 2.3 [Step 3](#step3)\n", + "3. [超密度符号化プロトコルのシミュレーション](#simulating) \n", + " 3.1 [3.1 測定の可視化](#visualising) \n", + "4. [実際の量子コンピューターにおける超密度符号化](#real_qc)\n", + "\n", + "\n", + "## 1. 超密度符号化と量子テレポーテーションの違い \n", + "\n", + "量子テレポーテーションと超密度符号化は密接に関係しているので、適切に説明・区別なしには混乱を引き起こすでしょう。\n", + "\n", + "量子テレポーテーションとは、2ビットの古典通信と Bell pair を利用して、量子ビット ($|\\psi\\rangle$) の状態をある場所から他の場所へ送信するプロトコルの事です。言い換えれば、共有されたエンタングルメントを利用してある場所に存在する量子ビットの量子状態を破壊し、離れた場所に作り直すプロトコルとも言えます。対して超密度符号化とは、1つの量子ビット通信を使用して、2つの古典ビットを誰かが別のグループに送信できるようにする手続きの事です。\n", + "\n", + "| 量子テレポーテーション | 超密度符号化 |\n", + "|:----------------------------------------------:|:-----------------------------------------------:|\n", + "| 2つの古典ビットを使って
    1つの量子ビットを転送 | 1つの量子ビットを使って
    2つの古典ビットを転送 |\n", + "\n", + "つまり、テレポーテーション・プロトコルは超密度符号化の反転バージョンであり、アリスとボブが最初の持ち物を交換しただけ、ともみなせます。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "N5LyBKFXYG41" + }, + "source": [ + "\n", + "\n", + "## 2. 処理手順 \n", + "\n", + "![image1](images/superdense.jpg)\n", + "\n", + "### 2.1 Step 1 \n", + "手順はある第三者、チャーリーから始まります。チャーリーはエンタングルした状態にある2量子ビットを用意します。まず彼は、基底状態 $|0\\rangle$ の2量子ビットから始めます。そして1つ目の量子ビットにアダマールゲート( $H$ )を作用させて重ね合わせ状態を作ります。その後、1つ目の量子ビットをコントロール・ビット、2つめをターゲット・ビットとして CNOT ゲート( $CX$ )を作用させます。このエンタングルした状態が、以前私たちが触れた Bell pair です。\n", + "\n", + "\n", + "#### 出力結果\n", + "\n", + "チャーリーは初めにアダマールゲートを作用させます。\n", + "\n", + "$H$ ゲートが1つ目の量子ビットに作用すると重ね合わせ状態に遷移し、次の状態が得られることになります:\n", + "\n", + "\n", + "$$|0+\\rangle = \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |01\\rangle)$$\n", + "\n", + "その後、チャーリーは CNOT ゲートを作用させます。CNOT ゲートは2つの量子ビットをエンタングルさせるので、もしコントロール・ビットが $|1\\rangle$ ならばターゲット・ビットが反転します。 ケットの右側の量子ビットがコントロール・ビットである事に注意しましょう。\n", + "\n", + "\n", + "$$\\text{CNOT} \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |01\\rangle) = \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)$$\n", + "\n", + "### 2.2 Step 2 \n", + "\n", + "チャーリーは1つ目の量子ビットをアリスに、2つ目をボブに送ります。この手順の目標は、アリスが彼女の持っている量子ビットを使って、2つの古典ビット情報をボブに送信することです。しかしその前にアリスは、彼女が送信したい2ビットの情報に応じて、彼女の持つ量子ビットにいくつかのゲートの組を作用させる必要があります。\n", + "\n", + "\n", + "超密度符号化の変換規則(アリスの手順)\n", + "\n", + "\n", + "\n", + "![image2](images/superdense_table1.png)
    \n", + "\n", + "従って、もしアリスが 00 を送りたいならば、彼女は自分の量子ビットには何も作用させません(恒等ゲート( $I$ )を作用させます)し、10 ならば、$X$ ゲートを作用させます。何を送りたいかによって、それに応じたゲートを作用させればよいのです。それが完了したら、アリスは彼女の量子ビットをボブに送り、手順の最終ステップに進みます。\n", + "\n", + "\n", + "### 2.3 Step 3 \n", + "\n", + "ボブは(右側の量子ビットである)アリスの量子ビットを受け取り、彼の量子ビットを使ってアリスのメッセージを復号します。復号の際、ボブは何の情報も必要としない事に注意してください。彼に必要なのは、つぎに示す復号手順の知識だけです。\n", + "\n", + "\n", + "ボブは、右側の量子ビットをコントロール・ビット、左側をターゲット・ビットとして CNOT ゲートを作用させます。そしてアダマールゲートを作用させ、最後に両方の量子ビットを観測する事で、アリスのメッセージを取り出すことが出来ます。\n", + "\n", + "\n", + "\n", + "![image3](images/superdense_table2.png)
    \n", + "\n", + "ボブが観測を行うと、彼はアリスが彼に送ったメッセージを確実に受け取ります。この最後の結果は実際には $-|11\\rangle$ ですが $|11\\rangle$ と書かれていることに注意してください。グローバル位相は観測に影響しないからです。\n", + "\n", + "\n", + "## 3. 超密度符号化プロトコルのシミュレーション \n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "u6m-M5G0X4HO" + }, + "outputs": [], + "source": [ + "# 必要なすべてのライブラリをインポートします\n", + "from qiskit import QuantumCircuit\n", + "from qiskit import IBMQ, Aer, transpile, assemble\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子エンタングルのペアを作るには、$H$ ゲートの後に CNOT ゲートが必要である事はわかっています。なので、`QuantumCircuit` を引数にもち、インデックス `a` , `b` で表される2つの量子ビットをエンタングルさせる関数を作りましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# QuantumCircit (qc) と2つの整数 (a,b) を引数にとる関数を定義します。\n", + "def create_bell_pair(qc, a, b):\n", + " qc.h(a) # 1つめの量子ビットに H ゲートを作用させます。\n", + " qc.cx(a, b) # 1つめの量子ビットをコントロール・ビットとして、CNOT ゲートを作用させます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、メッセージを符号化しましょう。次の4つのメッセージ(`00`, `10`, `01`, `11`)が送信できる事はわかっています。なので、このメッセージを引数に取り、対応するゲートを作用させるような関数を作りましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# QuantumCircuit (qc)、量子ビットの添え字( qubit )、\n", + "# メッセージの文字列( msg )を引数にとる関数を定義します\n", + "def encode_message(qc, qubit, msg):\n", + " if msg == \"00\":\n", + " pass # 00 を送信するには何もしません\n", + " elif msg == \"10\":\n", + " qc.x(qubit) # 10 を送信するには X-ゲートを作用させます\n", + " elif msg == \"01\":\n", + " qc.z(qubit) # 01 を送信するには Z-ゲートを作用させます\n", + " elif msg == \"11\":\n", + " qc.z(qubit) # 11 を送信するには、Zゲートを作用させた後に\n", + " qc.x(qubit) # Xゲートを作用させます\n", + " else:\n", + " print(\"Invalid Message: Sending '00'\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、メッセージを復号します。CNOT ゲートの後に $H$ ゲートを作用させれば復号できる事はわかっているので、これについても関数を作りましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def decode_message(qc, a, b):\n", + " qc.cx(a,b)\n", + " qc.h(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらを使って最終的な手順を完成させましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 185 + }, + "colab_type": "code", + "id": "_HMTtQ8IYh19", + "outputId": "2d05d830-a863-49d9-c522-5a0e331d2fe1" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 2量子ビット回路を作成します\n", + "qc = QuantumCircuit(2)\n", + "\n", + "# まず、イブがアリスとボブに渡す量子エンタングルペアを作ります\n", + "# First, Charlie creates the entangled pair between Alice and Bob\n", + "create_bell_pair(qc, 0, 1)\n", + "qc.barrier() # ここでは回路に「バリア(仕切り)」を挿入します。\n", + " #「バリア」はダイアグラム内のゲートを分離し、\n", + " # 回路のどの部分がどのようなものかを明確にします\n", + " # (回路をビジュアライズするとどのようなものかわかるでしょう)\n", + "\n", + "# ここで、量子ビット_0 をアリスへ、量子ビット_1 をボブに送ります\n", + "\n", + "# 次に、アリスは彼女のメッセージを 量子ビット_0 上に符号化します。\n", + "# 今回は '10' を送りたいしましょう。\n", + "# 読者自身でこの値を変更し、それが回路にどう影響するかを見ることもできます\n", + "\n", + "message = \"10\"\n", + "encode_message(qc, 0, message)\n", + "qc.barrier()\n", + "# そうしたら、アリスは自分の量子ビットをボブに送ります。\n", + "\n", + "# ボブは 量子ビット_0 を受け取ったら、復号手順を適応します。\n", + "decode_message(qc, 0, 1)\n", + "\n", + "# 最後に、ボブが彼の量子ビットを測定することでアリスのメッセージを取得します\n", + "qc.measure_all()\n", + "\n", + "# 出力を描画しましょう\n", + "qc.draw(output = \"mpl\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ODWmbUKVY2a5" + }, + "source": [ + "### 3.1 測定の可視化 " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 352 + }, + "colab_type": "code", + "id": "caUnckbWY0Sd", + "outputId": "f2347fd0-8027-435d-dcab-0fd3a0044c92" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'10': 1024}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "aer_sim = Aer.get_backend('aer_simulator')\n", + "qobj = assemble(qc)\n", + "result = aer_sim.run(qobj).result()\n", + "counts = result.get_counts(qc)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "シミュレーターでは完全な量子コンピューターがシミュレートされます。正しいメッセージが、エラーなしに 100% の確率で測定できる事がわかります。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "fMHrapgKZCpp" + }, + "source": [ + "## 4. 実際の量子コンピューターにおける超密度符号化 \n", + "\n", + "\n", + "それでは、実際の量子コンピューター上で超密度符号化がどのように動作するのかを見ていきましょう。\n", + "\n", + "まずは自分たちのアカウントを読み込んで、最も空いている量子システムを取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 85 + }, + "colab_type": "code", + "id": "CVZk6LPJaQXa", + "outputId": "91fc343f-5c01-428f-a324-888a641b4c55", + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "least busy backend: ibmq_london\n" + ] + } + ], + "source": [ + "from qiskit import IBMQ\n", + "from qiskit.providers.ibmq import least_busy\n", + "shots = 1024\n", + "\n", + "# ローカルアカウントの情報を取得します\n", + "IBMQ.load_account()\n", + "# 最も空いているバックエンドを取得します\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 2 \n", + " and not x.configuration().simulator \n", + " and x.status().operational==True))\n", + "print(\"least busy backend: \", backend)\n", + "# 回路を実行します\n", + "t_qc = transpile(qc, backend, optimization_level=3)\n", + "job = backend.run(t_qc)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "rtFSdEg-bE0u", + "outputId": "5fb9cd41-db14-4298-882f-9fee155158d9", + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# ジョブをモニタリングします\n", + "from qiskit.tools.monitor import job_monitor\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 335 + }, + "colab_type": "code", + "id": "ufD9dKRded1X", + "outputId": "87a43f61-0d3b-40db-8107-d925414b0f5d", + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 結果をプロットします\n", + "result = job.result()\n", + "plot_histogram(result.get_counts(qc))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "idsn5tuwfG_4" + }, + "source": [ + "このように実際の量子コンピューターで実行すると、他の3つの状態も観測結果として現れます。量子ゲートのエラーと量子ビットのデコヒーレンスによるエラーが原因で起こるものです。これらのエラーについては後の章で詳しく学習することになるでしょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy = 86.72%\n" + ] + } + ], + "source": [ + "correct_results = result.get_counts(qc)[message]\n", + "accuracy = (correct_results/shots)*100\n", + "print(f\"Accuracy = {accuracy:.2f}%\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "colab": { + "name": "super-dense-coding.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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-algorithms/teleportation.ipynb b/translations/ja/ch-algorithms/teleportation.ipynb new file mode 100644 index 0000000..2f795be --- /dev/null +++ b/translations/ja/ch-algorithms/teleportation.ipynb @@ -0,0 +1,1109 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子テレポーテーション" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このノートでは量子テレポーテーションについて説明します。まず始めに、作成した量子回路を Qiskit に組み込まれているシミュレーターを使ってテストします。その後、その回路を実際の量子コンピューターで動かしてみます。\n", + "\n", + "## 目次\n", + "\n", + "1. [概要](#overview) \n", + "2. [量子テレポーテーション・プロトコル](#how) \n", + "3. [テレポーテーション・プロトコルのシミュレーション](#simulating) \n", + " 3.1 [実際の量子コンピュータにおける結果の検査方法](#testing) \n", + " 3.2 [状態ベクトル・シミュレーターを使った方法](#simulating-sv) \n", + " 3.3 [QASM・シミュレーターを使った方法](#simulating-qs) \n", + "4. [量子テレポーテーションを理解する](#understanding-qt)\n", + "5. [実際の量子コンピュータにおけるテレポーテーション](#real_qc) \n", + " 5.1 [IBM ハードウェアと遅延測定](#deferred-measurement) \n", + " 5.2 [実行](#executing) \n", + "6. [参考文献](#references)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 概要 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アリスがボブに量子情報を送りたいとしましょう。これを具体的に、アリスがボブに状態\n", + "$\\vert\\psi\\rangle = \\alpha\\vert0\\rangle + \\beta\\vert1\\rangle$\n", + "を送りたい、と仮定します。その為にはまず、$\\alpha$ と $\\beta$ の情報をボブに渡す必要があります。\n", + "\n", + "量子力学には、未知の量子状態の単純な複製を正確に作ることは出来ない、という定理が存在します。量子複製不可能定理(no-cloning theorem)として知られているものです。この定理ゆえ、アリスが単純に $\\vert\\psi\\rangle$ の複製を生成してそれをボブに渡す、という事は出来ません。状態 の複製は古典的な計算でのみ可能なのです(重ね合わせはコピーできません)。\n", + "\n", + "しかし、2つの古典的ビットとエンタングルメントを利用することで、アリスは状態 $\\vert\\psi\\rangle$ をボブに転送できます。その結果、最終的にボブが $\\vert\\psi\\rangle$ を持ち、アリスがもはや何も持っていない事から、我々はこれをテレポーテーションと呼んでいます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 量子テレポーテーション・プロトコル \n", + "量子ビットを転送するためには、アリスとボブは第三者(テラモン)を使ってエンタングルした量子ビットのペアを作り、それを彼ら自身に送ってもらわなくてはなりません。その後アリスは、彼女の量子ビットにいくつかの演算子を作用させ、その結果を古典通信チャンネルを通してボブに送信します。ボブはそれに従って彼の量子ビットにいくつか演算子を作用させることで、結果的にアリスの量子ビットを受け取ることが出来ます。\n", + "\n", + "![teleportation_doodle](images/tele1.jpg)\n", + "\n", + "これらの手順を、以下では量子回路を使って説明していきます。ここでは実際に量子ビットを「送る」わけではありませんので、想像しながら進んでください!\n", + "\n", + "まず初めに、セッションをセットアップしていきます:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# Do the necessary imports\n", + "import numpy as np\n", + "from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister\n", + "from qiskit import IBMQ, Aer, transpile, assemble\n", + "from qiskit.visualization import plot_histogram, plot_bloch_multivector, array_to_latex\n", + "from qiskit.extensions import Initialize\n", + "from qiskit_textbook.tools import random_state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それでは量子回路を作成していきます:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "## SETUP\n", + "# Protocol uses 3 qubits and 2 classical bits in 2 different registers\n", + "\n", + "qr = QuantumRegister(3, name=\"q\") # Protocol uses 3 qubits\n", + "crz = ClassicalRegister(1, name=\"crz\") # and 2 classical bits\n", + "crx = ClassicalRegister(1, name=\"crx\") # in 2 different registers\n", + "teleportation_circuit = QuantumCircuit(qr, crz, crx)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 1\n", + "第三者のテラモンは、エンタングルした量子ビットのペアを作り、片方をボブへ、もう片方をアリスへ渡します。\n", + "\n", + "テラモンが作ったこのペアは Bell pair(ベルペア)と呼ばれる特別なものです。量子回路の言葉を使って Bell pair の作成方法を説明すると、まず量子ビットのペアのうち1つをアダマールゲートで X 基底 ($|+\\rangle$ and $|-\\rangle$) に変換し、これをコントロール・ビットとして、もう片方の量子ビットに CNOT ゲートを適用することで作成できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def create_bell_pair(qc, a, b):\n", + " \"\"\"Creates a bell pair in qc using qubits a & b\"\"\"\n", + " qc.h(a) # Put qubit a into state |+>\n", + " qc.cx(a,b) # CNOT with a as control and b as target" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "# Protocol uses 3 qubits and 2 classical bits in 2 different registers\n", + "qr = QuantumRegister(3, name=\"q\")\n", + "crz, crx = ClassicalRegister(1, name=\"crz\"), ClassicalRegister(1, name=\"crx\")\n", + "teleportation_circuit = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 1\n", + "# In our case, Telamon entangles qubits q1 and q2\n", + "# Let's apply this to our circuit:\n", + "create_bell_pair(teleportation_circuit, 1, 2)\n", + "# And view the circuit so far:\n", + "teleportation_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下では、アリスは $q_1$、ボブは $q_2$ を持っているとしましょう。\n", + "\n", + "#### ステップ 2 \n", + "\n", + "アリスは、コントロール・ビットを $\\vert\\psi\\rangle$ (彼女がボブに送ろうとしている量子ビット)として、$q_1$ に CNOT ゲートを作用させます。そして、$|\\psi\\rangle$ にアダマールゲートを作用させます。今回の量子回路では、アリスが送信しようとしている量子ビット($|\\psi\\rangle$)は $q_0$ です:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def alice_gates(qc, psi, a):\n", + " qc.cx(psi, a)\n", + " qc.h(psi)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "# Protocol uses 3 qubits and 2 classical bits in 2 different registers\n", + "qr = QuantumRegister(3, name=\"q\")\n", + "crz, crx = ClassicalRegister(1, name=\"crz\"), ClassicalRegister(1, name=\"crx\")\n", + "teleportation_circuit = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 1\n", + "create_bell_pair(teleportation_circuit, 1, 2)\n", + "\n", + "## STEP 2\n", + "teleportation_circuit.barrier() # Use barrier to separate steps\n", + "alice_gates(teleportation_circuit, 0, 1)\n", + "teleportation_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 3\n", + "\n", + "次にアリスは、彼女が持っている両方の量子ビット $q_1$ と $\\vert\\psi\\rangle$ を測定し、その結果を2つの古典ビットに格納します。これら2つのビットを、彼女はボブに送信します。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def measure_and_send(qc, a, b):\n", + " \"\"\"Measures qubits a & b and 'sends' the results to Bob\"\"\"\n", + " qc.barrier()\n", + " qc.measure(a,0)\n", + " qc.measure(b,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "# Protocol uses 3 qubits and 2 classical bits in 2 different registers\n", + "qr = QuantumRegister(3, name=\"q\")\n", + "crz, crx = ClassicalRegister(1, name=\"crz\"), ClassicalRegister(1, name=\"crx\")\n", + "teleportation_circuit = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 1\n", + "create_bell_pair(teleportation_circuit, 1, 2)\n", + "\n", + "## STEP 2\n", + "teleportation_circuit.barrier() # Use barrier to separate steps\n", + "alice_gates(teleportation_circuit, 0, 1)\n", + "\n", + "## STEP 3\n", + "measure_and_send(teleportation_circuit, 0 ,1)\n", + "teleportation_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 4\n", + "\n", + "既に $q_2$ を持っているボブは、送られてきた古典ビットの状態に従って $q_2$ に次のゲートを作用させます:\n", + "\n", + "00 $\\rightarrow$ 何もしません\n", + "\n", + "01 $\\rightarrow$ $X$ ゲートを適用\n", + "\n", + "10 $\\rightarrow$ $Z$ ゲートを適用\n", + "\n", + "11 $\\rightarrow$ $ZX$ ゲートを適用\n", + "\n", + "(*注:情報の伝達は純粋に古典的な方法で行われます。* )" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "# This function takes a QuantumCircuit (qc), integer (qubit)\n", + "# and ClassicalRegisters (crz & crx) to decide which gates to apply\n", + "def bob_gates(qc, qubit, crz, crx):\n", + " # Here we use c_if to control our gates with a classical\n", + " # bit instead of a qubit\n", + " qc.x(qubit).c_if(crx, 1) # Apply gates if the registers \n", + " qc.z(qubit).c_if(crz, 1) # are in the state '1'" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "# Protocol uses 3 qubits and 2 classical bits in 2 different registers\n", + "qr = QuantumRegister(3, name=\"q\")\n", + "crz, crx = ClassicalRegister(1, name=\"crz\"), ClassicalRegister(1, name=\"crx\")\n", + "teleportation_circuit = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 1\n", + "create_bell_pair(teleportation_circuit, 1, 2)\n", + "\n", + "## STEP 2\n", + "teleportation_circuit.barrier() # Use barrier to separate steps\n", + "alice_gates(teleportation_circuit, 0, 1)\n", + "\n", + "## STEP 3\n", + "measure_and_send(teleportation_circuit, 0, 1)\n", + "\n", + "## STEP 4\n", + "teleportation_circuit.barrier() # Use barrier to separate steps\n", + "bob_gates(teleportation_circuit, 2, crz, crx)\n", + "teleportation_circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "できました!プロトコルの最後に、アリスの量子ビットはボブにテレポートされます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. テレポーテーション・プロトコルのシミュレーショ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 量子コンピューターにおけるプロトコルの実験方法 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この notebook では、アリスの量子ビットをランダム状態 $\\vert\\psi\\rangle$ (`psi`)で初期化します。この状態は`Initialize`(初期化)ゲートを $|q_0\\rangle$ に作用させる事で作られます。この章では`psi`を選ぶために`random_state`関数を使いますが、`psi`を任意の量子ビット状態に設定してもかまいません。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "|\\psi\\rangle =\\begin{bmatrix}\n", + "-0.70285 - 0.56721i \\\\\n", + "-0.0878 - 0.4202i\n", + "\\end{bmatrix}\n", + "$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create random 1-qubit state\n", + "psi = random_state(1)\n", + "\n", + "# Display it nicely\n", + "display(array_to_latex(psi, prefix=\"|\\\\psi\\\\rangle =\"))\n", + "# Show it on a Bloch sphere\n", + "plot_bloch_multivector(psi)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|0\\rangle$ から $|\\psi\\rangle$ を作る初期化ゲートを作りましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "init_gate = Initialize(psi)\n", + "init_gate.label = \"init\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(`Initialize`にはリセット操作が含まれているため、技術的にはゲートではなく、元に戻すことはできません。代わりに「命令」と呼びます。)量子テレポーテーション回路が動作すれば、回路の最後に量子ビット $|q_2\\rangle$ を状態がこの状態になるはずです。状態ベクトル・シミュレーターを使ってこれをチェックしてみましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 状態ベクトル・シミュレーターを使った方法 \n", + "\n", + "状態ベクトル・シミュレーターを使うと、量子ビットがテレポートされたかどうかを確かめることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "qr = QuantumRegister(3, name=\"q\") # Protocol uses 3 qubits\n", + "crz = ClassicalRegister(1, name=\"crz\") # and 2 classical registers\n", + "crx = ClassicalRegister(1, name=\"crx\")\n", + "qc = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 0\n", + "# First, let's initialize Alice's q0\n", + "qc.append(init_gate, [0])\n", + "qc.barrier()\n", + "\n", + "## STEP 1\n", + "# Now begins the teleportation protocol\n", + "create_bell_pair(qc, 1, 2)\n", + "qc.barrier()\n", + "\n", + "## STEP 2\n", + "# Send q1 to Alice and q2 to Bob\n", + "alice_gates(qc, 0, 1)\n", + "\n", + "## STEP 3\n", + "# Alice then sends her classical bits to Bob\n", + "measure_and_send(qc, 0, 1)\n", + "\n", + "## STEP 4\n", + "# Bob decodes qubits\n", + "bob_gates(qc, 2, crz, crx)\n", + "\n", + "# Display the circuit\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下でみるように、この状態ベクトル・シミュレーターを用いると、状態$|q_2\\rangle$ は上で作った状態 $|\\psi\\rangle$ と同じですが、状態 $|q_0\\rangle$ と $|q_1\\rangle$ は、状態 $|0\\rangle$ か $|1\\rangle$ のどちらかに崩れている事がわかります。状態 $|\\psi\\rangle$ は 量子ビット 0 から 2 にテレポートされています。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim = Aer.get_backend('aer_simulator')\n", + "qc.save_statevector()\n", + "out_vector = sim.run(qc).result().get_statevector()\n", + "plot_bloch_multivector(out_vector)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセルを何回か実行してみてください。すると、量子ビット 0 と 1 の状態が変化している事に気づくと思いますが、量子ビット 2 は常に状態 $|\\psi\\rangle$ のままです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 QASM シミュレーターを使った方法 \n", + "\n", + "量子テレポーテーションは2つのグループ間で量子ビットを送るようにデザインされています。これを実証するハードウェアを私たちは持ち合わせていませんが、単一の量子チップ上でなら、ゲートが正しい変換を行う事を実証することができます。ここでは、QASM シミュレーターを使用して、プロトコルをテストする方法をシミュレートします。\n", + "\n", + "実際の量子コンピューターでは、状態ベクトルをサンプリングする事はできません。なので、テレポーテーション回路が稼働しているかをチェックしたければ手段を変える必要があります。みなさんは、量子ビット $|0\\rangle$ を状態 $|\\psi\\rangle$ に変えるために初期化したことを覚えているでしょう:\n", + "\n", + "$$ |0\\rangle \\xrightarrow{\\text{初期化}} |\\psi\\rangle $$\n", + "\n", + "全ての量子ゲートは可逆性を持っているので、次のようにして初期化の逆変換を得ることが出来ます:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "inverse_init_gate = init_gate.gates_to_uncompute()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この演算子は次のような性質を持っています:\n", + "\n", + "$$ |\\psi\\rangle \\xrightarrow{\\text{逆初期化}} |0\\rangle $$\n", + "\n", + "量子ビット $|q_0\\rangle$ が $|q_2\\rangle$ にテレポートした事を証明するには、$|q_2\\rangle$ に対してこの逆初期化を行えば確実に $|0\\rangle$ が測定できる事を期待すればよいのです。下の回路ではこれを実行しています:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "## SETUP\n", + "qr = QuantumRegister(3, name=\"q\") # Protocol uses 3 qubits\n", + "crz = ClassicalRegister(1, name=\"crz\") # and 2 classical registers\n", + "crx = ClassicalRegister(1, name=\"crx\")\n", + "qc = QuantumCircuit(qr, crz, crx)\n", + "\n", + "## STEP 0\n", + "# First, let's initialize Alice's q0\n", + "qc.append(init_gate, [0])\n", + "qc.barrier()\n", + "\n", + "## STEP 1\n", + "# Now begins the teleportation protocol\n", + "create_bell_pair(qc, 1, 2)\n", + "qc.barrier()\n", + "\n", + "## STEP 2\n", + "# Send q1 to Alice and q2 to Bob\n", + "alice_gates(qc, 0, 1)\n", + "\n", + "## STEP 3\n", + "# Alice then sends her classical bits to Bob\n", + "measure_and_send(qc, 0, 1)\n", + "\n", + "## STEP 4\n", + "# Bob decodes qubits\n", + "bob_gates(qc, 2, crz, crx)\n", + "\n", + "## STEP 5\n", + "# reverse the initialization process\n", + "qc.append(inverse_init_gate, [2])\n", + "\n", + "# Display the circuit\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路図では「disentangler」とラベルのついた、`inverse_init_gate`が表示されているのがわかります。最後に、3番目の古典ビットを測定して、その結果を古典ビットに確認します:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Need to add a new ClassicalRegister\n", + "# to see the result\n", + "cr_result = ClassicalRegister(1)\n", + "qc.add_register(cr_result)\n", + "qc.measure(2,2)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それでは実験を実行しましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_qc = transpile(qc, sim)\n", + "t_qc.save_statevector()\n", + "counts = sim.run(t_qc).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$q_2$ (文字列の左端のビット)の測定で 状態 $|0\\rangle$ を得る確率が 100% であることがわかります。これは予想された結果であり、テレポーテーション・プロトコルが正常に動作した事を示しています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 量子テレポーテーションを理解する " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子テレポーテーションを実装したので、次にこのプロトコルの背景にある数学を理解しましょう。\n", + "\n", + "#### ステップ 1\n", + "\n", + "量子テレポーテーションは、アリスがボブに$|q\\rangle = a|0\\rangle + b|1\\rangle$(ランダムな量子ビット)を送信する必要があるという事実から始まります。彼女は量子ビットの状態を知りません。このために、アリスとボブは第三者(テラモン)の助けを借ります。テラモンは、アリスとボブのためにエンタングルした量子ビットのペアを準備します。 エンタングルした量子ビットは、ディラック記法で次のように書くことができます:\n", + "\n", + "$$ |\\psi \\rangle = \\frac{1}{\\sqrt{2}} (|00\\rangle + |11\\rangle) $$\n", + "\n", + "アリスとボブはそれぞれ、エンタングルした量子ビットのペアの1量子ビット(それぞれAとBとして示されます)ずつを持っています。\n", + "\n", + "$$|\\psi\\rangle = \\frac{1}{\\sqrt{2}} (|0\\rangle_A |0\\rangle_B + |1\\rangle_A |1\\rangle_B) $$\n", + "\n", + "この量子ビットのペアを使って、アリスが始めの2量子ビットを持ち、ボブが残りの1量子ビットを持つ、3量子ビット量子システムを作成します。\n", + "\n", + "$$ \\begin{align*}\n", + "|q\\rangle \\otimes |\\psi\\rangle &= \\frac{1}{\\sqrt{2}} (a |0\\rangle \\otimes (|00\\rangle + |11\\rangle) + b |1\\rangle \\otimes (|00\\rangle + |11\\rangle))\\\\\n", + "&= \\frac{1}{\\sqrt{2}} (a|000\\rangle + a|011\\rangle + b|100\\rangle + b|111\\rangle) \n", + "\\end{align*}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 2\n", + "\n", + "プロトコルに従って、アリスは2つの量子ビットにCNOTゲートを適用し、続いて最初の量子ビットにアダマールゲートを適用します。 これにより、次の状態になります:\n", + "\n", + "$$ \n", + "\\begin{align*} (H \\otimes I \\otimes I) (CNOT \\otimes I) (|q\\rangle \\otimes |\\psi\\rangle)\n", + "&=(H \\otimes I \\otimes I) (CNOT \\otimes I) \\frac{1}{\\sqrt{2}} (a|000\\rangle + a|011\\rangle + b|100\\rangle + b|111\\rangle) \\\\\n", + "&= (H \\otimes I \\otimes I) \\frac{1}{\\sqrt{2}} (a|000\\rangle + a|011\\rangle + b|110\\rangle + b|101\\rangle) \\\\\n", + "&= \\frac{1}{2} (a(|000\\rangle + |011\\rangle + |100\\rangle + |111\\rangle) + b(|010\\rangle + |001\\rangle - |110\\rangle - |101\\rangle)) \\\\\n", + "\\end{align*}\n", + "$$\n", + "\n", + "次に、これを分離して次のように書くことができます:\n", + "\n", + "$$\n", + "\\begin{align*}\n", + "= \\frac{1}{2}(\n", + " & \\phantom{+} |00\\rangle (a|0\\rangle + b|1\\rangle) \\hphantom{\\quad )} \\\\\n", + " & + |01\\rangle (a|1\\rangle + b|0\\rangle) \\hphantom{\\quad )}\\\\[4pt]\n", + " & + |10\\rangle (a|0\\rangle - b|1\\rangle) \\hphantom{\\quad )}\\\\[4pt]\n", + " & + |11\\rangle (a|1\\rangle - b|0\\rangle) \\quad )\\\\\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 3\n", + "\n", + "アリスは(彼女が所有している)最初の2量子ビットを測定し、それらを2つの古典ビットとしてボブに送信します。彼女が取得する結果は、常に4つの標準基底状態$|00\\rangle, |01\\rangle, |10\\rangle, |11\\rangle$のいずれかであり、確率は同じです。\n", + "\n", + "彼女の測定に基づいて、ボブの状態は次のように予測されます。\n", + "$$ |00\\rangle \\rightarrow (a|0\\rangle + b|1\\rangle)\\\\\n", + "|01\\rangle \\rightarrow (a|1\\rangle + b|0\\rangle)\\\\\n", + "|10\\rangle \\rightarrow (a|0\\rangle - b|1\\rangle)\\\\\n", + "|11\\rangle \\rightarrow (a|1\\rangle - b|0\\rangle)$$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ 4\n", + "\n", + "ボブは、アリスからビットを受け取ると、かつてエンタングルされたペアの一部であった量子ビットに適切な変換を適用することで、元の状態$|q\\rangle$を取得できることを知っています。\n", + "\n", + "彼が適用する必要のある変換は次のとおりです:\n", + "\n", + "![title](images/teleportation-transformation.png)\n", + "\n", + "このステップの後、ボブはアリスの状態を正しく再構築することができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 実際の量子コンピューターにおけるテレポーテーション " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.1 IBMハードウェアと遅延測定 \n", + "\n", + "IBMの量子コンピュータは現在、測定の後に行う命令系をサポートしていないため、実際のハードウェア上ではこれまでの形の回路による量子テレポーテーションを実行できません。ただ幸いなことに、[1]の4.4で説明されている「遅延測定原理」のおかげで、計算実行能力を制限することはありません。この原理は、どのような測定も回路の終端まで延期することができるというものです。つまりすべての測定を最後に持ってくる事が可能で、そこで測定しても同じ結果が得られるはずなのです。\n", + "\n", + "![deferred_measurement_gates](images/defer_measurement.svg)\n", + "\n", + "早い段階で測定を行うことで得られるメリットは、ハードウェアと関連しています。早期に測定できれば、量子ビットを再利用できるかもしれませんし、量子ビットが壊れやすい重ね合わせ状態にある時間を短縮できるかもしれません。この例では、量子テレポーテーションにおける早期測定が、直接量子通信チャンネルを使わず量子ビットの状態を送信出来たはずです。\n", + "\n", + "ゲートを動かすことで実際のハードウェア上で「テレポーテーション」回路を実証することができる一方で、テレポーテーションプロセス(古典的なチャネルを介した量子状態の転送)の恩恵が失われていることに注意してください。\n", + "\n", + "それでは、`bob_gates`関数を`new_bob_gates`に書き直してみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "def new_bob_gates(qc, a, b, c):\n", + " qc.cx(b, c)\n", + " qc.cz(a, c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして新しい回路を作ります:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3,1)\n", + "\n", + "# First, let's initialize Alice's q0\n", + "qc.append(init_gate, [0])\n", + "qc.barrier()\n", + "\n", + "# Now begins the teleportation protocol\n", + "create_bell_pair(qc, 1, 2)\n", + "qc.barrier()\n", + "# Send q1 to Alice and q2 to Bob\n", + "alice_gates(qc, 0, 1)\n", + "qc.barrier()\n", + "# Alice sends classical bits to Bob\n", + "new_bob_gates(qc, 0, 1, 2)\n", + "\n", + "# We undo the initialization process\n", + "qc.append(inverse_init_gate, [2])\n", + "\n", + "# See the results, we only care about the state of qubit 2\n", + "qc.measure(2,0)\n", + "\n", + "# View the results:\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 実行 " + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/anaconda3/lib/python3.7/site-packages/qiskit/providers/ibmq/ibmqfactory.py:192: UserWarning: Timestamps in IBMQ backend properties, jobs, and job results are all now in local time instead of UTC.\n", + " warnings.warn('Timestamps in IBMQ backend properties, jobs, and job results '\n" + ] + } + ], + "source": [ + "# First, see what devices we are allowed to use by loading our saved accounts\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# get the least-busy backend at IBM and run the quantum circuit there\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit.tools.monitor import job_monitor\n", + "backend = least_busy(provider.backends(filters=lambda b: b.configuration().n_qubits >= 3 and\n", + " not b.configuration().simulator and b.status().operational==True))\n", + "t_qc = transpile(qc, backend, optimization_level=3)\n", + "job = backend.run(t_qc)\n", + "job_monitor(job) # displays job status under cell" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n", + "{'0': 7528, '1': 664}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the results and display them\n", + "exp_result = job.result()\n", + "exp_counts = exp_result.get_counts(qc)\n", + "print(exp_counts)\n", + "plot_histogram(exp_counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このように、$|1\\rangle$ の測定結果は複数あります。これらはゲートと量子ビットのエラーに起因したものです。対照的に、この notebook のはじめに使ったシミュレーターではゲートのエラーはゼロであり、エラーのないテレポーテーションが可能でした。" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The experimental error rate : 8.10546875 %\n" + ] + } + ], + "source": [ + "print(f\"The experimental error rate : {exp_counts['1']/sum(exp_counts.values()):.3f}%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "[1] M. Nielsen and I. Chuang, Quantum Computation and Quantum Information, Cambridge Series on Information and the Natural Sciences (Cambridge University Press, Cambridge, 2000).\n", + "\n", + "[2] Eleanor Rieffel and Wolfgang Polak, Quantum Computing: a Gentle Introduction (The MIT Press Cambridge England, Massachusetts, 2011)." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.16.0',\n", + " 'qiskit-aer': '0.7.0',\n", + " 'qiskit-ignis': '0.5.0',\n", + " 'qiskit-ibmq-provider': '0.11.0',\n", + " 'qiskit-aqua': '0.8.0',\n", + " 'qiskit': '0.23.0'}" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-appendix/index.md b/translations/ja/ch-appendix/index.md new file mode 100644 index 0000000..b84a975 --- /dev/null +++ b/translations/ja/ch-appendix/index.md @@ -0,0 +1,2 @@ + +このAppendix(付録)の章には、線形代数の概念の詳細な復習と、量子コンピューターに詳しい人が最速でqiskitを学べるコースがあります。 \ No newline at end of file diff --git a/translations/ja/ch-appendix/linear_algebra.ipynb b/translations/ja/ch-appendix/linear_algebra.ipynb new file mode 100644 index 0000000..1fe15ce --- /dev/null +++ b/translations/ja/ch-appendix/linear_algebra.ipynb @@ -0,0 +1,723 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 量子コンピューティング向け線形代数入門" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "from qiskit import *\n", + "from qiskit.visualization import plot_bloch_vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**序論**\n", + "\n", + "線形代数は、量子コンピューティングの言語です。 このため、量子計算の驚くべき、かつおもしろい数多くの構造にたどり着くためには、その構造を構築する基本的な数学的概念を十分に理解することが肝要となります。このセクションの目的は、読者が量子コンピューティングの研究において活用できるようになるまで、基礎線形代数に関する知識の基盤を構築することにあります。\n", + "\n", + "**ベクトルとベクトル空間**\n", + "\n", + "まずは、量子計算において最も重要な数学量の1つであるベクトルについて議論することから、基礎線形代数の探究を始めましょう。\n", + "\n", + "正式には、 **ベクトル** $|v\\rangle$ は、ベクトル空間として知られる集合の元として定義されています。 より直感的で幾何学的な定義では、ベクトルは「方向と大きさの両方を持つ数学的な量」になります。 例えば、 $x$ と $y$ 要素を持つベクトル $\\begin{pmatrix} 3 \\\\ 5 \\end{pmatrix}$ を考えましょう。このベクトルは、 $x$ 軸方向に $3$ 単位と $y$軸方向に $5$ 単位を指す矢印として表示できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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O++8MwsWLOCII47IepakJig47hFREhHLImJRMQYpG8uWLeOEE07gs88+o6SkhHvuuYdjjz0261mSmqgYz9wvAFYU4esoIy+++CIVFRV88MEHANx2220MGzYs41WSClFQ3COiJ3A8MK04c9TS3njjDcrKylizZg0AU6dOZfTo0RmvklSoQp+53wBcAmza2idExDkRURsRtXV1dQXenYpp7dq1lJeX89prrwEwefJkfvazn2W8SlIxNDnuETEEWJNS+urZpDaTUqpMKfVLKfUrLS1t6t2pyD766CMGDx7Ms88+C8C4ceO46qqrMl4lqVgKeebeHxgaEa8CdwM/joj/KcoqNavPP/+ck046iSVLlgDwk5/8hJtvvpmIyHiZpGJpctxTSv+dUuqZUjoAGAk8nFI6s2jL1Cw2btzIqFGjqKmpAaCsrIyZM2dSUlKS8TJJxeTr3NuRlBLjx4/nvvvuA+Coo45i7ty57Lzzzhkvk1RsRTlxWErpUeDRYnwtNZ/LL7+cW2+9FYDDDjuM+++/n65du2a8SlJz8Jl7O3H99ddz9dVXA7D//vtTXV3tudilHDPu7cAdd9zBpEmTANhrr72oqamhR48eGa+S1JyMe87Nnz+fsWPHAvW/zHrx4sX07t0741WSmptxz7FHH32UESNGsHHjRjp27MjChQvp27dv1rMktQDjnlNLly5l6NChfP7555SUlHDvvff6a/GkdsS459ALL7xARUUFH374IQC33347J5xwQsarJLUk454zq1atoqysjC/O43PDDTcwatSojFdJamnGPUfeeecdysvLWblyJVD/uvYLLrgg41WSsmDcc+LDDz9k8ODBrFhRf2r9n/70p1xxxRUZr5KUFeOeA59//jknnngiTz75JAAjRozgpptu8kRgUjtm3Nu4jRs3csYZZ/DQQw8BMHDgQO68805PBCa1c8a9DUspce655zJnzhwAjj76aObMmcNOO+2U8TJJWTPubdjkyZOZNq3+Nxz26dOHRYsW0aVLl4xXSWoNjHsbdd1113HNNdcA0KtXL6qqqth9990zXiWptTDubdD06dO5+OKLAdh7772prq5m3333zXiVpNbEuLcx8+bN4+yzzwZgt912o6qqioMOOijjVZJaG+PehjzyyCOMHDmSTZs20bFjRxYtWsThhx+e9SxJrZBxbyNqa2sZOnQo69ato0OHDsyePZsf/vCHWc+S1EoZ9zbgueeeY9CgQXz00UcAzJgxg+OPPz7jVZJaM+Peyq1cuZLy8nLeeecdAH7zm99wxhlnZLxKUmtn3Fuxuro6ysvLef311wGYMmUKEydOzHiVpLbAuLdSX5wI7PnnnwdgwoQJTJkyJeNVktoK494KffbZZwwfPpza2loATjvtNG688UZPBCap0Yx7K7NhwwZOP/10Hn74YQAGDRrEHXfcwQ47+EclqfEsRiuSUmLcuHHMmzcPgP79+zN79mx23HHHjJdJamuMeyty6aWXMn36dAC++93vsnDhQjp37pzxKkltkXFvJX71q19x7bXXAnDggQdSVVVF9+7dM14lqa0y7q3AtGnTuPTSSwH41re+RU1NDfvss0/GqyS1ZcY9Y3PmzGHcuHEAdOvWjaqqKg488MCMV0lq64x7hv70pz9x+umns2nTJjp16sSiRYv43ve+l/UsSTnQ5LhHxLcj4pGIWBERz0TEBcUclnd/+9vfGD58+JcnAps7dy79+/fPepaknOhQwG03AJNSSksjYhfgqYioSSk9W6RtubVixQoGDx7Mxx9/TERw5513UlFRkfUsSTnS5GfuKaXVKaWlDe9/CKwAehRrWF699tprlJWV8e677wLw29/+ltNOOy3jVZLypijH3CPiAKAvsORrPnZORNRGRG1dXV0x7q7NWrNmDeXl5bzxxhsAXHHFFZx33nkZr5KURwXHPSK6AnOAC1NKH2z58ZRSZUqpX0qpX2lpaaF312Z98MEHDBo0iBdeeAGA888/n8svvzzjVZLyqqC4R8SO1If9rpTS3OJMyp/PPvuMYcOGsXTpUgDOPPNMfv3rX3siMEnNppBXywRwG7AipXR98Sbly4YNGxg5ciSPPvooAEOGDGH69OmeCExSsyqkMP2BUcCPI+Lphn8GF2lXLmzatImzzz6b+fPnA/CjH/2Ie++91xOBSWp2TX4pZErpz4DHFbYipcTFF1/MjBkzADj88MNZsGABnTp1ynaYpHbBYwPN5JprruH66+uPVh100EFUVVXRrVu3jFdJai+MezOorKxk8uTJAOy7775UV1ez9957Z7xKUnti3Ivsvvvu49xzzwWge/fuVFVV0atXr4xXSWpvjHsR1dTUcMYZZ5BSonPnztx///306dMn61mS2iHjXiRLlizhxBNPZP369ey4447MnTuXo48+OutZktop414EzzzzzL+dCGzmzJkMHDgw61mS2jHjXqBXX32V8vJy1q5dC8Dvfvc7RowYkfEqSe2dcS/A22+/TVlZGW+++SYAV1111ZffTJWkLBn3Jnr//fepqKjgpZdeAuCiiy768uWPkpQ1494En376KUOHDuXpp58GYPTo0Vx33XWeCExSq2Hct9P69esZMWIEjz32GABDhw5l2rRpnghMUqtikbbDpk2bGDt2LAsXLgTgmGOO4e6776ZDh0J+W6EkFZ9xb6SUEpMmTWLmzJkA9O3b1xOBSWq1jHsjXX311dxwww0A9O7dm8WLF7PbbrtlvEqSvp5xb4Rbbrnly1+J16NHD2pqathrr70yXiVJW2fct+Gee+5h/PjxAOy+++5UV1ez//77Z7xKkr6Zcf8GVVVVjBo1ipQSXbp04YEHHuCwww7LepYkbZNx34onnniCk0466csTgc2bN4+jjjoq61mS1CjG/WssX76c448/nk8++YSI4A9/+ANlZWVZz5KkRjPuW3jllVcoLy/nX//6FwC33norp5xySsarJGn7GPfNvPXWW5SVlbF69WoAfvGLX3D22WdnvEqStp9xb/Dee+9RUVHByy+/DMCkSZO49NJLM14lSU1j3IFPPvmEE044gb///e8AjBkzhmuvvdYTgUlqs9p93NevX8+pp57Kn//8ZwCGDx9OZWWlYZfUprXruG/atIkxY8Zw//33A3Dssccya9YsTwQmqc1rt3FPKXHhhRdy1113AfD973+f+fPn07Fjx4yXSVLh2m3cr7zySm666SYADj74YB588EF23XXXjFdJUnG0y7jffPPNTJkyBYCePXtSU1NDaWlpxqskqXjaXdxnzZrFxIkTAdhjjz2orq5mv/32y3iVJBVXu4r7gw8+yFlnnUVKia5du/Lggw9y6KGHZj1Lkoqu3cT98ccf5+STT2bDhg3stNNO/PGPf+TII4/MepYkNYuC4h4RFRHxfES8FBGXFWtUsf3jH/9gyJAhfPrpp+ywww7MmjWLAQMGZD1LkppNk+MeESXAzcAg4DDgtIhodSc7f/nllxk4cCDvvfceAJWVlZx00kkZr5Kk5lXIM/f/AF5KKf0zpbQOuBsYVpxZxbN8+XLeffddAH75y18yduzYjBdJUvMr5EcxewCvb3Z5FfCV32YREecA5wCZvCpl2LBhLFy4kMcff5xLLrmkxe9fkrJQSNy/7uQr6StXpFQJVAL069fvKx9vCQMHDmTgwIFZ3LUkZaKQwzKrgG9vdrkn8GZhcyRJxVBI3J8EekdEr4jYCRgJLCjOLElSIZp8WCaltCEiJgBVQAkwPaX0TNGWSZKarKBz26aUHgAeKNIWSVKRtJufUJWk9sS4S1IOGXdJyiHjLkk5ZNwlKYeMuyTlkHGXpBwy7pKUQ8ZdknLIuEtSDhl3Scoh4y5JOWTcJSmHjLsk5VCk1HK/+S4i6oDXWuwO/9+ewDsZ3G+WfMztg4+5fTgkpbTL9tygoPO5b6+UUmlL3t8XIqI2pdQvi/vOio+5ffAxtw8RUbu9t/GwjCTlkHGXpBxqL3GvzHpABnzM7YOPuX3Y7sfcot9QlSS1jPbyzF2S2hXjLkk5lPu4R0RFRDwfES9FxGVZ72luEfHtiHgkIlZExDMRcUHWm1pCRJRExLKIWJT1lpYQEd0iYnZEPNfwZ3101puaW0Rc1PDv9PKImBURHbPeVGwRMT0i1kTE8s2u2z0iaiLixYa33RvztXId94goAW4GBgGHAadFxGHZrmp2G4BJKaVDgR8A49vBYwa4AFiR9YgWdCOwOKX0HeBwcv7YI6IHcD7QL6XUBygBRma7qlnMACq2uO4y4KGUUm/goYbL25TruAP/AbyUUvpnSmkdcDcwLONNzSqltDqltLTh/Q+p/4++R7armldE9ASOB6ZlvaUlRMSuwDHAbQAppXUppfeyXdUiOgCdIqID0Bl4M+M9RZdSegxYu8XVw4A7Gt6/AxjemK+V97j3AF7f7PIqch66zUXEAUBfYEm2S5rdDcAlwKash7SQA4E64PaGQ1HTIqJL1qOaU0rpDeA6YCWwGng/pVSd7aoWs3dKaTXUP3kD9mrMjfIe9/ia69rFaz8joiswB7gwpfRB1nuaS0QMAdaklJ7KeksL6gAcAdySUuoLfEwj/6reVjUcZx4G9AL2BbpExJnZrmrd8h73VcC3N7vckxz+VW5LEbEj9WG/K6U0N+s9zaw/MDQiXqX+sNuPI+J/sp3U7FYBq1JKX/yNbDb1sc+z44BXUkp1KaX1wFzgPzPe1FLejoh9ABrermnMjfIe9yeB3hHRKyJ2ov4bMAsy3tSsIiKoPxa7IqV0fdZ7mltK6b9TSj1TSgdQ/+f7cEop18/oUkpvAa9HxCENVw0Ans1wUktYCfwgIjo3/Ds+gJx/E3kzC4DRDe+PBuY35kYtelbIlpZS2hARE4Aq6r+7Pj2l9EzGs5pbf2AU8L8R8XTDdZNTSg9kuEnFNxG4q+FJyz+BMRnvaVYppSURMRtYSv0rwpaRw9MQRMQs4Fhgz4hYBUwBrgHujYix1P9P7ieN+lqefkCS8ifvh2UkqV0y7pKUQ8ZdknLIuEtSDhl3Scoh4y5JOWTcJSmH/g+Bt4Myt6oA2QAAAABJRU5ErkJggg==", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure()\n", + "ax = plt.gca()\n", + "ax.quiver([3], [5], angles='xy', scale_units='xy', scale=1)\n", + "ax.set_xlim([-1, 10])\n", + "ax.set_ylim([-1, 10])\n", + "plt.draw()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ベクトルの「始点」を原点に配置する必要がないことに注意してください。重要なのは、正しい方向を指していることです。\n", + "\n", + "量子コンピューティングでは、しばしば **状態ベクトル** を扱います。状態ベクトルは、特定の量子状態に対応する空間内の特定の点を指します。 これは、しばしばブロッホ球を使用して可視化されます。 例えば、量子系の状態を表すベクトルは、ブロッホ球に囲まれたこの矢印のように見えます。これは、状態ベクトルが「指し示せる」すべての点の集合、いわゆる「状態空間」です:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_bloch_vector([1, 0, 0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この状態は、 $|0\\rangle$ と $|1\\rangle$ を等しく重ね合わせたものに対応します(矢印は、球の上部である $|0\\rangle$ と下部である $|1\\rangle$ の間にありますよね)。ベクトルは球の表面のどこにでも回転させることができ、それぞれの点は異なる量子状態を表しているのです。\n", + "\n", + "ベクトルのより正式な定義、ベクトルはベクトル空間の元であることに立ち戻りましょう。ここでまず、ベクトル空間を定義しなければなりません。 **体** $F$上の **ベクトル空間** $V$ は、以下の2つの条件を満たすオブジェクト (ベクトル) の集合です。 1つ目の条件は、2つのベクトル$|a\\rangle, \\ |b\\rangle \\ \\in \\ V$ の **ベクトル加算** は、$V$に含まれる3番目のベクトル $|a\\rangle \\ + \\ |b\\rangle \\ = \\ |c\\rangle$を生じること、2つ目の条件は、ある$|a\\rangle \\ \\in \\ V$ とある $n \\ \\in \\ F$の**スカラー乗算**が、$n|a\\rangle$ と表現でき、かつ$V$に含まれること、です。 \n", + "\n", + "では、基本的な例を使用して、上の定義を確認しましょう。 体 $\\mathbb{R}$ 上の集合 $\\mathbb{R}^2$ がベクトル空間であることを証明します。まず:\n", + "
    \n", + "\n", + "\n", + "$$\\begin{pmatrix} x_1 \\\\ y_1 \\end{pmatrix} \\ + \\ \\begin{pmatrix} x_2 \\\\ y_2 \\end{pmatrix} \\ = \\ \\begin{pmatrix} x_1 \\ + \\ x_2 \\\\ y_1 \\ + \\ y_2 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "が、$\\mathbb{R}^2$ に含まれることを証明しましょう。まず、2つの実数の和は実数であり、新たに形成されたベクトルの両方の構成要素が実数になることから、これは明らかです。すなわち、このベクトルは $\\mathbb{R}^2$ に含まれています。また:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$n |v\\rangle \\ = \\ \\begin{pmatrix} nx \\\\ ny \\end{pmatrix} \\ \\in \\ V \\ \\ \\ \\ \\forall n \\ \\in \\ \\mathbb{R}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "が$\\mathbb{R}^2$ に含まれることも証明しましょう。実数と実数の積は実数であり、新たなベクトルの値が実数になるので、この命題を証明できます。\n", + "\n", + "**行列と行列演算**\n", + "\n", + "次の基本概念である**行列**に関心を向けましょう。行列はベクトルを他のベクトルに変換する数学的オブジェクトです:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$|v\\rangle \\ \\rightarrow \\ |v'\\rangle \\ = \\ M |v\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "一般的に、行列は次のような形で、数の「配列」として記述されます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$M \\ = \\ \\begin{pmatrix} 1 & -2 & 3 \\\\ 1 & 5i & 0 \\\\ 1 \\ + \\ i & 7 & -4 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "行列の乗算を実行することで、行列をベクトルに「適用」することができます。 一般的に、2つの行列の乗算とは、1つ目の行列の最初の行を取り、 2つ目の行列の最初の列にある各「パートナー」要素と乗算(行の最初の数値は列の最初の数値、行の2番目の数値は列の2番目の数値……と乗算)することからなります。これらの乗算された数字は足し合わされ、新しい行列の最初の行の最初の要素になるのです。最初の行の残りの部分に入力するには、2つ目の行列の 2番目、3番目……の列に対してこのプロセスを繰り返します。 次に、1つ目の行列の2番目の行を取り、 2つ目の行列の各列についてこのプロセスを繰り返し、 2番目の行を取得します。1つ目の行列のすべての行について、このプロセスを実行します。その結果の行列が、私たちの求める新しい行列です。例を示しましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\begin{pmatrix} 2 & 0 \\\\ 5 & -1 \\end{pmatrix} \\begin{pmatrix} -3 & 1 \\\\ 2 & 1 \\end{pmatrix} \\ = \\ \\begin{pmatrix} (2)(-3) + (0)(2) & (2)(1) \\ + \\ (0)(1) \\\\ (5)(-3) + (-1)(2) & (5)(1) \\ + \\ (-1)(1) \\end{pmatrix} \\ = \\ \\begin{pmatrix} -6 & 2 \\\\ -17 & 4 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ご覧の通り、前に説明したプロセスだけを使って最終的な行列に到達できました。「行列」をベクトルに適用するという点に立ち戻ると、ベクトルは単に$1$列の行列と解釈できるので、行列の乗算はベクトルと全く同じように振る舞うことがお分かりになると思います。量子コンピューティングの世界には、量子計算を実行するために操作する量子状態ベクトルというものがあります。ベクトルは単に1列の行列と解釈できます。行列をベクトルに適用するには、上記と同じ行列の乗算手順に従います。私たちは実際、連続した**量子ゲート**を適用することで量子コンピュータ内の量子ビットを操作します。 各量子ゲートは、状態ベクトルに適用できる行列として表現できるため、状態が変化します。 例えば、最もよく知られる量子ゲートの1つはPauli-Xゲートであり、これは以下の行列によって表現されます: \n", + "
    \n", + "\n", + "\n", + "$$\\sigma_x \\ = \\ \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "このゲートは、古典的なNOT論理ゲートと同様に機能します。計算基底状態である $|0\\rangle$ を $|1\\rangle$ に、 $|1\\rangle$ を $|0\\rangle$ にマップ (状態を「反転」)します。 実際の列ベクトルとして、以下の2つの基底状態を定義します;\n", + "\n", + "
    \n", + "\n", + "\n", + "$$|0\\rangle \\ = \\ \\begin{pmatrix} 1 \\\\ 0 \\end{pmatrix} \\ \\ \\ \\ \\ \\ \\ |1\\rangle \\ = \\ \\begin{pmatrix} 0 \\\\ 1 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "このとき、この行列をそれぞれのベクトルに適用すると:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_x |0\\rangle \\ = \\ \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix} \\begin{pmatrix} 1 \\\\ 0 \\end{pmatrix} \\ = \\ \\begin{pmatrix} (0)(1) \\ + \\ (1)(0) \\\\ (1)(1) \\ + \\ (0)(0) \\end{pmatrix} \\ = \\ \\begin{pmatrix} 0 \\\\ 1 \\end{pmatrix} \\ = \\ |1\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_x |1\\rangle \\ = \\ \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix} \\begin{pmatrix} 0 \\\\ 1 \\end{pmatrix} \\ = \\ \\begin{pmatrix} (0)(0) \\ + \\ (1)(1) \\\\ (1)(0) \\ + \\ (0)(1) \\end{pmatrix} \\ = \\ \\begin{pmatrix} 1 \\\\ 0 \\end{pmatrix} \\ = \\ |0\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "となります。この行列が、状態ベクトルに対して期待通りに動作していることが確認できました。\n", + "\n", + "しばしば量子計算では、**エルミート行列**と**ユニタリ行列**という、2つの非常に重要な行列を扱います。前者は量子力学の研究においてより重要ですが、量子計算の研究で議論するためにも依然として必要です。後者は、量子力学と量子計算の両方において、比類のない重要性を持ちます。もし読者がこの線形代数のセクションから持ち帰るべきものが一つあるとしたら、それはユニタリ行列の考え方です。\n", + "\n", + "まず、エルミート行列とは、その**共役転置**( $\\dagger$ 記号を使用して表現されます)が自分自身と等しい行列を言います。つまり、エルミート行列の虚数成分の符号を反転させ、その行列の要素を正対角線(左上隅から右下隅への対角線)で折り返すと、同じ行列が生成されます。例えば、量子計算で一般的に使用される行列であるPauli-Y行列は、エルミート行列です:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_y \\ = \\ \\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix} \\ \\Rightarrow \\ \\sigma_y^{\\dagger} \\ = \\ \\begin{pmatrix} 0 & -(i) \\\\ -(-i) & 0 \\end{pmatrix} \\ = \\ \\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix} \\ = \\ \\sigma_y$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "どのように$i$ と $-i$ の場所を切り替えたか (正対角線に対し反転しているため、ゼロは変更されていない)に注意してから、符号を反転させます。\n", + "\n", + "ユニタリ行列はこれととてもよく似ています。 具体的には、ユニタリ行列とは、元の行列の共役転置行列が**逆行列**と等しい行列を言います。\n", + "\n", + "ある行列 $A$ の逆行列 $A^{-1}$ とは、以下のような行列を言います:\n", + "
    \n", + "\n", + "\n", + "$$A^{-1} A \\ = \\ A A^{-1} \\ = \\ \\mathbb{I}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ここで、$ \\mathbb{I} $ は単位行列です。 単位行列とは、正対角線(左上から右下へ)の成分が全て1、それ以外の成分はすべて0である行列です。それが単位行列と呼ばれるのは、それが他の行列に対し明らかに「効果がない」よう作用するからです。単位行列に他の行列を掛けることで、これを自分で証明できます。\n", + "\n", + "行列が $2 \\ \\times \\ 2$ より大きくなると、逆行列の計算は非常に複雑になり、計算は通常コンピューターに任されます。 $2 \\ \\times \\ 2$ 行列の逆行列は、以下のように定義されます:\n", + "\n", + "
    \n", + "$$A \\ = \\ \\begin{pmatrix} a & b \\\\ c & d \\end{pmatrix} \\ \\Rightarrow \\ A^{-1} \\ = \\ \\frac{1}{\\text{det} \\ A} \\begin{pmatrix} d & -b \\\\ -c & a \\end{pmatrix},$$\n", + "
    \n", + "\n", + "ここで、$\\text{det} \\ A$ は行列の**行列式**です。$2 \\ \\times \\ 2$の行列では、$\\text{det} \\ A \\ = \\ ad \\ - \\ bc$ になります。\n", + "\n", + "量子コンピューティングにおいて、逆行列の計算はあまり重要ではありません。扱う行列の大部分はユニタリなので、逆行列は単に共役転置することで得られます。煩わしい処理を通じて、逆行列を厳密に計算する必要はないのです。\n", + "\n", + "基本的な例を見てみましょう。 Pauli-Y行列は、エルミートかつユニタリです。つまり、Pauli-Y行列はその共役転置と等しく、その逆行列とも等しいのです。この行列が実際にユニタリであることを確認しましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_y \\ = \\ \\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix} \\ \\ \\ \\ \\ \\sigma_y^{\\dagger} \\ = \\ \\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix} \\ \\Rightarrow \\ \\sigma_y^{\\dagger} \\sigma_y \\ = \\ \\begin{pmatrix} (0)(0) + (-i)(i) & (0)(-i) \\ + \\ (-i)(0) \\\\ (i)(0) \\ + \\ (0)(i) & (i)(-i) \\ + \\ (0)(0) \\end{pmatrix} \\ = \\ \\begin{pmatrix} 1 & 0 \\\\ 0 & 1 \\end{pmatrix} \\ = \\ \\mathbb{I}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ユニタリ行列が重要である理由は、ヒルベルト空間のセクション及び本教科書の量子力学サブトピックでさらに明らかになります。基本的な考え方は、ユニタリ行列の適用による量子状態の発展を、ある意味量子状態に「保存」することにあります。\n", + "\n", + "**スパン集合、線形従属、そして基底**\n", + "\n", + "ベクトル空間の構築について議論する場にやってきました。あるベクトル空間 $V$ を考えましょう。スパン集合に含まれるベクトルの**線形結合**として部分空間内の全てのベクトルが記述できるとき、ベクトルのある集合 $S$ は、ベクトル空間の部分空間 $V_S \\ \\subset \\ V$ (ベクトル空間演算の下で閉じた部分集合)を張る(span)と言います。\n", + "\n", + "場 $F$ 上のあるベクトル空間内のベクトル $|v_1\\rangle, \\ ..., \\ |v_n\\rangle$ の線形結合は、これらのベクトルの任意の合計として定義されます(もちろんこれは、別のベクトルとなり、$|v\\rangle$と呼ぶこととします):\n", + "\n", + "
    \n", + "\n", + "\n", + "$$|v\\rangle \\ = \\ f_1 |v_1\\rangle \\ + \\ f_2 |v_2\\rangle \\ + \\ ... \\ + \\ f_n |v_n\\rangle \\ = \\ \\displaystyle\\sum_{i} \\ f_i |v_i\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ここで、$f_i$ は$F$の要素です。ですので、空間を張るベクトルの集合があるとき、ベクトル空間内の**他の任意のベクトル** は、これらのベクトルの線形結合で記述できると、簡潔に言うことにしましょう。\n", + "\n", + "ベクトル $|v_1\\rangle, \\ ..., \\ | v_n\\rangle$ の集合は、以下のようなそれぞれのベクトルに対応する係数 $b_i \\ \\in \\ F$が存在する場合、**線形従属**していると言います:\n", + "\n", + "
    \n", + "\n", + "$$b_1 |v_1\\rangle \\ + \\ b_2 |v_2\\rangle \\ + \\ ... \\ + \\ b_n |v_n\\rangle \\ = \\ \\displaystyle\\sum_{i} \\ b_i |v_i\\rangle \\ = \\ 0,$$\n", + "\n", + "
    \n", + "\n", + "ここで、少なくとも一つの係数 $b_i$ はゼロではありません。これは、「ベクトルの集合は互いの線型結合として表現できる」という、より直感的な表現と同等です。例えば、集合 $\\{| v_1\\rangle, \\ ..., \\ | v_n\\rangle \\}$ と対応する係数 $\\{b_1, \\ ..., \\ b_n \\}$ があり、その線形結合が $0$ に等しいとします。ゼロではない係数を持つベクトルが少なくとも1つ存在するので、その項を線形結合 $b_a |v_a\\rangle$とします:\n", + "
    \n", + "\n", + "\n", + "$$\\displaystyle\\sum_{i} \\ b_i |v_i\\rangle \\ = \\ b_a |v_a\\rangle \\ + \\ \\displaystyle\\sum_{i, \\ i \\ \\neq \\ a} \\ b_i |v_i\\rangle \\ = \\ 0 \\ \\Rightarrow \\ |v_a\\rangle \\ = \\ - \\displaystyle\\sum_{i, \\ i \\ \\neq \\ a} \\ \\frac{b_i}{b_a} |v_i\\rangle \\ = \\ \\displaystyle\\sum_{i, \\ i \\ \\neq \\ a} \\ c_i |v_i\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ゼロでない係数が$b_a$だけの場合、$|v_a\\rangle$がヌルベクトルになり、自動的に集合が線形従属になることは必然的に真です。もしそうでない場合、上で示されたように、$|v_a\\rangle$ はゼロでないベクトルの線形結合として記述されます。その逆を証明するために、部分空間内の他のベクトルの線形結合として記述することができる部分空間 $|v_1\\rangle, ..., \\ |v_n\\rangle$ 内に、あるベクトル $|v_a\\rangle$ が存在すると仮定します。つまり:\n", + "\n", + "
    \n", + "\n", + "$$|v_a\\rangle \\ = \\ \\displaystyle\\sum_{s} b_s |v_s\\rangle$$\n", + "\n", + "
    \n", + "\n", + "ここで、$s$ は部分空間のサブセット上で有効な添字です。すると:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$|v_a\\rangle \\ - \\ \\displaystyle\\sum_{s} b_s |v_s\\rangle \\ = \\ |v_a\\rangle \\ - \\ (|v_{s_1}\\rangle \\ + \\ ... \\ + \\ |v_{s_r}\\rangle) \\ = \\ 0$$\n", + "\n", + "\n", + "
    \n", + "\n", + "添字$s$のサブセットに含まれない部分空間内の全てのベクトルに対して、係数(添字 $q$ )を $0$ に等しいとします。すなわち、\n", + "\n", + "
    \n", + "\n", + "$$|v_a\\rangle \\ - \\ (|v_{s_1}\\rangle \\ + \\ ... \\ + \\ |v_{s_r}\\rangle) \\ + \\ (0)(|v_{q_1}\\rangle \\ + \\ ... \\ + \\ |v_{q_t}\\rangle) \\ = \\ 0$$\n", + "\n", + "
    \n", + "\n", + "これは、部分空間 $|v_1\\rangle, \\ ..., \\ | v_n\\rangle$ のすべての元の線形結合であり、それが $0$に等しいことを意味します。つまり、2つの線形依存関係の定義がお互いを意味していることの証明が完了しました。\n", + "\n", + "では、基本的な例を考えましょう。$\\mathbb{R}^2$ 内の2つのベクトル、$|a\\rangle \\ = \\ \\begin{pmatrix} 1 \\ 0 \\end{pmatrix}$ と $|b\\rangle \\ = \\ \\begin{pmatrix} 2 \\ 0 \\end{pmatrix}$、の集合を考えます。$\\mathbb{R}$となるベクトル空間上の場を選んだとき、$0$となるようなベクトルの線形結合を生成することができます。例えば\n", + "
    \n", + "\n", + "\n", + "$$2|a\\rangle \\ - \\ |b\\rangle \\ = \\ 0$$\n", + "\n", + "\n", + "
    \n", + "\n", + "集合内の他のベクトルの線形結合として表現できないベクトルの集合を、**線形独立**と言います。\n", + "\n", + "**基底** の概念は、単純に **線型独立なスパン集合** です。 この意味で、ベクトル空間の基底は、空間全体に張ることのできる最小の集合です。基底集合のサイズを、ベクトル空間の**次元**と呼びます。\n", + "\n", + "基底とスパン集合が非常に重要である理由は、ベクトル空間を「縮小」することを可能にし、それらを大量ではなく少数のベクトルだけで表現できるからです。空間内のすべてのベクトルは基底ベクトルの線形結合にすぎないことが分かっていますので、基底空間に関する結論をベクトル空間全体に一般化することができます。\n", + "\n", + "量子計算において、私たちがよく扱う基底の1つは、$|0\\rangle, \\ |1\\rangle$です。これらの基底ベクトルの線型結合として、他の任意の量子ビット状態を記述することができます。 例えば、線形結合\n", + "
    \n", + "\n", + "\n", + "$$\\frac{|0\\rangle \\ + \\ |1\\rangle}{\\sqrt{2}}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "は、$|0\\rangle$ 基底状態と $|1\\rangle$ 基底状態の重ね合わせであり、基底ベクトル状態のいずれかにある状態を測定する確率が等しいことを表しています(線形結合内の「重み」や「各基底ベクトルの量」が等しくどちらも $1/\\sqrt{2}$ ですから、ある意味直感的です)。\n", + "\n", + "**ヒルベルト空間、正規直交性、そして内積**\n", + "\n", + "ヒルベルト空間は、量子力学と量子計算における最も重要な数学的構成要素の1つです。厳密度を下げると、ヒルベルト空間はすべての量子状態ベクトルが「生きている」空間状態として考えることができます。 ヒルベルト空間と任意のランダムなベクトル空間とを区別する主な事実は、ヒルベルト空間には、2 つのベクトル間で実行されスカラー値を返す演算、 **内積** が備えられていることです。 \n", + "\n", + "\n", + "量子力学と量子計算のコンテキストにおいて、 2つの状態ベクトル間の内積は、1番目のベクトルが2番目のベクトルに沿っている量を表すスカラー値を返します。 このことから、特に、異なる量子状態における測定の確率を計算することができます(これは量子力学のサブトピックでより詳しく議論されます)。 \n", + "\n", + "ヒルベルト空間内の2つのベクトル$|a\\rangle$ 、 $|b\\rangle$に対し、内積を $\\langle a | b \\rangle$ と記述します。ここで、$\\langle a |$ は $|a\\rangle$ の共役転置で $|a\\rangle^{\\dagger}$ とも記述されます。すなわち、ヒルベルト空間内の2つのベクトル間の内積は次のようになります:\n", + "\n", + "
    \n", + "\n", + "$$\\langle a | b \\rangle \\ = \\ \\begin{pmatrix} a_1^{*} & a_2^{*} & ... & a_n^{*} \\end{pmatrix} \\begin{pmatrix} b_1 \\\\ b_2 \\\\ . \\\\ . \\\\ . \\\\ b_n \\end{pmatrix} \\ = \\ a_1^{*} b_1 \\ + \\ a_2^{*} b_2 \\ + \\ ... \\ + \\ a_n^{*} b_n$$\n", + "\n", + "
    \n", + "\n", + "ここで $*$ は、ベクトルの複素共役を表します。\n", + "\n", + "量子系を表すヒルベルト空間の最も重要な条件の一つは、ベクトルのそれ自身の内積が1に等しいことです。つまり、$\\langle \\psi | \\psi \\rangle \\ = \\ 1$です。これはいわゆる正規化条件で、本質的には、ベクトルの二乗の長さ (内積の定義により、ベクトルの各成分を二乗して合計したもの)が1に等しくなければならないことです。この物理的な意味は、特定の方向におけるベクトルの長さは、量子系がその特定の状態で測定される「確率振幅」を表現していることになります。明らかに、量子系が実際に存在する状態で測定される確率は$1$でなければならないことは言うまでもなく、ある特定の状態の量子系を見つける確率の合計は、1に等しいということになります (つまり **ある** 状態になる必要があるということです) 。\n", + "\n", + "ブロッホ球を考えてみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_bloch_vector([0, 0, 0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この球面の表面は、量子ビットの状態ベクトル間の内積とともに、有効なヒルベルト空間になります。これに加えて、ブロッホ球の半径が $1$ であるため、正規化条件が真であることが分かります。従って、各ベクトルの長さの二乗も1と等しくなければなりません。\n", + "\n", + "ヒルベルト空間と内積についての最後の価値は、 **ユニタリ行列**との関係にあります。ユニタリ行列が量子計算において非常に重要である理由は、それらが**内積を保持**するためです。すなわち、ユニタリ行列を用いてベクトルをどのように変換しても、正規化条件は依然として真であることを意味します。 これは、以下の短い証明において実証されます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\langle \\psi | \\psi \\rangle \\ = \\ 1 \\ \\Rightarrow \\ |\\psi\\rangle \\ \\rightarrow \\ U |\\psi\\rangle \\ = \\ |\\psi'\\rangle \\ \\Rightarrow \\ \\langle \\psi' | \\psi' \\rangle \\ = \\ (U |\\psi\\rangle)^{\\dagger} U|\\psi\\rangle \\ = \\ \\langle \\psi | U^{\\dagger} U |\\psi\\rangle \\ = \\ \\langle \\psi | \\psi \\rangle \\ = \\ 1$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これはつまり、ユニタリ発展は、ある量子状態を他の有効な量子状態に変化させることを意味します。ブロッホ球として表現される一量子ビットのヒルベルト空間に対して、ユニタリ変換とは、状態ベクトルの球面上の異なる点への回転に対応し、状態ベクトルの長さを変化させることではないのです。\n", + "\n", + "**固有ベクトルと固有値**\n", + "\n", + "次の形式の関係を考えてみましょう。\n", + "\n", + "\n", + "$$A |v\\rangle \\ = \\ \\lambda |v\\rangle$$\n", + "\n", + "\n", + "ここで $A$ は行列、$\\lambda$ はある数値です。ある行列 $A$ が与えられ、上の関係を満たすベクトル $|v\\rangle$ および $ \\lambda$ を探す必要があるとき、これらのベクトルを **固有ベクトル** 、それぞれのベクトルに対応する係数を **固有値**と呼びます。 固有ベクトルと固有値は、量子力学のコンテキストでは非常に重要な物理的意味を持っており、それはすなわち量子計算というコンテキストにおいても重要ということになります。ある$A$が与えられた時、固有ベクトルと対応する固有値のセットを見つけるために、おもしろいトリックを利用します。 次のように式を書き直してみましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$A |v\\rangle \\ - \\ \\lambda |v\\rangle \\ = 0 \\ \\Rightarrow \\ (A \\ - \\ \\lambda \\mathbb{I}) |v\\rangle \\ = \\ 0$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "この方程式の両側を逆行列 $(A \\ - \\ \\lambda \\mathbb{I})^{-1}$ で乗算すると、$|v\\rangle \\ = \\ 0$が得られます。これは本質的な解ではありません(固有ベクトルがヌルベクトルであることを許していないですし、どんな固有値/行列の組み合わせも、固有ベクトル-固有値の関係を満たしていません)。 したがって、許される固有ベクトルおよび固有値が存在するためには、行列 $(A \\ - \\ \\lambda \\mathbb{I})$は**非可逆**だと仮定しなければなりません。逆行列は、次の形式であることを思い出してください:\n", + "\n", + "\n", + "
    \n", + "$$M^{-1} \\ = \\ \\frac{1}{\\text{det} (M)} \\ F(M),$$\n", + "
    \n", + "\n", + "ここで、$F(M)$ は、 $M$ に依存する新しい行列 (行列が実際に存在するかどうかはここでは気にしません)です。 この式で私たちが興味を持つ部分は、行列式の逆数です。行列 $M$ の行列式が $0$ の場合、逆数は定義できず、その逆もそうですので、行列 $M$ は非可逆式になります。したがって、以下が必要となります:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\text{det} (A \\ - \\ \\lambda \\mathbb{I}) \\ = \\ 0$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これから、$\\lambda$を定義でき、$\\lambda$の各値を元の方程式に代入することで固有値を得ることができます! 例として、Pauli-Z行列 $\\sigma_z$ の固有ベクトル及び固有値を求めてみましょう。以下の式から始めます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\text{det} (\\sigma_z \\ - \\ \\lambda \\mathbb{I}) \\ = \\ \\text{det} \\begin{pmatrix} 1 \\ - \\ \\lambda & 0 \\\\ 0 & -1 \\ - \\ \\lambda \\end{pmatrix} \\ = \\ (-1 \\ - \\ \\lambda)(1 \\ - \\ \\lambda) \\ = \\ 1 \\ - \\ \\lambda^2 \\ = \\ 0 \\ \\Rightarrow \\ \\lambda \\ = \\ \\pm 1$$\n", + "\n", + "\n", + "
    \n", + "\n", + "行列式を解くときに得られる$\\lambda$についてのこの方程式は、**固有多項式** と呼ばれます。そして、これらの値をそれぞれ元の方程式に代入することができます。まず、$\\lambda \\ = \\ 1$ から始めましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix} |v\\rangle \\ = \\ |v\\rangle \\ \\Rightarrow \\ \\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix} \\begin{pmatrix} a \\\\ b \\end{pmatrix} \\ = \\ \\begin{pmatrix} a \\\\ b \\end{pmatrix} \\ \\Rightarrow \\begin{pmatrix} a \\\\ -b \\end{pmatrix} \\ = \\ \\begin{pmatrix} a \\\\ b \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "つまり、 $a$ は任意の値、 $b$ は $0$ということになります。したがって、ベクトル $\\begin{pmatrix} 1 \\\\ 0 \\end{pmatrix}$ は、あの関係を満たすすべてのベクトルの基底を形成します。これはつまり、$1$の固有値に対応する固有ベクトルになります。$ \\lambda \\ = \\ -1$に対して同じことをしましょう:\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix} |v\\rangle \\ = \\ -|v\\rangle \\ \\Rightarrow \\ \\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix} \\begin{pmatrix} a \\\\ b \\end{pmatrix} \\ = \\ \\begin{pmatrix} -a \\\\ -b \\end{pmatrix} \\ \\Rightarrow \\begin{pmatrix} a \\\\ -b \\end{pmatrix} \\ = \\ \\begin{pmatrix} -a \\\\ -b \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "今度は、$b$ は任意の数で、$a$ は $0$ です。したがって、 基本ベクトル( $-1$ に対応する固有ベクトル) は $\\begin{pmatrix} 0 \\\\ 1 \\end{pmatrix}$ になります。 Pauli-Z行列の固有ベクトルが、量子計算の基底状態 $|0\\rangle$ および $|1\\rangle$ であることに注意してください。これは偶然の一致ではありません。 例えば、 $Z$ 基底で量子ビットを測定するということは、量子ビットの状態を、Z行列の固有ベクトル、$|0\\rangle$ または $|1\\rangle$のどちらか1つに落とし込む測定を実行していることにほかならないのです。\n", + "\n", + "\n", + "**行列指数関数**\n", + "\n", + "\n", + "行列指数の概念は、非常に独特なものですが非常に重要な概念です。 次の形式のユニタリ変換を見ることがあります:\n", + "\n", + "
    \n", + "$$U \\ = \\ e^{i\\gamma H},$$\n", + "
    \n", + "\n", + "ここで $H$ はあるエルミート行列で、 $\\gamma$ は実数です。この形式のすべての行列がユニタリであることは、とても簡単に証明できます。$U$ の共役転置を取りましょう:\n", + "
    \n", + "\n", + "\n", + "$$U^{\\dagger} \\ = \\ \\Big( e^{i\\gamma H} \\Big)^{\\dagger} \\ = \\ e^{-i \\gamma H^{\\dagger}}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "しかし、$H$はエルミートですから、 $H^{\\dagger} \\ = \\ H$ です。すなわち:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$e^{-i \\gamma H^{\\dagger}} \\ = \\ e^{-i \\gamma H} \\ \\Rightarrow \\ U^{\\dagger} U \\ = \\ e^{-i \\gamma H} e^{i\\gamma H} \\ = \\ \\mathbb{I}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "あなたはなぜ指数内部にある行列がまだ行列と考えられるのか疑問に思うかもしれません。指数関数をテイラー級数として展開すると、答えがより明確になります。テイラー級数は本質的に任意の関数を無限次数の多項式として書く方法であり、主な考え方は、多項式の項を選び、多項式に変換しようとしている関数上のある点 $x_0$を中心にすることです。つまり、その点での0次、1次、2次、3次……の微分係数が、元の関数と多項式で同じだということです。従って、テイラー級数を次の形式で記述します: \n", + "\n", + "
    \n", + "$$g(x) \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{(n)}(x_0) \\ \\frac{(x \\ - \\ x_0)^n}{n!},$$\n", + "
    \n", + "\n", + "ここで、 $g(x)$ は多項式、 $f(x)$ は元の関数、 $f^{(n)}$ は $f$ の $n$ 次微分、$x_0$ は関数で中心に据えた点です。近似ではないので、$x_0$自身は実は問題ではなく、$x_0 \\ = \\ 0$とすると、テイラー級数はマクローリン級数になります:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$g(x) \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{(n)}(0) \\ \\frac{x^n}{n!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "そこで、$f(x) \\ = \\ e^x$とすると、マクローリン級数を使って等価の級数を作成できます。 $e^x$ の微分は単純に $e^x$ であり、明らかに $e^0 \\ = \\ 1$ ですから、以下のようになります:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$g(x) \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{x^n}{n!} \\ = \\ e^x$$\n", + "\n", + "\n", + "
    \n", + "\n", + "つまり、ある行列 $i \\gamma H$ について、以下のようになります:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$e^{i \\gamma H} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(i \\gamma H)^n}{n!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これはより大きなの意味を持ちます。すなわち、行列の指数関数は行列ということです。 これは、行列の冪乗の無限和で、恐れを抱かせるように見えますが、少なくとも、行列指数関数が実際には行列であるという結論に達しました。そして、非常に重要な事実を示す時にやってきました。 $B ^2 \\ = \\ \\mathbb{I}$ (**対合行列**と呼びます) を満たす行列 $B$ について以下を考えます:\n", + "
    \n", + "\n", + "\n", + "$$e^{i \\gamma B} \\ = \\ \\cos(\\gamma) \\mathbb{I} \\ + \\ i \\sin(\\gamma) B$$\n", + "\n", + "\n", + "
    \n", + "\n", + "マクローリン級数から始めます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$e^{i \\gamma B} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(i \\gamma B)^n}{n!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "合計の各項の$n$が偶数か奇数かに応じて、足し合わせを虚数部と実数部に分けられることに注意しましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(i \\gamma B)^n}{n!} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(-1)^n \\gamma^{2n} B^{2n}}{(2n)!} \\ + \\ i \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\frac{(-1)^n \\gamma^{2n + 1} B^{2n + 1}}{(2n + 1)!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "では、$\\sin x$ と $\\cos x$ の両方について、マクローリン級数を求めましょう。$f(x) \\ = \\ \\sin x$から始めます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sin x \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{n}(0) \\frac{x^n}{n!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "ご存知のように、$\\sin x$ の微分はある意味**循環**しています(それぞれの矢印は前の関数を微分することを表しています):\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sin x \\ \\rightarrow \\ \\cos x \\ \\rightarrow \\ -\\sin x \\ \\rightarrow \\ -\\cos x \\ \\rightarrow \\ \\sin x$$\n", + "\n", + "\n", + "
    \n", + "\n", + "$\\sin (0) \\ = \\ 0$ and $\\cos (0) \\ = \\ 1$ですから、偶数 $n$ のすべての項は $0$ になります。\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{n}(0) \\frac{x^n}{n!} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(-1)^n x^{2n \\ + \\ 1}}{(2n \\ + \\ 1)!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これは元の方程式の奇数項に驚くほど似ています。事実、$x \\ = \\ \\gamma B$ とすると、全く同じになります。偶数項が $f(x) \\ = \\ \\cos x$ の時のマクローリン級数と同一であることを示した時とほぼ同じプロセスを実施します:\n", + "
    \n", + "\n", + "\n", + "$$\\cos x \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{n}(0) \\frac{x^n}{n!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\Rightarrow \\ \\cos x \\ \\rightarrow \\ -\\sin x \\ \\rightarrow \\ -\\cos x \\ \\rightarrow \\ \\sin x \\ \\rightarrow \\ \\cos x$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\Rightarrow \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ f^{n}(0) \\frac{x^n}{n!} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(-1)^n x^{2n}}{(2n)!}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "ここで、元の方程式に戻りましょう。 $B^2 \\ = \\ \\mathbb{I}$ であることを思い出してください。 任意の $n$ に対して、以下が得られます。\n", + "\n", + "
    \n", + "\n", + "\n", + "$$B^{2n} \\ = \\ \\big( B^2 \\Big)^n \\ = \\ \\mathbb{I}^n \\ = \\ \\mathbb{I}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$B^{2n \\ + \\ 1} \\ = \\ B \\ \\big( B^2 \\Big)^n \\ = \\ B \\ \\mathbb{I}^n \\ = \\ B \\ \\mathbb{I} \\ = \\ B$$\n", + "\n", + "\n", + "
    \n", + "\n", + "この新情報で全て置き換えると、次が得られます。\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(-1)^n \\gamma^{2n} B^{2n}}{(2n)!} \\ + \\ i \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\frac{(-1)^n \\gamma^{2n + 1} B^{2n + 1}}{(2n + 1)!} \\ = \\ \\mathbb{I} \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{(-1)^n \\gamma^{2n}}{(2n)!} \\ + \\ i B \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\frac{(-1)^n \\gamma^{2n + 1}}{(2n + 1)!} \\ = \\ \\cos (\\gamma) \\mathbb{I} \\ + \\ i \\sin (\\gamma) B$$\n", + "\n", + "\n", + "
    \n", + "\n", + "この事実は量子計算においてとても便利なのです。パウリ行列を考えてみましょう:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_x \\ = \\ \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_y \\ = \\ \\begin{pmatrix} 0 & i \\\\ -i & 0 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\sigma_z \\ = \\ \\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix}$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これらの行列は、量子計算にとって非常に重要で、量子ビットを操作するために使われる最も基本的な「量子ゲート」の一部です。 これらの演算子は、ユニタリであるだけでなく、 **エルミート** でもあり **対合** でもあります。 これは、 $e^{i \\gamma \\sigma_k} \\ k \\ \\in \\ \\{x, \\ y, \\ z\\}$ の形式の行列が、量子状態ベクトル (量子ビット) に作用できる有効なユニタリ行列であるだけでなく、今証明したばかりのサイン-コサイン関係を使用して表現できることを意味します。 このタイプのゲートが常に使われているように(この教科書の先のセクションで取り上げるように)、この事実は非常に強力であり、量子計算理論を通じて見られるものなのです。\n", + "\n", + "このセクションを終了する前に、 行列指数関数に関して議論すべきもう一つの便利な事実があります。固有ベクトル $|v\\rangle$ と対応する固有値 $\\lambda$を持つ行列 $M$ があるとき以下が成り立ちます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$e^{M} |v\\rangle \\ = \\ e^\\lambda |v\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "これは、より簡単に証明することができます:\n", + "\n", + "
    \n", + "\n", + "\n", + "$$e^M |v\\rangle \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{M^n |v\\rangle}{n!} \\ = \\ \\displaystyle\\sum_{n \\ = \\ 0}^{\\infty} \\ \\frac{\\lambda^n |v\\rangle}{n!} \\ = \\ e^\\lambda |v\\rangle$$\n", + "\n", + "\n", + "
    \n", + "\n", + "この事実も非常に役立ちます。あるハミルトニアン (特に変分回路)をシミュレートする量子回路を作成する際には、 $e^{i \\gamma \\sigma_z}$ という形式のゲートが使用されることがよくあります。さて、 $|0\\rangle$ および $|1\\rangle$ は $\\sigma_z$ の固有値ですから、 $e^{i \\gamma \\sigma_z}$ は、 $|0\\rangle$ に $e^{i \\gamma}$ の位相を、$|1\\rangle$ に $e^{-i\\gamma}$の位相を足し合わせるということが、数学的に簡単に確定できます。 これにより、それぞれの計算基底状態に対するゲートの出力を数学的に知ることができるので、$CNOT$ や位相/回転ゲートといったゲートをかなり簡単に構築できるようになるのです。\n", + "\n", + "この事実は、$\\sigma_z$ ゲートの指数関数にだけ適用されるのではありません。例えば、 $e^{i \\gamma \\sigma_x}$ のゲートの結果を、 $\\sigma_x$ の固有ベクトル $(|0\\rangle \\ + \\ |1\\rangle)/\\sqrt{2}$ と $(|0\\rangle \\ - \\ |1\\rangle)/\\sqrt{2}$の上で確定することもできます。 $\\sigma_y$ 行列の指数関数についても同じことが当てはまります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 参考文献\n", + "[1] Cayley, Arthur. “A Memoir on the Theory of Matrices.” Philosophical Transactions of the Royal Society of London, vol. 148, 1858, pp. 17–37. JSTOR.\n", + "\n", + "[2] A New Branch of Mathematics: The Ausdehnungslehre of 1844 and Other Works: Hermann Grassmann, Lloyd C. Kannenberg: 9780812692761" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-appendix/qiskit.ipynb b/translations/ja/ch-appendix/qiskit.ipynb new file mode 100644 index 0000000..931abd4 --- /dev/null +++ b/translations/ja/ch-appendix/qiskit.ipynb @@ -0,0 +1,1053 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Qiskitの文法の基礎" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### インストール\n", + "\n", + "Qiskitは、あなたが量子コンピューティングで必要とするすべてを実行してくれるPythonのパッケージです。\n", + "\n", + "もしまだお持ちでないのなら、インストールする必要があります。インストールしてあるのなら、インポートする必要があります。\n", + "\n", + "一般的に、Qiskitをインストールするには2つのステップが必要です。最初のステップは、Anacondaのインストールです。Anacondaは、あなたが必要とするほぼすべての依存関係を搭載したのPythonパッケージです。Anacondaをインストールすれば、ターミナルで以下のコマンドを実行することでQiskitをインストールできます。\n", + "```\n", + "pip install qiskit\n", + "```\n", + "インストール方法の詳細については、 [この文書](https://qiskit.org/documentation/install.html) を参照してください。\n", + "\n", + "**注:この後のセクションは、既に量子コンピューティングの基礎を知っている人向けです。** 後続の章に直ぐに移動してそのコンセプトを利用したい読者が利用できるものです。その他の読者は、まず[Introduction to Python and Jupyter notebooks](../ch-prerequisites/python-and-jupyter-notebooks.html) を読み、次に [Chapter 1](../ch-states/introduction.html) の最初に直接移動すべきです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 量子回路" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# For Jupyter Notebooks:\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitの心臓部といえるオブジェクトは量子回路です。作り方は以下の通りです。ここでは `qc` としましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は、量子ビットも出力もなく、現時点で完全に空です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 量子レジスター" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路を意味あるものにするためには、量子ビットのレジスタを定義する必要があります。これには、`QuantumRegister` オブジェクトを使用します。 例えば、2つの量子ビットで構成されるレジスターを定義し、それを `qr` としましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "qr = QuantumRegister(2,'qreg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "オプションで、 レジスタに`'qreg'` といった名前をつけることもできます。\n", + "\n", + "`add_register` メソッドを使うことで、レジスタを回路に追加できます。また、回路オブジェクトの `qregs` 変数をチェックすることで、追加されたことを確認できます。このガイドは [Jupyter notebook](https://jupyter.org/) を使用しています。Jupyter notebookでは、セルの最終行の出力がセルの下に表示されます:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[QuantumRegister(2, 'qreg')]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.add_register( qr )\n", + "\n", + "qc.qregs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路はいくつかの量子ビットを持っていますので、別の属性 `draw()`、を使って、回路がどの様に見えるか確認しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットは彼らの旅を始める準備ができましたが、今は単純に状態 $\\left|0\\right\\rangle$ にいるだけです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ゲートの適用" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "何かを起こさせるには、ゲートを追加する必要があります。例えば、 `h()` を試してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "h() missing 1 required positional argument: 'qubit'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mqc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/anaconda3/lib/python3.7/site-packages/qiskit/util.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 107\u001b[0m \u001b[0m_rename_kwargs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwarg_map\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 108\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 109\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: h() missing 1 required positional argument: 'qubit'" + ] + } + ], + "source": [ + "qc.h()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この操作をどの量子ビットに作用させるか指定しなかったため、エラーが発生しました。レジスタ `qr` 内の2つの量子ビットは、`qr[0]` と `qr[1]` として別々にアクセスできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.h(qr[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記出力は無視してください。セルの最終行に `=` がない場合、Jupyter notebookはこの様な出力をします。上の場合、QiskitにてHadamard が定義されていることを伝えています。この出力を抑制したい場合は、 `;` を使用します。\n", + "\n", + "`cx` を使って、制御NOTを追加することもできます。これは2つの引数、制御量子ビットとターゲット量子ビットを必要とします。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "qc.cx(qr[0], qr[1]);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路を表示させましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Statevector simulator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路の出力を実際に見ることができるステージにやってきました。具体的には、'statevector simulator' を使用して、2つの量子ビットの状態ベクトルに何が起きているのかを見てみます。\n", + "\n", + "次の行を使用して、シミュレーターを準備します。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "vector_sim = Aer.get_backend('statevector_simulator')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitでは、量子プログラムを実際に実行するもの(シミュレータもしくは実量子デバイス)を *バックエンド* と呼びます。バックエンドに対しジョブを指定するには、対応するバックエンド・オブジェクトを設定する必要があります。\n", + "\n", + "必要なシミュレータは、Qiskitの`Aer`と呼ばれる部分に定義されています。Aerの`get_backend()` メソッドに必要なシミュレータ名を与えることで、必要なバックエンド・オブジェクトを取得できます。今回の名前は `'statevector_simulator'` です。\n", + "\n", + "Aerで利用可能な全シミュレータのリストは、以下の様に取得できます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "Aer.backends()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらのシミュレータは全部 'ローカル' 、つまりQiskitがインストールされたマシン上で実行されます。あなたのマシン上で使う場合、IBMQのユーザー同意書に同意せずに実行することができます。\n", + "\n", + "Qiskitの `execute` コマンドでシミュレーションを実行できます。このコマンドには、実行される回路と実行する「バックエンド」(今回はシミュレータ)が必要です。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "job = execute(qc, vector_sim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このコマンドは、`job`と呼ばれるこの実行を操作するオブジェクトを生成します。我々が必要なのは、結果を抽出することです。具体的には、状態ベクトルが欲しいのです。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(0.7071067811865476+0j)\n", + "0j\n", + "0j\n", + "(0.7071067811865475+0j)\n" + ] + } + ], + "source": [ + "ket = job.result().get_statevector()\n", + "for amplitude in ket:\n", + " print(amplitude)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これはBell状態 $\\left( \\left|00\\right\\rangle + \\left|11\\right\\rangle \\right)/\\sqrt{2}$ に対するベクトルで、私たちがこの回路から期待するものです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "私たちはうまく状態ベクトルを定義できましたが、Qiskitの別の特徴をお見せしましょう。それは次の様に、任意の純粋状態で回路を初期化することが可能なのです。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_qc = QuantumCircuit(qr)\n", + "\n", + "new_qc.initialize(ket, qr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 古典レジスタと qasm simulator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上のシミュレーションでは、statevectorを取り上げました。これは本物の量子コンピューターから得られるものではありません。本物には測定が必要です。測定を操作するためには、結果がどこに保存されるか定義する必要があります。これを実現するのが `ClassicalRegister` です。2つの量子ビットを測定するため、2ビットの古典レジスタを定義しましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "cr = ClassicalRegister(2,'creg')\n", + "\n", + "qc.add_register(cr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、量子回路の`measure` メソッドを使用します。このメソッドは、測定される量子ビットと結果が書き込まれるビットの、2つの引数が必要です。\n", + "\n", + "両方の量子ビットを測定し、その結果を別々のビットに書き込みましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.measure(qr[0],cr[0])\n", + "qc.measure(qr[1],cr[1])\n", + "\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "本物の量子装置をエミュレートする効果のあるローカル・シミュレータ上で、この回路を実行できます このためには、`execute` 関数に別の入力`shots`を追加する必要があります。`shots` は、統計を取るためにこの回路を実行する回数を指定します。指定しない場合は、デフォルトの1024が使用されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "emulator = Aer.get_backend('qasm_simulator')\n", + "\n", + "job = execute( qc, emulator, shots=8192 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "本質的な結果は、Pythonのdictionary形式のオブジェクトになります。`print`を使用すると、これを表示できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'11': 4181, '00': 4011}\n" + ] + } + ], + "source": [ + "hist = job.result().get_counts()\n", + "print(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitにこの結果をヒストグラムとしてプロットさせることもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.visualization import plot_histogram\n", + "\n", + "plot_histogram(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "互換性のあるバックエンドに対しては、結果を並べたリストを要求し、取得することもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['11', '00', '00', '00', '00', '00', '00', '11', '11', '00']\n" + ] + } + ], + "source": [ + "job = execute(qc, emulator, shots=10, memory=True)\n", + "samples = job.result().get_memory()\n", + "print(samples)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ビットには右から左にラベルが付いていることに注意してください。従って、`cr[0]` は最も右端にあるものになります。 次の例は、`7`と番号付けされた量子ビットだけにPauli $X$ ゲートがあり、`7` と番号付けされたビットに出力が格納される、8量子ビットの回路です。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'10000000': 8192}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qubit = QuantumRegister(8)\n", + "bit = ClassicalRegister(8)\n", + "circuit = QuantumCircuit(qubit,bit)\n", + "\n", + "circuit.x(qubit[7])\n", + "circuit.measure(qubit,bit) # this is a way to do all the qc.measure(qr8[j],cr8[j]) at once\n", + "\n", + "execute(circuit, emulator, shots=8192).result().get_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`1` は左に出現します。\n", + "\n", + "この番号付けは、整数を表現する時のビットの役割を反映しています。\n", + "\n", + "\n", + "\n", + "$$ b_{n-1} ~ b_{n-2} ~ \\ldots ~ b_1 ~ b_0 = \\sum_j ~ b_j ~ 2^j $$\n", + "\n", + "\n", + "\n", + "つまり、結果として得られた文字列は、`7`と番号付けされたビットに`1` があるので、 $2^7$ のバイナリ表現です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 簡略表記" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "複数の量子・古典レジスターを回路に追加することができます。しかし、それぞれが一つしか必要ない場合は、簡略表記を使うことができます。\n", + "\n", + "例えば、次を考えましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`QuantumCircuit` の単独引数は、必要な量子ビットの数と解釈されます。つまり、これは、3量子ビットを含む単一量子レジスタを持ち、古典レジスタを持たない回路です。\n", + "\n", + "ゲートを追加する時、3つの量子ビットは、インデックス、0、1、2で参照できます。以下は、Hadamardを量子ビット1に追加した例です。" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.h(1)\n", + "\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子レジスタと古典レジスタを両方回路に定義するためには、 `QuantumCircuit` に2つの引数を与えます。最初の引数は量子ビットの数として、2番目はビットの数として解釈されます。以下は、出力に単一古典ビットを持つ2量子ビット回路の例です。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(2,1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これを実際に見てみるために、単純な回路を使用します。測定を行う際には、インデックスを使って古典レジスタのビットを参照することに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.h(0)\n", + "qc.cx(0,1)\n", + "qc.measure(1,0)\n", + "\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### カスタム・ゲートの作成" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これまで見てきたように、異なる回路を組み合わせてより大きな回路を作成することができます。また、より洗練されたバージョンとして、カスタムゲートを作成することもできます。例えば、量子ビット1にプロセスを仲介させて、量子ビット0と2の間で `cx` を実装する回路を次に示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_circuit = QuantumCircuit(3, name='toggle_cx')\n", + "sub_circuit.cx(0,1)\n", + "sub_circuit.cx(1,2)\n", + "sub_circuit.cx(0,1)\n", + "sub_circuit.cx(1,2)\n", + "\n", + "sub_circuit.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これを1つのゲートに変換して:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "toggle_cx = sub_circuit.to_instruction()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "その後、選択した量子ビットのセットを使って、別な回路に挿入できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(4)\n", + "new_qc = QuantumCircuit(qr)\n", + "\n", + "new_qc.append(toggle_cx, [qr[1],qr[2],qr[3]])\n", + "\n", + "new_qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 実量子ハードウェアへのアクセス" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`IBMQ` パッケージを使用して、バックエンド・オブジェクトを設定することもできます。 これらを使用するには、[IBMQアカウントで署名する](https://qiskit.org/documentation/install.html#access-ibm-q-systems) 必要があります。資格情報が既にコンピューターに読み込まれていると仮定して、サインインします。" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IBMQ.load_account()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、使用可能な追加のバックエンドを見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "provider.backends()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一つのシミュレーター、そして残りは量子デバイスのプロトタイプです。\n", + "\n", + "`status()` メソッドを使用すると、それらの状態を確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BackendStatus(backend_name='ibmq_qasm_simulator', backend_version='0.1.547', operational=True, pending_jobs=0, status_msg='active')\n", + "BackendStatus(backend_name='ibmqx2', backend_version='2.0.5', operational=True, pending_jobs=21, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_16_melbourne', backend_version='2.0.6', operational=True, pending_jobs=3, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_vigo', backend_version='1.0.2', operational=True, pending_jobs=127, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_ourense', backend_version='1.0.1', operational=True, pending_jobs=131, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_london', backend_version='1.1.0', operational=True, pending_jobs=13, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_burlington', backend_version='1.1.4', operational=True, pending_jobs=2, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_essex', backend_version='1.0.1', operational=True, pending_jobs=12, status_msg='active')\n", + "BackendStatus(backend_name='ibmq_armonk', backend_version='1.1.0', operational=True, pending_jobs=0, status_msg='active')\n" + ] + } + ], + "source": [ + "for backend in provider.backends():\n", + " print(backend.status())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最大のパブリック・デバイスに対するバックエンド・オブジェクトを取得しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "real_device = provider.get_backend('ibmq_16_melbourne')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これを使用して、エミュレーターと全く同じ方法でデバイス上でジョブを実行できます。\n", + "\n", + "プロパティの一部を抽出することもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "properties = real_device.properties()\n", + "coupling_map = real_device.configuration().coupling_map" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これから、デバイスのノイズを模倣するノイズ・モデルを構築できます(ノイズ・モデルについては本教科書にて後述します)。" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.providers.aer.noise import NoiseModel\n", + "\n", + "noise_model = NoiseModel.from_backend(properties)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして、エミュレータでジョブを実行し、実デバイスのこれらの機能をすべて再現します。 以下は、ノイズのない場合に `'10'` を出力する回路の例です。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'01': 1, '00': 39, '11': 4, '10': 980}" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2,2)\n", + "qc.x(1)\n", + "qc.measure(0,0)\n", + "qc.measure(1,1)\n", + "\n", + "job = execute(qc, emulator, shots=1024, noise_model=noise_model,\n", + " coupling_map=coupling_map,\n", + " basis_gates=noise_model.basis_gates)\n", + "\n", + "job.result().get_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上で非常に基本的なことを説明しましたので、量子ビットと量子回路とは何か、さらに学んでいきましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.12.0',\n", + " 'qiskit-aer': '0.4.0',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.6',\n", + " 'qiskit-aqua': '0.6.4',\n", + " 'qiskit': '0.15.0'}" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-applications/.gitkeep b/translations/ja/ch-applications/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/translations/ja/ch-applications/.gitkeep @@ -0,0 +1 @@ + diff --git a/translations/ja/ch-applications/QIP/frqi.ipynb b/translations/ja/ch-applications/QIP/frqi.ipynb new file mode 100644 index 0000000..81b8e80 --- /dev/null +++ b/translations/ja/ch-applications/QIP/frqi.ipynb @@ -0,0 +1,860 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# Flexible Representation of Quantum Images (FRQI)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The goal of the Flexible Representation of Quantum Images (FRQI) [1] is to provide a quantum representation of images that allows an efficient encoding of the classical data into a quantum state and the subsequent use of operators for image processing operations.\n", + "In this case, encoding the classical image into a quantum state requires a polynomial number of simple gates [2].\n", + "\n", + "## 1. The FRQI State\n", + "\n", + "The quantum state representing the image is:\n", + "\n", + "$$\n", + "\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle}\n", + "\\newcommand{\\bra}[1]{\\left\\langle{#1}\\right|}\n", + "\\newcommand{\\braket}[2]{\\left\\langle{#1}\\middle|{#2}\\right\\rangle}\n", + "\\ket{I(\\theta)}=\\frac{1}{2^{n}}\\sum_{i=0}^{2^{2n}-1}\\left(\\cos \\theta_{i}\\ket{0}+\\sin\\theta_{i}\\ket{1}\\right)\\otimes\\ket{i}\n", + "\\label{eq:FRQI_state} \\tag{1.1}\n", + "$$\n", + "\n", + "$$\n", + " \\theta_{i}\\in\\left[ 0,\\frac{\\pi}{2}\\right], i = 0,1,\\cdots,2^{2n}-1\n", + " \\label{eq:FRQI_angle} \\tag{1.2}\n", + "$$\n", + "\n", + "The FRQI state is a normalized state as from equation $\\eqref{eq:FRQI_state}$ we see that $\\left\\|I(\\theta)\\right\\|=1$\n", + "and is made of two parts:\n", + "\n", + "* color information encoding: $\\cos\\theta_{i}\\ket{0}+\\sin\\theta_{i}\\ket{1}$ \n", + "* associated pixel position encoding: $\\ket{i}$\n", + "\n", + "\n", + "A simple example for a $2x2$ image is given below, with corresponding $\\theta$ angles (color encoding) and associated kets (position encoding) :\n", + "\n", + "$$\n", + "\\begin{array}{|c|c|}\n", + "\\hline\n", + "\\theta_{0},\\ket{00} & \\theta_{1},\\ket{01} \\\\\n", + "\\hline\n", + "\\theta_{2},,\\ket{10} & \\theta_{3},,\\ket{11} \\\\\n", + "\\hline\n", + "\\end{array}\n", + "$$\n", + "\n", + "And the equivalent quantum state is\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\ket{I}=\\frac{1}{2}[ \\; & \\phantom{+} \\left(\\cos\\theta_{0}\\ket{0}+\\sin\\theta_{0}\\ket{1} \\right)\\otimes\\ket{00}&\\\\\n", + "& + \\left(\\cos\\theta_{1}\\ket{0}+\\sin\\theta_{1}\\ket{1} \\right)\\otimes\\ket{01} \\\\\n", + "& + \\left(\\cos\\theta_{2}\\ket{0}+\\sin\\theta_{2}\\ket{1} \\right)\\otimes\\ket{10}\\\\\n", + "& + \\left(\\cos\\theta_{3}\\ket{0}+\\sin\\theta_{3}\\ket{1} \\right)\\otimes\\ket{11} \\;]\n", + "\\end{aligned}\n", + "\\label{eq:22state} \\tag{1.3}\n", + "$$\n", + "\n", + "## 2. Building the FRQI State: A Two Step Process\n", + "\n", + "Going from an initialized state $\\ket{0}^{\\otimes2n+1}$ to the FRQI state specified in $\\eqref{eq:FRQI_state}$ is a two steps process and we first need to put the system in full superposition, except for the last qubit which we will use to encode the color. $H^{\\otimes2n}$ being the tensor product of $2n$ Hadamard operations, our intermediate state is \n", + "\n", + "$$\n", + "\\ket{H}=\\frac{1}{2^{n}}\\ket{0}\\otimes\\sum_{i=0}^{2^{2n}-1}\\ket{i}=\\mathcal{H}\\left(\\ket{0}^{\\otimes2n+1}\\right)\n", + "\\label{eq:superpos} \\tag{2.1}\n", + "$$\n", + "\n", + "As demonstrated in [1] there exist a unitary transformation $\\mathcal{P}=\\mathcal{RH}$ transforming the initial state $\\ket{0}^{\\otimes2n+1}$ into the FRQI $I(\\theta)$ state and \n", + "\n", + "$$\n", + "\\mathcal{R}\\ket{H}=\\left(\\prod_{i=0}^{2^{2n}-1}R_{i}\\right)\\ket{H}=\\ket{I(\\theta)}\n", + "\\tag{2.2}\n", + "$$\n", + "\n", + "The $R_{i}$ operations are controlled rotations matrices defined by:\n", + "\n", + "$$\n", + "R_{i}=\\left( I\\otimes \\sum^{2^{2n}-1}_{j=0,j\\neq i}\\ket{j}\\bra{j}\\right) + R_{y}\\left(2\\theta_{i}\\right)\\otimes\\ket{i}\\bra{i} \\tag{2.3}\n", + "$$\n", + "\n", + "Where $R_{y}(2\\theta_{i})$ are the standard rotation matrices:\n", + "\n", + "$$\n", + "R_{y}(2\\theta_{i})=\n", + "\\begin{pmatrix}\n", + "\\cos\\theta_{i} & -\\sin\\theta_{i}\\\\\n", + "\\sin\\theta_{i} & \\cos\\theta_{i} \n", + "\\end{pmatrix} \\tag{2.4}\n", + "$$\n", + "\n", + "The controlled rotations can be implemented via the generalized $C^{2n}\\left( R_{y}(2\\theta_{i} \\right)$, which can be broken down into standard rotations and $\\text{CNOT}$ gates.\n", + "For instance if we take the case for $n=1$, which means we have $4$ pixels (i.e. a $2x2$ image), we do have the following equivalence, which can then be implemented easily.\n", + "\n", + "\n", + "![](images/circ_eq.png \"Circuit Equivalence\") \n", + "\n", + "Note that we still need to take care of the increment in the pixel location, this is done via the $X$ gates." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Importing standard Qiskit libraries and configuring account\n", + "import qiskit as qk\n", + "from qiskit import QuantumCircuit, execute, Aer, IBMQ\n", + "from qiskit.compiler import transpile, assemble\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.visualization import *\n", + "from math import pi\n", + "#Loading your IBMQ account(s)\n", + "provider = IBMQ.load_account()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Implementation and Measurement : 2x2 Image with Greyscale Values\n", + "\n", + "Barriers are used for added clarity on the different blocks associated with individual pixels.\n", + "We also use greyscale images (i.e. the L component of a LRGB image), which means only one value is of interest for the color encoding: the intensity. In other words, all angles $\\theta_{i}$ equal to $0$ means that all the pixels are black, if all $\\theta_{i}$ values are equal to $\\pi/2$ then all the pixels are white, and so on. The values of interest are $0, \\pi/4 \\; and \\; \\pi/2$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 Example 1 : $\\theta_{i}=0 \\;, \\; \\forall i$ - all pixels at minimum intensity\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3)\n", + "\n", + "theta=0 # all pixels black\n", + "#theta=pi/4 # all pixels half greyscale intensity\n", + "#theta=pi/2 # all pixels white\n", + "#theta=pi/8 # all pixels at 25% intensity\n", + "\n", + "qc.h(0)\n", + "qc.h(1)\n", + "\n", + "qc.barrier()\n", + "#Pixel 1\n", + "\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.barrier()\n", + "#Pixel 2\n", + "\n", + "qc.x(1)\n", + "\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.barrier()\n", + "\n", + "qc.x(1)\n", + "qc.x(0)\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "\n", + "qc.barrier()\n", + "\n", + "qc.x(1)\n", + "\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.measure_all()\n", + "\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.1.1 Measurement and Image Retrieval\n", + "\n", + "\n", + "We can see from $(2.1)$ that all the terms associated with the state $\\ket{1}$ in the color encoding part of the FRQI state will vanish because of the value of $\\theta$ so we do expect to see only $4$ equiprobable states.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'000': 1041, '011': 1021, '001': 1004, '010': 1030}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend_sim = Aer.get_backend('qasm_simulator')\n", + "job_sim = execute(qc, backend_sim,shots=4096)\n", + "result_sim = job_sim.result()\n", + "counts = result_sim.get_counts(qc)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 Example 2 : $\\theta_{i}=\\pi/2 \\;, \\; \\forall i$ - all pixels at maximum intensity" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The circuit is identical to the first defined, except for the value of $\\theta$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc1 = QuantumCircuit(3)\n", + "\n", + "\n", + "theta=pi/2 # all pixels white\n", + "\n", + "\n", + "qc1.h(0)\n", + "qc1.h(1)\n", + "\n", + "qc1.barrier()\n", + "#Pixel 1\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.barrier()\n", + "#Pixel 2\n", + "\n", + "qc1.x(1)\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.barrier()\n", + "\n", + "qc1.x(1)\n", + "qc1.x(0)\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "\n", + "qc1.barrier()\n", + "\n", + "qc1.x(1)\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.measure_all()\n", + "\n", + "qc1.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2.1 Measurement and Image Retrieval\n", + "In this case we do expect to see the terms associated with the $\\cos$ in the equation $(2.1)$ to vanish, and get 4 equiprobable states with a \"1\" prefix." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'101': 1036, '110': 1037, '111': 1019, '100': 1004}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend_sim = Aer.get_backend('qasm_simulator')\n", + "job_sim = execute(qc1, backend_sim,shots=4096)\n", + "result_sim = job_sim.result()\n", + "counts = result_sim.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 Example 3 : $\\theta_{i}=\\pi/4 \\;, \\; \\forall i$ - all pixels at $50\\%$ intensity" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc2 = qk.QuantumCircuit(3)\n", + "\n", + "\n", + "theta=pi/4 # all pixels white\n", + "\n", + "\n", + "qc2.h(0)\n", + "qc2.h(1)\n", + "\n", + "qc2.barrier()\n", + "#Pixel 1\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.barrier()\n", + "#Pixel 2\n", + "\n", + "qc2.x(1)\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.barrier()\n", + "\n", + "qc2.x(1)\n", + "qc2.x(0)\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "\n", + "qc2.barrier()\n", + "\n", + "qc2.x(1)\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.measure_all()\n", + "\n", + "qc2.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.3.1 Measurement and Image Retrieval\n", + "In this case we do expect to get all the 8 equiprobable states." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'011': 532, '000': 461, '111': 482, '101': 524, '110': 520, '100': 505, '001': 524, '010': 548}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend_sim = Aer.get_backend('qasm_simulator')\n", + "job_sim = execute(qc2, backend_sim,shots=4096)\n", + "result_sim = job_sim.result()\n", + "counts = result_sim.get_counts(qc2)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Circuit Analysis and Running on a Real Device\n", + "As the only difference between the circuits is the rotation angle $\\theta$, we can check the depth, and number of gates needed for this class of circuits (i.e. 2x2 images).\n", + "\n", + "### 4.1 Circuit Analysis\n", + "\n", + "Let's use our circuit with $\\theta_{i}=\\pi/2 \\;, \\; \\forall i$ as exemple (maximum intensity for all pixels)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth : 23\n", + "Operations: OrderedDict([('cry', 12), ('cx', 8), ('barrier', 5), ('x', 4), ('measure', 3), ('h', 2)])\n" + ] + } + ], + "source": [ + "print(\"Depth : \",qc1.depth())\n", + "print(\"Operations: \", qc1.count_ops())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This does not look too complex but if we want to see how this circuit can be unrolled by the transpiler, it gets a bit more complicated." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.compiler import transpile\n", + "from qiskit.transpiler import PassManager\n", + "from qiskit.transpiler.passes import Unroller\n", + "pass_ = Unroller(['u3', 'cx'])\n", + "pm = PassManager(pass_)\n", + "new_circ = pm.run(qc1)\n", + "new_circ.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth : 50\n", + "Operations: OrderedDict([('cx', 32), ('u3', 30), ('barrier', 5), ('measure', 3)])\n" + ] + } + ], + "source": [ + "print(\"Depth : \",new_circ.depth())\n", + "print(\"Operations: \", new_circ.count_ops())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The depth, for example, doubled in size! We can get closer to what would actually be run on a real device by feeding the transpiler with a device coupling map (for instance, Vigo). We will also use optimization level 3." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gates = OrderedDict([('cx', 55), ('u3', 29), ('u2', 16), ('barrier', 5), ('measure', 3)])\n", + "depth = 80\n" + ] + } + ], + "source": [ + "from qiskit.test.mock import FakeVigo\n", + "device_backend = FakeVigo()\n", + "# The device coupling map is needed for transpiling to correct\n", + "# CNOT gates before simulation\n", + "coupling_map = device_backend.configuration().coupling_map\n", + "optimized_3 = transpile(qc1, backend=device_backend, seed_transpiler=11, optimization_level=3)\n", + "print('gates = ', optimized_3.count_ops())\n", + "print('depth = ', optimized_3.depth())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 Run on a Real Device\n", + "\n", + "We are now ready to run on a real device and will use the device Vigo for this experience." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'011': 388, '000': 260, '111': 1225, '101': 667, '110': 458, '100': 516, '001': 223, '010': 359}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "backend_real = my_provider.get_backend('ibmq_vigo')\n", + "job_real = execute(qc1, backend_real,shots=4096)\n", + "result_real = job_real.result()\n", + "counts = result_real.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see the result is not really what we were expecting due to errors in the computation. We can compare this to the results on the error-free simulator:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'101': 990, '110': 1023, '111': 1022, '100': 1061}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend_sim = Aer.get_backend('qasm_simulator')\n", + "job_sim = execute(qc1, backend_sim,shots=4096)\n", + "result_sim = job_sim.result()\n", + "counts = result_sim.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Compression\n", + "\n", + "As the images we would like to encode are growing in size and given the depth of the circuits we will have to run, it is quite obvious that whatever we can do in order to reduce the complexity of the circuit (depth and number of $\\text{CNOT}$ gates) will make a great difference.\n", + "\n", + "Compression can be achieved by grouping pixels with the same intensity. What makes them distinct is the binary string used to encode the position, but they share the same angle for the associated controlled rotation. Let's consider for example the following image:\n", + "\n", + "![](images/8x8_2col.png \"8x8 2 colours image\") \n", + "\n", + "The blue pixels are at positions are $\\ket{0}, \\ket{8}, \\ket{16}, \\ket{24}, \\ket{32}, \\ket{40}, \\ket{48}$ and $\\ket{56}$. \n", + "\n", + "Their respective binary representation and boolean expressions are:\n", + "\n", + "\\begin{array}{|c|c|c|}\n", + "\\hline\n", + "\\text{Position} & \\text{Binary String} & \\text{Boolean Expression} \\\\\n", + "\\hline\n", + "\\ket{0} &\\ket{000000} & \\overline{x_{5}}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{8} &\\ket{001000} & \\overline{x_{5}}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{16} &\\ket{001000} & \\overline{x_{5}}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{24} &\\ket{011000} & \\overline{x_{5}}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{32} &\\ket{100000} & x_{5}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{40} &\\ket{101000} & x_{5}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{48} &\\ket{110000} & x_{5}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{56} &\\ket{111000} & x_{5}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\end{array}\n", + "\n", + "The boolean expression we would like to simplify/minimize is then :\n", + "\n", + "$ \\text{exp} = \\overline{x_{5}}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}$\n", + "\n", + "\\begin{align*}\n", + "\\text{exp}&=(\\overline{x_{5}}+x_{5})(\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} +\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}})\\\\\n", + " &=\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}(\\overline{x_{4}}\\overline{x_{3}}+\\overline{x_{4}}x_{3}+x_{4}\\overline{x_{3}}+x_{4}x_{3})\\\\\n", + " &=\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}\n", + "\\end{align*}\n", + "\n", + "We can then not only group the pixels under one conditional rotation, but we also see that the conditions for the controlled gate also have been reduced, which will result in a reduction of single gates needed for implementation. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. References \n", + "\n", + "[1] Le, P.Q., Dong, F. & Hirota, K. A flexible representation of quantum images for polynomial preparation, image compression, and processing operations. Quantum Inf Process 10, 63–84 (2011). https://doi.org/10.1007/s11128-010-0177-y \n", + "\n", + "[2] Le, Phuc Quang, Fayang Dong and Kaoru Hirota. “Flexible Representation of Quantum Images and Its Computational Complexity Analysis.” (2009). https://doi.org/10.14864/fss.25.0.185.0" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.6" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/QIP/images/2x2grey.png b/translations/ja/ch-applications/QIP/images/2x2grey.png new file mode 100644 index 0000000..866df1c Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/2x2grey.png differ diff --git a/translations/ja/ch-applications/QIP/images/binary_key.png b/translations/ja/ch-applications/QIP/images/binary_key.png new file mode 100644 index 0000000..e55cf7a Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/binary_key.png differ diff --git a/translations/ja/ch-applications/QIP/images/color_key.png b/translations/ja/ch-applications/QIP/images/color_key.png new file mode 100644 index 0000000..976644f Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/color_key.png differ diff --git a/translations/ja/ch-applications/QIP/images/flower.jpg b/translations/ja/ch-applications/QIP/images/flower.jpg new file mode 100644 index 0000000..3507331 Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/flower.jpg differ diff --git a/translations/ja/ch-applications/QIP/images/flower_binary.png b/translations/ja/ch-applications/QIP/images/flower_binary.png new file mode 100644 index 0000000..b8fa45a Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/flower_binary.png differ diff --git a/translations/ja/ch-applications/QIP/images/flower_grey.png b/translations/ja/ch-applications/QIP/images/flower_grey.png new file mode 100644 index 0000000..b201c2c Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/flower_grey.png differ diff --git a/translations/ja/ch-applications/QIP/images/grey_key.png b/translations/ja/ch-applications/QIP/images/grey_key.png new file mode 100644 index 0000000..3f1d652 Binary files /dev/null and b/translations/ja/ch-applications/QIP/images/grey_key.png differ diff --git a/translations/ja/ch-applications/QIP/neqr.ipynb b/translations/ja/ch-applications/QIP/neqr.ipynb new file mode 100644 index 0000000..b90ec99 --- /dev/null +++ b/translations/ja/ch-applications/QIP/neqr.ipynb @@ -0,0 +1,576 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Novel Enhanced Quantum Representation (NEQR) for Digital Images" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **Novel Enhanced Quantum Representation** (NEQR) is another one of the earlier forms of quantum image represention. It's similar to its predecesor the Flexible Representation of Quantum Images (FRQI)[1] in that it uses a normalized superposition to store pixels in an image. The limitation of FRQI is that it uses one qubit to store the grayscale information of the pixel, which prevents performing any complex image transformations. NEQR was created to improve over FRQI by leveraging the basis state of a qubit sequence to store the image's grayscale value [2]. \n", + "\n", + "NEQR offers the following advantages over FRQI as demonstrated in [2]:\n", + "- Quadradic speedup of the time compexity to prepare the NEQR quantum image\n", + "- Optimal image compression ratio of up to 1.5×\n", + "- Accurate image retrieval after measurement, as opposed to probabilitic as FRQI\n", + "- Complex color and many other operations can be achieved\n", + "\n", + "In this section we will represent a classical 2×2 grayscaled image in a quantum computer using the NEQR model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. The NEQR Process\n", + "\n", + "The NEQR process to represent an image is composed of two parts; preparation and compression and are described as follows. \n", + "\n", + "### 1.1 Image Preparation:\n", + "\n", + "In order to represent an image on a quantum computer using the NEQR model, we'll first look at the various components required to do so and how they are related to each other. We'll begin with the color range of the image.\n", + "\n", + "The color range of an image is represented by a bitstring as follows:\n", + "\n", + "- Binary Image:\n", + "\n", + "
    \n", + "
    \n", + " \n", + "
    \n", + " A binary image uses 1 bit per pixel, where 0 represents black and 1 represents white.\n", + " Binary image representation of \"flower flowers orange yellow\" by watts_photos is licensed under CC BY 2.0\n", + "
    \n", + "
    \n", + "\n", + "- Grayscale Image: \n", + "\n", + "
    \n", + "
    \n", + " \n", + "
    \n", + " In a greyscale image, multiple bits represent the various shades of gray intensity. With 8 bits this is between 0 (black) and 255 (white).\n", + " Greyscale key, with greyscale representation of \"flower flowers orange yellow\" by watts_photos is licensed under CC BY 2.0\n", + "
    \n", + "
    \n", + "\n", + "- Color Image: \n", + "\n", + "
    \n", + "
    \n", + " \n", + "
    \n", + " We can represent a colour image using 24 bits, broken up into 3 groups of 8 bits, where each group of 8 bits represents the Red, Green, and Blue intensities of the pixel color.\n", + " Colour key with \"flower flowers orange yellow\" by watts_photos is licensed under CC BY 2.0\n", + "
    \n", + "
    \n", + "\n", + "In our example we will represent the pixels by their position in the image. Since we will be representing a two-dimensional image, we will define the position of the image by its row and column, Y, X, respectively. \n", + "\n", + "\n", + "**Note** In image processing the pixel positions are represented as they would on the X-Y plane, which is why the column numbers are represented by the value X, and the row numbers are represented by the value Y. \n", + "\n", + "\n", + "### 1.2 Image Compression:\n", + "\n", + "When the quantum representation of the image is completed, we will check the depth and size of the circuit created and provide some options to compress the generated NEQR circuit. \n", + "\n", + "\n", + "Now, let's get started by encoding a 2x2 quantum image as follows." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Encoding a 2x2 Image\n", + "\n", + "In this example we will encode a 2x2 grayscale image where each pixel value will contain the following values. \n", + "\n", + "![](images/2x2grey.png)\n", + "\n", + "\n", + " 00 = 00000000 (Black) \n", + "\n", + " 01 = 01010101 (Grayscale = 85)\n", + "\n", + " 10 = 10101010 (Grayscale = 170)\n", + "\n", + " 11 = 11111111 (White)\n", + "\n", + "\n", + "To encode these pixels we will need to define our quantum registers, the first register we will use to store the pixel position. Since this is a 2D image we will need two variables relates to the horizontal (column) and the other the vertical (row), Y and X respectively. \n", + "\n", + "The color value of each pixel will is denoted as $\\mathcal{f}(Y,X)$, where Y and X specify the pixel position in the image.\n", + "\n", + "The range of the grayscale intensity for each pixel can vary, however since the most common grayscale range is generally from 0 - 256, the values is usually denoted as $2^{q}$, where for 256, we can confirm $q=8$. Where $q$ would represents the number of bits needed for the binary sequence of colors: $C^{0}, C^{1},.. C^{q-2}, C^{q-1}$. \n", + "\n", + "This means that each pixel value can be represented as follows:\n", + "\n", + "$$\n", + "\\mathcal{f}(Y,X) = C^{0}_{YX}, C^{1}_{YX},... C^{q-2}_{YX}, C^{q-1}_{YX} \\in [0,1], \\;\\; f(Y,X)\\in[0, 2^{q-1}]\n", + "$$\n", + "\n", + "\n", + "Therefore, the general expression to represent a quantum image for a $2^{n}$x $2^{n}$ image $|I\\rangle$ is:\n", + "\n", + "$\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle} \\newcommand{\\bra}[1]{\\left\\langle{#1}\\right|}$\n", + "\n", + "$$\n", + "|I\\rangle = \\frac{1}{2^{n}}\\sum_{Y=0}^{2^{2n-1}} \\sum_{X=0}^{2^{2n-1}} | \\mathcal{f}(Y,X)\\rangle |Y X\\rangle = \\frac{1}{2^{n}}\\sum_{Y=0}^{2^{2n-1}} \\sum_{X=0}^{2^{2n-1}} \\vert\\otimes_{i=0}^{q-1}\\rangle |C_{YX}^{i}\\rangle |Y X\\rangle\n", + "$$\n", + "\n", + "Translating the equation above to our 2x2 example pixel values would result in the following: \n", + "\n", + "$$\n", + "\\mathsf{\\Omega}_{YX}|0\\rangle^{\\otimes q} = \\frac{1}{\\sqrt[]{2}}(|00000000\\rangle |00\\rangle + |01010101\\rangle |01\\rangle + |10101010\\rangle |10\\rangle + |11111111\\rangle |11\\rangle)\n", + "$$\n", + "\n", + "Where \n", + "\n", + "$$\n", + "\\mathsf{\\Omega}_{YX}|0\\rangle\n", + "$$\n", + "\n", + "is the quantum operation which represents the value-setting operation for pixel at position (Y, X). \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Create the Quantum Circuit for our Image\n", + "\n", + "We'll first create our quantum circuit with the specific number of qubits needed to encode the image. To do this let's create two separate quantum circuits, one for the pixel values, and the other for the pixel positions.\n", + "\n", + "Our first quantum circuit will include the $2^n$ qubits used to represent the pixel value $f(Y,X)$, where in this case will have 8 qubits. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Importing standard Qiskit libraries and load account\n", + "from qiskit import QuantumCircuit, execute, Aer, IBMQ\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.visualization import *\n", + "from qiskit.circuit.library import *\n", + "import numpy as np\n", + "\n", + "# Loading your IBM Q account\n", + "provider = IBMQ.load_account()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize the quantum circuit for the image \n", + "num_qubits = 10\n", + "anc = 0 #3\n", + "total_qubits = num_qubits+anc\n", + "qc_image = QuantumCircuit(total_qubits, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our second quantum circuit will include the 2 qubits to represent the pixel positions, where one qubit refers to the X and other to the Y postion. We will add a Hadamard gate here so we can ensure to capture all pixel positions. \n", + "\n", + "\n", + "Let's code this up!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create the pixel position qubits for (Y, X), and place them in superposition.\n", + "qc_pos = QuantumCircuit(2)\n", + "qc_pos.h(0)\n", + "qc_pos.h(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Representation of a Grayscale Image on a Quantum Circuit\n", + "\n", + "Now that we have our quantum circuits created, let's start our first step which is to prepare our circuit by combining both the pixel position circuit together with the image circuit. We'll include Identity gates and Barriers for ease of readability. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Setup color value qubits\n", + "qc_grayscale = QuantumCircuit(8)\n", + "for idx in range(8):\n", + " qc_grayscale.i(idx)\n", + "\n", + "# Compose the circuit by appending the pixel and grayscale qubits\n", + "qc_image.compose(qc_pos, qubits=[num_qubits-1,num_qubits-2], inplace=True)\n", + "qc_image.compose(qc_grayscale, qubits=[0, 1, 2, 3, 4, 5, 6, 7], inplace=True)\n", + "\n", + "# Separate with barrier so it is easy to read later.\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's encode our pixel values. Recall the values we set each pixel was as follows: \n", + "\n", + "00 = 00000000 (Black) \n", + "\n", + "01 = 01010101 (Grayscale = 85)\n", + "\n", + "10 = 10101010 (Grayscale = 170)\n", + "\n", + "11 = 11111111 (White)\n", + "\n", + "So we will start with the first pixel at position (0,0). \n", + "Notice that we have all 0's therefore we can of course leave it blank, but let's use our Identity gates just for visualization purposes for pixel (0,0). " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the first pixel, since its value is 0, we will apply ID gates here:\n", + "for idx in range(num_qubits):\n", + " qc_image.i(idx)\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will encode the second pixel (0,1) whose value is (01010101). Here we will use a ControlNot gate with two-qubit controls (2-CNOT), where the Controls are triggered by the pixel position (Y,X), and the Targets rotate the $C^{i}_{YX}$ qubit which represents the pixel value.\n", + "\n", + "**Note** here that because we want the CNOT gate to trigger when there the control is a combination of 0 and 1, that we wrap the qubit with X gates so it will trigger when the specified control is 0. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the second pixel whose value is (01010101):\n", + "value01 = '01010101'\n", + "\n", + "# Add the 0CNOT gates, where 0 is on Y pixel:\n", + "qc_image.x(num_qubits-1)\n", + "for idx, px_value in enumerate(value01):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1,num_qubits-2, idx)\n", + "qc_image.x(num_qubits-1)\n", + "\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll now move on to encode the next pixel at position (1,0) with a value of (10101010)." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the third pixel whose value is (10101010):\n", + "value10 = '10101010'\n", + "\n", + "# Add the 0CNOT gates, where 0 is on X pixel:\n", + "qc_image.x(num_qubits-2)\n", + "for idx, px_value in enumerate(value10):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1,num_qubits-2, idx)\n", + "qc_image.x(num_qubits-2)\n", + "\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, let's finish up encoding the last pixel position (1,1), with the value (11111111). \n", + "This we simply do by adding Tofolli gates to all the pixel image values. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the third pixel whose value is (10101010):\n", + "value10 = '11111111'\n", + "\n", + "# Add the CCNOT gates:\n", + "for idx, px_value in enumerate(value10):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1,num_qubits-2, idx)\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw(fold=100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congratulations! You have successfully encoded a 2x2 pixel grayscale image! \n", + "Now, let's take a moment to review what we have done and notice a few things. \n", + "\n", + "### 2.3 Analyze the Quantum Representation of the Image\n", + "\n", + "First, let's take a look at the total number of gates we are using for this circuit. We'll use the decompose so we can strip the gates down to their basis gates.\n", + "We'll print out the depth, size, and operator counts: " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circuit dimensions\n", + "Circuit depth: 167\n", + "Circuit size: 264\n" + ] + }, + { + "data": { + "text/plain": [ + "OrderedDict([('cx', 96),\n", + " ('t', 64),\n", + " ('tdg', 48),\n", + " ('h', 32),\n", + " ('id', 18),\n", + " ('barrier', 5),\n", + " ('u3', 4),\n", + " ('u2', 2)])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('Circuit dimensions')\n", + "print('Circuit depth: ', qc_image.decompose().depth())\n", + "print('Circuit size: ', qc_image.decompose().size())\n", + "\n", + "qc_image.decompose().count_ops()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Quantum Image Circuit Compression\n", + "\n", + "\n", + "As you can see, with a depth of 127 and a circuit size of 264, this is a very large and very deep quantum circuit! \n", + "Needless to say this is not very efficient. There are of course ways to compress the image in a way to decrease the depth of the circuit and have fewer operators. One way is to use a classic compression algorithm such as the Espresso Algorithm [5], which was developed in IBM by Brayton. The Espresso algorithm is used to compress the the control information of all the CNOT gates in the circuit to a minimum set of CNOT gates. \n", + "\n", + "How this would work is that each group of gates per pixel is divided into two groups. One which has the CNOT gates to represent the pixel values when set to 1, and the Identity gate which is set to 0. For example in the second pixel (0,1) we have 4 CNOT gates. Each group $\\phi_{i}$ can be represented as follows:\n", + "\n", + "$$\\phi_{i} = (\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=0}^{2^{n}-1} I) \\cup (\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=1}^{2^{n}-1} (2n - CNOT)_{YX}))$$\n", + "\n", + "The left group indicates that if the $C^{i}_{YX}=0$, then the Identity gate is used. \n", + "\n", + "The right group indicates that if $C^{i}_{YX}=1$, then a CNOT gate is used.\n", + "\n", + "Therefore, it's the CNOT group which we would need to compress using the Espesso method to build a new unitary compressed group: \n", + "\n", + "$$\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=1}^{2^{n}-1} YX \\xrightarrow[]{\\text{Espresso} } \\bigcup_{K_i}K_i $$\n", + "\n", + "\n", + "**Extra Credit**\n", + "As an exercise, compress the 2x2 image above using the Espresso algorithm and compare the depth and size of your compressed circuit to the circuit we created above. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. References\n", + "\n", + "[1] Le, P.Q., Dong, F. & Hirota, K. _A flexible representation of quantum images for polynomial preparation, image compression, and processing operations._ Quantum Inf Process 10, 63–84 (2011). https://doi.org/10.1007/s11128-010-0177-y\n", + "\n", + "[2] Zhang, Y., Lu, K., Gao, Y. et al. _NEQR: a novel enhanced quantum representation of digital images._ Quantum Inf Process 12, 2833–2860 (2013). https://doi.org/10.1007/s11128-013-0567-z\n", + "\n", + "[3] Cai,Yongquan et al. _Chinese Journal of Electronics(2018), 27 (4):718_ http://dx.doi.org/10.1049/cje.2018.02.012\n", + "\n", + "[4] “Qiskit: An open-source framework for quantum computing,” (2019). https://qiskit.org\n", + "\n", + "[5] Brayton, R.K. Sangiovanni-Vicentelli, A. McMullen, C. Hacktel, G.: _Log Minimization Algorithms VLSI Synch_. Kluwer Academic Publishers, DOrdrecht (1984) " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/QIP/qip_index.ipynb b/translations/ja/ch-applications/QIP/qip_index.ipynb new file mode 100644 index 0000000..a1b3f10 --- /dev/null +++ b/translations/ja/ch-applications/QIP/qip_index.ipynb @@ -0,0 +1,46 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Image Processing\n", + "## About This Section\n", + "\n", + "Digital image processing has been around since the middle of the 20th century originally to enhance the quality of photos. It has since then worked its way into various areas of research such as medical imaging, virtual/augmented reality, satellite sensing, cryptanalysis, and machine learning. In this section we'll begin with a brief overview of existing classical image processing algorithms, followed by various quantum image processing algorithms. Each section will describe the various stages/domains of image processing, their advantages and disadvantages from similar quantum image processing algorithms. \n", + "\n", + "The explanations in this section do not go in depth as do the many research papers available. For this reason we have included all the references to each algorithm so you can take it upon yourselves to learn more on these techiques.\n", + "\n", + "The goal of this chapter is to provide you with an introduction to the various image processing algorithms and patterns, and execute them on an actual quantum computer. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/QIP/review-classical-image-proc.ipynb b/translations/ja/ch-applications/QIP/review-classical-image-proc.ipynb new file mode 100644 index 0000000..517de40 --- /dev/null +++ b/translations/ja/ch-applications/QIP/review-classical-image-proc.ipynb @@ -0,0 +1,497 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# Classical Image Processing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial we will review some existing classical image processing algorithms. \n", + "\n", + "Image processing has been around since the mid 20th century. Since its early beginnings it has been expanded from simple image enhancement techniques to pattern recognition, transformation, and machine learning. Its uses span many domains such as medical imaging, cryptanalysis, gaming, weather, construction, and traffic analysis.\n", + "In this section we will review a few of these classical techniques to serve as a brief introduction to the various image processing techniques and will help understand the differences as to how images are represented and transformed. \n", + "\n", + "\n", + "We will be using the **skimage** library to perform a lot of the image processing for us. But first, let's discuss a bit about how images are digitally represented and rendered.\n", + "\n", + "An image is made up of pixels, where each pixel represents as either binary, grayscale, or color. An image can contain any number of pixels and in any configuration. An image can be represented as a square nxn image, or an nxm image, where n and m are integers representing the number of rows and columns of the image.\n", + "\n", + "A binary image is represented by a single bit for each pixel, where the bit has a value of either 0 or 1. Where 0 represents the color Black, and 1 represents the color White.\n", + "\n", + "A grayscale image is represented by 8 bits for each pixel, where the bits have gray scaled values between 0 and 255. Where 0 is Black and 255 is White, and all the colors in between intensify the grayscale values as the value increases. \n", + "\n", + "In the following sections we will perform some common operations to various binary, grayscale, and color images. The operations will be as simple as just reading in a image and converting it from color to grayscale, and other operations such as feature and edge detection. For simplicity we will be using the skiimage library to perform some of these tasks for us. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## Contents\n", + "1. Reading and Transforming an Image \n", + " 1.1 Converting From Color to Grayscale \n", + " 1.2 Blurring \n", + " 1.3 Resizing \n", + "2. Edge Detection \n", + " 2.1 Canny \n", + " 2.2 Roberts \n", + " 2.3 Sobel \n", + "3. Thresholding " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Reading and Transforming an Image\n", + "Reading in an image is as simple as reading in a text file. In these example we'll read in various sample images included in the **skimage** library. \n", + "In this example we will read in a color image and display it using Python pyplot." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import matplotlib\n", + "\n", + "# Load skimage library\n", + "from skimage import data\n", + "\n", + "# Other sample images available: 'hubble_deep_field', 'astronaut', 'retina'\n", + "image_name = 'immunohistochemistry'\n", + "\n", + "# Load image\n", + "caller = getattr(data, image_name)\n", + "image = caller()\n", + "\n", + "# Plot and display image\n", + "plt.figure()\n", + "plt.title(image_name)\n", + "plt.imshow(image)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 Convert a Color Image to Grayscale\n", + "There are many ways to convert an image from color to grayscale. Since grayscale colors are generally stored as 8-bit values and color images are stored as 24 bit values (8-bits per color - Red, Green, and Blue), this means that the conversion must reduce to the 8-bit grayscale representation. The general way to do this is by simply averaging the three color values: \n", + "\n", + "Grayscale image = $\\frac{Red(8bit) + Green(8bit) + Blue(8bit)}3$\n", + "\n", + "This is commonly referred to as _downsampling_ an image. \n", + "Luckily for us we won't have to write our code to traverse each pixel as skimage already has a method, _rgb2gray_ , built to do that for us." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from skimage.color import rgb2gray\n", + "\n", + "# Convert color to grayscale image\n", + "grayscale_image = rgb2gray(image)\n", + "\n", + "# Plot and show grayscaled image\n", + "plt.figure()\n", + "plt.title('Grayscale image')\n", + "plt.imshow(grayscale_image, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Tinting an Image\n", + "If you ever need to highlight a portion of an image you can do so by tinting an image by scaling the color values of each pixel to various degrees of color. In the folloiwing example we will scale the color image by defining the color weight to apply, in this case we will apply a pure red so we will clear out the blue and green values. \n", + "\n", + "**Note** The color values are oredered [Red, Green, Blue]." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQYAAAEICAYAAAC9P1pMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOy9aWxmaXbf97tcq7gVWcVi7VtXVXd190xPzz6jkSx50eJFkWI5dmwDkZA4SuIYCQLDkBMgiBPLiD4oiCwocCIFiuTIseQEgaIkWiLJksdaZuuZ6Znpvbpr6VrI4lIki0txffPhnJ/PZc9WHExrODIfgCD5vnd57rOc5X/+59ym0+mw3/bbfttv7db1je7Afttv+23vtX3BsN/22377orYvGPbbfttvX9T2BcN+22/77YvavmDYb/ttv31R2xcM+22/7bcvavuC4Zu4NU3TaZrm0i6OX2qa5rG3s0+te/1c0zQ/+mW+++tN0/x/fxT92G9fW9sXDH+ErWma603TrOYGnczNM/Q23et3m6b5G+3POp3OUKfTeeMRz9+V0NlN63Q6/6TT6XzX23Ht/fb1afuC4Y++fW+n0xkCngXeDfzn3+D+7Lf99kVtXzB8g1qn05kEfoMQEAA0TdPfNM2PN01zs2maqaZp/semaQ62vv87TdPcbZrmTtM0/+6Xu3bTNP8A+Dbgp9I6+an8/F9ZAWmt/A9N0/y/TdM8aJrm403TXMzvPpqXej7P/yv5+V9omuazTdPMN03zB03TPNO657ubpvl0XuuXgANfoX8/1DTN77X+7zRN8zebpnktz//7TdNcbJrmD5umWWya5p81TdOXx441TfP/NE0z3TTN/fz7dOtaF5qm+Whe57fyGX+h9f2Hsu/zTdM83zTNd3zFifrXtXU6nf2fP6If4DrwZ/Lv08DngX/Y+v4ngF8BDgPDwP8N/Lf53fcAU8A7gEHgfwM6wKUvc6/fBf7GWz77V8cDPwfMAR8AeoB/Avzilzo2/38PcA/4INAN/GA+Tz/QB9wA/jOgF/hLwAbwo1+mbz8E/N5b7vUrwAjwNLAG/DbwGHAIeBH4wTz2CPADwECO0f8O/HLrWn8I/Hj26VuBReAX8rtTwCzw5wil+J35/9Fv9NrYaz/f8A786/STG2kJeJCb4beB0fyuAZaBi63jPwxcy79/Fvix1nePfx0Ew//c+u7PAS9/qWPz/38E/P23XO8V4NuBPwHcAZrWd3+wS8Hwkdb/zwE/0vr/vwN+4stc61ngfv59FtgEBlrf/0JLMPwI8L++5fzfUOjs/9TPvivxR9++v9PpDAPfAVwBxvPzo4QWfC7N3Hng1/NzgJPAm63r3Pg69GWy9fcK8JWA0HPA37Zv2b8z2a+TwO1O7rSvsX9Trb9Xv8T/QwBN0ww0TfM/NU1zo2maReCjwGjTNN3Zj7lOp7PSOrc9ZueAf+stz/CtwIld9vWPfdsXDN+g1ul0/gWhtX88P5ohNsDTnU5nNH8OdQKoBLhLbETb2a92i69nf4kN9g9afRvtdDoDnU7nn2bfTjVN0+yif19r+9vAE8AHO53OCGGtQFhcd4HDTdMMtI5vj9mbhMXQfobBTqfzY29TX79p275g+Ma2nwC+s2maZzudzjbwM8B/3zTNBEDTNKeapvnuPPafAT/UNM1TufD/q69y7SnCR/9a21vP/xngP2ya5oNNtMGmaf580zTDhF+/CfwnTdP0NE3zFwns4u1ow4QAnW+a5jCtceh0OjeATwF/r2mavqZpPgx8b+vcXwC+t2ma726aprtpmgNN03xHG7zcb9H2BcM3sHU6nWngHwP/ZX70I8BV4GNpJv8WoR3pdDq/RgiSf57H/POvcvl/CPylRO5/8mvo3t8Dfj5N7r/c6XQ+Bfz7wE8B97MPP5R9Wwf+Yv5/H/grwP/5NdzzUdpPAAcJC+tjhLvVbn+dwGZmgR8FfokAM+l0Om8C3wf8F8A0YUH8Hfb3wRe1ZqdbuN/22x+vlqHTlzudzlezsPZbq+1Lyv32x6o1TfP+5EB0NU3zPYSF8Mvf6H59s7W3RTA0TfM9TdO80jTN1aZp/u7bcY/9tt++TDtOhGqXgJ8E/qNOp/OZb2iPvgnb192VyLDRqwR55BbwSeCvdjqdF7+uN9pv+22/vW3t7bAYPgBc7XQ6byQo9YuEObff9tt++yZpPW/DNU+xk1Ryi6DRftk21DSdUYJLu03YgH1EYLqhAvLb+dNNxMYMmjd5LgQPdyPPP5rH7qZ18h5N68d7bbXuv9W6fyd/tvJ3T/7uav1t62kdu0VJ5k3gYeu6PXkv+7PZuo/XOdgak/b9N/OzA63PPWcz//YZ+/PzHoI73JXP53Nv5N8H39Lf7tbfXa17O2+9eUz7mTby843WuPm7u9Wnnvy9np/3vOV4m3PiT3drvLpa3zsnTWssPb/5Etfryufw2K3W9+057Sbipl2taw7l945he414/W5qDXe1+rtBjXk/NZcNEaNdzmt35dhs5DG9xFzbv4d5Tfvt9a/BTKfTkTD3FdvbIRiaL/HZF/krTdP8MPDDEAT5/4aIKb1MLNCniQdcJQZlkoiDHSMGpIugsd0gBmaOYLJ0AfMEX/gp4El2LrD2xnej9VGLdjU/WyUmZRx4jYqPHc3r3MvvD+fxD4AF4HXgW/K7mezDZN7jBEEOGM9+PsjnWc97/G6OAXmfB/n3PEGJ3MjnbIAxggusULib1+wAb+T/TxCJBqt57n1iAR3I680RDvlozsHNPPdMHrtCJGWcIBb8ZH52Ia+7BkwQccHe7O9j+XkDvJfgGz8kKJ4zOY6383qr+WyHsu8rRCLEQF5zKO/dA/xenut4d4h10SE2zCq1EfuzD2N5/FLOzTyxWYZzfrpzLLZzDmbzO7I/0/nZ4/m3m825XM9rH8x+vAS8k0gqUTgcpZhrwzlOPXmN5TymL++5nPd7maBwOicd4E/mvZazH7dzjreAyznu3TnP8/nddN73XD7v9++Cjfp2CIZb7GSbnSZ49Dtap9P5aeCnAc41TWeQGKAHlFCYIx70DDEA/USywTliwl8nJqWXWIQHiY02T0yGA91FTErb+nhITd4KJfWb/O4qMfmTwPOEIDhGbBi12qeJjd9FCLMOsZhniEndAH6HWCzLeY2FfI5BYlNtZv8bYrKV7mqHdWKjrBIL/Qgx4WokNfO5HORP5YD35vVGCUF0I6/bn9+t5PXm8j5LhJBYyz71U5M4mM8ylH3Zyv5tZF8WiQ2w1DpfC+jJfO4B4CKxYMdyjMYorTeb1zicfR0jTM9fz/uepjbQSt5nIX+6s48qgCliLawSpuvpfHaFmJbMHGXZreXY3s8+zOd954DP5Tiu53kH83gtoRlCuI3k5/fyWedyrAfzu+0cN//W+mgoRTRCCN7enIOtvOZS9kfB9zB/FrNfnfxfJarF15fX1qJ+1PZ2CIZPApebprlArM1/G/hrX+kEzciXCel8jxig0/n5QWIAloiF5iY7SW3qN4mBkPB/jNjcc8Az1CSoYfsps607r7dEbC6tiNeAzxISeYUyHZfzmEViAY3lPV8gJPcDYrIa4BoxYRfy2mOEVj5FuQMuiL+Vx6/mWCzlPReIidWa6MrzIBbCLSoz6wSxuN2cWgAD2ee11nibUPAGoTm7iAW+QGyErnyuLWrTX8j/H+azzBNCqZP3mSM21hCVejnQ6nN/njNKCAD7czbHYJIQUAq19+ccPcjfPcTGnyKEzHcRAuVNYj24eUepdbNJaN5D2efe7FN/a/ynsi+ep8A5Q2zsg9QGXMkxUMgcznMPZb/H8/wjlBAaz3kZpNw716LWS2+O05E8fjKP36LWqm0kv5vNazhvUNblICU8TrG79nUXDJ1OZ7Npmr9FWJHdwM92Op0XvtI5W8RimacmQJN9hci5nQHO53dqDiXjEjFwxyj/7XOUlp0kBtJFoL/X9tf6icHUvB0lBlvJfir/nyEW/YPW9z2EEDmT/b5KLJB1aqMuEwtonTDxD+Rny9RinMv7vJTX0mRcyeO2sn8QE/5SXpN8nvEci+F8FjfwXPZD03Upr30o++MCXaUEoFZW2//1+cdzDvRhl4jF6CLUDdLd6yGE4oM8dzOfV+HfDXwhP78IfIJI2ZyjzPuhfN7R7OcpQolM5HUHKFfjXvbjDrVeRvLZfNY2JgOFoWjFXcx5W8xnX8sfrYVzxAaezftpbR0hBNbThDXlJh2j1rZupLjEcI5dX6s/W5QVtEFsepXBgRyDLcJFW6FwtSa/f5Bj5n7QRXrU9nZYDHQ6nV8FfvVRj+8mJnGCGOQJSoI+JAb6PGXyQgzYHDEoUwS6eZ4Y2GliII4QC+gqMUiHKP9S10Gtqem7np+JW7xMlFk6SQy+LshBQuMdy/s/TUzkvezvC0R2z0Qe+3zec4SYUIVSNyGI+vPZThAL/oW8V3/2b5uyRPSvNykrwUXrQuyiXJA7hCVzOMfGayxlX44RG34t+/caYZk9pCwJtaaCaSy/7xCbdYXamN77bh7/YWJTbxCCwO8eo7TzeP5/N4+/Sbkq3rPJ/9Wqw3n8SJ5/LZ9hMM/RGlmjLBZxgRkKA+gnBMBIzuUBYqPP5TlL+ayDOVdH8jMxDbGjh9Q6bfJ6CvQbVOKJFsdSa6zW874KK/PydTMVzrrOh7IvCqwBCmPoyecSS2sL8Udtb4tg2G1bp3zpw8SAQiyCSWKRqgnuE4O2SDz0OUK7nMlrbFKm/SxRMGCBwAJeJyZRCb1FbPxn8thfJhbkeykrYotISjhPDJbao5P3fg14H+X3ThJm7dk8/haxkJ7OYz9MTKpSfTv7O5jXuEossvs5Hr3UYhAQ3KZ89IM5TmqL/vx8izDlO3nM77XGUTNZBN6x38jrisS7oZbyvpvEghOj6Ml73crfAzlHLwLvIoTycl7nMWJzzOX17me/tEw0p8V9jDScobSfIPEBasOO5jPO57hrrj9OuZNuqJU89ixhten2zFGW4iShBGbyWYwInKcsgJuUeyRu00O4nGs5f9eIijpTlBX1Ro4TeZxC6ng+64G850p+N5rnbebxugcrFICsqwIVgRPgnKBc8SPsru0JweAC0F/vEAOj1hC1XiQWYQ8hPC5Ri8pogqbwCWKzv0AM0Cq1iNSWC8RkP09MwH1iAOfzmBEK1X6JWOi91EQdzL4tEUJCAEktskSFytbe8nuewg1micl9gtjAnyRMxG/PZyaPu5v9mM5z1Swi8kfy83XKYjpALPwRYuOMUmCX2nWOsmwW8lgFzxqltQ7l/QTP1ijBJoi3ntd8Ia87T9SYE9S9lT+XWn1YpqIZ/VQEapACdQXwVvLnPhWeXKRcvHFCCTgX5ymrR2B4qXUu+dxPEmvgkxT20E1hUXM5pu0I1gq16Z8khMAoISAetubG9XYsn1Fh1Jfjs9ya4x4qyjLU6rshZbGrwfy8lwIqtYQFHnspRavl+ahtTwiGLmJwb1ELW6DPxf4xYgP1EJvQhbxF+b0DhFZ6FzG4d/LvK4T21JVwUruJRaT5LxptLFgh0uS1NgnwTZ96oXXMKUqKH8pr3aXqngkObROLujf7MszOmPufJxbWvRybZWIRaSZeyjFZIPCHGcI8VzgapdAdOpz3/nheazz7ukX5rpsU4KuffJvY8OY4D1JaazLvcTB/FN7rOTdGWE4QAv9efn82n/96jtOrlL8+SoVnuyh84TRlXm9TWMJs9n2Lwhgmcv4OUPiCJv0UhQ05luOUu3Evz+nJaw207rdBrM217NexvD95/dk89iG1Ng5SWNXN/H4477mRx2xSYcVxKhQq4GxEqY8KResS6RpsUJaHHBH5Aut5vpGa3bQ9IRj6ieKGfcSmuEZMoJN0j3i4y5QWMFw1TAzgPDGxa8RAfx74bir2q9m5TRQPULDcIeqIHc//JymeARRgaDhoPq+xmv2+RyzEh5S/OJz9WG199lJedz6vKZ6hebidz90hNo4m5VFiIb5ELZzBvOc5QjC8QJmXotVbFPFlkjCtr+c9X82+SCgTwFSL6rIsEGb1RN5nhRAqM9SGEdidzOc1xPkhSrO9TIB5w4RgG8/5GSGE0CaxuayuciCfWdzFKFF3HmdoU614OX/rGr1BWZWL+bySt4ZzDOQIGPnSvTMMuZzHv0qh//ruKo+xHKPF1jXmCddzm8C9jNisEXMulqW1aGRnML8boAB1w6Fn8/8DFF9kLP9vW5RG3VyvRynMYZTdtT2RXblMDMpl4kHd9Kfy80Vi0AUT+6g4vJprmZjoo8QkPkPFyD9HDP4csfmeIAbQ7zt5bQk/C3n9JUobumkMdS1SIOJwXvdmnmM8XEl/lTL5ZN+5SJYoV0Cz71nK71whFoKmoL8FZZcIM/xUfrec3zVUmPMY5XdbulltKzYhdjFCRQ1eIrSs7tBhSpDpNoznc7+cfXYsJSwN5DXvUSSrzbye5CstIrksUFbRQwpV38prHaJCvMcorELrZzGvM5njo5BYoqIwC63+6loZVTEkvZn3OkNwUQ4RlsNGHvdSnj9OrDujAMuExfT7+bxQIXIxgTaRyqiakTKZi0YahnLsD7bOeUjsk2HCMtvM47QatCInKVdkN21PWAwdIl49TrD/JogHu08M0Gli8AQlF4lJFWw09v84MfAn8/PbhMT+UJ4vAPcqMbAbhDC6QkzADCFQjPNv5D0XCP9cXvdK/n+Z2GjDxCJ4hlg8G5SGERiSS2GsWsqti0VW5woVuXiNItC0TeAhyspYpijLXcQmvUos1Im87lD+bBOLaIsCfNt8Ba0gaeUTeex03mMqn0k3SHbnWM7HFCF0xW/aLo4YwxZFZNJqEPfQj/8oYck9nWMnlvNm3uuxfG6xlLnst0SlJ3MMzubz36KAuG5CWMkJMWQ4l2OgwJPTcTzn5TPZ54Hsw1LOwR0KtL2QfVOATVD0ZijwWkzBkPwDCrMy4qIl6pxN5nF9FBbkvL+S54h9SJ824uSc7qbtCYuhj6I6H6ZYfd0ERtBNDPIBCuXtEAN2lzK5JyhJd4dYGJKgVoiFOpr3cUMcICba8KHou36tsWx9Z3MKHOgVQggcJxaWWnKcmJwJ4COExSKir+/fR/mzhqz0z4cJau0QscjkGbxEkK7kdqhppD2fJxZoN6HFXyNMawXSBDuJN4bkDGsdoDZZN8Wy1GyV7ixpSDO4lwrb3c5nF8sh+3+HCruR175LLP6JvM4tKlx4i9gMrxARowUqpHcw77dB8T3kg9zIz29TluhFitpt6HE27/EmJXShsJ+JPHaGChEfoyw9AcrBHLNbeexZdubsyOkQ7DS0acRomIryqEgOUfklskkFH1UwcirEpzy+ixLyupXflBaDm+ITxMOqDQWZNG/FCdomn3kDIuVDFGp/jFh4mt2XiAV7iAJvBOwM77Tj8vLnVwjzXsHzMjHohqleJZB3oykKl8MU026MneSsA3lcHzXZ28Tm+TgV0+8hNslJSluvE5tdbX2SsjYM5bnA5vPz2xSuIunoHsUiFc8xn0HK821C2EAJR7ERhckSIXQf5M9oXktAzByUa4RJbkTjDMV/0KW7m9fspyI9DWX9rOR3YgXLVE3+W5T7plum+zdJWQfkdXsoV2k8r6uVupHjIoDY5rdo9czm+HvPh5Q1MkEIMu/TjmYpqBWoc5QgkLqvAPV+Jl0ZUXmdsHQn8nyZnHJzDKeK0XxRstJXaXtCMKwC/5JKkBFl3aIQdCdHzamWPkotLrV7h0hkmiE2mpEBE52uULkP83neKWKRjBGD/Vzeo48IG05TgNQqWYiR2vR38/vTFHr8DmJy71ILdCL7c4fazOYgTFE5IUcJi+FVAiO5l+OjhaOV00OYuWoUrQH9/JPZ34W851FCo/VRQO0iRWCS+HUoj79Ovf1G0O04FTVRWCoQ5IpMU7T1UcK0l+2p1j5PbOYL+ewzxAa+SAkgQVQVxS3CIjib1zlHCFF5K27MpeybrNEVKvIxREUIzIcwCnY5/5+miEO3KI7DkTxOn1/BLnAqceoEsaaM8nj9gfz/GrE2TlLhXvMZNinW4wSxfuy7SvHTOabfkteTfCYTt9P6u7t17Udte0IwyPqSgCJR5wwxcbcpiSlw5CJzQt6gwMcniA0q17yfAv0k/3RRkthFdYNY9OaMD1Kb6BIxIfp+5gNco0xYfcqHVNbkHDWhl7JvWkFqP0N+r+T9v4VCnU9n328SG9Wwk4y9wbzmJrGJn89zDVkZmZigXhe1QSwm/WGjC4b2zII7kX2/Tbh0hygwzcQoIw8bhCV1KMdpMfshHXyI2Kyv5bUML17La60TAvA85d9uU9aGY/8w7/En8vkliS1RTEI5AO2Qs7kGy/lc85Tprps1Tsy9hKCrOR8Q8z2b43WfEBwKmCOUC3woj1fY+vcYRdv/PCEwblDC3hCkQmok+2guhAJsKp+X/F8mbhtsPkRZN1p1YiqP2vYExtAhFgnEQB+g0O/rFF8fCsy6Tyymk8TCvU9omvNUVECQz7BWD8U4lDknf78vryWxaYjYOBPEoLpBVimtbdhI3oIMOvkQcuTP5v2H2OkvCkp9lpjwdxEaa4DYqDcojanfO0JRg9WMhsPO5fkLxKKWLuvmHyGsGLkEI4Rpf5pyH6ZbzyZD9AGx0B7mb4HEPgq4nc/rSIKSNSo4Km6zQZCI5KpczD4eIOb7KOXGyBuYp3JAniASp67nfZbzvOGcP9mzhjYN50G5bDfy5yplFbqJeqjy0bpD+vAn8/kuUIrhbs7fc9RasxaGUS7TtZdyXp1HU6TVzuIE4iiSncyQPEzl1phhOZt/6xKbRzFCUcnNkdlN2xMWg50eoXwxKZyGu9oMPwdnAPg/iIV8mtqk2wRIZxJPQ4B1HyEm62b+PEtJ4hNUqEdwcJ7yW6cIjfU4ITAGiQVhdGSRijGbtuzGmiRePDlPLLpO9u8pKu3ZlHDzOoyG3MvryP4UidctGqXCcDL4JOe8SNGtZRZ25TkmrgmajhJWl7iD6Pc4YR7fJjaGFpiI+huE+zBIaEP5AEYLFOIu2gc5twqcESKiozA2L0M8Rr97nRBCRnwOU1iU2YcyXXUbxHlWs79mosopMMPxHpVbME4l20GBhmZuerxr9l35XDcJgfcOKhQ7lmPzJAVAblFRtsEcv8vUGrif1z9NKQ6BcGn4WtRDVE6HYH0vIaxMgIPKIN5N2xOCoZeY9E1i4/QQUnmEGDgTf0S5z1DhsynqzacjxGJaJBbIh6j49mHqZQgbrc+tuHObKsYioWaQsEA+T/Hm1RgmUokMi06bhizleZtYVH1UMpgT+C+BP0ssaK0atYD5EWtUSax7FMpsSHONYge+mOeYB7BCZC2K3bjoTRE2yUYsQvaf2midncQZtdhajptm7VliY5l7oLY238TojwlNHnss+/UMgZO8jxKwd/JapynW6u8Tm+0coaHdDBMUNvJOKrFNXsYCZbqbSn2fyqmRt3CPAhE3qTUnD+AhYeEYKtWPf5B9MJ/FiAGU1jdTWNr9MwTYronvXA9RmaHyLPopvEDwWlfJMPYwVfVJgbpObfBvSsHQR3HQBXTcAGaZ6XeNUiDX5wiBcpQKtc0RG2SYGgyLaxj7NTQ6lJ+tUzFiF8c6sSitA9FLbNCnCKzgN9kJ7qi1nyQW2gkqFfkKlZNxkVi0xsQFxgaJxX4j+yTvXozF+3RTPusqIciaPHaM8PO1lMwmvN56pqMUAt5PCF4IS+gElcg1QpHHdFXaiUN3Kbr6QQoPcEOYBOWGNdpkGLNtGZiabtiujyJ43cz/b1OFaT6Txx/K51mlFMMElaat+T5FFYhxwyznOMvVEPC7TxGrtB7doNvEujMapIXomGi9Tef1LuUYr1DU5MW89nuJteD6lkSmVeE1Dcca6RgglMQ4IXzlqXgN91E7Oe5Gzu9u2p544cyVpun8L4SZ9wJBduqiOPCGkDSF71OhS/n3G4RQ+DiRJn2ZKvCh4LjOToS7l+K2S4RZyePaMeojxIR+P7GwPk0stGP5uaDjMWLSj+b5f0As0scIDXAor2f24CcI7a452E8Inl5iMq8RC7GdMPUOKrYu1wB28i20sL41v7+d95Lgc4FyTaT0KoyNVLyZ932coqcfzbEQdH0n5VNPZF+Hic3cUIlxVr7qp9yY28C/SaUmfz77ouAcocqcLREWjZmjYh2GpOUMiA+YfHecqjEhxiJQ7EY09Lqd516iOB4SwLZyvrUijERITNJ96qWyagWd5SdcIBSLgPgasU61kOU0uI6lqlu3Uwr2POHCyr5dzLG5SLSLVPWx+dZzJIPzuU6n8z4eoe0Ji0GJPUNMphtV81rTrd3MQXAw14kBOUJVXHLBC8QM5XWdBKMa8/m9PmQfsSAWiYVnoc11wqLYJha9iUwnKfDqSN7bOo9nCOk+TVUU6lCstA4FSHVRYN2beez7CRP7NYIVeo9wRzRhBe7MHbCGglWgrhAL8lmqYpLl5Xopyq3PLslnnNigyxQD707e+yG1AdT6ltOTg6AVqLUlAUvLzDCprseTOQ6Cv4vZ3+G81yo7+Q4Ps9+a6X2EJSF9XrxCd+M4Zb0IbJsCfTPPk7uihSpDcTjH9zixxsYpd0O+g8/3wluuK89BMFfAe5uY41OE1TZErWUL5Ri61zVYyz50U8xV826kWYuTyHwcpATPbtqeiEpAaCALlc4SiU5SfM3fh+IxLFO1IDWXjxBSuF3cZJQqvKmgWaC0zAKxqDdb1xKokmI7SmiSTQI0NE59g8qZ76MWmGaoRUmuUpWGZFPq/85Q4dqhPO9aPvMPEPUbGmIBfR+hTX6Pch3cZAJWmqxq67tUSPEshTesUTUk3ODWDzSMepQqX+dx0xTWYGTHsKEaTUG/mv36FOHe/YucWwFF04vdCMcpi+pmHtNOdZdSrJulKd8QL/k8QAhpuSRrOR7StzfzHl5nhdiU3VT1pPWcP0Oshs+1Ikxw6lDa/UDeZySv3S7bZqLfpby2AoqcmzmqRidU1e/NPH+AysFQCYh9iBkZ2jZsa8q5ys7PdtP2hMWwTky2DDVBPmsp6EKodecIq+AmFQK8A/ypvNabhJCw0o7U2vU87kLrvk7EEJWAc5Yy3XoIM/cYgWDqjeUAACAASURBVGlcJBbftTznLLH4LZbiouujsinPEhN7N5/zCOXnSnJaJBbIK/k8z1Aa8XWq4Mn35rP8GrGJ5DksUbX99PkvUfyIc9QCMplMcpKC41CO/xmqkpE+7H0qlfydxOKX7yH6PU5YUApDQd+niQ1hFGSVKgxr9SU15AYBmFqkRmKQVpRsxSbn9SAhdP4MIbQncxzU6tKne6hEKdmjJpy1oxFPENbZvez/YPbHTErdOl0RsTCTtbRQeygOwht57gVi3Z4l1qFWgyFky7dJZ3YtueGPUhZNFxEF+Qg7Myd7qSrZHWLtqDx20/aMYNAc1bc3ZCnN1kVsUokhrD5iYbyD2CRvUL60vt4ipZWMWRtrFqDRV5bqO0v5lxALbpYg1hjTF9nfJBbph6kCoeYOmJ5sJqSotkxD4+irVKUkeQC38nwzPTVvDxERl+cI4dim3EqvlfE3RRF8XFhtF+YwhbhrapuDIRfB/ujqiHa7eJcpDKjT+jE35DAFHLZj6zPERpTYtpy/pwjLb5OqZKXmhsIMdBXOUgVTxDP8vUQBoxvEupnJsTNvRtfzILFR5ylOwxEqXf8ElWUrvVmNLog7mWM5kX0QoF6iwrpXKA7KWt7vRvbxPIWBaT3ZxKZ0I1Uwpn2PU9bepynrtF1L8lHbnhAM1qQz/iwgZOUZF5eg1DnKWpglJuAKMbh3KNqqZBwFj/6wC2yNQsOdCNFysyNl03UTfjqUjyifQGxBPMT6Bm8QE2LK+ANK8lsZye/nCKHhYjWv3lDfMhUK6yJAQYXJi4QVY4EWBajCs6HSxE3aUUOrVbVyrFtpP9pUW0N5b+T9Td7STevJZ5fpeYAKr91p3cd073uUdpewNUrU0RAHEaE3j+VlCvCbIt63MEcVyj2cYzSb/7u29Pt1g56iEttkcRoxGc9jprIP028ZVwu8GBlaoYoNPZXHv06Z/ioRs0g3828FjbkTgqoCj7Az2uBabmMt4ikCoCa6yfHYyM9lZD5q2xOCQf/yPJXLPkBl46ndzlNsuAVq07yT0AIOwjHiwa5T+fpqecOTlhSzuMZcXu9deR8Zb/co8tNFYtJd9FepENshQkqfpzTTdWIBuJAla9kPF9Tt/LyLWIhXKI7CAyINeY0C4a7luCkoPkBZRXIRZI9OUMJN5F0wDUrgaGHJ1BPUg3qXxC1iwS5SvjOUJXCHcGXM1RApt6aFLMYJqn7A84TbZJEXU+nFLdywS0TeyOP5910ClL1FlWBzXuyzwLKEpSkC5DS79lQec54qjGPexx1icz3I8daSdT3KdD3ZGmdrR4zn9U3Au01FUz6R/TOhT+DY8nQKttW8xu3WZ5285/l8FunOEqp0tcXJZghlNky4k7tpewJ81Edz08ka1Aw/SDyo/9+hGIJjxEL+JJXiq8lr2G6Iqjx9hSLbHKXCdRb10Ex8lpgQ03avEBMOBeCJ4Gv+ns4fE27ksUv40QxXextVaRdPGaNy61cJoFHTtCFCVVcpSnh/Hn+Mytgz6Un8xciDBT+kA/cSAuksO7XzuyjuvsVHReoF1ASD5VCYuzFN+PoKE3MkTEwyvdnznIt+SigYwyfP+zwRhj5GbNQ3iAQzGYFufNmWEBv9QesaUxQTdZiqv/EiZbUcJjaibpUArGS7Y4Rg8tkUJFBZkotU+rXzIsYkuG6/LKwjWLvGzuibRLftt8yB7FMFl5afrhiUcHBe29TwR2l7wmIwSWabGMyzhK+n6Wu4UM2xToFs44T2kF6r/7lJZa0p6e9QhUQsoKGp3UNIcSsEab66oQz76E/PEAusJ//+IFVJx5oGHqtLou/fXvxmNI7n9x1KiPRTb3IydNiuakSrTxZLvZufm/th7YH7VPIUVD6CeMEARR3WJH+dQv81waVuT+b1h6lIjGAu1Ds+JOmI8it8TEIaJKIW5yhQjfw9R4GfbcLaFQqH0qozjGc49yo737olRXmSAjV1KTtETdGbxNozlKkf39V6nmUq/L1MWDHD7AyzHqPcsjlC0N6m3kWiUhEInc9+6GYIjpqjYRKgx5hXAkWgcmwNZbqXZPKqfB617QnBoElkAsxN4mHdaO2wUDdVbfc0YZpZys10YRculD9tyFD34Wr+tuLSWSqKcIyY8FnCHBaI7KJeBnOTWIwP8/935XN8jIqJX6GATMlAd/M8w3uTFHHI0OAgZSEYSrOoiiarORnLVArxoRyHLcL8/QSV+i3VeJPCbnQJdCGgAFK5+m9SVpnFYDXPP0dkghrK28p+jBPg4XVi0xv2nSUE3fOEUNkmrBfN3wf57BZG7SWsBS07k4gayl1zvczkcfrx54jNaE3KDWLOj1Hu1ByVU/Ft1CYTED7Zupfg5BEqrN1DUdPN6hQkNQLykCqmK/ZhCv1ZyupsKItOgWY9hQcUeConYpxYU+vstGS3iXXQS1hZz+R8ecyjtj3hSqhZjEDo/89TppVc/RUq6eUq9fKO81TRinsURdoKN11UqvEJYqJmKBNzJf+HYkQeyGMP5fUW8hpHKVT8LrV571LsPDWcNFfDX9aSOJb3MvFIs9QaAoJQhlAXqLCVKDsU3dhMSsN876QIVVpPRjgsWGuMe55KnOojwnVrhA/flf072bqfUQwxAzV6P7FJLRQjY7FDbYw1ChRr08IFXNuU6n7CjD9BRQfEjKap4iQmIRnqnqUyVk3MW6FeE0j2TQaoZdNepISJiWNueutZzFB5MIYlDQkL7Erf72VnoRVzLvqpyI9zMEKV3WtzJ3pbv8U3dNEGqapURs9UFhvEOtUa1s1+1LYnBAPEImtTY58hHnyQIgwZDjPENkP4mxYRfUCBheZcGCM3T92wmNpPpNnMPKgqUKZjS52dpqoCNZSbcDLPdSNMUnX6pDq7cbaIBdbX+n+b8hkNAWoKzlFgq1ENtZVa6g6hea0/IF326fzsVarKUDu85cK2rsIUhQcYXj1FFYtthymNqnS17qlWssiLwNtmfn80n+EUFb0wc9UEJ0lGZmVOUKXtJexA4T9r1Juk3XCyZk2HH6D4G+ut7+SPQFhYukkNRQPfal3/EFVFaZYCqO9TZj8UPiMgvEC9PEksxBC5RCbrcmjyD7U+142Qb2M+xSxllaggoDgaMi3Fs3bT9owrIY13hTBlu4lJvZU/45S0FMB6mcpUu08h9iept0EdpawRfeoBSpsPEpO2lH35AsVx6CcWw8O8vsBUk9c9QGnVzxNmNZQvLjtQ3MPc+3GqiIvRh35CmMDODMUbVDKOwsxNak2DE3nsS5RPbDGZ0Rynm4TLcyT7ukUIDtFy+2KFIze0gN8MlfffUJvI4im9rXvOEJtiKvtyhkpkG6dKyfXkOZ/JYwQFZWVqputmTVMvA7agyht5rGnY4lHmr2gJSSk+zE7tOpKf36LCqA+pF9N2U4V0BaalP5vIJN6kcHUjd+f8Scgay2cX1LQilsLITF83cZurY4k4c0Tm8rxPECQnKCvDMPc0RSUfYXdtT1gMxuwl35wgFsIysaC7KH9SkoehzKOUZpZ7v5j/tzfRFMUZ36JCfx3qHQpPU/HetmYco/xemYpaHUpls+0MtUIBidaS2KLegbGZx2q+P6Tezi049YDAKQbY+cLSQ1TNyW7qfY5DBHHnNpU52g5ZXs+xeB/het2gtK7WhFmlwzmuYj0SzPrYSSBT4Eq2scqRGrSX2jS3c1zMcrRallmb863rKWhM3rLK0Q3CbH8F+KUcr6P50wabjTA5/zICndc2QNwh3IpzlNsia9EIjwLrNUKQzebfL+fcHifc1Meynw/y+dvp69tUhewXqVqNulYHqc29SK1PcyjaLojXP0bVxlTBHKKibb+f95Kl+qhtT1gMULFrEV3z0o8QUraXitfq26vxG2LwRJXfpMgqmoq3KL/PZB9Byl7KNzfEc4zYSM9Qi3Uwj7NW5GVicSwR4bNZYvGLXyjEDhKCSXLPYWIDn6IKnIqfvExoz/NURaALFHItFftgXkempOEp2W+/RVgwMt/8+2o+82XCspJPMUUVbLlKVdSezusaldlo3UMtbFUpiUQvEAJNTMHkrXGqepZg8sM8/yVK6A1SvAOFxlHgF/Ka7yZAzAv53DOUZlynAF15F4a15XLoSm23rq8F44YboBLl2lGic/mjoH4P5QYtU7yVHir8/AQR4ZHBepoiN/UR60BiUrsMmxan4U1JevZ9kljvU1Q0TMt3Lo/12Xdbj2FPWAxtUEW68irx0Mbjx4jJPkUM0AghnceoajYT7Izt3qFeAWb82OxJ8+cdUAlB1ygg7Br11qV2Eoqabb71/SZV78G4tPUM1Ez6rHepPIhbFMahualPr9Y8QL3tSXei7XdCodYz1AtdP5PjpzZSu9yj8gruUMVXzlCZkQJnakh9WC0Gc0vkW1jy7hUq1DlJuIWySqFSls2VuEiUahO7WaI2usCkwPO/Afw1qlCOGMcAsRGkFx+jXos3RgjZg8Rm1ELQXWkDsJK2HiMUgpjKKEVxPksV05E7YubkfUo5GOrWjRqnUsd1SQXZpYsLlMt01HXT0lGIQ63HNjPSNSNwLrYzSgij3bQ9IRg61DsHjQW7+VaIyXAAFolFLbHH2opu6DViAo5SvrNuiLkRB6nKzIagtALUPAqMF4gFrOtiKu4SBfoY/XDRCXaKaSxQfP8VquCKOITgVYfSBm7+ExQ56BaV3j1PRW1MLBIc0+88lH9vEVpNsO9pYnFepzI0n6UKmqiFh6msTwFSjxfH6KOsrj4qXCoDVTbqQI6RJKGzeewJwkr6LGHx6Y5oYYkHdRFWiKayaL8b5SQlvMyy9L5QiWZmHvZTdUYdP/NBblMZq2JcuoV3iU12MsdIc36WSpkezP6bKHWCUGhTBF50M+dFfERMQPDVqI48jR5KAVrvUVzCUP926zyB4RUKxP+mxBhk2B0lFuskMRjW1judf08Sg2lcVxJJP4VEG9o5RXHV71GVpi1wYp2AIxR2sUwsPnMqHqcwhz5ioo1JS5FVw0pfVgNoaooa6zJMZp9mKCHTTyyq56iMzSafdYoQeh8nNrTApoLkACWIjL93EWnr7yOKtbxG5aCMEtrrA3nudQq0s0zYLSoqcJqdJCrZpwpZMZTF/F5f99uosmqb+ZynKb/7DuHyXc3vP5zXfp0S1M6l42P6cUO4QqcoWrMJYGuEMO8nNqH0ayMTcjQuteZyLJ/vZQo/eIOiLJu6fYR6baLcj15izcjVsGTdKEXEeoOqU7lIWDxnCUvGsVGImTgmr8PU+IZYOwqFtdZYWLBF69LMV63wM+y+7QnBIKjWzc5KPyK16xSgJYPwIVXvXx9UDdU2qZTysLOohqmoVmEyfVZwSnfgCJUcdIqiK/dRboKuh+fep/xE0WQjCOuta29TSLZkmePUuxPMqLxGbJz3EZrqOFWBCorAI/ot420mj/l2ImS5RVF1B6gCp9eITXAqx1WtZBThFIX29+X460dr/oumaz31ERvuBFUjQW6GIblBQnAYRoSiLc9SzaQ68ZsVClzuUIJJk/4JapMtZz8U5CZnLRLr4i4Rifpkfieo3LbadDcmqXd/mEMhbnOE0tYbOYeTFJv0DiGsV/Pc6/kcrkWtxbeGX8UhTIwyouKekQ5tVE+S2UFirg3lf1NiDFAP0k+Zjw8JzTBDVQ4yl0I//B6lzcYpsk1DJfkcod5FoUkoEm96sKm1pvm2NaimtLkP+rXtghgzeY7XMaR1hKJer1HvUNQtMqNwmjDn5SII9C0Rlosm+llKyLRxDStSkfcTlDJMeIbiFrxKgZnnKfDxTF5Lf9/ogMlfFmHx77agc9NLJDOsaWVsXbgVKiLQyWPbms48EmnrUH72GEXu+UVCKxohaQjr6EKeY+RGivcDQrBsU6+lg7IKrlBa/DECi7Goin0VZFUQimetsBOAnCKEqREOKFLdDUJgDFCRA2njbffBTS5Yqvsrsa6d1DVKvXlM5XSWYL22afi7aV9VMDRN87NN09xrmuYLrc8ON03zm03TvJa/x/Lzpmman2ya5mrTNJ9rmuY9j9qRLWIBXaYEg+nVU4TGXsrfE4QQMMzpIE5Sb5Bq+5IHiYkSx5A0ZLahptkgod2WKHDwTULAmBt/hwK6RObFEORYHCMWkZWDpqnirHLhFW4SVs5R3HvN4FNUkY/P5N9aTpKmJPqMU66Rm0KOxCKhRb+FIk9p5fQRC2iFCGtdoKoZG9eHqnylG/cUtUkN01rdaZVKZR6h6O4rOXefIVyGhby2kYNTxCJ/gbIETC02pVwW5w8QVsgTlOCbITbIY1Q+yQ1i3m+ys8ScfrcbV6DyCFWKXhIbFFlujLKWdM38zqiQ1G3drFeybzJzh4l1tdD6rRIwKgIleLQcBGEVVgKM4hK6rvfyfMOs1iHZTXsUi+HniNcitNvfBX670+lcBn47/4eohn45f34Y+EeP0gkRWUt7GYLTZL9ELLq5/N+NqjQ1EqDlILe/j50bZZQKWW5TVZhnKLLNIFWiTfKPm3mDEFKGoaymo/Xi30pzBVc7AUv03iIjm5TffZwiJb1CmaOG+oxaHKZeezZMpXIL0Mo32KC4CMvZr7NUCHMwj1egTLaebYswkbeoMOQI9UYsAbFBalEbdl3LcZWiPN66/y0KE5ggNrZhz/sUTrNJgcdmIEqrbgihcIRQBGpWk5nENV4mBP1hKqHMvJIxar3pms4SQuQOIehusbNwj2Ml6/AuUUnrRWINqTBW83xxJzkf84Tlt0ZYgVt5jlERyVGuI90SadLOBZS14N8jlCLUrYaybr7urkSn0/kolc1q+z7g5/PvnycKKPv5P+5E+xgw2jTNCb5KE1gRHdb/XicGX7TV2oO6AGoAQZ81qkagqLpkl3OU2aX5acZhH8V/lxjTIRauA24ehTFvEXsTb5bYqVHNaOylNlAPIXDEJVxwq9Sbm6UNC1aaH9G07idSLTBrpt8YVWDFnAoXrIJKPv5dqqyZpqrCxI17m4qLSx7TdbpDkaxcwJ7bTwkZM0LbWquL4ig8pLIz5S/cz3EXrNN8FvHvy+fwmCOEpeO8ap20syC7W/Mp32G+NUcWUzlORbUmqIrfguFThHA9m8edp1iWhktvU4pAzS5uI+vzJOU2eV7bytUaMHJiVMi6IW0FYP6LwuNNKplvkLJwdtO+VozhWKfTuQuQv+3/KXaSrG7lZ1/Umqb54aZpPtU0zafM/nJwDSVaIGOLeiOTg3KfMkUlJmlma30Y/zUkZHx+hEpNFYyUQWd6thLeWgguDgdZf0/f11ClHHepxZeo6k5GP65SYOEEYV5dI4qlvp59WsvnOUEBiVo3z1J+5POE6ez43Sc2vYvRXAcToxaJCknHqBLx+rhDFA5B9vfTBDi3RZCKDGseY+f7Ri0i0sl7rhLCWMaiPA5rHlgD8rOUi2VJtdOU1dBNMfrUpmaLjhFu0BCRxXmTELSvUgLacLIgtRsMym+HAuwaYtNai1KCk3UYjApZpepczp/jMdw6zpwGwVKtUrGwfooLMk8JWkPBKkFxDfEuoyICk7S+3yTWzxDFGnbP7KZ9vcHH5kt89iX71Ol0frrT6byv0+m8z5qADpS/N4lJMk9hhGITWs/PvIm2X6UVYFjSStCGtKDeXK0GMrlonUCMFTBGSwQsZZHpvijlZcsdbF3vMGVOSjoRYXYjC1Q2VOj1DpXRqUa7SYQsv0BoA2sIuvgGCbPcRW9pun5iEy4TJq8WyLspF8SSdiPUW7dPUJbOvezHQ2LTWw26m+I1QL3P8iZlOQxSIdo2EepA9meZynhcZ+fr+Ew4UmvDF5vQm4R5/t7s55sERvEiZRXRGicjDFLutSgUjtPUS38WKHxkg6r2JQYlN0BhM0tVw3K9aGkK1Gr1/WFe7zSlqHQ55DXoYrddCSNBfa3P+ihXTeEjWPq1uBGO19fSpnQR8rf78hY7w6anqXn/sq2hTGBZjA+pklf60Ya3uqkN62QPEmad6K5+1y0KRFqiTC55BmZPaiJbT8+0bxOwpOsanTCUKV5gApGbxHvIl5ihwmAuEv83BOammKWsGc3NOaIA7EeIBW+9gEt5nAtxlmJxWhPAsmkLFLe/IcBIw6JdhLCy4In1ELfz3LvsBGgNcUovlnVpVp/zajKWfvtsjscLxDxrUYgTCDRr6WmNGOLVzYQig60SAutPE5EJqPd1QqW0m515kxD+C9TbrBT0p6kIV9tCuUkxaAV9zU9Zbc2J62GU4rssUq/sk4w3Sr3ST76O7oOuplaHIdP2ZlXQbVIuoJEmXTIjUmIWu2lfq2D4FeAH8+8fBP6v1uf/TkYnPgQs6HJ8pabZPkyh/utUAVDDcGoSueMWH5E+O00szgsUJfo8hTxbK0DwyTDPCmEKjlMZd9cpstIs9SZl76VAOUoh8y5u3RS5DQcpduMZKmV8kZKaSlMrG2l1TOXzPk5YBL2E+TxBpZGbXrxI+bZ3qMxLF5U5DuaPDBGuwTRVkESzfY1YsGcpM1guxPkct9vsRMMVFGbGio2cIkzukRyTz7XGTb7BKPXqvF6KRq2Qc3xhJ0An6+8A4epcAv5rAi2/TmxYQ4SLeb8niRf5XKGE2AQVUrTknMKiQwGfmzmG13I8rxPWid/LZTCC0EsIW5PGpgkL53LeT6tpjOLwHKbo8ApC8TKxIi1l15nRn60cb0PO7VSD3bRHCVf+U8LyeaJpmltN0/x7wI8B39k0zWvAd+b/AL9KRNWuAj8D/M1H6YRgmfRhTSPDMmIGUpJd6JvsfCmINRess28kQZKURWAkqPRT2s6Bbme1GXmAChM1retoXm9S5rihT+sKHKQIK7I1vY6Wkf70UF7zFGXRQLD1jhML5RaxUdXO9yiLwpoSJoEZ6l2nohmXKHPffBQXtQCh42lBVQGkBeotzc5H221z0U5RtRgU2JOt8XgfIbzFXQQRzYtxU0n6EWBub86t7I8RHdPuoYrhOr+L+ZwXqRComJN+utyJF6giLYZsBbrNm+iiMhjnqLqW0tOhuCpGSXQnL1E5KD2E0rpNCQItRYu4qCSMLHVT4XktrQ6FTSg0jOSIu+22fVWwstPp/NUv89Wf/hLHdoD/eLed0DowaQZiocxSprUIphMjJdTiIGo68xPag6gvqushgGg5MoXCAlXR2XRjXRCBTM1zS7Bp3motQG16ASqTwPoIDaMgkdLcTwGpFkfRXz3WupZ4gwui7VIt5vWsd2AEYZKqSCzhSj7GDLFhnqLyFMQo3qQEqkLCcON5woJ5kwpXrVDMvIEcH6MObe0jljJHWWPmpLgRoISIPJSbhJZ1M6uZTVRTc/ay83UBzrvPc5x6JaBU40MEt0KClqnS8mkEreW+CJwKGLpxDcuqbGx3KdLcKLEWrlIFiy3XJz7QBoQFD+2bAsAyeLrWZodqpUJFwpzD3bQ9wXyUU2DBDzkIalRDiFAVaSz+ukzF/2UBXmdnGfFZKrtO/3klf8tzEAE+Qr2Bajw/f56dRWPFPJYpTWXpNI/pUMxDzWFR94YSbvcpgsp9qr7hHcpUvpdj8jpFBZ+mqgqrecYJN+MAhaTLqrTEm4DtMYq6fZEwrV1sB/N53OzGxoezL68Tbo0aTrae8+ZzSQeX5yFuJMfgPhWmNURnfsX1vM8tIuFIi0iBL4KvxWIehcLljRzv63nuC4Qr9HlCSNyiiEPXKJfSrE0tGXMYdAUeIwTLZF7nPMWraafmiy/dJdwoBYLzaZTjCjvzXvoodu929l0CG617GKoUYNRSUPALuhq21v1+1LYn6jH0E1ryOYqBZpai4JeL8AA7y1UNUOZWF7VRjFM7+dJv1SxSYc2fP8DO7EiZdrLtnGi1k8xCOQKm/gpECv65GNYoPsULlDbop3j2alNzDaQ8bxDacpFY8KPUezMnqKxFLR4R/HsENnKbiGbI5RCwPURsHMOKF/K3fTZzVbxDV22bYoROUHkNunlSeq1xIV/CcdwmNlQ/sUE3iQ0n5+QQsR4GiRyGW1QRHbENKIHifQ9ROQaXifdxXKSE8z3qxTfd+exuerkbvVRdirYLKDYjl0G/31wHyV26KQpC81Lc4CbiKSiWqZf4vJcq5qOVIsCokFUIawG4gbVYtin+y3zOjUJmN21PCAZNJzewbZaQzKepqsiCP27gd1GmvYJDPOAKAe4oVLQyTHTS3HYytolJvEUlS7X9yVEKM5D4I3fBwjCGTpXg4iVQkZUNCmDVZJStp/9o5l/bT5aQJQiq6ay27lAZhqZgS52eoN51MdR69uvZx2OEtfEylbq+SpjwBygNpXa6R7Eap/P5xIDOUcxVNbkFTwUkBRyNiLjBJJApXK6ws1ZnQ/nQsi893vCjzzdPuFESiE4Rb64yce0+leJvqvg2MfcTVPKd9T+Ot57rPLV2BG0NeXdRGZaGEI9Rgl63xPogjvUyBZRPU1Rw82bkPDim3VR1MAWF0aEeav+YabybticEwyYBxlwgFqoxXSfakKW57/eo5CI1811isvRN5yjXRBaiA7xCIc/6cEOUFpRnYG0IiTvXKIDtaF6zi6IQtwWWhBzDVQqAV9mp6cQYJE89bF3DfIzzVLTG/IuTFNvvo9QifJBj1FAm85G8zuUcH62TI3ltOQ99VGn8OSp3wT6bOCQf4SSVZLVFbMb7VAGdSQrzOURYSmcoFF0hf4la+Nv5rOOt+43lc1ykBO5FyvJZoXgYc63/v4tKYT5E1fY8Srkfkshkfy7n5xep19qZDGaehhiUuRkqhnM5FuJHdyj3dYiKvN3IudukojcycQXdvecoJQCsMdluzoMJgK5DSYFWovq6RyX+KJqLx9TdZXZGJQ5QWZNm840TE3ODqqIkmUkEV/qpuQtQfrZYhkSQg5TV0EdpsynqRS6Gr07kPU6yE/jS1JOZuU0BZAJSYhQmT2lKWihW39AaABZNmaaEo+b0KlWtWGRd8/w2sehMbFKjnaGYjfNUeqz4wgAAIABJREFU3H6Jqr/4Hipy0U7EcT7alpZaTe5IH/WuCkFfAU1DaHJEXqU2kcVodREVGkZVxF4k75hT4XwZATCpTZ9aK9FoSptnokA0v0GBb0amwOQAISQniHn9LKHAzIzVOpD09JAQLO/N/1UwruHz1It8bhECW0zjKqVItPZML5diDVUPwzUhGcxomwlZ5rDslvm4JywGqLDjYcqXlD8+SaVOCwgJph2m3jNwm3oVu/FozSoojv4csSGk9E6x03w8SPnHhqLMeTAcd5mYMDevFXZclFo8WjviGm6eMao83MO8nwJO0/it1Fjdi3ki5NdDCYxNKjJxhqpodDTH41geN09x++X/DxEL8mlC0B6nsIPbBEvyNQK46yIsgk6rv4KBaitrHugWyZEQCH5ACUhNfcPIxtyNPuga9VA5CJaJg51IfENtFPKexygc6AQVSl6lXuojBrFO+PpWgTJ3ZoVYHwdzbOQ7rFM5OkP5bCeI9fsFymVZyPPP5b0fy2cxaU8g9AH16gMVjgJKMpjKzvSAdrhScthnKGanCvCbMirRUOZvG6U1Z8DcBDe4SOwEtSA015aoAqVOYH/rGP1beQ/rxKa4RdUA0N8znNRNxc9tJgaNUBrZ0BiUr9xFvbkJSqsZyuylADoXpwVGpOGKlJtirvlt3P44BTyeJBbrdSr78yIFuhlKvEkBaroBZlG6eZ+g8kxOEAsbClTr5LXEKIYJYWxFIYE4/WKFyBghwJ+mzGYtnvYi3qBcLZ9VU7rNddAPF2ATkzCPZZpgjCp0e6mX+MiQlfp8nEqQM6R6hMp5MavyRmuMtRjNUzHfhRy304QV5nE32flGcIvTKBy7KPDSUgGzFK4gv0NQGIqQ9oAgcCmQjZDsth7DnrAYRPFF79Wwva3/HTQjA/epyr9m9gk46csZIhxtXVv/vYsillyichkgNqXaUFajAKQkJrnpRyl3w41yjzJvnXwXntaPDMWHlFCkdQ2prC6KUapIiia0YV4xl6OUEDRPxPz8ZUIbnqY26m0qwesIITzeSQlXTeVbBN9hgHptIFToTdzHkLAbWYG+RrmGPTmWluITzPM5NqnqVH2UyyDdeCX/NmW6jdBvtf53E12gAOheqs7CCQrPeUAID6NhA/nZacpFvUFFvcwhMdvRAi4yZ6Ho2OIgbmxp+Yeod65Kvz7dGleJfaNU3klDAcFS8xXu13Oe5DOM5hjpkglqPmrbE4IBylTsUNWgTSc1XOQC9+GPUL6z2lYS0Cr1bkor5bgBT1ChKLPc7lMFSPWL9VPvEgOtsDlJbKINYjLNW7hBTcoQoTmeoioJL+fzGEqVOmxhlH5ikbmpT1Ih1MNU5Z8LhJWjayMNWQKSAJ3p4LL27me/PkglHE3m3wKTn2bnC0oMmS0Qi32BEDDk+Ov3HstruZDtww1KWJi0plVkOru1KM7nMbcoXMBw4hBVtVvL0gjHW4WhSqWdlfv7ORevUpvfsPBC3l/Q22jUVo6t6dom472Sc2NtEM17w81tbEc2qeCf7E3ndZJYS++iAGRTu605Mk29W6KhyHxiQ58hBMNhwhp5inAnu6mXFYkrPWrbE4JBn3CcGJxlyjIYITa3lFMzMdsa0dCXvqsTZA7GKPWmohViMmephKql1nkuQolKav7e1m8tDi0ILQqTpTymza+Qe6/Qss6AoTURaZOxNKnFMdS2gk8mdumLG8Fx3GQ/6oItUQVnHHOBOIjFd5YIV0K5XKeIDanZ2k0JiB5iQy1S4KCuyRhVeLc/52mSeoGvZKSlfL6DVFjxOPUeyIdURusI5S5JnRfsFbjVldMP3yDqZco7+JOUsHSTySuwvyoZKGqyJQAGCDJYe3Prouomms6u4FwgNrsgulrfrFgJWe/Maxlq1j3WqmrjNQo/sSvXn1Ea98kwBXzupu0JjEGNc4CYHGnIIrj6z25I8xJ0EYzl6o86gDNUPv0palPp0x+lGJcSQUytXm39aIZuUhV3NEPvUjkOlnNTgw0SC2KSqjfgtQYoZPoEsYjuUmiyVsUiIf0nKMqygsvw5lHKOjpGCSMFhanVukoKlctUMRezJx2PaeqVeUZrFtjJSrV61hSlWc04lfbcRaUtbxGl/1+i3qh0JO/jppqgUqvNV+lrfabLocBxAxutEmfoznFX6F+iXDxT47UMdRcHcvyOEfjKaeq9qWfzcy0JBYprTW6ByuIYpVgERM3hOUy9ALmXSvP/HOVyujHXCCvAbN12irhCQYq9lGrT58WBVGq7aXvCYpCoYrjN+ngOnt+J9k8TD/sZKv1VwpI4gmEo/bI5ym+XQzBH1XLUT7V82VGKLDXVuo++nZWZrRFh6Es2pXUd+qhy6NOUhaM2EwgbIYSgJB6lv1EaKxZNUGFKM0EvU76m/XJjSbDpolD4Jcr0fz/hg1vNaISKEJnv0C7iOkpp6+PUm5UckwHCVZmjXoGnn21oWOF1nRDYugcu5Ac55h12lmLTIhygXl7cHkcThyby7/Hs1wJVNMew6D3KGpujIinP5/dHiera78y+mWEqeGlil1iPYKKCrW3yb7fm4T4hACaI9dBPhejPUCBtQzFcDQ9LtNK6NZnPMPoAZSl0UxyQu5Ql+KhtT1gMprVKQGkoNp1m6QN2lmyXemvCi76bJtUCMXldlI8rM9HFKkC1SEUV5Mv7v8xGgSfZhYYmD7LTnD2c/dYUFPwzg9NryLJ0AZmzYIhuKJ/lLBUl0NIxj0PWnia6Zq0py1B5Gy5ON+mblKl5hVhwt6kF+jCPEfkfIXxhSUuGSGeyn4LHPrPpxo7XGXamhyvItWbkMxgidVx85nZpvZuEUBH5hyrMazEVrU4/HyOwgdt5roV+5EZcJqIu7yFStv8UBSQqoGWw3qOyIQ2Lj1OCzbVj3oPzOcNO8NJcm8OEUrifYyYL09wf58m6C7Az32ajdZwUfy0LMY7dRiX2hGDwIc5RUnOFekej/q3hJklLbvY2IUat5UK18EgPBSZaQ0ALQHJMG9i03JybaYlyKzSrZVm6wJYpkHGWmjAo18IUY01GKEBO6qxcDbWgqHgvBcCdo8q+tatZ6ZeK2G9SPq330AWQ+afJLo1WDU7e06pFMhydj43WeUeo0K6gnqHWh1R+AewUHo4hrf4NETjCKUqwaF5bZatDJFd9lp3VqqCsS7X6Rylm7Nn8fZwIYZ6i8jIc9y6qvJ841Cah5Ydb15favkLxU6YpQpGmvlaaGI1u3uPsrPvQn2O9TNHaxYgU8FopWoNmDIuNDFPp6GuEIJdot5u2JwTDBjHJmvkjhI8nKeZzlFVhvr6EHgEca+1tU/70IQrw0ayTkHSW2Gzev53mqq8pQm1+hGCTzEaBPBFuJ9/6A2pQhYtREPGOUxRv3izSgTzuLCGYfGYzC7sIzXcz7yPPfpOwOK5S/ugFqn7haPbJnIFXCfRfE7hDVZA2SW2I2CAuTjMuzW9QwKmh1tjJeoSwZNYpjEg2qZmd8gE6VCEVuRBGo8YI60XX5CTlXixR7oE+vZratfCuvNY4oXieJliJr7SeR+UhPd0owDKVcaqbOkgIQvNuOnktozK6D+JLKjvXqRjUm8Qalej2GEXhhyruI34hTiN1W8FndvEoFeIeJKJiMwSweZbdtT0hGMwIWySAqUXCJxqngEcXQBsAg6pGBEUXVpoqNTVF7xBmoP6yXILjVCxZJFwas5JfEAoKWVZzLVNkKy2VHgpFN/KhJSFhys2klm8Di7omgl0u1iUqVVuwdDqvdTuPeYXKkXBhmeBzMK8pCUaTWLBJAtQohXnoxnUo90AOxhKxsfvZqS03WmMiuKsAO00sVIW1IVrDmEYNZP29kNecoISxDE+FlvNqnoTWA3megOkKEZKdpXIcuvL/e5RrNk0RkRRiuoeOiWFkQXKjKQoXw6IW1mlXINO11JVy3UkMW6PqWYgZGLaEyqDspaxkKz+tUqn5ztNbcyy+WtsT4KMo7iIFZDmJ5sPfoHABN5Pn9lAvfTFqYU2ALsqUdWF18lqSPty8Cgk1jii3jD2vpzknwOckW7pLQWJfThBCSaDsAbVA1imtoitjarmJRtYdgGIDOjaLxIKYoxbHBrFZP5DnGz47TmhwowWi6EeoehZPEhWXITbvCLGo5gjh2SbbyCEg/36aMNm1Skx+kjKs6yCb1ZqaAmlt1qOI/4PsnwV6dCsshWbRlWHCYrJup3kogoPk/wo82aVd1It8BF7V2haP2cpzlqjamlDvsbTsmoLWEKMugpbQPSq9v5uqC+l6MNVd5qUYiQrDgi7m3YipjVPJgQ1VGMacITODd9P2hGDYIjbOOeqBj1Cb0Mo7D6nowghV6MMkEq0FufN3CDBpMo89SbH0uilE2jJqEqYGqWIZTtYIsenNyhTHECCSfenGdmGO5P0PEwtALEJX41nCOnpATf4C9WJZiUJOtKZiewPM5PXNtCOvof+9meNkCE3NfDiPaRc7mSKE8ywVBlVLygE5QuUUHKHKtgkGQ4VGz+U9tFzEVQR1p6gYe5sefZt6M9Rj1GvqVgihN0O4TfJTHAe1NVQOh+X6pH0fpTIPX8k5uEThRobNP0ABrwsUCe0usUbvUxmt5oh05zNLH+/NcZcyPUQpQZXDElUF/USO7UeoiMUUkatykrLuXANGjQwfb+bxj1PRLeta7qbtCVdigFiMhlpMi+7Jvw9Rm2CU8u30AdsUWLXMOqWFROTVBh1KuoopyFiUNHKIWoz67JZf0+y1boL3kO9u4ZcDeV9rJsrvlzylln9HXv8limJrToT0cH10QUxTa2XHSS/WZNQHFoB8mUL42xz743nfG+wM72pltbEBORZaMfq7h/PYcap4jSbtBWIjvvXe7ZoWApniRtYtMOSogL7Xuo9u2BM5V/JfIAS41ohu5zjlp5sQ9YDYQGtUtS2tQNeJFt0s5VpaSNgw42o+40VCiB0mlNJUzs8dwt+/C/wGASA/TwjMF7O/sxTT9wplhaxmP5+j8kWMtikQxcF6W8e/SGV2KmB20/aMxfAqxQ6zxuIiMahHKQKHvpiaU8Eh7dTNuUABcwJGpvc+pMBESUiCgvIb2vx7/fBxShCIY+iqQGliefNGG8hzxCRWKUkuUCW9WZ9bwXOQQvA13b2mvAWrDRmScqGoHd3MukLSuGeyj2eJxaovriZyXKwJcIcK0co01SLRfVFTmSOiiSygqRAzzHeWcqU6VHLXFaooruZzh9C2chwU+B+nciyeoIS8wuatm30+x/sGEZrcInCHi1QGqpwX5+UolY+iZSBpyDWj5TDU+v53KPdOLGGFerkx2T+jbxKUFKJbVIjY8TOM285qldMgexPq7e8DlAX3qG1PCAbDikq8Y4TpNAX8B8CvU9EETTBR41XC/5OEI6BjuE/zXR9ZBqPhIX3te4QgMTLxKvXGYgk95ylgTtKUiV6G8gwbqTnnqDRnsxAVBuZIQHExFF6a06L0ItGmIZvO3UVRaHV3DlPAlVZF0/ptpGE4j5eHcS37/kSO1cepWgBaawJ1T2a/DxAm/SUq41UhZtr5MzmXB7Ovbv71/PwcoeGGs+8WiDEFXq7ICuVybRNEqqt536cp7GiUihoJVrrpBEHHgL+cz3+NEkqWcnudwrkU9FBRInEwBaWp6oPE5hSEPEqR1F6j6ovK4VABGsGSw3ORCpPOUuX/HlJ7QQWge9ihXgVg3Yw2UWw3bU+4EkpmgSSJJAPEZD1GvfNRn1dXws2uhJPBpimmFtfUWqfCl9epjSmA+ZAiKfVQFsAMheqrrRQsbR57FzvNfIkpJvWstL7vIjb/JFXyTZalQFOb/+5CEiQboywboy8NZaYPUG+efpKK8nhNQbAR6rVpo9S7Lc5QpJwDxOLU6uijqhPJxtMFOsfOSI5A2xrFIBRNNzv1GFU1a57ws010E2+ySMs2FYExBPxCzuerVDi1bf7r7inI7xCWk4Q2szVH87meIqwZGaf3su93qCjFIqX1tWbnsr9mSOoSy6uQv7LZ+tzkunYNCt3OdiRCl3ebnTR9LVZBWi0HGa5iLLtpe0IwGL6zGIvMujME7VlL4nUqxq8vbIpsO1eiyetMU8Ci3xlyMn1ZLWWc341r1qLugua7UQi1n3UbjVSIQrupnaje1rm6Qro+RlosXaZlMECVF3ehyREwC1FcQLdJAanF0qEEhmQwBZGpw+3qVu08gGFq8TpHknwk4qg1V6jaDL0UIUzOyAVifp0nE8DuU7kgKoUJYkH3ElaDKfZGO/qpDFldK7XuOSrvw5Cz1ouKwjob63kfi98IKL9J4Tm6kE9QGYs3CQtnMn8Eky39Jihr1MAEMgsda+HJQjXkqtVm/U8jDQeyn4ep8K9umgl7UIJYS8PMTKi3VD1q2xOCQXPePInXiUU/RaXRvp8Cpcxht2qSg7NCkZEWqCSgTuu3IU1/DlAgpSncYxRdWUkrw8/0b7MhNeO2qMiEm76X2LDSvNuhSFHsu3l9BcggoS0l5mjKWp9AF+gUZRa/ToXNvJ9hxUEKeFunaLvPUaxJBcc8ZapbtGaEQO4N6ekCqKmuU3yLhtig0redT3kTZhtKHdfq6iEqHpkcZb6ENHetOynEnyNchxWK/m5Nhy/k9/IZzPvQnTtKJSB9nhDGavXnKfdNKrvjLiuznxASTxOC4jKVy3Ir5+JFYoPfJABGy/a9Rii6SeodFROUctskLB+thCHCqrlEWDDybGSzyncRtLyaP9asEBw9zu4xhj0hGNw0amh9+HcTfuQ2MUh/No+9T5l2UlIt3CkJR02iFt+gQE15C7oC+rENhZh3U6Ehw4UHKO2vOayrsUoBn5KSoAqDSMeGAoyMojhp41So1TqOllhTe6td+vM5BVEFSCWAye+wHJzRiYbSxlo7JtwoeCUWec9jlKUl0j/Ozvc5LFEUaMuSLVFcEc34ywRWY6r5CkV0kj/gMwjkzeUzPp7zZuJVh3L/3kPVHhBLaOfW3KaiBLoVuqXiU2dzTG5RbwyXXShJTdaj19HvV3BAlbM/QICoskbN2JSPcYsQIuJLsjrf33ruQYrRq0IRSNay1fKSXyFIq8I05L6bticEg+adWu8hAVjp8w0Tg7hMZLsZsx+hNpLhSim5AlRufF0JF5++upaKVGcH2oIqVnISvHlILfwtihhj7Um1tILGEm1aJ2of7yWgtp3XOUksIrXbU5QAdCxcWIfzWpeo+hIm7ximGqM0vMJN5qTuTi+Vgm5ilsClAnKF8K/NKZDAY/Sgn9CED6h8Bhl59whtKcKvdacQF/cw/NvWjNZvuNnqj9m0Zhka8bGK1ApViXuGCtuZdSlWZVr9KOUGjRHWwPF8nhuEUJHoNkGV8W/Xs7CC2ARhSZygcmgUKpr+Yi6uGXEiS9KZJbyWzyLZq8POAjHr7Czpr5VnTQ8VrmDzbtqeiEoI/mwRE/kY8XDGovUX9bmlQeu7yu8XJ3CxDFNmfIcCEWWS6Zv2U1rcmL1+mjFjpbG+tn0xj2Ep/57M6zxGUVudKPMS5OWbOdpHbLiblBmrqX2IMHdvZT8uUDiE8XgthXUKjDVEK46iwDTzcoZKU1bYPU1tpjVCuxsGk+Tjs7xELLgPZv/0060hMUBZE26G61ThkJns6y3qvZpGR+apcPQGYR4LAq5QL9FZz5/LrblZzbF/Lft7mlIay/lzhaq2tUIInyvArxGWx5vEBle7KygX8jvXVi9FtmuT0RxD14ZYmNaoqfHOnRWiZoC/kM9igpZztkkxayWKybI1cjFJRTy2iH1xmaoytZu2JywGCUqGAPVjF6lEH5l1EBWSLxMDAWE2nWBndAAK6HNhaHrpn8nJl9giTVY2WRvJlZGpxjZZpod6XbwFUMQq2vFmKHwAyi9X6EgLn6A2in6yxUg3CR9WQNWMv7uUhvVZ7+b4HaJqS/jcZvmZpq3gFOXXxTGe7w8UA3CUECRqte6ck3dT3BEXt/93UenbY1TlrTY7UVq3hC0BOSgMyTE1xi8B7gBVEHU97/MstbEFXDcJpWLeR2/rf6todVGVtnXXdHNPZF/+gBBaN3Ne2rjVGAUajuTzrVB1IbVOFFgL1CZuc2gUrLoFD/Lz2da9uiiQVne2XUdDi3E3bU8Ihi1Cm2huWv1Hk1KOwHOUdSBNeoYYJLMzn6ZMNv1N01Pl1GsVKCxchOMUh79NO3UTzlC+uYlPChfYWUnHMKiFSebz/BmKBquPepV6hdk6O0t23afqIoxSSVSWbbtPbPw3KUxgjHKlrlIvB9Yi0gQX2DxImcxyMHSdHlA1LkwKWyU07BiFoJ/Kvpv0BmUVvUoJXqMvmv6j1DyvZR8W8vmuEMSjK1Q17gNU1qQZg6bBT1MFXacJwfAcFUrV9dMF0O2bzef7EMVheJMAArfy2S5QLw8yX+IJgrV6grAuXgU+RpCaTDwzYQqqApfCTXfNOgu6lO0cHBm8kuVM7zasqYLRSpTlKCCrq/JNyWMwXvsJYtFcpCoVCyCNEZMj+j1JhKYE1u4Rkhsq392F6KDpiwoWaV3cphhyJqhMUBWR27yFdjhR6vB263spzAoztY2TO0AJEhOg9LMtCDNEEXqMlQt2LlOCy1Cr5BvdBcFJy9XZ/0OU1jxK1ZmYbj2LKedzFE6g5eUGu0dsngVKW2td9LfuKZagdSZbco6IcjzOTraq1pEgaC9F8TY3xrCwkRQ3genfi1Q6tpRww7pqUUOFs4Smncux7BAb3CSmQ5QvL5HqXfndeaoKs5mw7yfyK47l+LxOvQBGQF13xkSwdql7cSvXuPNoGrbrzPqdPRRBzXMES7UEodzh3bQ9IRggNNZJ4sFfo7LU+omJc1EoRRcIjTBNPMQ5apEJ+olRiL47AUcpC0INbTtAuTUWNBHcaYOUW61zRPv92yjDKFUTQhNRfMONc4II5QlOqT2kvzoOZtnJ6TDkpnA7Q6DuUne1MHTTNlvnLlJ0aoXOgRxLBY6ouxsKCqwcoaotTVEWj26RY2FClIt1mDL5TYyapDAbrbuT+bw3W88/TJVNW6beOaI2tr9q2BPUm5mmiRDmbSqXwDCk5r5ZsIZMDcduUVGBaaqs/DAhGKBwFxXZeUJYO+9XKezLtTNNrHPn5yaxnnupSE0729SQ+yr12j15Gv0U+U3Lw8ianB5JUI/a9gT4uEFRoqWySvrRzxatXaTIIweJwe2m6ioK8B2nSC/yFyYphHuUAmjMkjtKLe416gUjvRQ/QTZkO5XX8KRptOfzOBfaNDV5UKXZzYhbJTa2hBY5FDIwBQBNBnqNSIo6RkVdHhKm7VWKy2DarYV1dRGOENpMDb+dY3ORABUfo+pWTlIvZHEj6vLIXLxF8UMWiA2s76vp7wJfymc4S8T4FXazlDXn+L9K+N392V9zJ+5ThXS8LlTS1iJldfYS8/1qXuP92ed5qpaCoHQ3RVs2qjBKveBngRAwz1JrU0KdGMY6RWqCApLXCLdojVBiuk638rxDVLlAFdgKZUGJX5hKvk5R1LsJAT1F4VgnW2O724gE7BGLQZ6/GW+ae4tU9lpDDOTrxCRP5zlPEov5HDEJl6miFkYE5B24Ec1K0x87TFGbHWgl8WlKm7WptQJnhylCjhiDmkZfVL/R9PBjxMYYy59z7HwXgenl96iKz4OUdj1DaW3dJYEqU8HNJIUKl/n7CMUklAxjEpMgrxiGi76fIkrpFz9g58uB7lAL6hDllgicKZg0hbUezKlQU5qufpgqiGPZNCnEMjYVopK35JYoNMQ7zuczzhHcgTb7UKtjkVJQR/OzF6m3Ypvg9DmKhLRCAYH3KYWmlWUxmEHCzTBzUktBQSguYoTKNWMylWzZ5fx/Ja+/SRXIMRp0hOLoiCeZGfyo7asKhqZpzjRN8ztN07zUNM0LTdP8p/n54aZpfrNpmtfy91h+3jRN85NN01xtmuZzTdO856vdY5taBC7Ac5Q5o6aapcI1bvIBgvMgC+7zBDJ+ltKk/z93bxabWZ6e9/0OWVUskrWwFlax1q6tt+me6dHMSJpFlmUpsQNpFBmBBU1gyIohRDe+SOAA2W6SCweIESD2nQwBupC8RDCcOBJixXKsxZEUzWRGre6Z6X2pfWUtZC2sYrHILxfv/5fnz56li06QVPkABLfvO985/+Vdnvd5n7OdIPNa9nFqcdigJGhouO+XZbq+v+EBSVMENK0ni/4KyrmArXy4yA2PVdcxBBf/kJz1gLA8rSwo8S6KP5Byl+nCRSKIIjah4MoktUCPkM48OQbiFZJ/9K7er3PkdbxBeWnpxHo2iNER6LxB0gF1LDzfAdL2LhJ/kOg22JglG/MhKY2KvIs3WC2yGU1Payv7AuWpv0Uk864THsYPkKeLrVKGQIO5k7TRn6bW7YHuGl0rENDbUvkOyvAYge0iyt0LhDhlRe4ASV/Fqy62c+vsxlnfwyM3pK+GiXNt5HiciOER8J+MRqMXKeD2bwzD8AngPwd+dzQaPQv8bvsdiqD4bPv6JeCXP+4DBFg2URP/IVWlMIe2pHSL0up7l5SJvk0NqvmuKcILRFbdCoQkH62w3sdQS/LPXcKRF4mWlmxVokeXH5EqwC2CU5gHG4F4rnMkX9drnelep4cWq5ggHt9wUc0KMQJLpIqXrlEpgZRbqzEy5iRBScf9kEQ/4jYudmnjlvCkVd8mbb3iO9byBc6gQEaBx+tUSnCrzdtmotmw2O5zjgjzCEJ7jx+wXmfChjKI4XV8vAbD9y1t/O4D/5DI0l0E/rD974eoSobl75PAj1J06XdIqC4uIn5gZ6rY0xmi42FrvJHEBJHdmyMY2SdZ32xlRCSp6712//7NrlCotbWfKHFL4psnZLCNHB9rGEaj0eXRaPRq+/kOFbkfAn4G+LX2sl8D/nL7+WeAXx/V8VVgZhiGA3yfQ89reAkJLw2jLxEe/2cIselPSG+B3tF8+ig1IY+IhPtB8kRipcpc2Fpyc+i0IiT4AAAgAElEQVQrZAMbDYyT3FTQztKofQCWxXoRmW0kquhly2+QFOA2SQlME8RADDENs920Ntk8JBwEF9V7ZOFsa2P7FlWK83WCo9bHNXCyB3cR9uE1Qi5z0R4jOIW4j63All1NmSbbPKo0pTG7RTohpwmeoRjqA8IANCKzRGeHqSVs32/fivPZV6Jsdz/TPvdXSXv7sXZtgs7zbQw/RcRwrT7dI958irTky2K13dkxFSheIg++fUhtJsuJ4+1zLA3bHfqIMk5GoFKwNSLyVfYTLQoNmOtwI8eGMIZhGI5RkdbXgP2j0egylPEgEdYhau15XGh/+57HClWVEMixZGieZevucwQw9IbNt05Ti1d+vTjFKdJXYdjncxDM7UwrLJkdav835xfkcZF6bYKbKirpnZwoBTc0GgKTN9t9q36k8TBVsmV7X/deuvdsorybZUbPbc9C37Yru3FzG59jlMF7h0QOc+1/evQ9pEPU+9Mbmgq5YOUEGI31LFIN3Ig8yFdS0jTlJaV/Wy3aTdSs93djbhn2IGlSgtCTJwklWNakXACrBlNUFNkTrlxXH7Z7u0iBi5ZxJa5B2JdyMI4S0pj8DbkIS6QpSyq82JYUc6g5lzilUdUwWhWSfHaH9TqgB0mJ/TCFt51k/VPOVrux28jx2IZhGIZtwP8I/Mej0ej293vpd/nb6DteNAy/NAzDN4Zh+MY9EiJbLnpAkZWU0HIDGaafIV2OhpAfUgvqX1KLx9Lblwh1dSu18f1ZTUY/29qyn2P5U7BxloTG1pL3tS8NznXWy81rNAzp5BMIYmmc+lKpBsiauh78ALUp5CXcJd2ga4Serb6EaZiA3V8gaYoGWJEaQTS9vxWSCwSY1PBNURjFLkKZ3kWUm42ypAGvEj7KVdancF5zn+4ZLWl8zMmvkydvu9AEka3QCKo+ap+1k7TUz1HG8QvtWufbtVrx0LhfI5Ws5XaNNpi50c+0cRPDchMORK/yPSrdvUCilmlqAxv92KchwCgz0mrUZmo9T1DphmmM5UmB+wOEpCd93EqWlbDHPR7LMAzDsJkyCv9wNBr9T+3PV00R2nfp2BeoMfc4TEWQ647RaPQro9Hoc6PR6HN6eMGrNWqg3Xh7KA83T3Jovdqz1EZ1o8+3C/k6NZiWOjdTG+oaCS3Nt58h9GrTCasY27vX9TwGS0jTpOvOVmwRcev35rp6R0t+piYr7fVyEIyEFGuBhMQ3SClURNtuPsup5vtbyXMpLUnqjd2YshbvErB2IGCXKYrGRDUsDbVI+vY2D3IHFttnL5GnSB0jvRz2PFgBEE/xnizf0Y2hBlxMR6BTzMefBVKNmg524yMAayT1bPusY4R+L+1ZrES26jxpP79PLWxTJcHvPkIz6tOALRCd0mWiXWklTd6HoCKkorPS7vkEwTlca/J91EN9RAheNiLuZGPH41QlBioNe2s0Gv333b9+C/iF9vMvAL/Z/f2vterE54FFU47vdRjqCaSZN8lgPEdZyhMkvFuj6Ki2FX+amtyjpOHEwbYcuY8QkF4m3XJ9YxXtGrZQxseKw05qccyREFjPJvtNQwYJo80rrWiYmswTTUXfbxWA7vfx7nM0mtuoxa5ClBUPwVsn1Z4LdRwUXLEJx8VjqiJAarl1IGmbY6W+w5vtXAdIpKOQqz0ml6nNoJEQaPwikbFTEMbQXpzCUrMbfoqUQP2/OIB4j0Sze93PyrDtauf+sN2TrM0xIofnhvyAPCjH+Rwjz6LYSsL4N4ghE1tQFmA7Ndcz5ElcRsY6ws+181u98b6Mkm2Jt0tUevOmbvwk4EnMcg0IhOo0N3I8TurxJeDngW8Nw/Ba+9t/Cfy3wD8ehuEXqb37s+1/vw38JNGM+Osf9wEDtalfJZZtF3nM2xXSNOXm0COOkycU/Rk1oD/A+oeh2LzypXbud0m5b0v3ZR+Cdea59v4HVL77NulytJTVsx5lm4nkW1eH5I6bSR6vDkHPEDQd2U16JUwp9N7zpKnnIOlQ9Bout/OLzdh89SwpGZ4lTy6SkCM2cJnoDhj1GCFMU4t7D3k6t+GhTMJ7pKvxEnmWpMxHad6WKRWtMQeXBr1KGIRGWSPK46+Qx8jJ9JTTIfC32j5rtt2/DNNT5JkUc+0zBLZtbzdFm27jvYeAl5dJRWcv6edQps4KimB0P8YLbRyfb/Oxi6xpAUh7efYTYWPZouJR8kkGwsnpm9B2kG5WxYc3cnysYRiNRn/E9wY1f+K7vH4E/I2NXIR1XhFXI4cxagHruXZR1mYg3sl8V4DmFfJUZAGoCWoRfYOKPKapyb1MWfZPt88ZIxWHecoQ2EJtZcBeAVWSxB4M66wSiPAL1l0hz2K0Bde8z/C51wWw7GfVxAVvhCS+IOB2hWgsbCJVBjfjCsn5vQZ5EZC0xtD1PvFYFwmdd0RyWq+5V2Q2rfC6+nu5TMJzS8GyIveSxjLndK199nXK0Jhmmdbo0WWt2tMBUcmWwXmgO78NTjeJNsMaKamaqlidEs8wfPccF6jIc5wCGk0tBGAtXatJYc/C1nZujYUeX8Dc64f1zkQS2l1SLdOhDWSTSoyzFaDnljzu8UQwHw0fD7ffZ1kvGz5HLUKbh5TxOkzov4qIXCHpgtiF6L+aAZupmupPk018kVo8CpbcoQyCobO6DTZRSYZxA+r1t5FFKodBbzjFeuUfm6tkLi4TnQSNm0xGqzULJEpZItGDEcQYKXuK1rthbOQy/LbLU098keS2htW7KYPs/VuO05A6JpcpQyoJaLWNp+MuucheBcfHazFdcwzVclCgdiClXRH9gfKq24kndixlBPYKTOb3tM86T4ypEYPSdFZlJMh5XUcJSLmNMGz3UYbCKsQyIc65XvdRm/UNUs3p8SZTo75xzzUkHuPafkTKkDcJNmQKYeXFsZDd+bjHE9ErIffbxh69722ix7dInkqsQlAvjHKBqjVDQB6RbBFvB2qVMiT7gZ8jYZuNQJcoHGGSCj9FqndQYaNe0QXswl+kNv9N8kQpPaYlo+t8Zxuum/BuuzdBKZHnBaJsLSPxEbUZLZk5XvsIEWofCS8lB+2hDJcRmaCmfRmPqA3d61keadd2oP3tDZIqaaAukRDeaoYe87Ptvm8SQHcXAUAlINnL8jvtuo8S8Oxs+3yBS0HWM+09e4j47QIFhBrp2VBlnm/UMUX1a3yqfcY5IjCroTcyExOxQvSgXfsCiTj2E/DxFuHJuP5ssJLNqiSf0cEyaXazX0Rvb+lRTMaOYTVANAR+jmvJ839HWfBjjifCMAzUwnqHmiTpwNJgXWTSebX67xKqsiDYGLXoTlML6xKJHnaSFOQ2lRfqSayra4kl24xRi/qzpPx1leTj5pO9R9VzqWOgkXLDmkJ4H4bFUma3kycrybC8TwAxO04nSL4PoUPbMdjrLkyQBbOfPMxnkrSIi2ibEsgR8RxvUmDZCtWMtJ8YRIk5hvl6xAuUt3uBKBZLCJPiLEhs6VZjcIYqK14mtGaN/QKpBpiKiinQ/n6EKCnNd+8VzDxMsRytKBjpXSJl1RMEAzD60ktvptbdDdI3osiMJCqb7eSWTFNz3PNejPRk5ZoOCYLfIM9j3UoMtmVtu2qdswnKyB0mWNr/61WJ/y8Om0PUA9CrT1BRgsjsIrXQ3mg/P0dpIt6jjIAec41Cv+0slDlnrijY9S4BAKHwi1sENX5IPKVc++coa79AFqKvVVxGNWQNxEFC7e5ps2pJmL9KX3VzW0WQRCMfwMnW0yjCKg4wTnAPKcWTpAlK4Ra9j4ddqqogyTcQA/B/dqFqtAbW80QcY9Oo6228pglrc5EQjJwD2+5V8bJSILNwjFCL+3KlvBIxHbEAPbUpqU1dE0QBeooyQI+6c4ghbCUPmd3W7uNce7/yaYbxNlTdbOMz0a7lLZJG0T7jBsG/TIOcJ/EyK0O3CZdDDKjvtpQvM03SL6NpiVCuz40cT4RhkOr6I4RsYzfbAhVGzlGEp5eAH2+/vwH8A9KuqneXb29ZbqV9xlki7qpXFeyzKci+ghusDx2tDLjxn2vXeJkSmJlvfztKGm5kSF4jzTvPkigCgi4LpGm03HCrpG/DFEKP2ueZMwSttioir8NSpp9nVeAV0pAloegeeV6ktfjpdh0aID3lPMnP97exEwcwZJc/Yf4siWcvUe62NfoCRfz5MgE0XdASzwR3ZQeqz3CWMvQaPJF527OPEtDaPoJJKrSXRSob9DgVNcyxXmh1J+FIGLnKRFVODiqyGtq9fJE8TGeJatxS3EYK+15iaK4RnEyBFlNg50mD8k2iU2KFzchLqr78i+/LF/guxxNhGDYRPr7lLMNNAakxAvaJeC9QEYOdeZZsrAKY11vjvdE+QybcHUL20XML1swRUM905ho1kYfa17NkAx8gLdqyGwdiJCTxWK+X/XiCWmxe9w4SmtorMEGotrMk/YFwLwTJDFHXqOhplfA+DDN7zr8eT1DS8uhKdx5LZObM8kfGSQdh3yQkkCaqLwtRvoViIlY4lqny3RZqg28jG1sA0kqMFR2bjZy3Y8RzLhIA13tR18PUQyN3mJTythI8Qq0LgVUNm2XKKcKRmCJPt9bwSi7rG5j2EVAZgv+YChnxXSakPMuPUqRp/zvfvgSjZbIqCnyPmts3qLRaqcHHPZ4IwzBGXfwFAp68QLypeZXh1F2Sd82RzaWVte69hdpILtLd7b0fUpP6LeB/p2irS4Rv76IzspDf8EF7jxjD8fbZz1IG513K60y3zz1CUHS7Rs9216as13R7rWzHqe77daIy5aIWpHITXmnXdJosZsuSk+3arxP9TDeCSL805mnSQbqVYCxu7BHrQUqb1fa1a1cJyc1wlWhq2AMCwQzEaGSEfqpd+x5qw46ItsQmsonukqqAOX9fiVAL0x4Q0zcp4JZZJU8dIq3ubrJxKrVUl0JA22vQyFoiXCFRkGNkmiQ1Xf4LxOCKJ7jx14ikva/zXDbiPaDWkoC6jW6+do7M7SNSWt3I8USAj5JGblDeaETCzw+p1ELPLaIrF1zizS3CujPsN7w8ShZ4DxjdphbgWWpz9yUfUV7pwJYs3yG9CEcoT6dqjxwD27SV/4ZaWEfaNcoCNDrQAxkmbyJPhZIxKQNRhFz1ZUlH9jLY+CRSvY8yGIbmengB3glS3rSkak46Q57DuJna+NbIfY2AWO+p9xLCjgQfqwObKAKaqZ/GXGm7F0nF6DPAvyK6mBoHUxxIWdGoxRx8oDbDEpXiTbRxFwS1zGiaZTPTfYKVXKa88tE23h+Qqos41GXC91BzU6DwJkll5VU8S3CDHkTUwMjxsK3dFGInSYPXuq8dhPxmdKnGh2I/9m5s5HgiIga9piVLy38TZEE4cAJ2b5K8XK++QEpz7wF/RPJovZI17b5r8AA16Jbu/JILIOnnOLVIjhAZOUM5N4LVDZufZqjF8Ax5+KtW3AXtJM+185mrStldap93ghid2XZPphBSdQVS7X6UBONC9HU3SX6vkfH6rRI8IL0Vd1nfjyE/xJRPwpe0c4HTg4QPosDsBdKc5Gv1+oryrLT3qVcgFR6SkiyT9mdTBw2naYWRpDjObaI6JflN/MGqjsCpRnWxvWcniXZcEypB9efTWFpRsA1cEpf3KzfC1MoOXjEdSXKQjTpGngxmaVScxUhQA923/W90oz8xEcNmyvJ+mwzqGhEINX9yIX+SyFltJk9psj11jOT8en/puoqxTBDpMTdB34DjJtZQbaEiBEFFw7+5dm03CJos+HeCtALvpggwfZg9Q20Uu+MMsZ1ojWJPgvLzd1Pedbl7j23BeimrIlZuHlEL9Hp77yEqqrpFnnK0RIXRpykP+zyhR8vdUFPSkpkL8X0Ctm0jOIG59Q4iSW+p82K7LjtUrVzcJJTvVap6INOy781w49H+d5FI550lRsn5twIm7V49BMuhpq2uhTNUJKMXF+exgcrIyXsz7dvcrv98u6897TUXCLgJAXolgLnZrS4YMa4RvUu5HSNSJer7OWwUkwylw3jc44mIGGQCTrAesBJks/X0ITUY0kx3EMk3ZbHOkOcd2Ep8h5qIywSnkNE3TjH2vkqESGyPNTyXLuwGhDT1bCF6ersI21JvoBSYPIs5AgT2tWk7A2+2671MwFdLoy6g68TD+ruMRTeLHk168QK10aXrTlELypbhaWpTXyP8BNMoCTLjhIBmOmVFyYV5jzI0l7u/yzzd092n1+sCfJ9ql1eTQqewSKolgmpLlBEXlLY02EcUbu73CX5wj1oH9kE8Is+L0Ij2HYkQZN/q1TbSnm6fh6VoQcQd5EnoOyjjOk1k2QzrBUcto59nvcbIpu61iuZMk3Ky68loR+6InBSvwevayPFEGAYBNYGURVIy68NG820pqiLsmwgd1dxd42FoZ5qgRb5KpRt6r08RQpI5n4MjIOXkC2KNt2vZQWEhS6SktaO7bkNm8/9XKOLOC+TZEpPUwjhANA62E6HYHd1rrePLTbhKxFANPWXnuXD12oatsi3tMrxAFK4EDD8N/DuEB/CwfZbCJRogeQsa8huUge55DpANKqi5uV2vRv0C8MfEMZg29ucRSLYc57yYkqnqpA6EJV5D8z6tMNI5w/qW9UXSnm80KhP0JGVYbpIKAKRqZmXMTlurAQoByY61xO76VFtknGBa3qsgvGDjHYJfWZJ+i2Brcj+8dgl0GzmeCMNgH4BkJBuCbLjRQHxAlSfHiWagCLgos+jx58jAzZFOvq2kJOYGPk4WjLn/eaIjYBNQTyO+TTrozhJPd4YAQYalIs09JVv84Qvteq1QQB45d40g91dJZGSFY0R592fb54mTCNCpR7BCMTfp7smKxT4q5Vpo16RYzVfae24TfoTdgVKKNVKOyyTFiPw5Cod5nYpSTO00uHe7cVXo9hQVrk9RBpN2Lc+0zzLvn6KM18423lLM3diKqSyT5inLqObnOiI3pQ7BfN/oxD4SDaeG4Hibo7OEgHePqDBBuBTS543k9hE+zEtEZ+IcST9PkmqMvRumE0uk1VuNzlEbq9OEnGUruxW6ZTZ2PBEYgyizoKBKu7uILPwd0jbcs7/EIJaolMAceJLUw20+ukRywFnS5CIyLFHEvF4K7yrrH0V3m3jV/e1v24hHHieddhKOegR8L+nZt+w4omrxD0m9W81LqbTSwu3HUOxE0FD5MshDVkXPNTBbiBe7QkQ8/ipl1NRo6Gnd9yiw19/dSFdJaqAMnZv/OeIRxX6MCue6/91oY6hmhOpXA4XPvE/4E1dIGnaNgJ+bqY1qSdI0SKxF3oIMTDUPJomHv9fG+2WSPvreCcogXyEYyGHKWFiyHVGb27m4TRrEjBRNTTUM4lbiATtIGVMHtEz2wr1239+gKjaHqTl3T1ietEt4jkj6P5VNVCKnlsD6llfrtoqtyDK7RoX/bxNW4SnWS24LSn1ASDHmdCo6XaIm3Q00Tk24ClELrO8h8LMFdgZijIwUbBaSzSZop4ExDB4nC/wy5X1szR0RDoPo8hJpMLtHwDGVnixJishrjPaRrj/7DO5Rm9Pr64k7VkJWKLFdQcYXCBAskHifWpAKiRh2a3gtC5rrGs6P2vtuUJv/EyQt3N/m5h0q8nhA0kQp2XIcrDBohC2tmkqZVlhdOtSu1UhK7Mh7toXbqNWISKD3MolC9hFGpNUZ09Zd3XnN+Y0axEMOENKemIKszG3deyAG4hxJtefavNwmat+9MTMt1Fhu5HgiDMMECbG01MdJQ8sVarFMkg66T1GTZFNMT1leIGQlm6jW2nsmKYsrMcdwTUELAdAH5FkNblbJRAuEt+/i2kl6Kt4nD4fRK+nNLEXJptxLGa6Z9p4XqMX/Vvt5aNd5i2gSeC7lz64T+TLJWTsI2GcD1lVqYU0RgtVlSjL9IBWRuXCvtvvY3D7Xjd6DXIJmSsB9QC1Ww/xd5InRbt57lDG/SohjUtf3U4bgPHkq9P32twNUiG0nrc1q5uVWYyAOZbn9fwehmV8nWgZWLyy/7qTSA/kohvlSuQ+QcqaNaB+0MXyeVMjukydu3WvzJyDtejjcru80SYeUZhOAtGwrO9QOy2eotGuMiOoYaTi3drseJGntRo4nAmOARAry0CEdgWPUgjOctG4uQeQBtXjGKERcvQQ37BQhNf0PBGcQmxDMtLSpB7RHodei7MuYWnoJJKvkISK3CSX2OsnxLK9pDDe3azdcvEFN5mECYF4n8upDd10CixKiXFCTpMRnGVik/8N2HYuU4fhCG6dzJGX7sHvdi911Wgkx39fw2mAG4SoIVip84kI73T7rBtl0GlhRdDU2NOgaJI3Ty5TxtI/DXHoPYViuUobEqE1PCjHUIvwC3EZ7Rk1GBepZ6IQUfIEY/0ftdztoZc1KmlogWpKWyDWqVpkOkx4b8SvBckHWecppGkEeIjiaHZb3KCMvYGmZfyPHE2EY1kj6YMowTYRInKR5yjK7YJaImKuTa1OLpI5n2rkvUIvgM+1vpwg2IW9eQwPradGWv6w4WOa0dGmzkEpMe8iDWdUcEGE2PBXse0R5LTfa9nbdX2rX90F77TECjIroi7i7kDValj9t4RUYO0yEc5+lNv1lSpNAEpOSZzYYuZkeEP6HwJZciTXyZOdVyuObvo2I5JrVnNl2/cfIxttHmI2WIKUmWxY1bVim8AevTbKPcntWMq4Q4RobtowubYbrVaRkQMp6dB3JH3Hce1EYORdWg9aIApRcFMu7n6GcgPcp03YLtSYt4UL6JkyL71DObLWbF43dPdZX3mSAXid4wz02djwRqYStwHfIg1IXKUNwmzIGepA5onp0iRpsF9w2IuZxk7LcF0hH3yHi9d8i/f+HiCr1LMEI3qEWzpdZj/AroiJQ+R7lwU+RyZ2lev31DMdJhULswr9fpx7x9Sa1qWYobycR6ZPUplQBSo7+lTZOCtO6yCRLyS7c3c7zBSJIc5rgFPIYzrX7s/dDrYlbpBtQgRCb2FZIHjzT5udbbSw/QSIa07FjpLvSNE9i1WK77rfbNZ8nQN6udg+7SDR4qt3Lzfa3G+3z3yfPljTvnyBpnACm/Qs6GTfiPMExZB9Kbd5BrZ3nSeh+lTzMd4y0cp8g5ccL7fU2ZOmRt1FPuhLwtqPU69rSrudKu88jRLNjIM/bFPeyvPl2u0bLvoLSj3s8ERHDXVKLFySyf8KBtbKg6vA1wiGwpOnAqrXga9QKWG6fpeU1zFqlBv8ANbAvEFWes9RCMHSkvcfQXcHa9yigznZtvcIj0sByl+Sfll8lsSxT/IZ9RMrejs39lPESc5Df8HnSBajBsEt1T/vd5iwrGfPtWm9Rm2+2O8c2ajGr0SDzcgepeKiXcb+d721qk/954KfI4+FfINiD+bElWftZXPRnCNh5izA0LffZL2ClSK7B25QR+wxl9ATrZBUukVxdQZqBlCJlkFqO3UqqGZD0yM5Mw/GdbQxNKY4Q1uPW9horQOdIC/bXqTWjDICUaiMY+30gQKrVhBE1p3JetpIOXtm5piNzVMSpI7SVfCPHExEx6FH82cWwlfIKEPDE/HWNunG5Bzu6c+hdT5IasItimoTYu0lnoCGqHl6g7wTpiOvLYRBWnISbu5RBUoVKgMoyo+CqnkYgEQIgnSIPm5HkZA+IQOBKu3fDYlOhMWqT2kpt09YWgsbbfXiU5OjbKWM0265Fo9ij/GIkR7vrPkUZqOk2DmcoI/cs60FW8YYVom9hv4BVJlOIHo9ZbWO4SgRQnKcX2lj/CcUHmCbNY8+znkSkx5TBOEEeBiTpSg4DpN8C4piuERUk+2RkOSrCYiu268zS+EMqehLctjPYNnvTS9NfyVGWVe1BsVo1w/rys+tP2rMG1mux2raRYyhR5/9/jxeGYfTfkVB1grrpD0gj0ZukJGjVYC+1MEX0H1GT1If9NrJsJ8pKMs0GssEWKeELy0DHSOchhGJsOmCFQUD02wQJP04t3LNkQuQ2aFQkrugFJE25aFe6MXi9/fx5Um0wf50iVFr1IMeJjLxceisYa+09PVA5InL8AoAaaxvcjHzeadd/h2AX0oi3UbiFHIoeAxAote5v+ijNV1r5dqpaIHlLdqPe15zZTfwa0ZPYQ60TdTNOtvd9izLwS21MvEe5Lhqt3jDdbPO1s13PfsI4XSXCuc6deJTrQs7HFVJFuEQ4Dyfa9Rt9aRQca6NNSIoj0U/mpoJCl9rnymkRqFwmbNlmXP50NBp9jsc4noiIYTO1Id8iT6i21g8ZNEuE71DItJ61b9/VIpt73SclmzFCODpKLcY1gua+ROisZ6nJN3y/Qw2wNeRpslieJeIwF6gNc4EszIesfxSdXY+i8U7gLiItJ7hlS+84teh/mKhGWxm5Ty1+S2rW5G3agch+ycM3vVK0VKqyjE4rQzcphao1KlzfSlKrFdY/a3MrZVy3UIbVipIL+x9Rxm1vO/dhYkzFLez0nCekNincU1QIb2foCxT+coFKRW+2z7VsaA/BDuI1F9q4XOrG1Q241OZEvMH00RK2UYApx2UCOq6Q6os8E8V1FrsxvUdId4LF5v+uTT/bHpBxAjRaGdKBCNAb4e0kfUdGO71O6uMeT4RhMNzsrdwx0gFpA8k+6qEyUoDddAph+Hp5CSLb14lXGlELRS2/nnW2t32+pTvDPHn4S+SZCdvIgzzMM+faOW4Qj+6CtxlGcMhrdxEY8hnp2NsPiVYeURvDDa9a1F5qw80TeXZzTrsw7fZTccj7UYgUQqa6Q0UhshvfIZ5+F/BjhEUqQ+9BG8tvk+rBCdZ3Cu6kcIEvEqqwDUlGideJuK19GSLzY+2+32ljdI2ivps/q3PxA1Q+b7iv6tNMG1db+x+0zzpPKk2WWMdIV6T4lC3lEEDSKoRrxJTSqppCPaYKYl4S8EyndH4aAs8HSaPvsp5WL/tWMNxIx1TwUfu8c2xcj+GJMAxy3PvL5YIAACAASURBVE8SwKjnmj+iBvMiNXh7qMlT0EJrukotvFPUIL1JRQazpA9+ijz/0XZcGWkjwkBT3svy4H6ir7eJ2gBfIN79OlkIz1KL2kqJ7Lpea8FFImYi5RbSDyB4+qOEkt2Lkmg09TqCUXovW4kttRoh+T+NzXz7/jZ5eKshrzRcRUNsZJtt13ifiiDeJd2EloFd5LsoXsTzFCbwGkH1TftMpSRH2c7ebwRD+c8Cv9vGeJr0TjxLQD2rTFDVIXsP9hFMQD3IywR72UZKkpKo1kjT1AlCoLM0LjCpgfV3NSqfoYzXBZIaW4KHsH57bMNIyw1q9AWpRtyj1p2lXtMNS7RzpKS60eOJMAyiwzepzWc4J2PuQHvdDSqScEBvExKQ/HnZflrbR9TE2yRj/f8uZUmXCcuu7750YRneu8EeEpDJpia93wpVKttOLVYp0+ISRiimNW5qpcMOkuoM5FmdU4S27QKUA9H3jQjyyefQS9PGYJaEmLI3afes0TVdk3evjsTt9ppT7Tp6lSGoRWirsmmKY7hA2IY72z0uEeXpE2QBu+Es1blAVZn2PF+koie7Qj/Deq3K/e09lpTlc4gFqMuxi5CFFF1xsx8irfp6bcuJ4jM6MA2u0Z/g6z4CKMsx8bVbCSD5UfzKlKTvtbFyoiaHv0vn7/GYMQJ4m5pv5HgiypXWpO0PWCSKvbuoDf8hAVXcOA6YXneJdFJaVlMOq19wTuAYCUPlF0xQxscy6ALJBZfI495PUsCgUYJlukkqmuhzTojx6vUQpohH3UwZq91k894k5K+9BAsRexG4uksETwQMreEL5h4l0YYNTC6qd6gH6Txo9/4KFaK7yKaozXuTEKe+SUUYjpfVhv0EBJXDb2SyTOEKRwjGY41eaTVD6E0EXXd+rxAcaTsVOTxPQv0dxPisEr1Hva/sxhtUhGN3rsxXx1MDfK9dk7yJZWo9SYZTVXyi+0znW76LfRMStHrdTg2x6a+YgvcrlmCpVtxkuf3tGiGcWQIWf7pDaN6SnTZyPBERw0D48LcoK63eoFoGWlv56tbAVbjRwtuZeJ9aNDeIBqH016vUQp8ljLH7RHlIrz5059cAQG2iA6TM53XdJOCnVO2p7jMM4V34m6kF8R5lEOwUXCYPVnWzmO44YZfa/Th+ll57T6OBkeBjyc4NLy/kenv/HRKabqaAzq+3cxwiPP5D7R6/DfxbREPCOZIroCeeauc/SOktzFNG1XLvJioNuEVtGstsAsuyLtVK3NXGZ4wy0G76+6Rpyr9tpVIxWaOPqPk/2MbW6GieVMVsbNNwSvJ6mTK+qyRafK7NgXjFYnvfDtKF+SoBUS1fTrb76cVmBBB3tXOdIfR7addGUhoxe4TknohTiY8tUuv8Ehs7ngjDIE4wDfzbBPDaQg3mIWpCBG70Ji4AQasJUqIzTBO/kFRyk0QJhmlSWLXkkAEeWC9dto9aTDcpvsIVojHwiJrQC0S27QFBhcdJecywVj3K2931CqwqaCKfQWBwkQh+GOpvb/870n2WYFgfOUmaudvu5WobXwk/ywRHmaIWtK27XsM90mXY92GMd59tH4Bpk2U/m3s0tnepjfg8kYgXuFVfQ2O6SKICwUo3ifNridrUVBB6rN0rVHS6n7Rxb6dEadTTtFX6W6TB6hzBkYzwlklvi3Rq8R/BRedmjaSBzq+b3HTMaEONEfsydFKmGZY3rQZNkPLxNpJuXWtz697ayPFE8Bg+PQyjf0EGzUn4Z8BfaH9/mwL79L63qJt2471LcmjbcZfJ5rlApNbutXPeojayqLHlSBltkm9spFogOam1/k+QzjgttHnmznZtN0h4bRRwnfXMtYH1T80WPJLvb7i50p1fVqIGUsKMaYxouSQnvaiVkG3tOi638VObYnO7zy+1z/d/mymjaqei51I9ytD3o41mNoctU0ClKZacha3tvBq5A1RFQCPp5lVwduj+p+GWO2Dubb4ujiP/4Ub3uziUm+12u6+rpO/F8P1dAshqOKbadT+kUqtPUmXuNaqUKnN0J+kFUltTspwAqaXmDwlb9Q6pVkySaOQhhWVdbZ8jXiE4O9+uRe0JmbXHnzYeg4fos1TdbxKNx9n2pQSW4M7p7v+KlG4hlvYateG2EEFT87ZFatDfJ0CZZlLwbSvZQIa1ekbRdJu5IK22LtxlMpkuRKsevt/c8kb7m5jIJaJ4LGYgfiAD8D6pODwkjLceqJwhoKSdpTMkn5babcfnQ2ojGP6rGjVNulu9JtMMjZUb0c1vVCJpq6cMK3RjxOL3O+0+rCKprbmb5OCCyDJkbxAje5XaFHPUZjOKuEwwj77zU2BRJyMZ7jQRgFHFSSxB7c7eeDiGCtEcoCIuOyXFQZbIw3ytPBkdikEZyRoVLbDeqfkae1yMYOwlukYiEqXoNnI8EeCjh5ZxlhrUlyjPIasLEvZPU7n5DGVh9xCU3LqwUlnLhC0GtSEM97dRiPYhyrLepHI7CHXYRppeAGSs/V0jpdd3YzihMvTMt40a1kiJyrq2pC7Dei29hkyyyhZq0V4ji0A+g2234hWT3fls1baz7353/lmCd0y18ThNeZ9DxIvpyUTm9dhGDoa/Vl2sLrnQTAHUUHiRbPD71EZapDaZmhBnSXhtRDRNUjQNjgCzkeJ5IoG3QIx2n8fLR7lN0of32/sOUcCqadVx8nxL51LjeqKN1w8TRmQPHopPjcgTxraSyMTD8TTCk0cjJ8ZIR+DTjld1SlbIftAhrXzkMx7neGIiBheOYd0yRdo5Sj0fQkacAhrmV/u690pxdhHpRZbI04E0Ps8TT2HN3ZZVFXYhDVZ6d2vdgpnmlZahLJfZLSgY2NOo7dWQrqrK8wIh0cgFMEz2MyyRaaz0bmME3Op1LKC8/BFqo9wmT+e6TnCIPtxVw+F90gU6S/L0BdIHsovIkzleApAyHleItL6g6E7Ku622Md9PGIKyFaVA91qTjsOl9pk2TsnL2E5hP6+3919r7/08ZfReINJ8eyhjISnsLqGof0A9pexzVGl0njyrc0cbmzvkUYOH2/m/1ubtJSJFKH3ZNNCowQ3tJl8mncViXHvamM+1+xhv13GqjfElwt34NEmhH7UxvUAqQhs5nhjDMHzk957pZsPMOBU57KXSjEOsByD1WufbOVYI0DRGDegMNZGKqOwiD1PZTsAmU4ldpL49EKTfDfWQ9D9IJHGSZSa6gPWyenTvWc8wQzj2ffOXnXvLpAxlZHWPlLP0NtJ3XSD3KDBXfQONFyTMlep9iDAFxSds2NlJog+xA71Rj5tY+t1KbUyNiaGxytB9FUO+St+gtpVQtn39BLWpPiQg7vZ2/cfaZ9ylsJ+1dt9XqMcDvEStmxeJQRHUtK1aevgUYQ2K8lsGVFXKlGeqzYWY1HPkWRU3ySZ3/JcI7dsKm5HDLOtZvwKTliGNNJSzl4VrinODVNmk+7vuN3J8rGEYhmErZTyNAv/JaDT6r4ZhOA78BmVgXwV+fjQaPRyGYQL4darMfAP4udFodOZxL0g+uDmr3u0DapEdpdhzeqoeF7hPUaaPEcLKBOmc03iovCRXwA0q+HaFlJ9kmRkaPyDy5teJxJa9BoKFnktPKtJvHqyBkdcvy1DCTM8zWCI4xC7SGepiNZS2Xd3rMbWyD+UaZSjtv5AEozya7cWWC1Uscmw1jn6W6Q/ddYl3uInOE9ag1YnDJHJaIZwTy4LqRBg272F9Pu/CXyRNRdOEtDXX5uZEG7ffJyXIo5STMe2SP3GT9eQ4S41nyaMMjxDat23XnyUckllqAypeqyfXCZhqjVGGzXLzbpKOucmukPQY0pqtroQM3YeEii9wKha10N7bK0497vE4EcMy8OOj0ejuMAybgT8ahuF/Bf4m8HdGo9FvDMPw94BfBH65fb81Go1ODcPwFeBvU4rij3X0kYNdeePUJN+hJkB9RTv+bAX+FhW+rVH5oF1wPfXURWu33k7Wk03Myw+T/PguKRUeaa85QQ3+eWrx7CEt19+kopTdBOxbbtesJ4ZsYg2GdNkFQrCBGBFz2jXCt7B5yZKdiLt1/evteu4TPoccC9Wa5Bw8oEJkgTWN2DZiAO6TiMUKgRRcF78t5PZJSMLZTUV/e0kfgykAJArTYB6i5nEfqQgYsRjdbSWRmeSv86Q1ehL499rcvN7mbX/7vAeEZWsILqg5TVVldpEeGytUh9t532nX9jKRidtOaPD2YPS9FLbZX6Hm9wRpjLLaIrHNcRCD0piaDkOAS43rfiLOskbStwds7PhY8HFUx932q5jWCPhx4J+0v/8a8Jfbzz/Tfqf9/yeGYfhopvAdRx8l9CE21MZ4sf3990loJwgjk+1FouE4T7gNhs9GDIaLe6hJO06Ff1p6N499G6eo0PQV0ltxvfu7orFHyYZ0w21v55fqLBhk3qeHshx1jlowf9TuSyajGghTJO/3Prd355XFZx3fRfkZKpQ+QvoFvKZxymgZIQl2yRqUajyQR8/5uq3dOeRJ9D0Qeyg853lqo0sAc6OYiqmrYZPbXBvvrW0sLxOdiWUqpTzSzvtMu6eBPBJAYysb9QfaXBnJWFI9TRa0TVR9BLqnfdYsAVNPtnP9ddKeP6IMhixEQVHvUd6NHBTPZcla+rcRg2tFw29pWIzmIVkPA6km+Xfvz25ZU5LHPR6rKjEMw/gwDK9RRvF/o0kRjkYjy7AXqHmnfT8P0P6v7uhHz/lLwzB8YxiGb9wg4JzGQdBOQzFNBC9l3S2R5p4DpLZufv+QTJwlrXFqoW2nFvnzhLrqgCioImpsifMRtSimqId+/HMqInHyDEGPddd+lQKIJKGYjyussdy9VpBU5tz/SdILJ3qM9dRo8QzTDAEyI6V9FDvxSDv3XmoSZULq/acpb36SbFS5ANOkO0/EXQ2Gvmy6RmjGel9l9I2MLLcJcgo2ew0aIo3bQ2qOe5k+DcA+8mzMnjhmZcKSrKVCtTdm2hiM2lx5va41GYb3SdftGllTGnYZp0ZKRmI7u9ffJVUXS7F6WcN9WY1u+Pl2/0a4fSlYo+VakHF6gRiPzSRF0wBvlOD0WODjaDRaBT49DMMM8E8p5/wdL2vfv1t08B0sqtFo9CvAr1AnHtm7MNa9WCKOuMMJ4Kcpq2M+KfHlmfa7giVvUGH9rXYOy4o3ydONocCRPdRkGFEosLGfoMpWOna1z3iZlO9Ot/OeA/4Q+Hlqol+lPMsEeZ6DCweC7i+3z99HPKb9I3oZFYDOkjRqhYT01rhlcO4nC/hyu96bBFuw07BvLHujfd4PkcU+QUJdUxirHwKkM+1e5gkIZ5RmmVhWov0ujr8ov41uXstiu/ZjbX7GKWdwlloH4ksCmtKMxR+s6/eb2ShG8RrLgpZOTd0k0ElsE3+ZITJ9XrtqTJYwJ9pnmLKuUimMJVENqGCkpCfb5KUwq2Vp+ddmvp5A5vyLZR0iXaSSsKzwmXo87rGhqsRoNFoYhuEPqOrPzDAMm1pUcJjQsS9QDurCMAyC2R/Lr9ACQvIwN6q5tTTnW9QA/DChFUsakbRi+U4v5mAfJDTaP2V9aCayq4fQ8tuAYv5/k/Usw09QqLeajn9GbcyDVGilctNdgpnI8JPVZ758nvVpkiDTTdKR6PXLy7hKGHl9y7X/v0ue0iWKbmlWkZDL1CI/Tm3EnYQTIhaiqIq5q+8V3d9DDIYb16rFjfb3/USd2Zxag7FKDL5c/xGRYoeAzaYyAnKOkapMd7vXuoHuk1xbAyl1/T61Ri6T50aqarW1nXul+108ZJL0YRiFSVk2Erbl/j6pTPURsdGV5xXTkMR0jrQC+FoNtVGykbJt6kO7Fwl2Cso87vGxqcQwDLMtUmAYhkkqMn2LSvf/SnvZLwC/2X7+rfY77f+/N3oM3nXfd+9hatETZGap6OAO8H9QANBNUhKz7i04uEJtQpWRBDDfbufVU9hU4yIwWlHMxIW0QJ57aTh5jdr8r7TvH1KL4igBCWUuar29VxcQBCOAhMfTxDgq6WZ42ueoMuVuEEOzs93P/val6pQh/vU2HvOUdsUqVQtfJSg5hMwFYT1qoOR/jLPeGNwlFYN77bON1DR2vkfE3NZk14JEMdmMu8hDaQyR+1b5SWozXP/INQhoOiZ+rvwJuxXtlpXApaLVmXYuy4nm/PIfJJ7JY5GDIvtWrUr5K8oPbqG8vDwVDeHdNr5+puVY14TjJQ7Wf6ZpxHnWy9MLeD/u8TgRwwHg14ZhcG/849Fo9L8Mw/Am8BvDMPwtykn+anv9rwJ/fxiG96k98ZUNXtP/ffS5iQtkO5ULTwB/QCTlzXfVL7AWbW53kGwEF9xx8mBQkWnFQ7XkLgBxBkP0vQTfmCVh3rH2PysiJ0loKcA4R4CmNSIYskTwlVlSIdCbOh6PiAoR1IaRki3jbrU7Z8/xkJuw0j7jG5SVXwX+QxKWO07yCiZJM5n1eku3ek2xga2sjxZ2kc1+us2f4XPPEHXzCnSashgdfI104WpcHxGKtFGGqaBpqevAlEQOh1yLLUQgRoxmjXjsURuH09R8mpboufsxGCe4kuCnTM0z1IZVy8HU0XTAhj/Xx3S7nsMEpLZNvI8QB8ph9e8RR5vtzr+R42MNw2g0+iYF6n707x9S6ehH//4A+NkNXsf3v4b23bBxmcq/l6h6slqI75OHbdj081FASesmZ/5Dguo6oTva5xga+15VpgS/YP1m3tz9fR8hD20lxqKntxqWS5011DxMNB5Mn6Qm21a+Skps3o8yaS4UPVHPq3DjSefeTU2uofdd1ufbLkh7CqxCQHox9NamWHq9nqfwkBCurpJOTTsPHVMNl+Kw6hSo1bGZPDPSDS6IKYlKMFbEXkMpB0Oeh+mWEYJjN9a9zvkyVblD8AnI2rKsKyZgV+hAHkoj/+M00UnYREqQkvomCflO8NRoZ4rCWUx3TbukfPdAsPM+RTmpjRxPDPPxcQ8Hb4wyDrcpK/zbVKg6Q8JrSBlIy6zMmwIsRwnh5w+JEIt9CGpECLKdYX2t3tTAKMNc0CqGpbtJEm3Mklq7VRIIuDXR/qbxsoFoJxXuHiWCty5u6bKCfnbwadT0yEYehrEHSHRkKua5LrXzyBOQiqy37kkzNv/QrmupXeMMZQg0fi+3671LnrkpF8GUyVDfHgWJSAeJ9z5Aeio0oNsJ3iErVEdyiGBFVkSsdtylIr19xBDIETFvF/yTCWrzm4boAQEgZU3u7MbdNvr9VIQ2SRTJrYBZUndsh+6cu8ijBOYIV0FcxusRbLRCZur5VGo+buTQ09o09EPt57eJN9c7ivhOsh7BNby1BPRt4hXvkEe0jZMnB11i/cNCJgmKbi/AISoC2dbOeaJ91iK1ISwfLRJilc1AeuZxyjhIOe4XyHnydCo3jZ5KGrT8fWvyVlGso8vfuEEe9grZQA9Jn4Kv0bBYHpNRaUQ2IhvjPAmXZY2OqGjuWBsfy53jlBDMZqpNeBt5kMwMIRJJ8jlJ0pub5MEzq5SxlGrsXNN+tjFNKrGOw8jrPRLlyLg0KpFk96jN4XvECErSMoIyxXuXWjcyNu8REtkjgiuoaWpU6RwajfieQ20+eqxtU/eaCWKw3Rv7WK/1YIn0cY+nzjBALLET+wnSR6C+gtjA1u49glRjRPq7p5rOkFDdUpeb9rPtPbL4dlDeZox4/BuUR1gjz668Qll4CCp/nYCMSn1dJ+y2eRKaa8zU7ZNzYV6+hQotX2/nfpl4DqsGlgDVyFxs92pOLFHJDsutRL7d1MKwtMcqesTfCM2Q2Ae7HGjncIEa5WkUbRsW0T9EGQAJXYLAd9p46NWtQs2211wjlRQBTc/pZrK0KfBn+reXigSnCCfF8TOVtDR5iPVt8Bpusa0b7X7M7e9ShlJjcJp4e42x0ZI4ju3fUvDHiejP1m7e5OfYXCggO054GQLCH7Kx47EITk/a4ea2Hr+XWoACcOb6eqvD1OBcozaR2o2i+7IITQc8p+QhS0eGiWroyZvYT7EKTxH8YEQeNDJDcQQsZ8qtGFGb1BKqYi93yALqEX9BNL3xw+48tuDKcntE+iA0PvdI5UKRGje6ubgNWz3KLp3b5qiH3bkkFvXVpFvt+0PSjHaSynPFZLZRm/TzxEjaoyK4d6t9KT+nIK15u52nNmJNkaeO7yXlPb2lqc9i9xnj7douUMbBiNQuVTkOjo9di4K/OpSj7W82ZBlJWqdX3/I20fLQK4vTiINYfjVCuE8B5QK6grGmKdPkae+SoDTklu3PsLHjqTQMEKDIstQhQiZZJfn3FeB3iHDpC6Rj8gQ16YZdekRbcR8QwEs2mh7A3M38boUKM/Ugajhq0Y0ALpGHjeqNlFn7gOAZ9jmcoxaVfQ22R8unN890kRsd9L0XkO5NeR+Ks/haDYyEqUNEpEUCmLmrYibWzk0pjGDmyLM63iM9Ip9tc3GVos/ea+f7Upuf7VT+fa693vDZNnhxB4VQbdM29DftMy0witlEeASWatWh2NHG45V2jxcJCxECDsv5kA1rm/hKO/eINIvp5QVbLV3eo9aOjXKuDbGFj2qHGO0sU2V5m//EsR51n32bPLF8hpRIpX1vlOD01BmGnlZp1GCo+yI1uH9MkZcWiGbAy6wvAxm+6X0vU5HFNtJcdYBazD377wHxRoeoKEHuw07CprPEuIlwBwydteguHEgXqJvzOWqRmdbIKzhHTf6R7lxWOxwfqcerpKTmhrHPQVqym91W7O1EHv8E2Ux6Jtt3zb8t5fbezOjBcPgaKe/eb3MjRrKJ2oyfIqmUefdtquIkX+AyxSZ9nzJqrxEv7Dxvbee4T82/m9LUQi/dV1nWKIdhFaHvaIR4XtF+WZUQroBlVw3JJgpruE6tT8dHZuuIzL0ORK1GPT/EUFiOtWTsnHofAuwzJHWFzPVeNnY8dRjDqPuChNQO6Ccpw7BAasJWA1z85qhLREruFCHGiDUYLrv4xQ4ukUedf4JgBpbhLBfS3q9ykDliHy6q/mTKYiltD0HCPedNyngp/CmSvaOd6yrlHaRSC0j1tfKtBF/Y+ZHP1ZPaSGb6YUQhRmPeargss1EvK6FmjWA2D9p9GPLupHgJVh3Ml6U07yPp4BtEpEXClOxMN7ZgK6REax4+0X63gmGj1BXCSt1JRQ1XiKqWzFedj0bANQTBCSCPo3e8DpBmPpm0RltGeoLOGn/HcImAlhpjq0Lqdhi1SX0W3PY6rZidbNexkeOpMwweH23MsEqwQi2qA1TeZ1OP+bzaAzL4llmvv2fI/By1+AWRVCJyQmShucGXqYjFmvYYtZEN+w1bDfk0ZEYjWyijM0424yuE1WhZTc9ng5Hh7SuUoTpFoozX27WdIlWYi2TTXSNtuoJ8LgiZiTZsGRoLlIq/jJMQVtWq8+3e5ol2wGvtOg6RDbCVhPmqP18n1YlxqpIhP+IdgrQ/otKOP26v+UkCFGuEIBUTo8QtBMtQu0Ba9AxpKhNrsPKjuI54gGVB50eDeYxKFd9nfQRxs93rMwQHERw3bJewJA5zh1StfH0vhisPRMNq5GG0YaPeEdJq/rjHU5dKwPqIAWKhte6HSG53mQiGuHhFpvdSxmMzKY99FvhL1CY9TJ41cbB9uThshLpK0OxDxKNIajKFkLjykEKI+z4E0WcPOQ8KecicmyNAnyGvOeYWypjZluwmuEk4D3tI2iW1Vu9iKdOf9bprbQwFuwQ8pfUKMD4ghvci6fLb3e7Dxp4VKh3Sg411c7CH9V5wP+k7WKGIWLfaPf0eUW4+TXWiXiGPuteIC9BBGspOU2I/9kPYACbT0rUkJdmxdu7lCBxifdR2v43FNspAyGux7HqyzaFrwvRC3OQiZdz9v2CtqcMaUbo25bNp6247zwxhb0pmcyw2cjy1EYPhI6SpRiv3PDXAX6e8uKo35mSQVOM6ZcUNu+T/WwFw4U1ShkFWpCG/kzLZXneHYAWP2vkll6gE5cayxm5O6iTfIj0Ohv/T3evFFUSeH5Emoa0kDfoMeTq05TaVqe6QMF8iz+ZuPB8Sco0t6ZKlvN7z7efrxDutdl9r3ddqGz/HzfmzpGoKt40imvUEI2nQ54AvU1oVP9jm7Wq776+3e/sUqSBtJobFFnWFc8a7MZslvBPXSs8sdU0I1kpp1oiq4eg9WA6ebZ+1BfgpasM+Q3AbuSHXqaqIRCyvcRORABAHslfjKqnsrJDuXfkde0kK6Xhs5HgqIwZYf+GmE26Ye9QEbCWNRy7wTdTgqhL8EklDjpNSmmSTSaJlsEgWBSQnljX4AaHY3qYWspGNtNt7FID2TULr1bCpsTBJLSIXjvTkE4TW6+a3w89wXGTcKooCKdOEIfgBWVBuGkNR24WtmIh+9/yJLZThvU6qEWOE66+E/SZisJ0XgTQNoTm6DW7XyaMArhL+xbU2Xxq2RcpwPk8eAHOZNA9ZVTKV8HkhbmBVluyWdPML7mnMpklHqmmeRmKx3YfG3ciu77NR0PcaqSgcIFGrxxxl1A63c58lKccMSfPOEuVpm8N0dn1pe4JoOVi92cjxVBoG+x/ovvvzFBVSrgB/jvADpghhx0Uu+Na3wbo5DbW3Eyq13HXR/VlqcR4lTzzq9QsNMwXTLlCL7HlKefgmCfnN1cUXthBvbnPXRYJc323XL813G0Hm7fOwuqC4rErZnvN+N36Put9F2DVqfteYuImkDm8nojm2FW/qxlohErEWjZobcWj3d5o0HolN6JWX2v/foebTrlkjKIHIi5TEn5/tBvJzZD7aiGcUKXjct1ArryceJSfgXHuNClmWnMWu3ISC1+ptWH4WL7B9fhepqCx2Y2mTWW+UFH+R5Uq7H5u2JgkIvUIZy9e71z7u8dSmEh56Ww8bej6gACBR+D1EDRpqggwzLfn8S4IHWHp0ckXZtxKBVdFxpd5miGqvYeBVsjBWKe+9h0LkXyKNP6LJGpjbSTHDYAAAIABJREFUhK0JSV+ke+utpPmqTahStXV6SEPWfDuHXHt7MnYTtaIbJASFyK256EwdTAUMx6dIV+KPd+O6SnlICUofEJXoRfLcxf0U9qLoyQkCAPr1LtUWfo0wEHdSOp/fbuP/beAvts8zxRObsSdD4dq3SNgPwRyWKAN0vF371nauG5Sx0ChMs14cR8yA9rvt9/I4jEAFoftoUkd0l4oKzlDrQ0VsVb1MzSbafUxRa0zg9G3K+Rxr1/pPiZLZRo6n3jDAeuOggo0U3/vUANtddosCgZ6jrKwbFsqT7SeTPEckwAWeJinPb7fk+6znCAgWKRrjhIqA26V3jCDSch6sdjjxO0jXn/e5QvoU3iPPoTAsdixutPt308naExMRsBXlF/cwGrEmbjjdi4BcJJLzO0l0QBsXy6xWe0TnZZNKTrO6sUotfmnShr9u4q2UITXlscJgVCDg/LV2L1+lIgKl3jVizukyqXQcbmMoV0JW5QplOCwX2pHq+NknY7nUtEAAfDN5nqiiOH0vyhXiXMRmrNCoJraTqF9JLHMMVtr47SGUaElwz5E05jyFx2xUPv6pTCW+26H1FWxx065R0YGhsfmh4boCIlJrbxKdRUO7GQrElGl4uJ1nH3lKk15hlbL450kdf4zapAq5CnS6ISX0mM5o5GRMyoSzB0TgShLNXfJAHnPaY2QBQyZ6R7uOa5SIhpWGawQnkA4t4GX59QF5WtU8aVQTNDvert8Q2yqQ+bUEpv1tjhRqlXJ+sr33cjvnB20c/4hs3IfdezS6kOcx7KYMlwpbkpykU3+jO88mYniUfX+G2mwvtLH7gHQ/uq70/JLjNMx9tUjm57PE2G5u9y7u4vdeREWgcUSlA77uIXl2ad9ubtqy1q5Vgtl9am18glqfvudxj6cmYugZad/r0KOtEJWnF4kk1wNq4djxKPXVlmqffeBrL1ITOU+Q/9e769CaS5BxAo8Rz2Jur0dVMvwqFfb9+6QLcooAjb1wh7mrkQvE+6gPILiqd5Oa7bk0PkYjYiUK1GgY7XPogUNLqQKIQ3vdAYLI+2WpcCfRgvRZEvcpstIr7TPfIH0rs+0+bYRbpSKOSQJyvkA94GQvNa9KuNnDMU6k3CWdHSYRoQbQz3NOJwiZSdDwEVXVebX9X9FX+zf2dWMkSCsTdyCpqwblHnnYUd+LYoQn+Gpa8gyJXBfbeU6SZ7FOEUB1kjznYl97rWP2U6QStJHjqYkYPs4oeKxRg2J3n6Ql9Rfs1BM02kI62uwC1EtupkJcOwZlC5onWtu2w+8s6XXY2X5WqPMKaX++TFKL94h3nWc9twCy4QWppE5b6jPMtGNRBSoViyQhuXgF68bI8xrlLNwnHsxrMiR10wh8KR+31P5+nRggN/Y4AdbUR7hARQFXyeY+SBlhFZYUzJ1u43aMgMI/2sb+DLVpr7VzXW3nEb33vY6l2hgqab/dxnec9UbQiomt62PdewVVFU+RH9CPv7wHCIalYe+JYn3jlJHZZhJZCQI/IKnFFVItU7HJubIkbZo4342/n7+R46kxDB93yNyTTajs2jlSDttKWX4pz1pwNRq0+H3Pv0yzW9Qi7DkHVkGgFutLVMnpGklF7AVwUzmJ5vvnuut3YaptME55ZYVPDGVXqInfTVDoByTkF5dw8dq16SI0rJUgZd7b58dGHBJpHFdfO0ZtxJ5555iMk9Bf47mD9Caou7lIbXDH+n1SPp3nO58pKhfhGSpqWKSITYttnPaT52G+175rWKWRm85A+jK8V9OixXZNSqOZtoh5aJD16ONtDm6RDS7mM3R/G7FeiEXcx4a2BUItt+HN+TbdUFm5748w9d1CumBPUkxTIy/lBx73eGpSicc5jCr2U4P1bQrFVuHI3gEBu7ukY1EvNUktWrUkJylP9gZpWrrUPucgMTpnqAWzn1q4liwBfqxdi4i7Hsre/b6ZSeUfvbWeaoYoCE2TUHiCWpS7iUGQxqunl4Z9iIBeNnAJIs4SmXWNgHjHUjv/TaKY5SJfocL1FQIYiqNcaucQdJykNtbFNkZHKUHfM8CPUNGEwiNSgg+085ykIoQ1ImAjWCxz0grOOJWufJ1QjHuhlKV2zXuI8XZj/Vm7x5fbXLxMuBxr7T1vtnudICSrKyQCOESiL73/FCldi73IUrUVXmfiE7uMGPyfUapRnkbX/oyXSEfx50jEtJeKUjdy/BsVMbgpJA3dpULGA4TQNEWhzUvUwpoj4bG0VidI4Qy9o1WEXeTBLHIGBN92UIturv19moid6DV6z294aQgvD8MFYnONpVZTEckvcgmMKCClTDe+lQ69pXjNMZL+2Geg0ZLyLQ/BzbOJYCJuuLdIG/hyu3+5BebORh8HKYxlD6E5v0RtxqPkgUKSoZZYX12SCTjWznGijY8cFe9ZTccrbbycqy3UvM+Sxii9tOPykMKS7hL+SG+wnBs3Zp+KiSv0VGRTO/tLrD5cIq3b0upnqbVkVUg+gnMgTmRkJpnO6Pdm+/t8uxYJU5ZRH/f4Ny5iMMfqu/HepBbyAeLhzxHB2BPU4Bl2Pk9SCNupBackyYgj7KAWwqn2f/v+txOPNE/wjpuUAZHYpN6khkIevAvrAeufNmVoKOPS5h9p3HpFBVTMd/vqgqXHE93fxVkEwmZJ3irGMUZSMXseXmzXf63dv7X+T1OL2ijLcqUU5n2ktr/cPk9cZob1snw2eg2kkjMinA/5HDbIiRvMtPm5RRkdjdk1ghnZY2CpVir6RarseaRdt5UJORhLbXxMQWU7PmhjJaa0lfTuqMBlmme59hBJ0zQODwg1XK1LDZAKUJfbPNxr77lKrb9PtXuzLCqVeiPHE2UY9Po2SQ3f/+XrDnPrcVLCkz4LSSOkPG9tr79IeTxZf2tk46maJLlGFWDDbMO7aeAfkSYrEX71CQSCdrevS+3c1pi/3t6rUo9MQLkNvVdRIm2c2kgj0nxkA5dqxpKPLI86tlsIIGgU03t1r9kc2XRCQZpnSJuzfQ+Ks0y3a3yn3esuaqOpSbCHEIt+tp3zTWrzicVsaZ+hTPpvUptHZuhdKsQ3fdEjS7SSsLWdMgjOkzn5GjGGPV9khjLwbxGlZq/J9MX3Gxk4F4Ktgtvn2ngfaWO5i6Rpi4TcZVVH+r5CLyNSgThAOoE3E37DBLUubSX/kHBKbEYTpDzNxo4nyjD86x59r8QKqVM/075cTDdJQ9IBQv7ZQU2s2IGSarZTr1JhrIAPlMe7QeS6P0f6Muxm/IDa6LLf9OhafpHwy5RhmGjXPtO97gahc09Rm9n8z7D4TbIgd7b70qh4D15nLz13haQGAo4yJnsDvUJk3gUaFWCZIe3WpiIuyqukpCs1ezcV3vr6M1RKc58Izd4jasjvkwjnOZIOiKesUhtvMxHxNSo62K7xHSqC2U3wj2nKMM8RPovXMEOthTXi9e8SEV2Nq/ert5fkJEBtmXR797OYjzwLsQ2ZpUYUAsQ9aDp0r9NBmNrcan97gShuQTpE+76MxzmeesMw+siX+a85lV5TAOw6YTuq/GN4LkPS+rlNSQqPGrZJPlkiJcAxUrWYaeeRTCShZ0SYfjspUZme0KJHhvUho6xKa9ECkoqa2M/Rl7lcfFYNrLisdtcixfp+9z8xhonuHKLvuyljt4faVIbfisqskSaufe2abQazAvKIMpZ3KUBXaTSjg0ViqDReh9t47Sfhu9oN/7x9/idIeXhEuB3St88QJWajFzEbDWpf+bF1WsajYjQLRIR4U/dlpCYAKSPScV4izxftezEsOWq05wiuJXC4k3IejptENteT0Y/gtkQ4r3uRxy/3ezxRhqEnMX2/NML/rXW/S3v1iUICaOIB1oh3EQXnBdL3bgecZaZ5aiFYl+8759zcLsL7JFqQDn2SbCg3J5QX3dvOc5Qqq90jqlBz7bP1JrZsy7mwJ8GIYkSFq5DnE1qtGKcWlKxMF6RlSZmMMuhMDzQOht5TxDhCGQVFZV4l/AXZjJKBxCrOUY1NY1T+q6DNebLx5Cmoe7hCdaCanu0iWNH9NnZbgZ8gAOWzbR7EJ84QAPA2pTNp/8mWdh1qg/r9PDXvR6hos9fMkM+gEDCk01GtDY2NJKdV1m9KCWSuYQFF9SpOE+GbbSTtFcgVg7FkOksiQtWhVA8Tx+iJcY97PFGG4V/3MFqAlKdkhJmbC8pNEjbhHrLBLBn2HXgDlds+JP3tlo7EAfS+isLa1OTnWpf3891QpgT7qUn4JnlupOVBuQ56Jz3aVpLueO8X2nvMY402LHmZQ2tUrL58nTIcxwm4akVAwMvwVdKXff/7qCeAvU3atfVwGpndlJEUr7CxbQ8VCZxt4/4WeQKX+brkIrthbXAzLLfeb74uU1T2qqmZObogpUxP14jYgPdpK/ZY9x7TGTEmqdGmXBpRORLbSOXICE+6ui3R8iPc0KYZRjNyTxTeUSAGwicxarxFAGIZrX0aslHD8FSVK79XOGQIbchsk42eWtrrA8qLnKV4BU6OysuG8gqGHCTe03DYhatuQo9r3GqvPUDKWPdJa7RAkGmMVO2jlPfaR54lIQi60n2WQq4Ci1CLY5K0Jes9/GwNlud08bh5VqioRZ2Ch93/vXfvcRNJj6zAfItgB2oiiL1oHOzd2Nu+3yTqVs+2zz5HpRZfJUrH06RVXBmzfYQDsol0Fgo8m2KZwtj7sJ0yUM8QY2wlaZWUPGnzp+G2g1TW7Gw7z25qfdjDYkop+UuDIwHOSGUg9Hg38TRRqdKYW+1wjfZaEn3EbDXK9EuD7vpzXNRseNzjqTIM3+/Q48smM3XQk+hZJR2pefgvqIHe197zQ9SzDjZRi/UsqcXbzWdjlnVkPcOD9npz0J4fL5bhxpNzbxp0hVoE5vXmoJCFIcDoptb7iVy/RiHT8jAs8X2TMoR3CMAorvCgXYelrwXKq1vG69l3It966jtEWHeK8vjL5AnaYyRtOkT1Hpxsr3mP2kT7yVOozpI07QahOB8hm0rMAOJVF9vvd9oY/CYpES+08x4kmIub+APicd08YkLSvo1OBJ7PUvP9EtnERgJ7idGQpTkQ0Zv3CK7Vh/tW0HR8dpfuoAypzE/TlTsEvDS9/TRVfrZU2zfk7aQM4kaOpyqV+F64g/iC4igCbCtUiG1JTAUlw1Pl5N8hOatpxjOkp8KOy1UChJkb2yA1TRkaQ0lbrq0OWIW4RS08Qcdezn2WqO5YUttGgLh7lAG4T0BK83sJNzZvzRLvepE8vFd6s4vwOLWZbpJHwq8RQlAfRg/t/i8QXsIlAqCNqAX6PmVozrXXvEwZvl3tfk6RRq+L7X2fJO3D1t4XqMW+pV2nVHO1KzXYU+33N6nNc4oyREZP6leYDlld0RDvJeCdqZsR5lp3HiNHwUo3sxWJI6yvOPV9E3IwpEMfbXOmqlbPGTEqEAPaQxybRllQ3FTY63VeLbfqQDZS+oenzDB83LFKhZbXyMNrn6MG6RnK2uspROPvU4v43fba3aQd91kCFs219/0Bsch7CBq9jdpYMi/nSN1di6+x6Dnu7xBC0CZCnnFxbqYW3tV2zrdJhUUm4jKhYquidKCdZ5wyEAp79It8hiJzWdqj/f3bxPBIwBoRoLLXbpBEc50I5x5r12/L8+vdNWymNsVp4H9u12yufKxdo9jQJNVyvYt4Qz3+BZJKTFERggIvV8mDggYqCrxEzbOchfl2vVva/6yqQMJvy4OG5qpnXSXRqE17zvkStW58FEHf/+IGFV/ZTvgQPY3dyomb/j5p//eeNdimbK4vIxUNr9HnU90r0ddqRx/5zkd+7g8BKcM2u9GmKDXgNTIwu8mTpgwXB0od+p9RC+6Hqcm1umFl4DnyMNYd5EG3gnrnCbttG7U5b7Tre43a1F+kPKoKTYfb+Q9RHu84iUY2kTZpQ04n/XY3PqvE+Nmg5ULcRlB/vZvlvnepxXyCpC3qMUi7tux4geAszwL/gGgo6PHkXbhh5trfPiCSZvaKPENwnk1trOQY7GvXsgx8gTKe36LIYB+2+ztDxHJ2t2uRXajn39rmyJRnvptXiNiKzM41onXRA7u9XsJM9/pJItUvOCpbdTvRAdlFrQ2rOrMEH1AF6iG1HhYpByardujOL4XbVFm8ajuJNuwZ6bGp3SQletzjiTEMPdtx1P0N1huG71ePdSM9w/qegp2Uh1JX8BBldd3kk9TC/gFqAq+TMqPUUnv/bWVeIQ89uU283gyFsG+nFuUyeX7li4SXIMItPiGjzhxakg7k2QDiET7P0arKdLteNSwlyLiALTdeI/JjewjhR/LXHlJZedCu5TDrhXTvtHs7TtSMJylv/z7xwp7rFtm4Khub9v0gkZYXNP42ZWzOkZbh5ykD/9vEaJxs5/9GG/8J0ttyh+Acy1S6Yhv6wzaWSvNLoRZzsSzsGN0loKBNYvI8JkhJ28qCkctCN6dWrXQwRnNXCLHN9nw7OG9TxvgU4UBIelIaXsWu3qgN3XdJZVbGNnI8MYYB1rMBzbNhvTLO6COv78lNhmKzlDe8RxkBwZ9T1CLxmQ6ef54aQBe7VYcLlBf/EWqzqxtgXrufVDNEt29Q7DPpsDYaKZO2wHrqsWnD6+RZBXbcWX40rFZn4l+1/82TfgD7Pg636xJbUTHZzb6l/e9Be+9tCpy8TB7aIvXaHNZyoWHqPQqgvdXu9RJlIF6mPPtVshFnqdThHulGNaIa2mutdqic9Ba1eSBt2pLPXiCG6AKJMKykrBD2os1YAotz7T0nCQVdboK4k2Q1N7WHpDdpzI6lwjqWLC2XG1HsIEpM9kwou/dJQrbbRM3pGFWZkf1qZGEkYyVsqo2/xsl0wXVty/5GqxEej20YhmEYpwz0xdFo9OVhGI4Dv9Hu51Xg50ej0cNhGCaAX6ei8xvAz41GozMfe36SU9H9/FFmoxP20ddBPPC71CB+gVqwd8lCkw5rN9wEaTq5ToWnWwjT8BnyNCpZjZepCf2QWmCGqiLAV9r5nyXKwxodW56Njmzokeu/iVrAcg22ED7DEpXuyJMXbDpBQEPDftMr0el+YdGu0dcfJ+KkbiSBLwFLUxjH2/u18/NYu/YXiVLWn5GH/Rxt13KRYDRH2meI/Zxq1/NOG2PxB0P0zxM9RrUSRejFPXQizrPcBsu8C+0aPkkeB3CD9eI7alUajd0hG0XHJdfCKMTSMu31fXSxRq0/caMZav2coNarmIZgtyXO/cQQ9IzKaQJ+3iI6me4NnajjYjl7I8dGIob/iDLmciz+NvB3RqPRbwzD8PeAXwR+uX2/NRqNTg3D8JX2up/7fic2VTAPkr/v5hSs6wdHRps1dSMGW5xvE0msXpBzL+sfpOIkbyHVhQukXGQo50LYQqUc14h+w11SvrxG1eMtWRpF7CbRwy3WI9vLVGTy18ij1d3U29uYrFFG5giJQMxBjVpuEsacqchR4jkPdK8RnZd3Mdc+R2Np5KKmg3Vtvag8kRvtWqzO6BU3Az9NqNPvt/t+jhDDVqgS5gLVSfhVavO7yS6R1O814D8g9flrhA/gMyicQyOb05RRN5Wx7+FbROdRTEbDZ8S43MZEuTU7X23SUnjH3hBfK/PS85jSGfoLFm+mcJI+GpZodYKUgHeynhex1n3NtHFVX2R7G+OeETxBQOiNHMNo9PEs6mEYDgO/Bvw3wN+k5nwemBuNRo+GYfgC8F+PRqO/NAzD77Sf/2QYhk2Uc5odfZ8P+vQwjH6btKwKoEhukSEmrVjvaMOJMu9ax7dIW+84NbH3qEWqiOciCcUMHS3XzVN57W1q8k60z71PLL+1Zg2SObJqQUvtMwXIxojn2UomShLKM5T3UKBFBp7Vhy2UF31I2HKGr46Fz6x42J3bkqfg4AQFBr5KLaSfaO9XJ/EM4VksUmFfX24VlLvY7vFNknLsojbsZtY3qG2jNtUOIgw7Ti3qWSpig8IXPkcZiYdUpUZ9hivt2j5FOmnvU0/O3kulGFMkQrCl+TbpkNWQv0a0Ee+RqPAAYT8ukbUiixTWP/3pUvtsuQUaaYleE6TioUGBRMd+mQbp2IyQIKQ4DYfR6X6CN3k9m7vz+zf5LI3Q9aej0ehzPMbxuBHD3wX+U+LA9gALo9HIFOYCZdhp388DNKOx2F5/ne4YhuGXgF/yDWoN9OjpVaLNqDKvghVeuMZkGwHZ7J9Xjclc0HBxgVoIYgZWMG5T6cGzpNPNZhzZjGIEUqTvtptVj9FNe5+qQNwnykRGES5QKwVHqIVxllqwlqa09kZQpinmwy5SPeFcN8iWxjYTAyWw6Yadb+edbfetCIpcDkulltJMI4ymlqmNqoG9Sm2yW4T9KPiqLsIJotsw08bvQyJFtkalgF+jFs1lQhP+c+ShPpNEy3ORqvicau/ZR0BNjaPdspcog+PmNVWa6F5jGN5HD2I8bjjJahKvdlOGaw/hYejQ5CGYGvfMRqMAr1FcaCshu/WUbdMGo0//J/iqU3CPGI1o2B73+FjDMAzDl4Fro9HoT4dh+DH//F1e+tEiwnf7X/4wGv0K8CsAnxqGUR9KGS7KAbDM5oM+DAP1qmvEQIhIL1EbZQfZLBOEhXiNWHLauc4R2q16hTcI63GGaO4ZYUxQhuElIhRimUhyyrMUwLe3G4w75EG1phVb2nvMn2U67icCpBeJrJv8AzdQ3wBm6rW/feYYqWkvU5vjXfLAHHNlWYC9WpOL3NLeBcpTy/HY165V8RmxHsVtvkkk3qz16y1n2jmutPOuUg+M2UYcgmnUJNF+VKHpJIVvXKNAWcHDg909PyBt799o5x+1v69QG3qOaCuaNkl46zedxt/14Lp8joT9N9p4Kkjsxuwp6T0Rqm/J1hAoSGNEoeEyOjUFuUWeyalRuE2wJEjPzkaOx4kYvgT8u8Mw/CSR8v+7wMwwDJta1HCYyBlcoJzghZZKuJe+59GXWBSdeERNpkCXockjImflJBkd2H8gIqyheED48a8Syur5djPm18cID1/QSTWhVwnFV9adVN7Pt5ufozboHiLWcoX0NhhhmGO6CS+wXjjU+rSbzcV3gYCEi905jxGk/Dzx7LaNz5AQ/zK1mYywBDAd3+cp7+vvdgwaKhrqHmpfi1SUcKH9f54IyNJ+/jKhY98kClXqEOgx71FPGj9H+lokbf1gu44/bZ97gMi4G8L/xXb+gXIGF6mFuIfCGzZT+NDrVHRxuM3Ba1S0doz1ugriUCPyiADxGTtYBVKtjpwm0ZmgsUa1j0g0Pv4s5qOS1n5qDr/a7lc2q6XNeWoeb5HKjpWSR+SZJL2T3cjxsb0So9HovxiNRodHo9Ex4CvA741Go78K/D7wV9rLfoGiqAP8Vvud9v/f+374AiQnEkU1RzWcmyAtqEqmGWq7CTQma9SE24MvU07s4sX2+3vtPaepBSTZSV0AQcoJKs/+WQooE5z8GqVQ/Br1rINzlGdcaOdeIZMjkaVvhrKvXv7AORKy2zJ9i2xavfgKYVrOEmEY808xE6nALsbtJG9eIGi/QKHh9E6SZhlhGAL2VGp1E90s4i29LN0Yed6DT6x6lpBzjMSUertFQv0vEpk+WZ+uAY2G0aO9HIbu2ynjf4SQ245Sacx0u/9zJLU8Th7tZlcrJKUY774gnZcaYxvKxgmjVkBTXKavany3kLpv1tpHgN8D3T3Ih7Ax7l4b30uElSkQbz8MrC/9P+7x/4TH8J8BvzEMw9+iKlO/2v7+q8DfH4bhfWruvvJxJzLs1bLKTzfkVNsP0kXpAPhey2x7qJx1N9HkdxDvk5Lcp6iNc56o7Poepbl2Ed2AaWphfY4yDFcpkPP59nWZlCCvUJN1mKD03o90Vzevi3qN6BPYgy+abSTheEy3z+x58VDGzHtxXLeQfFuBkhEpPTp+PQFGspZRhXiCqYSsPiMjw3wboLxPiPcyp75MNpEpouDpyxQg+SZljEeEDn2m3fM4lQI908bZqoleHMIENK003RSM20MBnZZhj7X3KoZiuC6wLfPQEN5IdYFsZHtGJqno4yE1/3JmHvLdDYKHJVZfq8f+aHenoPdBwjW5STmHfSSC6St8Gs2NHBsyDKPR6A+odgFGo9GHFA39o695QDnYxz8v68VBrDroWbSAH6VEe7Or3e93qIE4TS3s60QDUPBtivAJLEf2YfUWKopQ5MQORt/zCjUZp6iau4i/6cBnSL7+NkkhzLNNVdzQjwiAJ3q+QKoXSpbJwZeNuNDu7TxlgDSMGlarNi4WeQeW5tSTdFxXiBdcJp2h5rnScR+S9Gs/ZRgUezlNhbjyDVZIVLCZ2vhWFXwuxjy10U+0a/kdAvK+SkUP3yAPtZEgc4jakNb2x9pYvE6EWEbkGRUyHqUJv0EZhVfa6xS5NcLcRMDFcYJBaNBNEY3oLJ9qRCQiKUJrNAff6cFdd6ZWGm33g1GKqcTS/9XemcZYep15/fdWL9XVa/VSvW9ub4njGGdPJhFZICiMEAhpkAaBGKGRIoYvID5AIiQkPsIHNEJCDBGLQJqBDILRDNEMMyEJQjCTTBbbiR3HdreXdu/uvav37rp8eM4v/1PljtOlOO7bUh2pVFX3vve95z3Ls/yf//Oc7p66eX6v1Z3WEKtxsW1smI/mkqvR+sXcD2Zvzjq4XteXXttCSdCnqVCWC8kQkn79BWoRmnat2XuRmLICikYv+uSks6TugRyLPpy6naTa9qw6wUZ9PzkJk8RPNGKwjhIGJwk77gxxh2Qf7iEhXU1gqM24j0RMTPmVl6H/78a/3r5H0MoFqNVlBEnXbao9pwCpMf4Zkv+g+X6U2oxX2hxsoCyBh9tznW9j9Qttbn5AbeyHWv+3ktD0VpKePUUJUN2N8xSN+t3tWcQKBJy1bF5rn5smbgnM17Q9BqO1qmUneUpw8FR7jk0kGnQ3pnzvYrjOBSlVjq5PM357kLFn7F4n0RtdSvM07rb9VIxmesndAAAgAElEQVThnWjLCPMPAiiu7N7vBUQf+4UgtJrbPXdBgExewcvMT2tWQ/t9alWzB68RrAFSxkvcY5aa/PeT/P+DlHY7R8KkD5GNep1aQOe67+iTX3wmQ5XSaF2Mxtrl00vg0t+1ZqDhzEuUdpTcdLb18QwRfBJ5LE8HsTjURAO1yCQR6ceeoDT1y22sT7a/v9nG4RVqA54FPkuIPvtJirSY0gmyoG9TQuNlEqYWTL7c7reHuAqCgScpS+9RQiaTiGbIeGjfO9fGUPfqBjH/YX6+w0ai0d2EK4kiMOdmOfMzGq93f/+k1tP9FQB+j+6FroZVuIzEwXwQ1OczIqPltpg2FhaDk2JWm8BdP0BqWhFciFQ39de6hOahn6e0qUJnF7UYr1LatndXvN706RHlSkha0n88S0qRi/hfI9wI07ZNfDlE0HPNb1Hki5TZDUnAOkFKywnefas9w2eIz7yHCpFakXqm3fdd7ZncvCNqg3yl3fcBEvkxnGb0R0tJU1oNrnWjIH6jfd9rlAXgeCswrRFhtMm8BZOTHmnjaq6Hqe/LqMI5f4eUTrtFuUenSH0Ghfh1SiCJ1psT8libG+tv9KxGF/yeds0OYo1JRZc+rjLQndJaWk1C2Zsoa80NvJWUg1cg6Ca/lRbuKf6udS1QFZnAKYRToVVn+FMsy7wRSXJvGRa8QxsbwSDAoxCweo7WwkIuuBN1mWgRLQ/rMLxOKvPuISDlCmqziBibjGM8WC3/IClpbvjQcl5KdynbotG3CUHJ+gAWBHm1vS4RyQxQE3Qutz6Jpkv9hdp8z1HhNhH/P9OuO96uEQOZIDUrLVe2n4qa3CYnKSt8zR68xvzUXjdHn81npMK6lJYsVyMJiElomiabXzdjNbURBV2tfvQy8Gli/tp/5+08CYu6kX5EwqWa82IgWjwW1rlMNvlxstaMGEmh1xoQ8+mvm2zzIIHI8fFzFvGFCMe3Ah0XNi1Z13Jf0+EmwYTEyrTk7I8Ww7V2P1MCLrK4NhauhJrbkJZchN6McyOOFrzu75PUxhMBl247x/wsxe2k2rLuh9r8BqUFBClvdPcTGR5aPzdTC99QnZrWsJLhThfpPhLOutS+832UJD9EkqkUHJrTI5KrcZraCMcIXmFilz6oEQHrAsy2+1+nLCZDoC42awmq3QTYJOTIB1HwThGS2G5KiOmSWXREv3o5oUNfoTbjBXLc3hzho5i0dICQu5zrSyT0/P2u3yaAHSU08g0EQxDsFb/aQ1k50qW1SMUEvBYCOmoB9bklp9scWFVc105hriLRFYaAif4spEXD/LXNgtch1rMAqMxHU8BdsysJTiUZbLGuxFgIBqW/i2SS+G+GLx2knhDTT8QMtahEb88Q31G/b6bdYze1QSykakjuYWrxbCKx722Einyp/T5J6iE8Qs51sCbkGirkdpyQmI5S1oeH3Synypm/l6IAQwkL8/g3kHLqIuJurDlSfcp6g7tI1SK5ELLqjNLQ+voHhLvRj6+JOJqknoBldaCr1Gbc2sbBZhjY8zwGcrSfPIYbxJWz3qXJXcupTXage6ZblKuhJXOhvb+DyqXY3frxC+RULS0fw6liKuJRVyg3w1TlK0RhbCXVo3e1cT/V+q+AlWgmK/MM87W6Akm2qULDnzsJBjU+zFd0utXOizRyLQKFmWQ+oxq62T1OpxW1mDYWggFSg+FK93cvPZ2Aq2QhK92V0Jp7m6nJmaHCXBcojXOQHOKqGWiFIrUQRNtfp8Jla0huwVlqUx0hITULomiyCqTNUi7LBsoKMPFFLOOzwNcpE/p9VOjTkNRFIuTEPOTnSwV3w60kOfuGTLUEZNJNUpsFEmJUwDmebiSFshmQmvxqxVUkpGpmphoW5oNjLnItqcvkiLUNZANuJL74OeKnjwiPQotiinITrXu4ngI69b8dE3GT693/zs217kcf/jpB73VJ5Ulo1ShMbnSv9Twb3eApoqUV0AqEftP53aPub8fRELiuhW6rtTOdD+dLheF6nCCp5YvFDMYCY7CtIDkE1g5wkCSdQHxfJ1PXQzfEgT5PwoWauA6wJKMrvBmFlsxzjRIyT1EDvKLdrxdcAkAnCGPRXAd98fUE69AaONX6+jlqUb9EWIxuPlpfHyTl0zyvwPp+10iocmh/WxtwihJ8J8kZj5vJiVyniHbT/HQjm5h1itR91Ne+1cbyXLvfVVJLsSdhGeZTUMyRwiQDOYlZy1A3ZxkhmNG+Y3kbYzMLD1F4j9EbrZyTxO833HeWWGuXSAKXTFNBSteb4WmjQtK7XZdiEAKDgoWSrK6TE7pdT/DmKkpaERDBoZUhn0KswefTKrlO8KDlzCdw6VauI0l392VUAmIymXTi/z0V1biyZBszDF8hoJ9FYB+ltNkJoqEudPeSw7CKWqCzVMx8lmLW7aY2pJjE3ta3E+39o1RlJ9OgBTdvUpbJNVLg5SSZyDmSbzBJWTLvIqc7ydjTL9bc30u4CBJnLpFTtQ63PrvgNTmn23M82H1ulhwse4TSwudaXw+QgjVn2zUvtWeRu2CYVv91kjK/XyWmrWHOK+1+mvSeB2FWprTxZ6jNu6U90zNtrD/exlvBc4oAwa8TmvxnKYvrSLvHptb3W4TerRXippF4tIIcJKQg64uzGDIWCJU8tIHQwCGCRRajrtdCZqnru2cj9v9LSlOxrCERt5XdPYyIWReir7il9aobtYHFtbFxJUStNbUMs7hBIICbm3uKVEiGSFwpqvq966lNtZosJDX7cRITX035oL8GfKrd409IRaMRtXE+TCX1HKIW7Q8Io1BGnPH0w0Tia/pOE03wCLXodrXr95NIhLwBtbVAoKapAOFOaiPMETzFDaz22U3q/22ifPO9BDjVXBZ4NYFoKwFYnRs3/vr23s72nR48o5aepTbcK+QwWMG8a+335nbtcUJuM2S7u7032b1nJa53tXF6N6n8LTdDboUHD8lK1N+21L6ullacwtbkJ4XWHMnNMYFuiiSLCWS7+XVDFCxamH27E5iuddzzcswhMpqiYNtKBL0gt4mIzoOuie7HYtrYWAym+broNGkFGBUGZuFJYdbHmqMWuhWcLMG2nqRQO9gT1KYXXDtNDbyx7dfad72bWmjPE58aItE/Q3gGJyj+PYQ1qKVynIomPE6SjrQgblKg52WKCryfEjpGFeQUXCZnH1wnyPR6UvPQGpTPUov2R8wXQoaAHesD7dk0j8UqBNIsMiLHY4KyPOQ/nCTx+o3t8wcJGHa4PduGNgYPtz5NkMjA823MLPx6hQoH7iQl3fXlD7e/dxKT/xi1Jt5LkcyMTp1o46W7YVh0a/tu14Lr6zwp4PsQKQdvyNFiseYqfIDgKgqWm9R6MOemj2QtDFkOC373SVa3F1yr+yZGc4tgD7IapbBb3UsilFXCFhMy7ftzz5sSUBKMLoMDpbYyDXkg2YKXSKUkSS/T1KLoY+Wmoeo3+vDHiU9pKFONuIWEQWepxSqr8A1Ka32UAim3ERNMZuMUoWeLcvcHjWj1zFLm9XGC7Jvzr1az8Il1DkxQstae9Q8tXfc6tVE/QFwva1Kcb8/8ZPvsBVLBiu56yGGvW4nv7lia57Gd+WzV/cSS20mo0Vbm0px/khBwBApHJCUaIhjWt/G3UtVrJNx4jgi4HmB8iURt3k0AvN4k1yrr8xlMm4ckfW0np6Gb4mzZN814rTSZihBF0m/Oha6DfbkTdVqhLbCoFaCrrSU5R7KDVa5+532LMUA01hwx+3x4kWBNL4EZ0ebl5LQoowqmu/aUXvEJqyxNEQ3k5rNunmDiTpKII6dhNdlMExQL0X4rtdW6FkZRuHyDnKl4oN37CPETFQTrSeai5vx09z0KgMuEiPUKWeyzZJFoZexs9xGP2UWKvkoIGqgNIENyGWVNGbnRt5bUJc16Q3ueU4Toc5oy868RvsG+du+TxDLUitpDWSUX2rVX2zOvI8VjBfpkoop19GQ0o0IriTD5HjlaYGjjb2mxLa1/D5L0c3NDtFgVGp8gvI9+s4+I0FhPTtGe4M4aeyFPoefr9K+rBAXNpUKb6dkLOj9nNGVErLrFtLERDJq7ms6aTkpTueA9MGk9QROY1ML6yquoUCBEw/nTC5xZYiXIYTjWvkewTF9yjsTITW6xeo598O+bJINQpt00VbjkGDWZv0tOn3LyPHdxijK1P0LIN4dbP43bb6QWtCXeN5MIxgukZqIbwmI2Usf3EQtieevfD8mhJ7vbPY3mDKTk2NrutVcofGaC2vDfamOxg/jlT1OC4yIhTSl4tOAuUriOpe9miEDc1e5/sN37ceA32/c+QPJkjJTsowT3RWKV/a/2XU9Q7sbR9py6QmYrCiCuIGXRXiSVmw8TuvwEIXdJy75MrcG1zOcv9DkQC4WKEQ5bD2LqTpilqyJb3n1OgbSSYC190tti2tgIBpsbX2ovhOHn/w5snw1oAtMxErYRiXUBnqUWmvjEDKmoPEeYbCNqQ0sKkXtwmVqku6kFcor4nGdJCvElwrufIFp6st1X7EEBaPj1QeL2GDo0rq8WE5h9lTLt1X5Ptd+Pt++eJTwEcRuLtSg8dW/cGFKkDeO9TG1Ix0nquSZ2z7g7RG2WW+0z72+fkyJ9i1S4Xk7OyLhIhJ4aeXkb4/WUK7Cdck3MHRjaZ3VvrKPgXBjXnyVg8G2S8ThH8UcOENTfUKAFa8xc1HJ8nYTH5ZfYl9tEsN0gVHAjMQuJTb3C6839/jXXpAxOsTHdXa1ZLVT7tYwcWSAec5kCyBfTxkIwODD6Tpq9Doibx0WjdSEKa0LTeUrbmfRzkPlVnm6T+oY/pBbRBmoSJa/om8qOs1SZVGHBSrW/bomLyDCdYcZz1KRsozaA2Yvruvteozam9RHECtRWFyhgdSDnU+xrfZPybZHb7xNwyjCqWqtfpPIUrpMSdsuIe7WRFFoV8J0gJDP7r9DaSAmGx9q4matwlJynadRG9P4QcQcebc/wQhurTSQsKuJ/jmQYPt+ueZxQyh8gZra5BCadaSnOUIJkun3PQ4TVaAan3BjHVNanm1+t7Tzd6r7DWhbmimgJCBa7hp2HiQV/KwgMi9Je73NHTL3vmZG6VhPUurCMgIzZzSyujYVgUGoKqOg2uIgMH8lgcyDVClKJDWW68Tw3QEGjRP0utbHkHrxIQCPvY8HXtdQidLEZ0XiNJEntaJ+TPrydWhiW5tpEbRqjGnsoqX6V2lAmCJnh90j33JKRrFlprUdBSJ9RwXGUcBo+TUxLP2M831qWW8jhs6Zpr6Y23E5KqAmsuajdnJKmzO6cJUCcSPgWYgncIqXJnF83pn70KcrMP9o+a1n73SR0fYXadDvbnFjl+oeU/3+pjesbJKdjefvMy6QKlUVuVhESmcpmNYneSLpTgRkBsBCra05sR3dyLVkzA2HPbiMCTCtDC4Dud0/7p13nWphb8DndNSt4K0CcBxPt7raNBY9hRLLBZLFpAhrLhQgPCC/+Jjl5SVLIbnKOoItgJ1n46ygT9f9Rk+wCPEttTifRxbSHEiQPU8i2SU43KJP+h8RFkY4ri/EpKnzY8++tOjRHzr+0b4Zf5U5oefTU5xNE+4hxXGv9MrdAV0mzt2fSQWLxakGRf2tDTLS+bae0uNpRQE6/dwWJ6WttGd7c1t4XXO0tjaepMnlTbYwlir1BSt5fa3NiAtkKclI0RCNOdeN/kAirCcI9eJFocoHh/RQfQqFjxEoLVbfSKMNAysZpIfbZlxL0dGt7XMywpYJc2rTu0Yj5rpwgpqnzvWViv7ReRiQ7V9KY2NkrxLJcTBsLwaCEhphZ0knVJGrQ3jc/Tj380fZbrag/rD9nCHQZ4cJ75kCvjTZTC/glIsnnKBN1O2WZbKQExHvb/7cp4XC46/tpYo4/RJD/5dTZCGsI+cdS9lCa8iHibwvEriF+cB/etGSaG04wcj3h7ksl19y0jJ2EIkhZtFuETyDO8GD3mmN/m4RitaQUMueJf72cWDpiK6a2+6NVMbRxeF/rzz7mk3MMyxmVMAK1hpwEvoWc36GLtoYSbGaO7iVkn9eJUBLV12w3hd5oGMxPbFNbG6Fx7i1go0Du2xy1Ud2sCi3X+brW94MUKC0RTxcPIthd12Jp7gnHqc8HmSOHAd9tGwtXAmpiBXrURnLWTxCwRw0v2qrWVVu8Tvm50o9dvFeZX+N/FbWBrxITfgO16WeBb7d+raOAqo3UJnmNEiQmSz1ADeKz1GTvaNe5WN1kIuwn2/fPUItShF3h1edZqI0MUak1DPvtJTUHz7R7ajX0ABXEBXBTKZzkAQjCHWpjvpEg+o+SGpKryWby/ARDaZtIOvSD5IDhR4lLpwD6LMEtZtociy/4LANF9rpFRTneRdyaD1PC+FESenb+/jd1QK88j/2tn8eICb6V+OSCllvbZy5SVqKZnwoza1t44pYuw3EqHH2YKDhIBEKCk8DnA5Rw0PL7EGXRuF5XUMzbI4TIdLH1UZfFkPUkCfVeaN9r/o+CFe5jSrRIsjRP2XMmskA9eI8y9yW7jfNbA+8otZnOkDMFJTFp0u2nJsd8dbGI29SmMxZsVOEgyT8QGzjS3nsXtSiPUsJpGYmYqDHPM9/V2NWue4ry5dVsZskZrTATUSEwwfyq12pifXtDlxANeLnd3/RxfXWBPXMErDLlBoLkAIjaS6iSM2CYzgpOK9o1akPdje2U0HiI1K6Qh2HoWYtOa0bhuIfaPJZLlytytF2ny7IO+PNUaf8LxPL7EcE/JAEJ7JqB2PM+fHbHR01sgptRMjkW+vICgv3GEkQ0AnaDuD5iVloH59q9VI6mrffsRwH1Pq9GV8dCw47hCVKnYjFtbASDMV7TfHsi0TRZXH3oZwt5gJepCfsg0UxqYrWzVFilrovxMDk1uA/F/TkimTVnT1AnTj9HTYKgoyj/I9RkiZrvbvc9175rb+uXBKxH22tvEBReV8pQmMffCb7JPDRMagEaS46Znq1/awWlOSpqIeEIUvPANGExGf1niFsgrmNuBITRZ8RBAG99d800wQ687jgpCSdjz/nVWtQVtPKT0SWL36xu/dnUxlFF8CCFBR2j0u4PMz9hSn9bZul0188rzA8D+x0QfoIMS0iSknU0FhKZ+tcGggFZek6cxMiRzFRBR+/9AqnG3QsnU76NHGnFiFtoyS12o4+NKyF3QSDNwezdhRuUALhETD9PQrLAyFbga5QGtxjJiDJR11Am3E5KA8mdP0UVTfkEtYCsjmOlpCfIqc2PUIvPkOghYqLuIVwFTbvzFAahz7yKpFZvoSZgD3WK0rOkorLCwEQykXGJScbbJ6lF9ghBx68wP5LgQjH9e5YSkiLzMhVvk2xU2YWCoLOklNtKcv6C2laCjQCngJ0b8pMUdjNqY2kmY48HCUw6/tLZtSS1SC6SiMExwkt5gto8gncfa/c5RAnzh0kxGbkuCkK1vUCtAOMVQre/0j7vd96gNqxrzHvKm+nLBtDmZjNlvVwlhYMUEg+17zjT+iTWtIxay1qhx9qz+H2vUOtbi3E5CQnvJgmJi2ljIxgsJqEJKc1XyTmiNswWaqLPUlrBiVhBQm+7qcW+jyT16C9by0DNCrUpHiVlxNUSAnWGg9ygE9TkSSCRNScF2JCgG1JqKoSzIALtgrO02zoidMyxN9lK8pMxepmYgnKbyELqw49aC25aIx+O2w1iYQhyWpBEHELU2425j5ykpYvjZumJPNKSb7axklDVv2+Y2MQffwxRG9Hx2SUqzRATWjMfYj4bxjYZ6kz7/ofatQcoIXWR4ECCqSokac1qdkFGKdJHCY/FPBIBcMlc9ku35AliYSyj1sPtdi/zTXx23emBWsP7CK5hnpAu8mXijugS7yEWyGLaWLgSPvwlwuYSaJQwMrTXTpKj0y2/LsPsWvv8Xkoyv0SBga9TIUUpwTIlNVlXUYtoNwUuHqc2uEKgryi0ipif0meN4ZuncIKS6ifJQTUr2n0PE37G2Xa/NdSC3U9pfs3wvlKTZuV2aqMY9dBXd/OvJdl1Lm4XmNrRaMeI+f6r4TpTyFe18TpNrIMporlk+LmIFTwKFHGL3nKZJuXz+jyOvmKT7pTCwvi9QO4cZYW90sbqODlpaxsR/ApJrbn9ba7krZxkfojR2poeN9D3z1Cnz6lW7vMc3Ix9gpTvmb9xi0RDFPRiMddI4plEMmnQAucW/lGYnyEVuVxXkgLvZIHfbRsbi8EJksPgwyu9TWZ5hPm8B83CdcwvOb+NWggvU5pqmvD35SvI6lODC0i+Qsqv7Wo/21u/NlOSWUT5dOvHFXKi0YH2++V2r40UGLaz3esQteHWtPvsIHUPdBUM+d0gzEHdi22UdnFzryIFWDUvd1GL5vvteXWlNhOAVvNyLSFJHWrXyP2/QeEDFn8xxVoA102/imhXw5rO0UpSAm01OQ1K60PrR8FuAtPmds3mNl+vEM7E9vasUtV3kZwX14JA3rruPqsITVja82bCkHyZEjQWjblIGJDyPWwKi94ykKHb05793zE5TWjrWlNasoKNUppl454m7MUrBBw/QSqlryQnmJkrcou44YtpY2ExDCQ8p8VgGEnNA0HjHQRN/dXUxvsO8WNFsx+jNuo+CkP4KBUK2tf+/hA1yJ8kx8s/QszTw5Tvf56E6QT9dpBogYCfvrEI/y5q0t9DCEqmAG+mNt1pylLRFXHjWhui5/1rOVmIQxDKqMTK7jrxgUuUIBG0fYxUMLpMqmRblcksRc12EXPNbEOPaiFBT4W0m87PGDI9RASKRVT8Pde+V0Fh2FXhuKndQ228kVgxp1ufDOvJXJXPoNWnoLL02h8Td8t1N0tO5hJY7s16XcxJMucCin00QlZjT4k+SgnFHe07ZiiswGzazYRvoxUs/0QhrZV7jRTpFQDtQeIZUp/jJiVYF9PGwmKYIwtJ4owmrualKLGLDaIdLrbf7ydsRBF+KaKaZZp8+p1aG1dIVaZJauOebH17rf3e0fowR7gMy0n5LoWCC8e6Ccb7txHTUJN/CyX1NX0NUQpcXiKH3Oi7ir/06eZGDCTYaEnsojbVLnLWxWzr/+uk0tRE+84dJJ235/gbdTlDAY99dSMXsaHAa+1efWTEqlZm/fUkJ3MKDONpPRrqNNKh9p7p5m5z+64TrV+6DkZt9rfrBPJ0hwZSrdv8luOEayC4q5Ja3e7zBjmOwCQ+15Rj70bt3Qmo9fB8m4fdpGiMvBMFi6HKHkRWYPj39TYeOwi5T4E43cbCLNaDLL6NhWDQ/4UkOl0iWYj9InESRZHPUZP1OKH3WsXnPHE9brbXrPAkYegStZh3EfKJLoYcc02xb1KTIz36FLVojxPhY6hR3GCCsljEHWba90jX3kpFUASdVhBQT1DU+xiqu0E2j9pFMoxAk1rwAWJBqA2lkrvhbpFiN4Y/IdWfBUCvt/cldenvih/IRdFcFg2X0DVLfGrZmgoJFcO19n26DVvIKVUPtH4dJ0zGG+2ap0g1KzMMz7bv7kHt9URZ7CNRk2skM1Zcxs2uz24tjBXU2jIyIr3cqJBRHUFnLStzJCzoa5h8ByHsOZ8ml4mB9QxeSCRE3scEJbBUXq7JU0TYLaaNhWDQbYDQSwWnNMmsBynP4Hb3Y8KLgOU6wsg7TlD+Jwj6b2HNF4kpeoMCqayipFbf1F7bTUJ2ningIjWPYw3ZvBZYOUbILab/agH1C1N+w4hapI9SC9ycA8leG5mf0muo1vcFxqw45cY3hGUIcIJw8iGEoMl2vb6zTFOJTde7e50myTqO84buPiLxgqVq3eXk3Ilj7RnPERduL7HAZK2qKcVb1rbPS01/kVoL+yiXUsxBTozAqmQ3K0ZBQqZmxmqt6u9rgZmzQXeNkZ31xIrT1erdC4XGWnKilNGLZd31/q8QVcDIGek5P7p3EtMmSGj9EjnbxLm72zYWGEPPshM89Eft1ucOuJGc1Nfbb31/LYq11CLpN+V6aiEfojb3eymm3McoH/B3qIWjFBeBtw+7KWvBug/Seo+163Vr1C6a2xZRsTyaG/giQZDVBgMp8LKFELnEYaTNmqxzlCDq+v8mo50iDFEFsFpPlNzvVAMfpmLth6iF/BESSTDfwkzNGcIxcBOZHyHhSYxBhF9r5mqbm0fb+1sIZ8HQpIBkn4rvptMtu9B99lUqe1aikkVeJHDNkISpnsGo5aNiWUvSyeWcOAc95jBJyGpGkXQ31fJGVqwkdZRQ/9eRYkBm+CqcFKxGTVR8WoDyLhQa9n9rmwNBezM+F9PGwmLQEpDppzkl6CVfHGLaQTgCe6kNKhpus8qQFYpMZBpRyUxvUAvnKnE5VlKg1EDhDCNKS7yHHJlusRZrQJxr/79KbX7j5LpBm8ipS1MkFj1JrBMZe2aJmrYtLda+KckVOFo0fXKZY3Cl/RboEqgyiegW0Y4Cb2spbXuYKuH+N9u1ajMTfTYTIFIegz43lHt0hAgBczHUsOeI67Sy+35dFoW+Y2GdCn36acJVob32MXKY8HPt3uIIZmkK2J4mmItErhHJzNXak3DlhhQDgESH5CF8jRIg7yFhQvu2hgqZiwH0c7qlPePLJJV+lvnnbxrCniOWssJBbOMUcVMmKcEuiauPptxNGxvBoJ8q1iDNU6nXAzqaUvqzSuIpUnoc5rPA9NMkIx0hGv9ku/ZJovGXUQMLCT9ua587RQmJjxAr5CRJrpGOvZpsthlqARhluUFNpsj6GqINDaHpJpkEBqkXcIOylLSAXGRnSL3BFa2/p0nilML0NkmK6kOeNykBdYwSnM9QCUtmMhrCk51pnyACxnoIcg9c0FoLzreuom7kTuKaiRUZo5fDYNTCLNPNRAtvJ5GrXSQSMSKApQxPM1a1lMxbsJrVWsJgNatSi2ua8AasdzFQyuWZ9vmN3dhea/1+pfVLDEvW5672nlpfYaCwdA0rZMWaTOyaZE817RMAAA4hSURBVH6x3wsEONcCX2yuxFgIBmO+ctJ7aegiclBkuumH+QD6fgdIvHiS2jxWItJXNqQzRS3G/ZTp/B+okvAHqA1l7ryA3E1qgLeRalG7CNi4gZyd+CKlzbQKfDafT6akzElB1K0ETdaNGpFFpo8pjiKuIWtzJ/ML3MiTf51UajLLczuJBpgHMEG5DR+kai/+CeFyaCEowPpIiMSxzcQKmSag6QRZpBeJSX6VFBW5Rfgcsg6lm+9rc6RQs4TbFlLHYRllIdiXKUoLXyWg3F6SWyLRbbJd+24iQHU9TzA/Ac+maysF/Xj7zBYSKj9NMKTj7XPPUdaUXJHJNheXKUvT6mCCy2r7rUSAmrFp5qfW2gpKMdyk1pPKyZT3xbS7whiGYXh1GIYfDMPw9DAM32mvbRqG4avDMLzUfm9srw/DMPzLYRgODsPw/WEY3v9T78/8UKTIum6A6Ls0VIu+ijMYjtNfc8GZpPMEtTDUiPqtA9mEO9q9/oDiQ+whNfkF9Qw3CsitI3UYDPdNkROSTJYZqIXgZNJ+TxNQdRllbVh1WXCpxwAmus9rEpv7YNFXTcuJ7n3BPzGAE0TLGU2QAq0wnqIshS2E3q0FI0dDC0/EXoBPpFwXQStPE9gI0/LuuleIO3mK1EI4QwhpEp52ktwP/X017VFidSg4TlBunv0w/8SEJIlJhgQ1zW0qJftqmTfH5ColwCQhXaUE1THK6rxECgibW2NK9wRhyF4kNST6oiy62kbXzOc4R6yx80R5iHfMkBJvujV32xYDPn56NBo9ORqNPtj+/wLwtdFo9DDlXn2hvf4XKXzuYeDzwL/+aTdWMMgL6HGF6901LhaJOJpOmqwm4ZwhC1Wpryn+OPE7dVskD32Imtingf9DcixOkTTXTe0aQ40Qa2Vdu8+2ds1ayvIQGdYyMq3WWgtK89dJmFIzUNPbBeJYiCWIgFucow/7ijVY5flqd/0k4dYLjrmApts4H6Ush01kQxvJ0Cc3+U1K80VqwXqdbgYkLq9prKCUgPUScQUniLCfouZsNUkpF2cSvFV4mMJ8td3rNrEA5ZjoUhnG1MLsx8MUeaNMjqX/CzCupYRAX09BXoJciO8RavnDJPdFJuP11l9LBZhzIf9Ct0Ll2GdeKtDdP5OUdfXe1g/Zqe8kxvBXKBIhwH+k6mP8o/b6fxqNRiPgm8MwTA/DsGM0Gh2/412IlFMryi2QEq1QUNPIbNxCtMtzRKPuohaIVX1Ot9f/B6XpPklCa6K2t0kMfFfrz7+lBvlJKovOeo7HSY7ETmoiv01RotV405SAeoxYE1uJLzsi8e4z7TsFs0zkUoM5qQqVHry7TtKGxTAcBzel9NijJKR2mlQ8UqiqdWYps/b7lJD88IJrTbTSJdOVMM3dORTbeY6cKt6HoAU/V7SxFKR8iAipDxJMyTCpmwNCsX6IJKAJsmrdPU7cre0koc407DcIXrCKJHpdIOAj7TWT06ba5/YDv9+ueZCsZQHvc+1zun57CAP2XLvmmfb7SYIZGTIWR9CSEfzt+2U5N6NA7o0ZgiNZxOVu291aDCPgj4Zh+O4wDJ9vr21zs7ffKtBdJIIIJax3LbzhMAyfH4bhO8MwfOcs8fU02ZSEPV3VsKP+6XISWtxJTcxucgBKr2FWURToNcAfEfNYvrq0Wf3bvQSMvEEt0FUEOOrrCMxQi+9VIr1F6y9R2uRHlFllhqfhKisQG3LU9J8j/jlEY/m73/wCsz6HMX8Xqe7Zznb92u7zhsRmu9/T7bMPE01s+rHhSs3adSSaIJlGq0CAVXxhIEVi9I9XUovD+pRueklafYTAkOFpgs34fGIPN6mNtZEkuolp7CB8CSs+Ga1SiE0SgpGEsctEIJk9268FeSnnCb5zpd1nMxWleIxU9lZgzbXxeKN9XlKYAtgaC30o29C3FpsJZmIs4lc3SLWwZUR53G27W4vh46PR6NgwDFuBrw7D8KO3uPZOiVwL2aGMRqMvAV8CeHIYRhDarXx/yAD5vp027NjTRY9QguEyWfzGdV084gTfoECgbcw31VyMAlSbKBrr2na9GW0XyeIwLVgilJNrWG0j8XO/R7SkVsEhAiLtJZrbpDI3ijFuOQQ+n76lGlyh5eKTjamv6njJz1jRfd9FUhBEINLj3/SLe46C7sEeklCma6MlppVn1WSjMXIxzIXQNxZ40+Jxc24GPkcIUluYn8Y+3X3nGkLqmWp9u90+Y2ajdR0scCIhTOtJrb+MhDWNeJxlflThOOUK3SRhWPN4zKRVq5/rnlfeidbjDAmtKuicey3nie59OSXLCRHMJCrXhSDmYtpdCYbRaHSs/T41DMPvUNblSV2EYRh2kJqmR6h1YttNWfY/+f4E2e+r2ihh+poMhjEhi26gNr8L0omTn3+a5BmIPp+hkqNOUZbGSrIpDY858O9q1/2wPczj7Xu/1b7jEqWN9rT7v9D6Iyp8ghygMkUBbSvb64+0945QQuYREiv3mcUXDG1C6jUoEPrsPS2WaWJx9PFwBZKuminL16gFbkLVXnLWw9Xu/gKparn1hKQjdmHI9yYlfNWuuiGGVmU3SnsfSJasQNwN4uZZn0Gy123iPunXi5EYHVhJAEszGWdJBS45JWZRWphFi28bORnd0PC5Nk4yUT/f7neYrMsH2r1fo5TCg2S9jkhpwFEbnw8RpWSx2B7b8VnkcugKu+nFkBTKFv1Zw+KTqH6qKzEMw5phGNb5Nyk29HvAr7TLfoUqbEt7/W+16MRHgQtvhS9AsIOFBUV8bdS97gLVBBbZNaHqcLt2K9GAFsUw60+w5wPUAvljkvlG++xykguhGTtJbebXSeGRfdREvdreW075nUda/80TuE1AO8Nf24ibpJb3jAYTfXSnxFWMGLix1TxqErr/TQoSpDLcq5vmWJibcJta7BKJdNX+QtcfBbNcjLUkmmDBmJUkGrOse8//9Z/NfpTJqql+qc2Zc641dbl7Ni0WiUD7W1/MzVhLaWGxDdeJAtWolaQzwTxdWl0gx96s1xXkpG7vs629totSIk8Q0O8KtV52kCiR2bOu1fWU0NhOrUOFhwCqRWi1EBcCkJAaoLPEsjZyYUWoxbS7sRi2Ab8zDIPX/9ZoNPqfwzB8G/jtYRh+tT3jX2vX/z5VpPcgNS5/+6d9gRJRbSOLUYRXTrhhN69XW8rpN1tPZH8Xie0KdhmmmqEG+ePAl6kJ0HeWCqtPfptQaU9Tg/0s8FdJaOo8OWDVXP7/S23ch4iZ7AY3j18tKoJ/gkLRVxHsQJNf7dDnDlhUxNCd+IfZkecJUCVjUcBVoWN4znH7IbWQaffXNJV3oXBWmwuCKXi2UlpyG/P5KJrGPrPunQvY13eRyJMJXI7BiTYX1qX0vqsIG7OvS2D4VN6KeIJ9hawr3UnxHd0vhasW1wuE9i0mo7sk12WKEK+utOtXk2iGc+863tie+0VyFKH5O73lKACrtahV0d/XBKxb5CiBWRbXhgoe3Ns2DMMlarzvh2agY9zb/dJPuH/6er/0E+7c132j0WjmThcvbGPBfARe6PgRY92GYfjO/dDX+6WfcP/09X7pJ/zsfR2L7MqlttSW2ni1JcGw1JbaUntTGxfB8KV73YFFtPulr/dLP+H+6ev90k/4Gfs6FuDjUltqS2282rhYDEttqS21MWpLgmGpLbWl9qZ2zwXDMAyfG4bhhVa/4Qs//RM/1778+2EYTg3D8Gz32ttWd+Jt7uueYRi+MQzD88MwPDcMw98bx/4Ow7BqGIY/HYbhmdbPf9pef2AYhm+1fn55GIaV7fXJ9v/B9v7+d6KfXX+XDcPw1DAMXxnzfv5ca6QwGo3u2Q+poHaAIp49Azx2D/vzZ6njKZ7tXvvnwBfa318A/ln7+xepui4Dlbj5rXe4rzuA97e/LRr12Lj1t33f2va3KSYfBX4b+OX2+m8Av9b+/rvAb7S/fxn48js8rv8A+C3gK+3/ce3nq8CWBa+9bXP/jj3IT3i4jwF/2P3/ReCL97hP+xcIhheAHe3vHRQZC+DfAH/9Ttfdo37/LvDZce4vxQr+HlUu8zSwfOE6AP4Q+Fj72xy44R3q324qO/4zwFfaRhq7frbvvJNgeNvm/l67EndVu+Eet5+p7sQ70ZoZ+z5KG49df5t5/jSVl/ZVyko8PxqNTJTt+/Ljfrb3L5BiRz/v9uvAPyR1YDaPaT/h51AjpW/3mhJ9V7UbxrSNRd+HYVgL/Dfg749Go4st2e2Ol97htXekv6PR6Dbw5DAM09TRHe9+i77ck34Ow/CXgFOj0ei7wzB86i76cq/n/22vkdK3e20xLLp2wz1oJ1u9CX7WuhNvdxuGYQUlFH5zNBr99/by2PZ3NBqdp0oAfhSYHoZBxdT35cf9bO9voJIFf97t48BfHobhVeC/UO7Er49hP4H5NVIoYfvjGimtTz/T3N9rwfBt4OGG/K6kQJzfu8d9WtjetroTb2cbyjT4d8Dzo9HoX4xrf4dhmGmWAsMwTFEHfz1PFdH6pZ/QT/v/S8DXR80x/nm20Wj0xdFotHs0Gu2n1uHXR6PR3xi3fsI7UyPlngBlCwCTX6QQ9UPAP77HffnP5HCoI8CvUn7j16jKXV8DNrVrB+BftX7/APjgO9zXT1DmoDVbn25jOVb9peqWPNX6+SzwT9rrB4A/pep2/Fdgsr2+qv1/sL1/4B6sg0+RqMTY9bP16Zn285z75u2c+yVK9FJbakvtTe1euxJLbakttTFsS4JhqS21pfamtiQYltpSW2pvakuCYakttaX2prYkGJbaUltqb2pLgmGpLbWl9qa2JBiW2lJbam9q/x8DEhp0yAo9IQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Tint images\n", + "from skimage import color\n", + "from skimage import img_as_float\n", + "\n", + "# Define the color weight scale to red, [Red, Green, Blue]\n", + "red_tinting = [1, 0, 0]\n", + "\n", + "# Plot and show image\n", + "plt.figure()\n", + "plt.title('Red tinted image')\n", + "plt.imshow(red_tinting * image)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Image Edge Detection\n", + "One of the most commonly used feature in image processing is edge detection. Detecting and extracting the edges of an image can be used identify and segment objects within an image. Use of this feature can also be found in areas outside of image processing such as computer vision and machine learning. \n", + "\n", + "The following are some of the more popular edge detection techniques available. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 Canny Edge Detector\n", + "The Canny edge detector is an image operator that performs multiple stages to maximize the detection of edges while providing a means to adjust the operator so the results can be fine tuned as needed. \n", + "The Canny edge detector steps are described in [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.420.3300&rep=rep1&type=pdf] and [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.476.5736&rep=rep1&type=pdf]\n", + "\n", + "Generally the steps as described in the skimage Canny implementation [https://scikit-image.org/docs/stable/auto_examples/edges/plot_canny.html] are as follows: \n", + "1. Apply Gaussian filter to blur the image. This will smooth the edges to easily detect edges by reducing the noise in the image. \n", + "2. Thinning of the edges down to by removing non-maximum pixels of the image gradient. \n", + "3. Apply a threshold to remove using hysteresis on the graudient magnitude\n", + "\n", + "In the following example we will use the Canny filter to detect the edges of our grayscaled image." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from scipy import ndimage as ndi\n", + "\n", + "from skimage import feature\n", + "\n", + "# Compute the Canny filter\n", + "canny = feature.canny(grayscale_image, sigma=5)\n", + "\n", + "# Plot and show the image\n", + "plt.figure()\n", + "plt.title('Canny edge detection results')\n", + "plt.imshow(canny, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Roberts Cross Edge Detection\n", + "This is used to detect the edge of an image using a diagonal mask which is used to approximate the gradient by computing the sum of the squares and the differences between diagonal pixels. \n", + "skimage implements a Roberts Cross edge detector by providing it a 2D image and it returns a 2D map array of the Roberts' cross edge. The convolution matrices used to implement Roberts' cross filter are as follows: \n", + "\n", + "$\n", + "S_{left} = \n", + "\\begin{bmatrix}\n", + "+1 & 0 \\\\\n", + "0 & -1 \n", + "\\end{bmatrix}$\n", + "\n", + "$\n", + "S_{right} = \n", + "\\begin{bmatrix}\n", + "0 & +1 \\\\\n", + "-1 & 0 \n", + "\\end{bmatrix}$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Import the filter library\n", + "from skimage import filters\n", + "\n", + "# Load the test image\n", + "caller = getattr(data, 'moon')\n", + "image = caller()\n", + "grayscale_image = rgb2gray(image)\n", + "\n", + "# Plot and show the original image\n", + "plt.title('Original Moon image')\n", + "plt.imshow(grayscale_image, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Apply the Roberts cross filter\n", + "roberts_filter = filters.roberts(grayscale_image)\n", + "\n", + "# Plot and show image\n", + "plt.title('Roberts cross filter')\n", + "plt.imshow(roberts_filter, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3 Sobel Edge Detection\n", + "The Sobel filter, similar to Roberts cross filter above is used to detect edges, however Sobel uses two 3x3 kernels to approximate the derivates of the horizontal and vertical changes. A standard example of Sobel's filter are as follows for the vertical and horizontal, respectively. \n", + "\n", + "$\n", + "S_{vertical} = \n", + "\\begin{bmatrix}\n", + "+1 & 0 & -1 \\\\\n", + "+2 & 0 & -2 \\\\\n", + "+1 & 0 & -1 \n", + "\\end{bmatrix}$\n", + "\n", + "$\n", + "S_{horizontal} = \n", + "\\begin{bmatrix}\n", + "+1 & +2 & +1 \\\\\n", + "0 & 0 & 0 \\\\\n", + "-1 & -2 & -1 \n", + "\\end{bmatrix}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Apply Sobel filter to the grayscale image\n", + "sobel_filter = filters.sobel(grayscale_image)\n", + "\n", + "# Plot and show image\n", + "plt.title('Sobel filter')\n", + "plt.imshow(sobel_filter, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Thresholding\n", + "Thresholding an image is a way to convert a grayscale image to a binary image. \n", + "The skimage implements the Otsu's method of thresholding [https://en.wikipedia.org/wiki/Otsu's_method] which returns threshold value given a grayscaled image. \n", + "The image is then converted into a binary image by classifying all pixels into one of the two binary states 0 or 1. The classification of each pixel to one of these two states is determined by the threshold value. \n", + "\n", + "Therefore, any pixel value less than the threshold value is set to 0, all others pixel values are set to 1. \n", + "\n", + "$\n", + "\\begin{equation}\n", + " \\text{Pixel value} =\n", + " \\begin{cases}\n", + " 0 & \\text{if pixel value is less than threshold} \\\\\n", + " 1 & \\text{otherwise}\n", + " \\end{cases}\n", + "\\end{equation}$\n", + "\n", + "\n", + "\n", + "In this next example we will obtain the threshold value using Otsu's method and apply that threshold value to a grayscaled image in order to covert it to a binary image. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Load grayscaled image\n", + "image = data.camera()\n", + "grayscale_image = rgb2gray(image)\n", + "\n", + "plt.figure()\n", + "plt.title('Original')\n", + "plt.imshow(image, cmap=plt.cm.gray)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# import Otsu's threshold method\n", + "from skimage.filters import threshold_otsu\n", + "\n", + "# Obtain threshold value\n", + "tr = threshold_otsu(grayscale_image)\n", + "\n", + "# Apply threshold to convert to binary\n", + "binary_image = grayscale_image > tr\n", + "\n", + "plt.figure()\n", + "plt.title('Binary image')\n", + "plt.imshow(binary_image, cmap=plt.cm.gray)\n", + "plt.show()" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/advanced-quantum-algs-index.md b/translations/ja/ch-applications/advanced-quantum-algs-index.md new file mode 100644 index 0000000..78e182e --- /dev/null +++ b/translations/ja/ch-applications/advanced-quantum-algs-index.md @@ -0,0 +1,6 @@ +# About This Section + +At this point in the textbook, the reader can choose to continue learning about more advanced quantum algorithms or skip to ‘Investigating Quantum Hardware with Quantum Circuits’. + +Within this chapter, the reader can also choose which topics they would like to cover and cover them in whichever order they prefer. In chapter 4.1, we will cover algorithms to popular problems, that on future machines will offer significant speed up over their classical counterparts. In section 4.2, we will demonstrate quantum algorithms applied to real world problems. In section 4.3, we will cover more recent quantum algorithms to help bring the reader up to date with more recent developments in the field. + diff --git a/translations/ja/ch-applications/algs_for_apps_index.md b/translations/ja/ch-applications/algs_for_apps_index.md new file mode 100644 index 0000000..3d979b4 --- /dev/null +++ b/translations/ja/ch-applications/algs_for_apps_index.md @@ -0,0 +1,3 @@ +# このセクションについて + +ここで、読者は実用的な量子アルゴリズムについて学習を続けるか、「量子回路による量子ハードウェアの調査」にスキップするかを選ぶことができます。4.1章では、実際の問題で使われる量子アルゴリズムを紹介します。4.2章では、最新の量子アルゴリズムについて説明し、読者がその分野での最新の開発ができるようにします。 diff --git a/translations/ja/ch-applications/algs_index.md b/translations/ja/ch-applications/algs_index.md new file mode 100644 index 0000000..bd1b41c --- /dev/null +++ b/translations/ja/ch-applications/algs_index.md @@ -0,0 +1,9 @@ +# About This Section + +The algorithms in this section are more complicated and less general than those in chapter 3, hence their separation into a separate chapter. As we move forward into algorithms with more exciting applications, we will notice that the basic building blocks and techniques in the algorithms remain the same and the focus is shifted to adapting these to the specific problem. In this first section of chapter 4, we will introduce well-known quantum algorithms and the problems they solve. + +# Upcoming +The following topics are currently being developed for addition to the textbook: + +1. Shor's Algorithm +2. Solving Linear Systems of Equations using HHL diff --git a/translations/ja/ch-applications/apps_index.md b/translations/ja/ch-applications/apps_index.md new file mode 100644 index 0000000..9ed5f19 --- /dev/null +++ b/translations/ja/ch-applications/apps_index.md @@ -0,0 +1,6 @@ +# このセクションについて + +量子アルゴリズムの幅広いアプリケーションを確認することは重要ですが、これまで見てきたように、問題を理解することは、それを解決するアルゴリズムを理解することと同じくらい難しい場合があります。この章のトピックは、化学から機械学習まであり、それぞれが大きくて複雑なトピックで、Qiskitテキストブックではそれらを完全に紹介することはできません。 アルゴリズムの説明のために必要なバックグラウンドを含めるよう努力していますが、それらは、その分野の厳密な紹介ではないこと、また、このテキストブックのスコープ外の概念にも触れていることをご承知おきください。 + +このセクションでは、これまでに学習したアルゴリズムが実際にどのような問題に適用できるかを紹介しています。あなたが最も興味のあるトピックについてより深く読むことをお勧めします。 + diff --git a/translations/ja/ch-applications/hhl_tutorial.ipynb b/translations/ja/ch-applications/hhl_tutorial.ipynb new file mode 100644 index 0000000..0e880a9 --- /dev/null +++ b/translations/ja/ch-applications/hhl_tutorial.ipynb @@ -0,0 +1,709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# HHL を利用して線形方程式系を解きQiskit で実装する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このチュートリアルでは、HHL アルゴリズムを紹介したあと量子回路を導出し、Qiskit を利用して実装します。HHL をどのようにシミュレーターと5量子ビットデバイスで実行するかも示します。\n", + "\n", + "## 目次\n", + "1. [はじめに](#introduction)\n", + "2. [HHLアルゴリズム](#hhlalg)\n", + " 1. [いくつかの数学的背景](#mathbackground)\n", + " 2. [HHL アルゴリムの説明](#hhldescription)\n", + " 3. [HHLでの量子位相推定(QPE) について](#qpe)\n", + " 4. [正確でない QPE の場合](#qpe2)\n", + "3. [例: 4量子ビット HHL](#example1)\n", + "4. [Qiskit実装](#implementation)\n", + " 1. [HHL をシミュレーターで実行する: 一般的な方法](#implementationsim)\n", + " 2. [HHL を実量子デバイスで実行する:最適化例](#implementationdev)\n", + "5. [演習](#problems)\n", + "6. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "線形方程式系は様々な分野で、多くの実世界アプリケーションとして自然に現れます。例えば、偏微分方程式の解、金融モデルの校正(キャリブレーション)、流体シミュレーション、あるいは数値場計算などです。問題は次のように定義できます:行列 \n", + "$A\\in\\mathbb{C}^{N\\times N}$ とベクトル $\\vec{b}\\in\\mathbb{C}^{N}$ が与えられている時、 $A\\vec{x}=\\vec{b} $ を満足する $\\vec{x}\\in\\mathbb{C}^{N} $ を求める。\n", + "\n", + "$N=2$ の場合に以下の例を見てみましょう。\n", + "\n", + "$$A = \\begin{pmatrix}1 & -1/3\\\\-1/3 & 1 \\end{pmatrix},\\quad \\vec{x}=\\begin{pmatrix} x_{1}\\\\ x_{2}\\end{pmatrix}\\quad , \\quad \\vec{b}=\\begin{pmatrix}1 \\\\ 0\\end{pmatrix}.$$\n", + "\n", + "この問題は以下のように $x_{1}, x_{2}\\in\\mathbb{C}$ を見つけるというものに書き換えることもできます。\n", + "\n", + "$$\\begin{cases}x_{1} - \\frac{x_{2}}{3} = 1 \\\\ -\\frac{x_{1}}{3} + x_{2} = 0\\end{cases}. $$\n", + "\n", + "線形方程式系は$A$の行もしくは列に高々$s$個の非ゼロ成分を持つ時に、$s$-sparse (スパース、疎行列)と呼ばれます。$N$ サイズの $s$-sparse系を古典コンピューターで解くには、共役勾配法(conjugate gradient method) を用いても $\\mathcal{ O }(Ns\\kappa\\log(1/\\epsilon))$ の実行時間が必要です [1](#conjgrad)。ここで、$\\kappa$ はシステムの条件数、$\\epsilon$ は近似の正確度です。\n", + "\n", + "HHLは、データのローディングを実施する効果的なオラクル(Oracle)が存在し、ハミルトニアン シミュレーションと解の関数の計算が可能であるという仮定のもとで、$A$ がエルミート行列である時、複雑な式 $\\mathcal{ O }(\\log(N)s^{2}\\kappa^{2}/\\epsilon)$[2](#hhl) に比例した時間で解の関数を推測するという量子アルゴリズムです。これはシステムのサイズに対して指数関数的スピードアップです。ただし、非常に重要な注意点があり、古典アルゴリズムが完全解を返すのに対して、HHL は解となるベクトルを与える関数を近似するだけです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. HHLアルゴリズム\n", + "\n", + "### A. いくつかの数学的背景\n", + "量子コンピューターを利用して線形方程式系を解く最初のステップは、問題を量子の言葉に落とし込むことです。系を再スケールすることで、$\\vec{b}$ と $\\vec{x}$ は正規化できると仮定でき、それぞれ量子状態 $|b\\rangle$ と $|x\\rangle$ にマップできます。通常、利用されるマッピングは次のようなものです。すなわち、$\\vec{b}$ (resp. $\\vec{x}$) の $i$ 番目の成分は、量子状態 $|b\\rangle$ (resp. $|x\\rangle$) の $i$番目の基底状態の振幅に対応するというものです。ここからは、再スケールされた問題にフォーカスします。\n", + "\n", + "$$ A|x\\rangle=|b\\rangle.$$\n", + "\n", + "$A$ はエルミートなので、スペクトル分解を持ちます。\n", + "\n", + "$$\n", + "A=\\sum_{j=0}^{N-1}\\lambda_{j}|u_{j}\\rangle\\langle u_{j}|,\\quad \\lambda_{j}\\in\\mathbb{ R },\n", + "$$\n", + "\n", + "ここで、$|u_{j}\\rangle$ は $A$ の $j$ 番目の固有ベクトルで、固有値 はそれぞれ $\\lambda_{j}$ です。次に、逆行列です。\n", + "\n", + "$$\n", + "A^{-1}=\\sum_{j=0}^{N-1}\\lambda_{j}^{-1}|u_{j}\\rangle\\langle u_{j}|,\n", + "$$\n", + "\n", + "系の右側は $A$ の固有基底を用いて次のように書けます。\n", + "$$\n", + "|b\\rangle=\\sum_{j=0}^{N-1}b_{j}|u_{j}\\rangle,\\quad b_{j}\\in\\mathbb{ C }.\n", + "$$\n", + "\n", + "HHLの目的は、次の状態でレジスターを読み込むことでアルゴリズムを終了させることを銘記してください。\n", + "$$\n", + "|x\\rangle=A^{-1}|b\\rangle=\\sum_{j=0}^{N-1}\\lambda_{j}^{-1}b_{j}|u_{j}\\rangle.\n", + "$$\n", + "量子状態について話しているので、既に暗黙的な規格化定数が入っていることに着目してください。\n", + "\n", + "### B. HHL アルゴリムの説明 \n", + "\n", + "アルゴリズムは3つの量子レジスターを利用し、アルゴリズムの開始時点ではすべて $|0\\rangle $ にセットされます。一つのレジスター(ここでは $n_{l}$ とサブインデックスで示します)は $A$ の固有値のバイナリー表現の保管に利用されます。2つ目のレジスター、$n_{b}$はベクトル解が保管されます。ここからは $N=2^{n_{b}}$ とします。補助量子ビットとして追加のレジスターがあります。追加レジスターは、個々の計算の中間段階で利用されますが、各計算の最初に $|0\\rangle $ にセットされ、個々の操作の最後には、$|0\\rangle $ 状態に戻されるため、以下の説明では省略しています。\n", + "\n", + "以下の手順で対応する回路のハイレベルな図形で HHL アルゴリズムのアウトラインを説明します。簡単のため、引き続く説明ではすべての計算が正確であると仮定し、正確でない場合の詳細なセクション [2.D.](#qpe2) で説明します。\n", + "\n", + "\n", + "\n", + "1. データ $|b\\rangle\\in\\mathbb{ C }^{N}$ のロード。すなわち、以下の変換を実行します。\n", + " $$ |0\\rangle _{n_{b}} \\mapsto |b\\rangle _{n_{b}}. $$\n", + "2. 量子位相推定(Quantum Phase Estimation - QPE) を適用します。\n", + "\t$$\n", + "\tU = e ^ { i A t } := \\sum _{j=0}^{N-1}e ^ { i \\lambda _ { j } t } |u_{j}\\rangle\\langle u_{j}|.\n", + "\t$$\n", + "\t$A$ の固有基底で表現されるレジスターの量子状態は次のようになります。\n", + " $$\n", + "\t\\sum_{j=0}^{N-1} b _ { j } |\\lambda _ {j }\\rangle_{n_{l}} |u_{j}\\rangle_{n_{b}},\n", + "\t$$\n", + " ここで、$|\\lambda _ {j }\\rangle_{n_{l}}$ は $\\lambda _ {j }$ の $n_{l}$ ビットバイナリー表現です。\n", + " \n", + "3. 補助量子ビットを追加し、$|\\lambda_{ j }\\rangle$ の条件に応じて回転を適用します。\n", + "\t$$\n", + "\t\\sum_{j=0}^{N-1} b _ { j } |\\lambda _ { j }\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}} \\left( \\sqrt { 1 - \\frac { C^{2} } { \\lambda _ { j } ^ { 2 } } } |0\\rangle + \\frac { C } { \\lambda _ { j } } |1\\rangle \\right),\n", + "\t$$ $C$ は規格化定数です。\n", + " \n", + "4. QPE$^{\\dagger}$ を適用します。QPE で発生しうるエラーを無視すると、次の結果になります。\n", + "\t$$\n", + "\t\\sum_{j=0}^{N-1} b _ { j } |0\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}} \\left( \\sqrt { 1 - \\frac {C^{2} } { \\lambda _ { j } ^ { 2 } } } |0\\rangle + \\frac { C } { \\lambda _ { j } } |1\\rangle \\right).\n", + "\t$$\n", + " \n", + "5. 計算基底にて補助量子ビットを測定します。結果が $1$ の場合、測定後のレジスターの状態は次のようになります。\n", + "\t$$\n", + "\t\\left( \\sqrt { \\frac { 1 } { \\sum_{j=0}^{N-1} \\left| b _ { j } \\right| ^ { 2 } / \\left| \\lambda _ { j } \\right| ^ { 2 } } } \\right) \\sum _{j=0}^{N-1} \\frac{b _ { j }}{\\lambda _ { j }} |0\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}},\n", + "\t$$\n", + "\t規格化定数を除き、解になっています。\n", + "\n", + "6. オブザーバブル $M$ を適用し、$F(x):=\\langle x|M|x\\rangle$ を計算します。\n", + " \n", + "### C. HHLでの量子位相推定(QPE) について \n", + "\n", + "量子位相推定については第3章でより詳しく説明がされていますが、HHLアルゴリズムではこの量子処理が要になっているので、ここで定義を再確認したいと思います。大雑把にいうと、固有ベクトリ $|\\psi\\rangle_{m}$ と 固有値 $e^{2\\pi i\\theta}$ をもつユニタリー $U$ が与えられた場合に $\\theta$ を求めるという量子アルゴリズムです。次のように正確に定義できます。\n", + "\n", + "**定義:** $U\\in\\mathbb{ C }^{2^{m}\\times 2^{m}}$ がユニタリーであり、$|\\psi\\rangle_{m}\\in\\mathbb{ C }^{2^{m}}$ がそれぞれ固有値 $e^{2\\pi i\\theta}$ を持つ固有ベクトルである時、**量子位相推定(Quantum Phase Estimation)** (省略して **QPE**) アルゴリズムは、$U$ に対応するユニタリーゲートと状態 $|0\\rangle_{n}|\\psi\\rangle_{m}$ を入力として、状態 $|\\tilde{\\theta}\\rangle_{n}|\\psi\\rangle_{m}$ を返すアルゴリズムです。\n", + "\n", + "$\\tilde{\\theta}$ は $2^{n}\\theta$ に対するバイナリー近似を示しており、$n$ の添え文字は $n$ ディジットに切り捨てられていることを示しています。\n", + "$$\n", + "\\operatorname { QPE } ( U , |0\\rangle_{n}|\\psi\\rangle_{m} ) = |\\tilde{\\theta}\\rangle_{n}|\\psi\\rangle_{m}.\n", + "$$\n", + "\n", + "HHLでは QPE を $U = e ^ { i A t }$ に対して適用しています。ここで $A$ は行列で解きたい系に関係しています。この場合、\n", + "$$\n", + "e ^ { i A t } = \\sum_{j=0}^{N-1}e^{i\\lambda_{j}t}|u_{j}\\rangle\\langle u_{j}|.\n", + "$$\n", + "です。さらに、固有値 $e ^ { i \\lambda _ { j } t }$ をもつ固有ベクトル $|u_{j}\\rangle_{n_{b}}$ に対しては QPE は $|\\tilde{\\lambda }_ { j }\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}}$ を出力します。$\\tilde{\\lambda }_ { j }$ は、$2^{n_l}\\frac{\\lambda_ { j }t}{2\\pi}$ に対する $n_{l}$-bit バイナリー近似です。従って、仮にそれぞれの $\\lambda_{j}$ が $n_{l}$ビットで正確に記述できる場合には、\n", + "$$\n", + "\\operatorname { QPE } ( e ^ { i A 2\\pi } , \\sum_{j=0}^{N-1}b_{j}|0\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}} ) = \\sum_{j=0}^{N-1}b_{j}|\\lambda_{j}\\rangle_{n_{l}}|u_{j}\\rangle_{n_{b}}.\n", + "$$\n", + "となります。\n", + "\n", + "### D. 正確でない QPE の場合\n", + "\n", + "現実には、QPE を初期状態に適用したあとのレジスターの量子状態は、\n", + "$$\n", + "\\sum _ { j=0 }^{N-1} b _ { j } \\left( \\sum _ { l = 0 } ^ { 2 ^ { n_{l} } - 1 } \\alpha _ { l | j } |l\\rangle_{n_{l}} \\right)|u_{j}\\rangle_{n_{b}},\n", + "$$\n", + "です。ここで、\n", + "$$\n", + "\\alpha _ { l | j } = \\frac { 1 } { 2 ^ { n_{l} } } \\sum _ { k = 0 } ^ { 2^{n_{l}}- 1 } \\left( e ^ { 2 \\pi i \\left( \\frac { \\lambda _ { j } t } { 2 \\pi } - \\frac { l } { 2 ^ { n_{l} } } \\right) } \\right) ^ { k }.\n", + "$$\n", + "\n", + "$\\tilde{\\lambda_{j}}$ で表すのは、 $\\lambda_{j}$, $1\\leq j\\leq N$ に対する ベストな $n_{l}$ビット近似です。次に、$n_{l}$-レジスターを再ラベルし、$\\alpha _ { l | j }$ が $|l + \\tilde { \\lambda } _ { j } \\rangle_{n_{l}}$ の振幅を表すようにします。そうすると、以下のように変形できます。\n", + "$$\n", + "\\alpha _ { l | j } : = \\frac { 1 } { 2 ^ { n_{l}} } \\sum _ { k = 0 } ^ { 2 ^ { n_{l} } - 1 } \\left( e ^ { 2 \\pi i \\left( \\frac { \\lambda _ { j } t } { 2 \\pi } - \\frac { l + \\tilde { \\lambda } _ { j } } { 2 ^ { n_{l} } } \\right) } \\right) ^ { k }.\n", + "$$\n", + "各 $\\frac { \\lambda _ { j } t } { 2 \\pi }$ が $n_{l}$ バイナリービットで正確に表現できる場合には、$\\frac { \\lambda _ { j } t } { 2 \\pi }=\\frac { \\tilde { \\lambda } _ { j } } { 2 ^ { n_{l} } }$ $\\forall j$ となります。従って、$\\forall j$, $1\\leq j \\leq N$ の場合は、 $\\alpha _ { 0 | j } = 1$ と $\\alpha _ { l | j } = 0 \\quad \\forall l \\neq 0$ を保持します。この場合のみ、QPE を適用した後のレジスターの状態を次のように書けます。\n", + "$$\n", + "\t\\sum_{j=0}^{N-1} b _ { j } |\\lambda _ {j }\\rangle_{n_{l}} |u_{j}\\rangle_{n_{b}}.\n", + "$$\n", + "それ以外の場合は、 $|\\alpha _ { l | j }|$ は $\\frac { \\lambda _ { j } t } { 2 \\pi } \\approx \\frac { l + \\tilde { \\lambda } _ { j } } { 2 ^ { n_{l} } }$ の場合のみ大きく、レジスターの状態は次のようになります。\n", + "$$\n", + "\\sum _ { j=0 }^{N-1} \\sum _ { l = 0 } ^ { 2 ^ { n_{l} } - 1 } \\alpha _ { l | j } b _ { j }|l\\rangle_{n_{l}} |u_{j}\\rangle_{n_{b}}.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 例: 4量子ビット HHL\n", + "\n", + "はじめにのセクションで紹介した小さな例をとってアルゴリズムを説明しましょう。こうでした。\n", + "$$A = \\begin{pmatrix}1 & -1/3\\\\-1/3 & 1 \\end{pmatrix}\\quad , \\quad |b\\rangle=\\begin{pmatrix}1 \\\\ 0\\end{pmatrix}.$$\n", + "\n", + "$|b\\rangle$ には $n_{b}=1$ 量子ビットを利用し、解 $|x\\rangle$ には、$n_{l}=2$ 量子ビットを固有値のバイナリー表現を利用し、$1$ 補助量子ビットを制御回転に利用します。このようにするとアルゴリズムが成功します。\n", + "\n", + "アルゴリズムの例示のため、少しごまかして $A$ の固有値を計算して、$n_{l}$-レジスターの再スケールされた固有値の正確なバイナリー表現を得るために、 $t$ を選択できるようにします。なお、HHL アルゴリズムの実装には固有値の事前知識は必要ないことは心に留めてください。とは言ったものの、簡単に計算すると、\n", + "$$\\lambda_{1} = 2/3\\quad , \\quad\\lambda_{2}=4/3.$$\n", + "が得られます。\n", + "\n", + "前のセクションを思い出すと、 QPE は $\\frac{\\lambda_ { j }t}{2\\pi}$ に対する $n_{l}$ビット (この例では $2$ビット) バイナリー近似を出力するものでした。従って、 \n", + "$$t=2\\pi\\cdot \\frac{3}{8},$$\n", + "を設定すると、QPE は\n", + "$$\\frac{\\lambda_ { 1 }t}{2\\pi} = 1/4\\quad , \\quad\\frac{\\lambda_ { 2 }t}{2\\pi}=1/2,$$\n", + "への$2$ビットバイナリー近似を与えます。これらはそれぞれ、\n", + "$$|01\\rangle_{n_{l}}\\quad , \\quad|10\\rangle_{n_{l}}.$$\n", + "に対応します。\n", + "\n", + "固有ベクトルはそれぞれ、\n", + "$$|u_{1}\\rangle=\\begin{pmatrix}1 \\\\ -1\\end{pmatrix}\\quad , \\quad|u_{2}\\rangle=\\begin{pmatrix}1 \\\\ 1\\end{pmatrix}.$$\n", + "再度、HHL の実装には固有ベクトルの計算は必要ないことを心に銘記してください。事実、$N$ 次元の一般的なエルミート行列 $A$ は $N$ 個の異なる固有値を持つことがあり、従って計算には $\\mathcal{O}(N)$ 時間かかるので、量子アドバンテージが失われてしまいます。\n", + "\n", + "次に、$A$ の固有基底で $|b\\rangle$ が次のように書けます。\n", + "$$|b\\rangle _{n_{b}}=\\sum_{j=0}^{N-1}\\frac{1}{\\sqrt{2}}|u_{j}\\rangle _{n_{b}}.$$\n", + "\n", + "ここで、HHL アルゴリズムを適用する準備が整いましたので、ひとつひとつ見ていきます。\n", + "\n", + "1. この例における初期状態準備は簡単です。 $|b\\rangle=|0\\rangle$。\n", + "2. QPE を適用します。\n", + "$$\n", + "\\frac{1}{\\sqrt{2}}|01\\rangle|u_{1}\\rangle + \\frac{1}{\\sqrt{2}}|10\\rangle|u_{2}\\rangle.\n", + "$$\n", + "3. 固有値を再スケールした結果を補うため $C=3/8$ で制御回転させます。\n", + "$$\\frac{1}{\\sqrt{2}}|01\\rangle|u_{1}\\rangle\\left( \\sqrt { 1 - \\frac { (3/8)^{2} } {(1/4)^{2} } } |0\\rangle + \\frac { 3/8 } { 1/4 } |1\\rangle \\right) + \\frac{1}{\\sqrt{2}}|10\\rangle|u_{2}\\rangle\\left( \\sqrt { 1 - \\frac { (3/8)^{2} } {(1/2)^{2} } } |0\\rangle + \\frac { 3/8 } { 1/2 } |1\\rangle \\right)\n", + "$$\n", + "$$\n", + "=\\frac{1}{\\sqrt{2}}|01\\rangle|u_{1}\\rangle\\left( \\sqrt { 1 - \\frac { 9 } {4 } } |0\\rangle + \\frac { 3 } { 2 } |1\\rangle \\right) + \\frac{1}{\\sqrt{2}}|10\\rangle|u_{2}\\rangle\\left( \\sqrt { 1 - \\frac { 9 } {16 } } |0\\rangle + \\frac { 3 } { 4 } |1\\rangle \\right).\n", + "$$\n", + "4. QPE$^{\\dagger}$ を量子コンピューターで適用した後は、次の状態になります。\n", + "$$\n", + "\\frac{1}{\\sqrt{2}}|00\\rangle|u_{1}\\rangle\\left( \\sqrt { 1 - \\frac { 9 } {4 } } |0\\rangle + \\frac { 3 } { 2 } |1\\rangle \\right) + \\frac{1}{\\sqrt{2}}|00\\rangle|u_{2}\\rangle\\left( \\sqrt { 1 - \\frac { 9 } {16 } } |0\\rangle + \\frac { 3 } { 4 } |1\\rangle \\right).\n", + "$$\n", + "5. 補助ビットを計測し、$1$ が出た場合には状態は次のようになります。\n", + "$$\n", + "\\frac{\\frac{1}{\\sqrt{2}}|00\\rangle|u_{1}\\rangle\\frac { 3 } { 2 } |1\\rangle + \\frac{1}{\\sqrt{2}}|00\\rangle|u_{2}\\rangle\\frac { 3 } { 4 } |1\\rangle}{\\sqrt{45/32}}.\n", + "$$\n", + "簡単に計算すると:\n", + "$$\n", + "\\frac{\\frac{3}{2\\sqrt{2}}|u_{1}\\rangle+ \\frac{3}{4\\sqrt{2}}|u_{2}\\rangle}{\\sqrt{45/32}} = \\frac{|x\\rangle}{||x||}.\n", + "$$\n", + "6. 追加のゲートを利用しなくても、$|x\\rangle$ のノルムを計算できます、それは前のステップで補助ビットを $1$ で測定する確率になります。\n", + "$$\n", + "P[|1\\rangle] = \\left(\\frac{3}{2\\sqrt{2}}\\right)^{2} + \\left(\\frac{3}{4\\sqrt{2}}\\right)^{2} = \\frac{45}{32} = |||x\\rangle||^{2}.\n", + "$$\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Qiskit 実装" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "例を利用して問題を分析的に解きましたが、HHL を量子シミュレーターと実ハードウェアで実行することを示したいと思います。量子シミュレーターの場合は、Qiskit Aqua に行列$A$ と $|b\\rangle$ を基本入力として要求する HHL アルゴリズム実装が既に提供されています。主なアドバンテージは一般的なエルミート行列と任意の初期状態を入力することができる点です。これが意味することは、このアルゴリズムは一般の目的のために設計されており、特定の問題のための回路の最適化は実施しないということです。そのため、既存の実ハードウェアで実行することが目的の場合には問題が生じます。この章を記述している時点で、既存の量子コンピューターはノイズがあり、小さな回路しか実行できません。そのため、セクション[4.B.](#implementationdev)では、この例が帰属する問題のクラスに利用できる最適化された回路を見ることにし、ノイズのある量子コンピューターに対する既存の処理方法について述べます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A. HHL をシミュレーターで実行する: 一般的な方法" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskit Aqua が提供する HHL アルゴリズムを実行するには、適切なモジュールをインポートし以下のようにパラメータをセットするだけです。いままで見てきた例では、ハミルトニアンシミュレーションの時間を $t=2\\pi\\cdot \\frac{3}{8}$ にセットしましたが、固有値の知識が必要ないことを示すためこのパラメータをセットしないでシミュレーションを実行してみます。それにも関わらず、行列がある構造がある場合には、固有値情報を得て適切な $t$ を選択し HHLが返す解の精度を向上させることができるかも知れません。8の演習で、$t=2\\pi\\cdot \\frac{3}{8}$ をセットし正常に実行されると解のフィデリティーは $1$ になることを確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import Aer\n", + "from qiskit.circuit.library import QFT\n", + "from qiskit.aqua import QuantumInstance, aqua_globals\n", + "from qiskit.quantum_info import state_fidelity\n", + "from qiskit.aqua.algorithms import HHL, NumPyLSsolver\n", + "from qiskit.aqua.components.eigs import EigsQPE\n", + "from qiskit.aqua.components.reciprocals import LookupRotation\n", + "from qiskit.aqua.operators import MatrixOperator\n", + "from qiskit.aqua.components.initial_states import Custom\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def create_eigs(matrix, num_ancillae, num_time_slices, negative_evals):\n", + " ne_qfts = [None, None]\n", + " if negative_evals:\n", + " num_ancillae += 1\n", + " ne_qfts = [QFT(num_ancillae - 1), QFT(num_ancillae - 1).inverse()]\n", + "\n", + " return EigsQPE(MatrixOperator(matrix=matrix),\n", + " QFT(num_ancillae).inverse(),\n", + " num_time_slices=num_time_slices,\n", + " num_ancillae=num_ancillae,\n", + " expansion_mode='suzuki',\n", + " expansion_order=2,\n", + " evo_time=None, # This is t, can set to: np.pi*3/4\n", + " negative_evals=negative_evals,\n", + " ne_qfts=ne_qfts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次の関数を使って HHL アルゴリズムが返した解のフィデリティーを計算します。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def fidelity(hhl, ref):\n", + " solution_hhl_normed = hhl / np.linalg.norm(hhl)\n", + " solution_ref_normed = ref / np.linalg.norm(ref)\n", + " fidelity = state_fidelity(solution_hhl_normed, solution_ref_normed)\n", + " print(\"Fidelity:\\t\\t %f\" % fidelity)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "matrix = [[1, -1/3], [-1/3, 1]]\n", + "vector = [1, 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "orig_size = len(vector)\n", + "matrix, vector, truncate_powerdim, truncate_hermitian = HHL.matrix_resize(matrix, vector)\n", + "\n", + "# Initialize eigenvalue finding module\n", + "eigs = create_eigs(matrix, 3, 50, False)\n", + "num_q, num_a = eigs.get_register_sizes()\n", + "\n", + "# Initialize initial state module\n", + "init_state = Custom(num_q, state_vector=vector)\n", + "\n", + "# Initialize reciprocal rotation module\n", + "reci = LookupRotation(negative_evals=eigs._negative_evals, evo_time=eigs._evo_time)\n", + "\n", + "algo = HHL(matrix, vector, truncate_powerdim, truncate_hermitian, eigs,\n", + " init_state, reci, num_q, num_a, orig_size)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$t=2\\pi\\cdot \\frac{3}{8}$ を選択した理由は固有値を再スケールさせるためでした。今はこの場合に当てはまらないので、表現は近似になり、QPE は非正確で結果の解も近似になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Solution:\t\t [1.13586-0.j 0.40896+0.j]\n", + "Classical Solution:\t [1.125 0.375]\n", + "Probability:\t\t 0.056291\n", + "Fidelity:\t\t 0.999432\n" + ] + } + ], + "source": [ + "result = algo.run(QuantumInstance(Aer.get_backend('statevector_simulator')))\n", + "print(\"Solution:\\t\\t\", np.round(result['solution'], 5))\n", + "\n", + "result_ref = NumPyLSsolver(matrix, vector).run()\n", + "print(\"Classical Solution:\\t\", np.round(result_ref['solution'], 5))\n", + "\n", + "print(\"Probability:\\t\\t %f\" % result['probability_result'])\n", + "fidelity(result['solution'], result_ref['solution'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アルゴリズムは利用したリソースを出力します。depth は単一量子ビットに適用されたゲート数の最大値で、width は利用した量子ビットの数として定義されます。また、CNOT の数も出力してみます。この数をもちいて、実行している回路が現在の実ハードウェアで実行することができるかを判断することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "circuit_width:\t 7\n", + "circuit_depth:\t 102\n", + "CNOT gates:\t 54\n" + ] + } + ], + "source": [ + "print(\"circuit_width:\\t\", result['circuit_info']['width'])\n", + "print(\"circuit_depth:\\t\", result['circuit_info']['depth'])\n", + "print(\"CNOT gates:\\t\", result['circuit_info']['operations']['cx'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## B. HHL を実量子デバイスで実行する:最適化例" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前のセクションでは Qiskit が提供する標準のアルゴリズムを実行し、$7$ 量子ビットを利用し、depth が $102$ ゲートで、かつ $54$ CNOTゲートを利用しているのを見ました。この数は現在利用可能なハードウェアで実行するには不適切で、量を減らす必要があります。特にゴールは単一量子ゲートに比べフィデリティーが悪化する CNOTの数を $10$ のファクターで減らすことです。さらに量子ビットの数を $4$ にします。これはもともとの問題での数です。Qiskit の方法は一般的な問題のために書かれているため、余分な $3$ 補助量子ビットが追加されました。\n", + "\n", + "ところが、単純にゲートや量子ビットの数を減らすだけでは実ハードウェア上の解としてよい近似が出てきません。二つのエラーソースが原因です:実行時に発生するものと読み取りエラーです。\n", + "\n", + "Qiskit には、個別に全ての基底状態を準備測定することで読み取りエラーを回避するモジュールが提供されています。このトピックの詳細は Dewes et al.[3](#readouterr) を参照してください。回路の実行時に発生するエラーを取り扱うために、回路を3回実行し、それぞれ CNOTゲートを $1$, $3$, $5$ CNOT で置き換えるという Richardson 外挿を利用します[4](#richardson)。\n", + "\n", + "理論的には3つの回路は同じ結果をもたらしますが、実ハードウェアでは CNOT を追加するということはエラーを増幅することになるというアイデアに基づきます。得られた結果がエラーが増幅したことによるということを知るので、それぞれの場合でどの程度エラーが増幅したのかを推定できます。これらの量を組み合わせることで、前の詳細な値よりも解析解により近い近似値をだすあたらしい結果を得ることができます。\n", + "\n", + "以下はどのようなフォームの問題でも利用できる最適化された回路です。\n", + "$$A = \\begin{pmatrix}a & b\\\\b & a \\end{pmatrix}\\quad , \\quad |b\\rangle=\\begin{pmatrix}\\cos(\\theta) \\\\ \\sin(\\theta)\\end{pmatrix},\\quad a,b,\\theta\\in\\mathbb{R}.$$\n", + "\n", + "以下の最適化は HHL for tridiagonal symmetric matrices[5](#tridi) での結果から引用したもので、特に回路は UniversalQCompiler software[6](#qcompiler) の助けを借りて導出しました。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth: 26\n", + "CNOTS: 10\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumRegister, QuantumCircuit\n", + "import numpy as np\n", + "\n", + "t = 2 # This is not optimal; As an exercise, set this to the\n", + " # value that will get the best results. See section 8 for solution.\n", + "\n", + "nqubits = 4 # Total number of qubits\n", + "nb = 1 # Number of qubits representing the solution\n", + "nl = 2 # Number of qubits representing the eigenvalues\n", + "\n", + "theta = 0 # Angle defining |b>\n", + "\n", + "a = 1 # Matrix diagonal\n", + "b = -1/3 # Matrix off-diagonal\n", + "\n", + "# Initialise the quantum and classical registers\n", + "qr = QuantumRegister(nqubits)\n", + "\n", + "# Create a Quantum Circuit\n", + "qc = QuantumCircuit(qr)\n", + "\n", + "qrb = qr[0:nb]\n", + "qrl = qr[nb:nb+nl]\n", + "qra = qr[nb+nl:nb+nl+1]\n", + "\n", + "# State preparation. \n", + "qc.ry(2*theta, qrb[0])\n", + " \n", + "# QPE with e^{iAt}\n", + "for qu in qrl:\n", + " qc.h(qu)\n", + "\n", + "qc.u1(a*t, qrl[0])\n", + "qc.u1(a*t*2, qrl[1])\n", + "\n", + "qc.u3(b*t, -np.pi/2, np.pi/2, qrb[0])\n", + "\n", + "\n", + "# Controlled e^{iAt} on \\lambda_{1}:\n", + "params=b*t\n", + "\n", + "qc.u1(np.pi/2,qrb[0])\n", + "qc.cx(qrl[0],qrb[0])\n", + "qc.ry(params,qrb[0])\n", + "qc.cx(qrl[0],qrb[0])\n", + "qc.ry(-params,qrb[0])\n", + "qc.u1(3*np.pi/2,qrb[0])\n", + "\n", + "# Controlled e^{2iAt} on \\lambda_{2}:\n", + "params = b*t*2\n", + "\n", + "qc.u1(np.pi/2,qrb[0])\n", + "qc.cx(qrl[1],qrb[0])\n", + "qc.ry(params,qrb[0])\n", + "qc.cx(qrl[1],qrb[0])\n", + "qc.ry(-params,qrb[0])\n", + "qc.u1(3*np.pi/2,qrb[0])\n", + "\n", + "# Inverse QFT\n", + "qc.h(qrl[1])\n", + "qc.rz(-np.pi/4,qrl[1])\n", + "qc.cx(qrl[0],qrl[1])\n", + "qc.rz(np.pi/4,qrl[1])\n", + "qc.cx(qrl[0],qrl[1])\n", + "qc.rz(-np.pi/4,qrl[0])\n", + "qc.h(qrl[0])\n", + "\n", + "# Eigenvalue rotation\n", + "t1=(-np.pi +np.pi/3 - 2*np.arcsin(1/3))/4\n", + "t2=(-np.pi -np.pi/3 + 2*np.arcsin(1/3))/4\n", + "t3=(np.pi -np.pi/3 - 2*np.arcsin(1/3))/4\n", + "t4=(np.pi +np.pi/3 + 2*np.arcsin(1/3))/4\n", + "\n", + "qc.cx(qrl[1],qra[0])\n", + "qc.ry(t1,qra[0])\n", + "qc.cx(qrl[0],qra[0])\n", + "qc.ry(t2,qra[0])\n", + "qc.cx(qrl[1],qra[0])\n", + "qc.ry(t3,qra[0])\n", + "qc.cx(qrl[0],qra[0])\n", + "qc.ry(t4,qra[0])\n", + "qc.measure_all()\n", + "\n", + "print(\"Depth: %i\" % qc.depth())\n", + "print(\"CNOTS: %i\" % qc.count_ops()['cx'])\n", + "qc.draw(fold=100)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のコードでは回路、実ハードウェアのバックエンド、及び利用したい量子ビットのセットを入力とし、特定のデバイスで実行した結果とインスタンス情報を出力します。\n", + "\n", + "実デバイスは定期的にキャリブレーションが必要なため、時間によっては特定の量子ビットもしくはゲートのフィデリティーが異なります。さらには、異なるチップは異なる接続性を持ちます。特定のデバイスで接続されていない2つの量子ビットゲートを実行する時には、トランスパイラーは SWAP を追加します。ですので、実行する前に、特定の時間で正しい接続性をもつかエラー率が低いかを IBM Q Experience Webページ[7](#qexperience) で確認することを推奨します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import execute, BasicAer, ClassicalRegister, IBMQ\n", + "from qiskit.compiler import transpile\n", + "from qiskit.ignis.mitigation.measurement import (complete_meas_cal, # Measurement error mitigation functions\n", + " CompleteMeasFitter, \n", + " MeasurementFilter)\n", + "\n", + "provider = IBMQ.load_account()\n", + "\n", + "backend = provider.get_backend('ibmqx2') # calibrate using real hardware\n", + "layout = [2,3,0,4]\n", + "chip_qubits = 5\n", + "\n", + "# Transpiled circuit for the real hardware\n", + "qc_qa_cx = transpile(qc, backend=backend, initial_layout=layout)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次のステップでは読み取りエラーを回避するための回路を追加しています[3](#readouterr)。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "meas_cals, state_labels = complete_meas_cal(qubit_list=layout, qr=QuantumRegister(chip_qubits))\n", + "qcs = meas_cals + [qc_qa_cx]\n", + "\n", + "shots = 10\n", + "job = execute(qcs, backend=backend, shots=shots, optimization_level=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次のプロットは [5](#tridi) 上記の回路を $10$ の異なる初期状態から実行して得られた結果を示しています。$x$軸は各々の場合の初期状態で定義される $\\theta$ 角です。結果は読み取りエラーを回避、$1$, $3$, $5$ の回路結果から得られたエラーを外挿した後の結果を表示しています。 \n", + "\n", + "\n", + "\n", + "以下はエラー回避や CNOT からの外挿がない場合の比較です [5](#tridi)。\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 8. 演習" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. 'evo_time': $2\\pi(3/8)$ でシミュレーションを実行する。フィデリティーが $1$ となることを確認せよ。\n", + "\n", + " ##### 実ハードウェア:\n", + "2. 最適化された例で時間のパラメータをセットする。\n", + "\n", + "
    \n", + " 解 (Click to expand)\n", + " t = 2.344915690192344\n", + "ベストな結果はこの値をセットします。逆数は解に対して大きな貢献をするので、最小の固有値が表現できるようになります。\n", + "
    \n", + "\n", + "2. 与えられた回路で $3$ と $5$ CNOTs を実行する。回路を作成する時には引き続く CNOT ゲートが transpile() メソッドでキャンセルされないようにバリアを追加する必要がある。\n", + "3. 実ハードウェアで回路を実行し、結果に対して2次フィットを適用し外挿の値を求めよ。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 9. 参考文献" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. J. R. Shewchuk. An Introduction to the Conjugate Gradient Method Without the Agonizing Pain. Technical Report CMU-CS-94-125, School of Computer Science, Carnegie Mellon University, Pittsburgh, Pennsylvania, March 1994. \n", + "2. A. W. Harrow, A. Hassidim, and S. Lloyd, “Quantum algorithm for linear systems of equations,” Phys. Rev. Lett. 103.15 (2009), p. 150502.\n", + "3. A. Dewes, F. R. Ong, V. Schmitt, R. Lauro, N. Boulant, P. Bertet, D. Vion, and D. Esteve, “Characterization of a two-transmon processor with individual single-shot qubit readout,” Phys. Rev. Lett. 108, 057002 (2012). \n", + "4. N. Stamatopoulos, D. J. Egger, Y. Sun, C. Zoufal, R. Iten, N. Shen, and S. Woerner, “Option Pricing using Quantum Computers,” arXiv:1905.02666 . \n", + "5. A. Carrera Vazquez, A. Frisch, D. Steenken, H. S. Barowski, R. Hiptmair, and S. Woerner, “Enhancing Quantum Linear System Algorithm by Richardson Extrapolation,” (to be included).\n", + "6. R. Iten, O. Reardon-Smith, L. Mondada, E. Redmond, R. Singh Kohli, R. Colbeck, “Introduction to UniversalQCompiler,” arXiv:1904.01072 .\n", + "7. https://quantum-computing.ibm.com/ .\n", + "8. D. Bucher, J. Mueggenburg, G. Kus, I. Haide, S. Deutschle, H. Barowski, D. Steenken, A. Frisch, \"Qiskit Aqua: Solving linear systems of equations with the HHL algorithm\" https://github.com/Qiskit/qiskit-tutorials/blob/master/legacy_tutorials/aqua/linear_systems_of_equations.ipynb" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-applications/image-processing-frqi-neqr.ipynb b/translations/ja/ch-applications/image-processing-frqi-neqr.ipynb new file mode 100644 index 0000000..b5e9b3b --- /dev/null +++ b/translations/ja/ch-applications/image-processing-frqi-neqr.ipynb @@ -0,0 +1,1538 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "画像処理は顔認証や自動運転のように急拡大中の市場において非常によく利用されています。それと同時に量子画像処理も現在台頭しつつある量子情報の一分野で、エッジ検出のように特定ではあるものの広く利用されている技術を大きく加速させる可能性を秘めています。[3], [4]。例えば2014年のZhang et al.ではFlexible Representation of Quantum Images (FRQI)と古典エッジ抽出アリゴリズムであるSobelを元にした量子エッジ抽出アルゴリズム (QSobel)が提唱されています。 QSobelは$2^{n} × 2^{n}$サイズのFRQI量子画像に対して$O(n^{2})$の計算複雑性でエッジを抽出可能であり、既存のエッジ抽出アルゴリズムを比較すると指数関数的加速となっています。 [3]\n", + "\n", + "この章では画像を量子状態にエンコードする手法としてFlexible Representation of Quantum Images (FRQI)とNovel Enhanced Quantum Representation (NEQR)の2つの手法を取り上げます。画像のエンコードが完了してしまえばQSobel [3]エッジ抽出アリゴリズムなどの量子アルゴリズムを使って画像処理が可能ですが、ここではエンコーディングについてのみ取り上げます。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# Flexible Representation of Quantum Images (FRQI)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Flexible Representation of Quantum Images (FRQI) [1]のゴールは古典データを量子状態に効率的にエンコードして後続の画像処理演算を可能にする量子表現を作り出すことです。\n", + "この場合、古典画像データを量子状態にエンコードするには多項式オーダーの数のゲートが必要です。\n", + "\n", + "## 1. FRQI状態\n", + "\n", + "画像を表現する量子状態は以下のように表せます。\n", + "\n", + "$$\n", + "\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle}\n", + "\\newcommand{\\bra}[1]{\\left\\langle{#1}\\right|}\n", + "\\newcommand{\\braket}[2]{\\left\\langle{#1}\\middle|{#2}\\right\\rangle}\n", + "\\ket{I(\\theta)}=\\frac{1}{2^{n} }\\sum_{i=0}^{2^{2n}-1}\\left(\\cos \\theta_{i}\\ket{0}+\\sin\\theta_{i}\\ket{1}\\right)\\otimes\\ket{i}\n", + "\\label{eq:FRQI_state} \\tag{1.1}\n", + "$$\n", + "\n", + "$$\n", + " \\theta_{i}\\in\\left[ 0,\\frac{\\pi}{2}\\right], i = 0,1,\\cdots,2^{2n}-1\n", + " \\label{eq:FRQI_angle} \\tag{1.2}\n", + "$$\n", + "\n", + "FRQI状態は式$\\eqref{eq:FRQI_state}$において$\\left\\|I(\\theta)\\right\\|=1$であるように規格化された状態であり、2つの状態から構成されています。\n", + "\n", + "* 色の情報をエンコードした状態: $\\cos\\theta_{i}\\ket{0}+\\sin\\theta_{i}\\ket{1}$ \n", + "* 関連ピクセルの位置をエンコードした状態: $\\ket{i}$\n", + "\n", + "シンプルな例として、$2\\times2$の画像の角度$\\theta$(色情報をエンコード)と関連するケットベクトル(位置情報のエンコード)を以下に示します。\n", + "\n", + "$$\n", + "\\begin{array}{|c|c|}\n", + "\\hline\n", + "\\theta_{0},\\ket{00} & \\theta_{1},\\ket{01} \\\\\n", + "\\hline\n", + "\\theta_{2},\\ket{10} & \\theta_{3},\\ket{11} \\\\\n", + "\\hline\n", + "\\end{array}\n", + "$$\n", + "\n", + "量子状態は次のように表すことが出来ます。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\ket{I}=\\frac{1}{2}[ \\; & \\phantom{+} \\left(\\cos\\theta_{0}\\ket{0}+\\sin\\theta_{0}\\ket{1} \\right)\\otimes\\ket{00}&\\\\\n", + "& + \\left(\\cos\\theta_{1}\\ket{0}+\\sin\\theta_{1}\\ket{1} \\right)\\otimes\\ket{01} \\\\\n", + "& + \\left(\\cos\\theta_{2}\\ket{0}+\\sin\\theta_{2}\\ket{1} \\right)\\otimes\\ket{10}\\\\\n", + "& + \\left(\\cos\\theta_{3}\\ket{0}+\\sin\\theta_{3}\\ket{1} \\right)\\otimes\\ket{11} \\;]\n", + "\\end{aligned}\n", + "\\label{eq:22state} \\tag{1.3}\n", + "$$\n", + "\n", + "## 2. FRQI状態を構成する: 2つのステップ\n", + "\n", + "初期状態$\\ket{0}^{\\otimes2n+1}$から式$\\eqref{eq:FRQI_state}$のFRQI状態を構築するためには2つのステップが必要で、まず始めに量子系を完全に重ね合わせの状態にする必要があります。ただし、最後の量子ビットだけは色情報をエンコードするために使用するため重ね合わせの対象から外します。$H^{\\otimes2n}$は2n個のアダマールゲートのテンソル積であり、中間状態は以下のようになります。\n", + "\n", + "$$\n", + "\\ket{H}=\\frac{1}{2^{n} }\\ket{0}\\otimes\\sum_{i=0}^{2^{2n}-1}\\ket{i}=\\mathcal{H}\\left(\\ket{0}^{\\otimes2n+1}\\right)\n", + "\\label{eq:superpos} \\tag{2.1}\n", + "$$\n", + "\n", + "[1]にあるように、初期状態$\\ket{0}^{\\otimes2n+1}$からFRQI状態$I(\\theta)$に変換するためのユニタリ変換$\\mathcal{P}=\\mathcal{RH}$が存在します。\n", + "\n", + "$$\n", + "\\mathcal{R}\\ket{H}=\\left(\\prod_{i=0}^{2^{2n}-1}R_{i}\\right)\\ket{H}=\\ket{I(\\theta)}\n", + "\\tag{2.2}\n", + "$$\n", + "\n", + "$R_{i}$操作は次のように定義される制御回転行列です。\n", + "\n", + "$$\n", + "R_{i}=\\left( I\\otimes \\sum^{2^{2n}-1}_{j=0,j\\neq i}\\ket{j}\\bra{j}\\right) + R_{y}\\left(2\\theta_{i}\\right)\\otimes\\ket{i}\\bra{i} \\tag{2.3}\n", + "$$\n", + "\n", + "$R_{y}(2\\theta_{i})$は通常の回転行列です。\n", + "\n", + "$$\n", + "R_{y}(2\\theta_{i})=\n", + "\\begin{pmatrix}\n", + "\\cos\\theta_{i} & -\\sin\\theta_{i}\\\\\n", + "\\sin\\theta_{i} & \\cos\\theta_{i} \n", + "\\end{pmatrix} \\tag{2.4}\n", + "$$\n", + "\n", + "制御回転は通常の回転ゲートと$CNOT$ゲートで書き下される一般化された $C^{2n}\\left( R_{y}(2\\theta_{i}) \\right) $で実装することが出来ます。\n", + "例えば$n=1$の$4$ ピクセル ($2\\times2$の画像)の場合、次のように表現が可能であり簡単に実装が可能です。\n", + "\n", + "\n", + "![](images/circ_eq.png \"Circuit Equivalence\") \n", + "\n", + "ここでピクセル位置の増大には配慮する必要はありますが、これは$X$ゲートの役割です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 実装と測定 : 2×2のグレースケール画像\n", + "\n", + "バリアは個々のピクセルに関連する別々のブロックを区別するために使われます。\n", + "またグレースケール画像(LRGB画像のLの要素)という、色情報のエンコードのため関心のある値が強度のみの画像を用います。つまり、全ての$\\theta_{i}$の値が0の場合全てのピクセルが黒で、全ての$\\theta_{i}$の値が$\\pi/2$の場合全てのピクセルが白となります。この時関心のある値は$0, \\pi/4$ そして$\\pi/2$です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 例 1 : $\\theta_{i}=0 \\;, \\; \\forall i$ - 全ピクセルが最小強度" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Importing standard Qiskit libraries and configuring account\n", + "import qiskit as qk\n", + "from qiskit import QuantumCircuit, Aer, IBMQ\n", + "from qiskit import transpile, assemble\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.visualization import plot_histogram\n", + "from math import pi" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
            ┌───┐ ░                                       ░                    »\n",
    +       "   q_0: ┤ H ├─░─────■──────■─────────────■────────────░──────────■──────■──»\n",
    +       "        ├───┤ ░     │    ┌─┴─┐         ┌─┴─┐          ░ ┌───┐    │    ┌─┴─┐»\n",
    +       "   q_1: ┤ H ├─░─────┼────┤ X ├────■────┤ X ├────■─────░─┤ X ├────┼────┤ X ├»\n",
    +       "        └───┘ ░ ┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐ ░ └───┘┌───┴───┐└───┘»\n",
    +       "   q_2: ──────░─┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├─░──────┤ RY(0) ├─────»\n",
    +       "              ░ └───────┘     └───────┘     └───────┘ ░      └───────┘     »\n",
    +       "meas: 3/═══════════════════════════════════════════════════════════════════»\n",
    +       "                                                                           »\n",
    +       "«                                ░ ┌───┐                                     »\n",
    +       "«   q_0: ───────────■────────────░─┤ X ├────■──────■─────────────■───────────»\n",
    +       "«                 ┌─┴─┐          ░ ├───┤    │    ┌─┴─┐         ┌─┴─┐         »\n",
    +       "«   q_1: ────■────┤ X ├────■─────░─┤ X ├────┼────┤ X ├────■────┤ X ├────■────»\n",
    +       "«        ┌───┴───┐└───┘┌───┴───┐ ░ └───┘┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐»\n",
    +       "«   q_2: ┤ RY(0) ├─────┤ RY(0) ├─░──────┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├»\n",
    +       "«        └───────┘     └───────┘ ░      └───────┘     └───────┘     └───────┘»\n",
    +       "«meas: 3/════════════════════════════════════════════════════════════════════»\n",
    +       "«                                                                            »\n",
    +       "«         ░                                            ░ ┌─┐      \n",
    +       "«   q_0: ─░──────────■──────■─────────────■────────────░─┤M├──────\n",
    +       "«         ░ ┌───┐    │    ┌─┴─┐         ┌─┴─┐          ░ └╥┘┌─┐   \n",
    +       "«   q_1: ─░─┤ X ├────┼────┤ X ├────■────┤ X ├────■─────░──╫─┤M├───\n",
    +       "«         ░ └───┘┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐ ░  ║ └╥┘┌─┐\n",
    +       "«   q_2: ─░──────┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├─░──╫──╫─┤M├\n",
    +       "«         ░      └───────┘     └───────┘     └───────┘ ░  ║  ║ └╥┘\n",
    +       "«meas: 3/═════════════════════════════════════════════════╩══╩══╩═\n",
    +       "«                                                         0  1  2 
    " + ], + "text/plain": [ + " ┌───┐ ░ ░ »\n", + " q_0: ┤ H ├─░─────■──────■─────────────■────────────░──────────■──────■──»\n", + " ├───┤ ░ │ ┌─┴─┐ ┌─┴─┐ ░ ┌───┐ │ ┌─┴─┐»\n", + " q_1: ┤ H ├─░─────┼────┤ X ├────■────┤ X ├────■─────░─┤ X ├────┼────┤ X ├»\n", + " └───┘ ░ ┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐ ░ └───┘┌───┴───┐└───┘»\n", + " q_2: ──────░─┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├─░──────┤ RY(0) ├─────»\n", + " ░ └───────┘ └───────┘ └───────┘ ░ └───────┘ »\n", + "meas: 3/═══════════════════════════════════════════════════════════════════»\n", + " »\n", + "« ░ ┌───┐ »\n", + "« q_0: ───────────■────────────░─┤ X ├────■──────■─────────────■───────────»\n", + "« ┌─┴─┐ ░ ├───┤ │ ┌─┴─┐ ┌─┴─┐ »\n", + "« q_1: ────■────┤ X ├────■─────░─┤ X ├────┼────┤ X ├────■────┤ X ├────■────»\n", + "« ┌───┴───┐└───┘┌───┴───┐ ░ └───┘┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐»\n", + "« q_2: ┤ RY(0) ├─────┤ RY(0) ├─░──────┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├»\n", + "« └───────┘ └───────┘ ░ └───────┘ └───────┘ └───────┘»\n", + "«meas: 3/════════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« ░ ░ ┌─┐ \n", + "« q_0: ─░──────────■──────■─────────────■────────────░─┤M├──────\n", + "« ░ ┌───┐ │ ┌─┴─┐ ┌─┴─┐ ░ └╥┘┌─┐ \n", + "« q_1: ─░─┤ X ├────┼────┤ X ├────■────┤ X ├────■─────░──╫─┤M├───\n", + "« ░ └───┘┌───┴───┐└───┘┌───┴───┐└───┘┌───┴───┐ ░ ║ └╥┘┌─┐\n", + "« q_2: ─░──────┤ RY(0) ├─────┤ RY(0) ├─────┤ RY(0) ├─░──╫──╫─┤M├\n", + "« ░ └───────┘ └───────┘ └───────┘ ░ ║ ║ └╥┘\n", + "«meas: 3/═════════════════════════════════════════════════╩══╩══╩═\n", + "« 0 1 2 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "theta = 0 # all pixels black\n", + "qc = QuantumCircuit(3)\n", + "\n", + "\n", + "qc.h(0)\n", + "qc.h(1)\n", + "\n", + "qc.barrier()\n", + "#Pixel 1\n", + "\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.barrier()\n", + "#Pixel 2\n", + "\n", + "qc.x(1)\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.barrier()\n", + "\n", + "qc.x(1)\n", + "qc.x(0)\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "\n", + "qc.barrier()\n", + "\n", + "qc.x(1)\n", + "\n", + "qc.cry(theta,0,2)\n", + "qc.cx(0,1)\n", + "qc.cry(-theta,1,2)\n", + "qc.cx(0,1)\n", + "qc.cry(theta,1,2)\n", + "\n", + "qc.measure_all()\n", + "\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.1.1 測定と画像検索\n", + "\n", + "$\\eqref{eq:22state}$からFRQI状態のカラーエンコーディングの部分で状態$\\ket{1}$に関わる全ての項は、$\\theta=0$により消えてしまうので、等確率な4状態のみ観測が期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'000': 1047, '001': 1029, '010': 1017, '011': 1003}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qasm_sim = Aer.get_backend('qasm_simulator')\n", + "t_qc = transpile(qc, qasm_sim)\n", + "qobj = assemble(t_qc, shots=4096)\n", + "result = qasm_sim.run(qobj).result()\n", + "counts = result.get_counts(qc)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 例2 : $\\theta_{i}=\\pi/2 \\;, \\; \\forall i$ - 全てのピクセルが最大強度" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路は$\\theta$の値を除いて最初に定義した回路と同一です。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "theta = pi/2 # all pixels white\n", + "qc1 = QuantumCircuit(3)\n", + "\n", + "qc1.h(0)\n", + "qc1.h(1)\n", + "\n", + "qc1.barrier()\n", + "#Pixel 1\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.barrier()\n", + "#Pixel 2\n", + "\n", + "qc1.x(1)\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.barrier()\n", + "\n", + "qc1.x(1)\n", + "qc1.x(0)\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "\n", + "qc1.barrier()\n", + "\n", + "qc1.x(1)\n", + "\n", + "qc1.cry(theta,0,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(-theta,1,2)\n", + "qc1.cx(0,1)\n", + "qc1.cry(theta,1,2)\n", + "\n", + "qc1.measure_all()\n", + "\n", + "qc1.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.2.1 測定と画像検索\n", + "\n", + "今回の場合$\\eqref{eq:22state}$において$\\cos$の項が消えてしまうため、最初の量子ビットの状態が1である等確率な4状態が観測されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'100': 1026, '101': 1010, '110': 1051, '111': 1009}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qasm_sim = Aer.get_backend('qasm_simulator')\n", + "t_qc1 = transpile(qc1, qasm_sim)\n", + "qobj = assemble(t_qc1, shots=4096)\n", + "result = qasm_sim.run(qobj).result()\n", + "counts = result.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 例3 : $\\theta_{i}=\\pi/4 \\;, \\; \\forall i$ - 全てのピクセルが$50\\%$の強度" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "theta = pi/4 # all pixels white\n", + "qc2 = qk.QuantumCircuit(3)\n", + "\n", + "qc2.h(0)\n", + "qc2.h(1)\n", + "\n", + "qc2.barrier()\n", + "#Pixel 1\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.barrier()\n", + "#Pixel 2\n", + "\n", + "qc2.x(1)\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.barrier()\n", + "\n", + "qc2.x(1)\n", + "qc2.x(0)\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "\n", + "qc2.barrier()\n", + "\n", + "qc2.x(1)\n", + "\n", + "qc2.cry(theta,0,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(-theta,1,2)\n", + "qc2.cx(0,1)\n", + "qc2.cry(theta,1,2)\n", + "\n", + "qc2.measure_all()\n", + "\n", + "qc2.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 3.3.1 測定と画像検索\n", + "今回の場合は8状態全ての観測が期待されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'000': 529, '001': 506, '010': 476, '011': 519, '100': 513, '101': 543, '110': 514, '111': 496}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qasm_sim = Aer.get_backend('qasm_simulator')\n", + "t_qc2 = transpile(qc2, qasm_sim)\n", + "qobj = assemble(t_qc2, shots=4096)\n", + "result = qasm_sim.run(qobj).result()\n", + "counts = result.get_counts(qc2)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 回路の分析と実機での実行\n", + "これまでの回路の違いは回転角$\\theta$だけだったので、このクラスの回路(2×2画像)の深さや必要なゲート数を確認することが出来ます。\n", + "\n", + "### 4.1 回路の分析\n", + "\n", + "例として$\\theta_{i}=\\pi/2 \\;, \\; \\forall i$(全てのピクセルが最大強度)の場合の回路を考えてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth : 23\n", + "Operations: OrderedDict([('cry', 12), ('cx', 8), ('barrier', 5), ('x', 4), ('measure', 3), ('h', 2)])\n" + ] + } + ], + "source": [ + "print(\"Depth : \", qc1.depth())\n", + "print(\"Operations: \", qc1.count_ops())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それほど複雑には見えませんが、トランスパイラーで展開しようとすると少しだけより複雑になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.compiler import transpile\n", + "from qiskit.transpiler import PassManager\n", + "from qiskit.transpiler.passes import Unroller\n", + "pass_ = Unroller(['u3', 'cx'])\n", + "pm = PassManager(pass_)\n", + "new_circ = pm.run(qc1)\n", + "new_circ.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Depth : 50\n", + "Operations: OrderedDict([('cx', 32), ('u3', 30), ('barrier', 5), ('measure', 3)])\n" + ] + } + ], + "source": [ + "print(\"Depth : \", new_circ.depth())\n", + "print(\"Operations: \", new_circ.count_ops())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "例で挙げた回路の深さは倍になりました。\n", + "\n", + "デバイスのcoupling map(例: Athens)を使ってトランスパイルした結果は実機で実行する回路により近づきました。最適化レベルを3にしてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gates = OrderedDict([('cx', 55), ('u3', 29), ('u2', 20), ('barrier', 5), ('measure', 3)])\n", + "depth = 82\n" + ] + } + ], + "source": [ + "from qiskit.test.mock import FakeAthens\n", + "fake_athens = FakeAthens()\n", + "# The device coupling map is needed for transpiling to correct\n", + "# CNOT gates before simulation\n", + "coupling_map = fake_athens.configuration().coupling_map\n", + "optimized_3 = transpile(qc1, backend=fake_athens, seed_transpiler=11, optimization_level=3)\n", + "print('gates = ', optimized_3.count_ops())\n", + "print('depth = ', optimized_3.depth())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 実機での実行\n", + "実機で実行する準備が整いました。ここでは(fake)Athensを使いますが、実機でも同じコードを実行可能です。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'000': 283, '001': 210, '010': 252, '011': 194, '100': 758, '101': 795, '110': 798, '111': 806}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_qc1 = transpile(qc1, fake_athens, optimization_level=3)\n", + "qobj = assemble(t_qc1, shots=4096)\n", + "result = fake_athens.run(qobj).result()\n", + "counts = result.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "得られた結果はデバイスのノイズのせいで期待した結果とはなっていません。理想的な回路のシミュレーションは以下のようになります。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'100': 1007, '101': 1016, '110': 1002, '111': 1071}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qasm_sim = Aer.get_backend('qasm_simulator')\n", + "qobj = assemble(t_qc1, shots=4096)\n", + "result = qasm_sim.run(qobj).result()\n", + "counts = result.get_counts(qc1)\n", + "print(counts)\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 圧縮\n", + "\n", + "エンコードする画像が大きくなってエンコード用の量子回路の深さが深くなるほど、回路の複雑さ($CNOT$ゲートの深さや数)を減らすためのいかなる取り組みも大きな差を生み出すことは明らかです。\n", + "\n", + "圧縮はピクセルを同じ強度でグルーピングすることで実現することが出来ます。それぞれのピクセルを区別するのは位置をエンコードするバイナリ文字列ですが、制御回転の回転角は共通しています。次のような画像の例を考えてみましょう。\n", + "\n", + "![](images/8x8_2col.png \"8x8 2 colours image\") \n", + "\n", + "\n", + "青のピクセルの位置は$\\ket{0}, \\ket{8}, \\ket{16}, \\ket{24}, \\ket{32}, \\ket{40}, \\ket{48}$ そして $\\ket{56}$に対応します。各々のバイナリ表現とブール表現は以下のようになります。\n", + "\n", + "\\begin{array}{|c|c|c|}\n", + "\\hline\n", + "position & binary \\; string & boolean \\; expression \\\\\n", + "\\hline\n", + "\\ket{0} &\\ket{000000} & \\overline{x_{5}}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{8} &\\ket{001000} & \\overline{x_{5}}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{16} &\\ket{010000} & \\overline{x_{5}}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{24} &\\ket{011000} & \\overline{x_{5}}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{32} &\\ket{100000} & x_{5}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{40} &\\ket{101000} & x_{5}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{48} &\\ket{110000} & x_{5}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\ket{56} &\\ket{111000} & x_{5}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} \\\\\n", + "\\hline\n", + "\\end{array}\n", + "\n", + "ブール表現は簡略化、最小化することで次のように表現されます。\n", + "\n", + "$exp = \\overline{x_{5}}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+\\overline{x_{5}}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{5}x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}$\n", + "\n", + "\\begin{align*}\n", + "exp&=(\\overline{x_{5}}+x_{5})(\\overline{x_{4}}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}} +\\overline{x_{4}}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{4}\\overline{x_{3}}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}+x_{4}x_{3}\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}})\\\\\n", + " &=\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}(\\overline{x_{4}}\\overline{x_{3}}+\\overline{x_{4}}x_{3}+x_{4}\\overline{x_{3}}+x_{4}x_{3})\\\\\n", + " &=\\overline{x_{2}}\\overline{x_{1}}\\overline{x_{0}}\n", + "\\end{align*}\n", + "\n", + "ピクセル群を1つの制御回転でグルーピング出来るだけでなく、制御ゲートも削減することが分かりました。これは実装に必要な単一ゲートが削減されることを意味します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 練習問題\n", + "\n", + "制御回転は一般化された$C^{2n}\\left( R_{y}(2\\theta_{i}) \\right) $を用いて実装することができ、これは通常の回転ゲートと$CNOT$ゲートに分解することが出来ます。$n=2$ と $n=3$の場合、およびそれぞれ展開した結果を書き下してください。\n", + "\n", + "今回扱ったのは通常のグレースケールの小さな画像ですが、通常のRGB画像(例えば16色)はどのように実装すればよいでしょうか。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# デジタル画像のためのNovel Enhanced Quantum Representation (NEQR)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle} \\newcommand{\\bra}[1]{\\left\\langle{#1}\\right|}$\n", + "\n", + "**Novel Enhanced Quantum Representation** (NEQR)は量子画像表現のもう一つの形式です。NEQRは前の手法であるFlexible Representation of Quantum Images (FRQI)[1]と、画像中のピクセル情報を保存するために規格化された重ね合わせを用いるという点では似ています。FRQIはピクセルのグレースケール値を保存するのに1量子ビットしか利用しないという制限があり、このせいで複雑な画像変換を困難にしています。NEQRは画像のグレースケール値を保存するために、基底状態の量子ビット列を用いることで、FRQIを改善するように作られました[5]。\n", + "\n", + "NEQRは[5]にあるようにFRQIと比べて以下のような利点があります。\n", + "- NEQR量子画像の準備に関して時間計算量において二次関数的な加速\n", + "- 最大1.5倍の最適な画像圧縮比率\n", + "- 測定後の正確な画像検索(FRQIでは確率的)\n", + "- 複雑な色の扱いやその他多数の操作が可能\n", + "\n", + "この節ではNEQRモデルを用いて量子コンピューター上で2×2の古典グレースケール画像を表現していきます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. NEQR 手順\n", + "\n", + "NEQRで画像を表現する手順は準備と圧縮という二つのパートに分けられます。以下で説明します。\n", + "\n", + "### 1.1画像のエンコードの仕方:\n", + "\n", + "NEQRモデルを利用して量子コンピューター上で画像を表現するために必要な様々な要素をまずは確認し、それらがどのように関連していくのかを見ていきます。最初は画像の色の範囲から始めましょう。\n", + "\n", + "画像の色の範囲はビット文字列で次のように表されます。\n", + "\n", + "バイナリ画像:1ビット表現 0=黒、1=白\n", + "\n", + "![](images/flower_binary.png)\n", + "\n", + "グレースケール画像:8ビット表現 0(黒)から255(白)のグレー強度値の陰影\n", + "\n", + "![](images/flower_grey.png)\n", + "\n", + "カラー画像:24ビット表現は8ビットが3グループに分けられ、各8ビットグループは赤、緑、青のピクセルの色の強度を表現しています。\n", + "\n", + "![](images/flower.jpg)\n", + "\n", + "この例では画像内の位置でピクセルを表現しています。2次元画像を表現しているため、画像の位置を行と列つまりY座標とX座標で定義しています。\n", + "\n", + "**注意** 列番号がX座標の値で、行番号がY座標の値で表されているのは、画像処理ではピクセル位置はX-Y平面で表現されるためです。\n", + "\n", + "\n", + "### 1.2 画像圧縮:\n", + "\n", + "画像の量子表現が出来たら、生成された回路の深さや大きさをチェックし、回路を圧縮するいくつかの古典的手法を実践します。\n", + "\n", + "それでは以下で2×2の量子画像をエンコードしていきましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 2×2 画像のエンコード \n", + "\n", + "この例では以下のピクセル値を含むような2×2のグレースケール画像をエンコードします。下の表の1列目は2×2画像のピクセルの位置を、2列目はその位置におけるピクセル値の強度を、3列目はグレースケールの強度(例:01100100 = 100)を表しています。\n", + "\n", + "\n", + "\\begin{array}{|c|c|c|}\n", + "\\hline\n", + "position & binary \\; string & grayscale \\; intensity \\\\\n", + "\\hline\n", + "\\ket{00} &\\ket{00000000} & 0 - Black \\\\\n", + "\\hline\n", + "\\ket{01} &\\ket{01100100} & 100 - Dark shade \\\\\n", + "\\hline\n", + "\\ket{10} &\\ket{11001000} & 200 - Light shade \\\\\n", + "\\hline\n", + "\\ket{11} &\\ket{11111111} & 255 - White \\\\\n", + "\\hline\n", + "\\end{array}\n", + "\n", + "\n", + "これらのピクセルをエンコードするために量子レジスタを定義する必要があります。最初のレジスタはピクセル位置を保存するために使用します。2次元画像なので、水平(列)方向と垂直(行)方向、つまりY方向とX方向の2変数が必要となります。\n", + "\n", + "\n", + "各ピクセルの色の値は$\\mathcal{f}(Y,X)$で表現します。YとXはピクセルの位置で、それぞれ画像の行方向と列方向にあたります。\n", + "\n", + "各ピクセルのグレースケール強度域は変わり得ますが、最も一般的なグレースケール域は0 - 255なので値はたいてい$2^{q}$で表されます。256のとき$q=8$です。$q$は色のバイナリ列$C^{0}, C^{1},.. C^{q-2}, C^{q-1}$を表現するために必要なビット数です。\n", + "\n", + "\n", + "これは各ピクセル値は次のように表現できることを表します。ここでCはグレースケール強度のバイナリ表現です。\n", + "\n", + "$$\n", + "\\mathcal{f}(Y,X) = C^{0}_{YX}, C^{1}_{YX},... C^{q-2}_{YX}, C^{q-1}_{YX} \\in [0,1], \\;\\; f(Y,X)\\in[0, 2^{q-1}]\n", + "\\label{eq:color_rep} \\tag{2.1}\n", + "$$\n", + "\n", + "例えば位置(1,0)、色強度100 (01100100)のピクセルは次のように表されます。\n", + "\n", + "$$\n", + "\\mathcal{f}(1,0) = \\overline{C^{0}_{10}}, C^{1}_{10}, C^{2}_{10}, \\overline{C^{3}_{10}}, \\overline{C^{4}_{10}}, C^{5}_{10}, \\overline{C^{6}_{10}}, \\overline{C^{7}_{10}} = 01100100 = 100\n", + "$$\n", + "\n", + "ゆえに、$2^{n}$x $2^{n}$ 画像の量子表現の一般系 $|I\\rangle$は以下のように表されます。\n", + "\n", + "$$\n", + "|I\\rangle = \\frac{1}{2^{n}}\\sum_{Y=0}^{2^{2n-1}} \\sum_{X=0}^{2^{2n-1}} | \\mathcal{f}(Y,X)\\rangle |Y X\\rangle = \\frac{1}{2^{n}}\\sum_{Y=0}^{2^{2n-1}} \\sum_{X=0}^{2^{2n-1}} \\vert\\otimes_{i=0}^{q-1}\\rangle |C_{YX}^{i}\\rangle |Y X\\rangle\n", + "\\label{eq:quantum_image_rep} \\tag{2.2}\n", + "$$\n", + "\n", + "上の式を先ほどの2×2画像の例に当てはめると、ピクセル値は以下のようになります。\n", + "\n", + "$$\n", + "\\mathsf{\\Omega}_{YX}|0\\rangle^{\\otimes q} = \\frac{1}{\\sqrt[]{2}}(|00000000\\rangle |00\\rangle + |01100100\\rangle |01\\rangle + |11001000\\rangle |10\\rangle + |11111111\\rangle |11\\rangle)\n", + "$$\n", + "\n", + "ここで$\\mathsf{\\Omega}_{YX}|0\\rangle$は位置(Y, X)のピクセルの値格納を表現する量子操作です。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 画像エンコードの量子回路の作成\n", + "\n", + "まずは画像をエンコードするために、ある量子ビット数の量子回路を作成します。そのために、**intensity**とラベリングされたピクセル値と**idx**とラベリングされたピクセル位置を表現する2つの別々の量子回路を構築していきましょう。\n", + "\n", + "最初の量子回路は$2^n$個の量子ビットを使ってピクセル値$f(Y,X)$を表現します。今回の場合は8量子ビットです。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from qiskit import QuantumRegister, ClassicalRegister\n", + "\n", + "# Initialize the quantum circuit for the image \n", + "# Pixel position\n", + "idx = QuantumRegister(2, 'idx')\n", + "# grayscale pixel intensity value\n", + "intensity = QuantumRegister(8,'intensity')\n", + "# classical register\n", + "cr = ClassicalRegister(10, 'cr')\n", + "\n", + "# create the quantum circuit for the image\n", + "qc_image = QuantumCircuit(intensity, idx, cr)\n", + "\n", + "# set the total number of qubits\n", + "num_qubits = qc_image.num_qubits\n", + "\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次にピクセル位置を表現する量子ビット(idx)にアダマールゲートを追加し、2×2画像の全ての位置を利用可能にします。\n", + "オプションとして強度を表現する量子ビットにはIゲートを追加します。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Initialize the quantum circuit\n", + "\n", + "# Optional: Add Identity gates to the intensity values\n", + "for idx in range(intensity.size):\n", + " qc_image.i(idx)\n", + "\n", + "# Add Hadamard gates to the pixel positions \n", + "qc_image.h(8)\n", + "qc_image.h(9)\n", + "\n", + "# Separate with barrier so it is easy to read later.\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 量子回路上でのグレースケール画像の表現\n", + "\n", + "量子回路を構築し、初期化を行ったのでまずはピクセル位置を表現する回路とそれぞれのピクセル強度値を合わせた回路を準備していきましょう。\n", + "可読性を高めるためIゲートとバリアを追加しています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ピクセル値をエンコードしていきましょう。各ピクセルにセットした値は以下の通りであったことを思い出してください。\n", + "\n", + "00 = 00000000 (黒) \n", + "\n", + "01 = 01100100 (グレースケール = 100)\n", + "\n", + "10 = 11001000 (グレースケール = 200)\n", + "\n", + "11 = 11111111 (白)\n", + "\n", + "(0,0)の位置のピクセルから始めていきます。(0,0)ピクセルは値が全て0のなのでブランクのままにしておくことももちろん可能ですが、見やすくするためにIゲートを追加している点に注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the first pixel, since its value is 0, we will apply ID gates here:\n", + "for idx in range(num_qubits):\n", + " qc_image.i(idx)\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に2番目のピクセルで位置が(0,1)、値が(01010101)のピクセルをエンコードしていきます。ここでコントロールビットが2つある制御NOTゲート(2-CNOT)を利用します。ピクセル位置(Y,X)によって制御され、ピクセル値を表現する$C^{i}_{YX}$の量子ビットがターゲットビットとして回転します。\n", + "\n", + "**注意** ここではCNOTゲートが作用するのは制御ビットの状態が0と1の状態の組みになっている場合にしたいので、回路の前後にXゲートを置くことで、特定の制御ビットの状態が0のときでも制御操作が作用するようにしています。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the second pixel whose value is (01100100):\n", + "value01 = '01100100'\n", + "\n", + "# Add the NOT gate to set the position at 01:\n", + "qc_image.x(qc_image.num_qubits-1)\n", + "\n", + "# We'll reverse order the value so it is in the same order when measured.\n", + "for idx, px_value in enumerate(value01[::-1]):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1, num_qubits-2, idx)\n", + "\n", + "# Reset the NOT gate\n", + "qc_image.x(num_qubits-1)\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次のピクセルに移ります。位置は(1,0)、値は(10101010)です。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the third pixel whose value is (11001000):\n", + "value10 = '11001000'\n", + "\n", + "# Add the 0CNOT gates, where 0 is on X pixel:\n", + "qc_image.x(num_qubits-2)\n", + "for idx, px_value in enumerate(value10[::-1]):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1, num_qubits-2, idx)\n", + "qc_image.x(num_qubits-2)\n", + "\n", + "\n", + "qc_image.barrier()\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後のピクセルです。位置は(1,1)、値は(11111111)です。全てのピクセル画像値の量子ビットに単にトフォリゲートを追加するだけです。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Encode the third pixel whose value is (10101010):\n", + "value11 = '11111111'\n", + "\n", + "# Add the CCNOT gates:\n", + "for idx, px_value in enumerate(value11):\n", + " if(px_value=='1'):\n", + " qc_image.ccx(num_qubits-1,num_qubits-2, idx)\n", + "\n", + "qc_image.barrier()\n", + "qc_image.measure(range(10),range(10))\n", + "qc_image.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "おめでとうございます!2×2のグレースケール画像をエンコードすることが出来ました!それではこれまでやってきたことといくつかの注意点を振り返っていきましょう。\n", + "\n", + "### 2.3 回路の分析\n", + "\n", + "画像のエンコードが終ったので回路の分析をしていきます。まず回路中で使用したゲートの総数を見てみましょう。decompose関数を利用することで利用しているゲートを基本ゲートに焼きなおすことができます。\n", + "\n", + "回路の深さとサイズ、演算の回数を出力します。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Circuit dimensions\n", + "Circuit depth: 148\n", + "Circuit size: 244\n" + ] + }, + { + "data": { + "text/plain": [ + "OrderedDict([('cx', 84),\n", + " ('t', 56),\n", + " ('tdg', 42),\n", + " ('h', 28),\n", + " ('id', 18),\n", + " ('measure', 10),\n", + " ('barrier', 5),\n", + " ('u3', 4),\n", + " ('u2', 2)])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('Circuit dimensions')\n", + "print('Circuit depth: ', qc_image.decompose().depth())\n", + "print('Circuit size: ', qc_image.decompose().size())\n", + "\n", + "qc_image.decompose().count_ops()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 回路の分解\n", + "\n", + "いくつか驚く点があるかもしれません。1点目に最も驚くべきこととして、回路の深さが150程度(場合によりますが)である点です。上で見た最後の回路の深さが20程度(測定操作は除く)なのとは対照的です。\n", + "この理由は利用しているゲート、特にマルチ制御ゲートが基底ゲートに分解する際に回路の深さを非常に大きくしてしまい得るからです。\n", + "\n", + "#### 回路の最適化\n", + "\n", + "幸運なことにQiskitではマルチ制御ゲートを最小限のゲート数で構築するための様々なオプティマイザーがあります[REF: PassManager]。オプティマイザーは選択された量子ビットがエラー率最小となる接続になるように最適化することもできます[REF: Optimization-Levels]。これらのオプティマイザーのおかげで自力よりも非常に速く最適解を見つけることができます!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Aerシミュレータ上での実行\n", + "\n", + "全てのnear-term量子コンピューターにおいて回路の分析の節で導いた回路の深さや、必要とする2量子ビットゲートの数を考えると、量子ボリュームの小さいデバイスで実行した場合はきわめてノイズが多く、非常に有用なデータが期待されます。量子回路を実行する場合はこのことを念頭に、可能な場合は結果からノイズを最小化してみてください。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Encoded: 00 = 0\n", + "Encoded: 01 = 01100100\n", + "Encoded: 10 = 11001000\n", + "Encoded: 11 = 1\n", + "{'000': 2068, '001': 2090, '010': 2018, '011': 2016}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qasm_sim = Aer.get_backend('qasm_simulator')\n", + "t_qc_image = transpile(qc_image, qasm_sim)\n", + "qobj = assemble(t_qc_image, shots=8192)\n", + "job_neqr = qasm_sim.run(qobj)\n", + "result_neqr = job_neqr.result()\n", + "counts_neqr = result_neqr.get_counts()\n", + "print('Encoded: 00 = 0')\n", + "print('Encoded: 01 = 01100100')\n", + "print('Encoded: 10 = 11001000')\n", + "print('Encoded: 11 = 1')\n", + "\n", + "print(counts_neqr)\n", + "plot_histogram(counts_neqr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 結果の解析\n", + "上の結果を見ると、ピクセル位置は最初の左から二つの量子ビット(00,01,10,11)で表され、残りの量子ビットは以下のようにエンコードされたグレースケール強度の8ビットバイナリ表現を表しています。\n", + " \n", + "エンコード: **00** = 00000000,\n", + "エンコード: **01** = 01100100,\n", + "エンコード: **10** = 11001000,\n", + "エンコード: **11** = 11111111\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.5 量子画像回路の圧縮 \n", + "\n", + "ご覧のように、深さが127でサイズが264の量子回路は非常に大きく深いです!\n", + "言うまでもなく全く効率的ではありません。当然回路の深さを削減し、より少ない演算子で画像を圧縮する方法はあります。一つにはIBMのBraytonにより考案されたEspressoアルゴリズム[8]などの古典圧縮アリゴリズムを用いることです。Espressoアルゴリズムは回路内の全てのCNOTゲートの情報を圧縮して最小化する際に用いられます。\n", + "\n", + "このアルゴリズムがどのように動くかというと、各ピクセルのゲート群は二つのグループに分けられます。ピクセル値を表現するために、一つはピクセル値が1のときCNOTゲートを持つグループで、ピクセル値が0のときIゲートを持つグループです。例えば入りが(0,1)の2番目のピクセルでは4つのCNOTゲートが存在します。各グループ$\\phi_{i}$は以下のように表現することが出来ます。\n", + "\n", + "\n", + "$$\\phi_{i} = (\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=0}^{2^{n}-1} I) \\cup (\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=1}^{2^{n}-1} (2n - CNOT)_{YX}))\\label{eq:expresso_separated} \\tag{2.3}$$\n", + "\n", + "$ \\bigcup $は以下のように2つのグループの全ての位置と色の値の表現を合わせたものです。\n", + "\n", + "左のグループはIゲートのグループを表現していて、$C^{i}_{YX}=0$のときIゲートが使われます。Iゲートは回路に影響を及ぼさないので左のグループは無視することが出来ます。\n", + "\n", + "右のグループは制御NOTゲートのグループを表現していて、 $C^{i}_{YX}=1$のときCNOTゲートが使われます。\n", + "\n", + "故に、Espressoアルゴリズムは下の数式で表すように制御NOTゲートを最小化する際に用いられます。\n", + "\n", + "$$\\bigcup_{Y=0}^{2^{n}-1} \\bigcup_{ {X=0}C^{i}_{YX}=1}^{2^{n}-1} YX \\xrightarrow[]{\\text{Espresso}} \\bigcup_{K_i}K_i \\label{eq:compressed_circuit} \\tag{2.4}$$ \n", + "\n", + "$\\bigcup_{K_i}K_i$は制御NOTゲートの最小値を表しています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# まとめ\n", + "\n", + "この節ではNovel Enhanced Quantum Representationアルゴリズム、そして量子系において画像を表現するために制御NOTゲートをどのように利用するかを扱いました。また、Espressoアルゴリズムを使って量子画像表現の回路の深さを削減する形式についても扱いました。これは量子回路内の制御ゲートの数を最小化して量子コンピューター上で実行するために使われます。 [7]\n", + "\n", + "\n", + "量子系での画像表現の考えられる優位性は、画像検索のための量子並列性 [9]や特徴抽出[10]、画像のセグメンテーション[11]などいかなる画像処理も高速化する能力を秘めているということです。画像分類 [12]や画像認識[13]その他さまざまな画像処理技術 [6]など、たくさんの画像処理操作が組み込まれた機械学習アルゴリズムが様々存在します。量子画像処理と量子機械学習の組み合わせは古典系では困難な問題、特に医療画像処理や地理情報システムの画像、画像復元など大量の画像処理を必要とする様々なドメインにおける問題を解決できる可能性を秘めています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 練習問題\n", + "\n", + "1. 2×2画像のピクセル値 [101], [011], [111], [000]が与えられたとき、画像を表現する量子回路を構築するpython関数を記述してください。(ヒント:5量子ビットの回路を構築する必要があります。)\n", + "\n", + "2. 上で構築した回路を使ってピクセル値を変換してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 参考文献 \n", + "\n", + "[1] Le, P.Q., Dong, F. & Hirota, K. A flexible representation of quantum images for polynomial preparation, image compression, and processing operations. Quantum Inf Process 10, 63–84 (2011). https://doi.org/10.1007/s11128-010-0177-y \n", + "\n", + "[2] Le, Phuc Quang, Fayang Dong and Kaoru Hirota. “Flexible Representation of Quantum Images and Its Computational Complexity Analysis.” (2009). https://doi.org/10.14864/fss.25.0.185.0\n", + "\n", + "[3] Y. Zhang, K. Lu, and Y. Gao, Qsobel: A Novel Quantum Image Edge Extraction Algorithm, Sci. China Inf. Sci. 58, 1-13 (2015). http://engine.scichina.com/doi/pdf/62784e3238b8457bb36f42efc70b37d2\n", + "\n", + "[4] Xi-Wei Yao, Hengyan Wang, Zeyang Liao, Ming-Cheng Chen, Jian Pan, Jun Li, Kechao Zhang, Xingcheng Lin, Zhehui Wang, Zhihuang Luo, Wenqiang Zheng, Jianzhong Li, Meisheng Zhao, Xinhua Peng, Dieter Suter, Quantum Image Processing and Its Application to Edge Detection: Theory and Experiment. https://arxiv.org/abs/1801.01465\n", + "\n", + "\n", + "[5] Zhang, Y., Lu, K., Gao, Y. et al. _NEQR: a novel enhanced quantum representation of digital images._ Quantum Inf Process 12, 2833–2860 (2013). https://doi.org/10.1007/s11128-013-0567-z\n", + "\n", + "[6] Cai,Yongquan et al. _A Survey on Quantum Image Processing._ Chinese Journal of Electronics(2018), 27 (4):718_ http://dx.doi.org/10.1049/cje.2018.02.012\n", + "\n", + "[7] “Qiskit: An open-source framework for quantum computing,” (2019). https://qiskit.org\n", + "\n", + "[8] Brayton, R.K. Sangiovanni-Vicentelli, A. McMullen, C. Hacktel, G.: _Log Minimization Algorithms VLSI Synch_. Kluwer Academic Publishers, DOrdrecht (1984) \n", + "\n", + "[9] L.K. Grover, “A fast quantum mechanical algorithm for database search”, In Proceedings of the 28th Annual ACM Symposium on the Theory of Computing, pp. 212–219, (1996)\n", + "\n", + "[10] Y. Zhang, K. Lu, K. Xu, Y. Gao, and R. Wilson. 2015. “Local feature point extraction for quantum images”, Quantum Information Processing vol. 14, no. 5, pp. 1573–1588, (2015)\n", + "\n", + "[11] Y. Ruan, H. Chen, J. Tan, and X. Li. “Quantum computation for large-scale image classification”, Quantum Information Processing, vol. 15, pp. 4049–4069, July (2016)\n", + "\n", + "[12] Dang, Y., Jiang, N., Hu, H., Ji, Z., & Zhang, W. (2018). Image Classification Based on Quantum KNN Algorithm. ArXiv, abs/1805.06260.\n", + "\n", + "[13] Kerenidis, I., Landman, J. and Prakash, A., 2019. Quantum algorithms for deep convolutional neural networks. arXiv preprint arXiv:1911.01117\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

    Version Information

    Qiskit SoftwareVersion
    Qiskit0.23.2
    Terra0.16.1
    Aer0.7.2
    Ignis0.5.1
    Aqua0.8.1
    IBM Q Provider0.11.1
    System information
    Python3.7.7 (default, May 6 2020, 04:59:01) \n", + "[Clang 4.0.1 (tags/RELEASE_401/final)]
    OSDarwin
    CPUs8
    Memory (Gb)32.0
    Mon Feb 22 09:52:57 2021 GMT
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "qiskit", + "language": "python", + "name": "qiskit" + }, + "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.8.10" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": false, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/images/.gitkeep b/translations/ja/ch-applications/images/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/translations/ja/ch-applications/images/.gitkeep @@ -0,0 +1 @@ + diff --git a/translations/ja/ch-applications/images/8x8_2col.png b/translations/ja/ch-applications/images/8x8_2col.png new file mode 100644 index 0000000..0080600 Binary files /dev/null and b/translations/ja/ch-applications/images/8x8_2col.png differ diff --git a/translations/ja/ch-applications/images/U3_var_form.png b/translations/ja/ch-applications/images/U3_var_form.png new file mode 100644 index 0000000..5ff3f6a Binary files /dev/null and b/translations/ja/ch-applications/images/U3_var_form.png differ diff --git a/translations/ja/ch-applications/images/circ_eq.png b/translations/ja/ch-applications/images/circ_eq.png new file mode 100644 index 0000000..2e5767a Binary files /dev/null and b/translations/ja/ch-applications/images/circ_eq.png differ diff --git a/translations/ja/ch-applications/images/hhlcircuit.png b/translations/ja/ch-applications/images/hhlcircuit.png new file mode 100644 index 0000000..fc17727 Binary files /dev/null and b/translations/ja/ch-applications/images/hhlcircuit.png differ diff --git a/translations/ja/ch-applications/images/noerrmit.png b/translations/ja/ch-applications/images/noerrmit.png new file mode 100644 index 0000000..b344c4c Binary files /dev/null and b/translations/ja/ch-applications/images/noerrmit.png differ diff --git a/translations/ja/ch-applications/images/noerrmit_public.png b/translations/ja/ch-applications/images/noerrmit_public.png new file mode 100644 index 0000000..e10e82f Binary files /dev/null and b/translations/ja/ch-applications/images/noerrmit_public.png differ diff --git a/translations/ja/ch-applications/images/norm.png b/translations/ja/ch-applications/images/norm.png new file mode 100644 index 0000000..de0da04 Binary files /dev/null and b/translations/ja/ch-applications/images/norm.png differ diff --git a/translations/ja/ch-applications/images/norm_public.png b/translations/ja/ch-applications/images/norm_public.png new file mode 100644 index 0000000..8013318 Binary files /dev/null and b/translations/ja/ch-applications/images/norm_public.png differ diff --git a/translations/ja/ch-applications/images/two_qubit_var_form.png b/translations/ja/ch-applications/images/two_qubit_var_form.png new file mode 100644 index 0000000..4858bea Binary files /dev/null and b/translations/ja/ch-applications/images/two_qubit_var_form.png differ diff --git a/translations/ja/ch-applications/imp_index.md b/translations/ja/ch-applications/imp_index.md new file mode 100644 index 0000000..1738ff6 --- /dev/null +++ b/translations/ja/ch-applications/imp_index.md @@ -0,0 +1,3 @@ +# このセクションについて + +新しい量子アルゴリズムの発見や、既存のアルゴリズムの新しい応用例を見つけることは、活発な研究が行われている分野です。このセクションでは、従来のテキストブックでは説明されていない最近の論文のアルゴリズムとアプリケーションについて説明します。読者は、現在の研究分野をよりよく理解できるようになります。このテキストブックは進化するので、このセクションはこの分野の研究開発に合わせて更新されます。 \ No newline at end of file diff --git a/translations/ja/ch-applications/qaoa.ipynb b/translations/ja/ch-applications/qaoa.ipynb new file mode 100644 index 0000000..f0d6eae --- /dev/null +++ b/translations/ja/ch-applications/qaoa.ipynb @@ -0,0 +1,945 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# QAOA を利用して、組合せ最適化問題を解く" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセクションでは、組合せ最適化問題を紹介し、近似最適化アルゴリズムの説明、Quantum Approximate Optimization Algorithm (QAOA)の動作説明、及びシミュレーターもしくは5量子ビットチップで動作する実装例の紹介をします。\n", + "\n", + "## 目次\n", + "1. [はじめに](#introduction)\n", + "2. [様々な例](#examples)\n", + "3. [近似最適化アルゴリズム](#approximateOPT)\n", + "4. [QAOA](#QAOA)\n", + "5. [Qiskit での実装](#implementation)\n", + " - 5a [QAOAをシミュレーターで動かす](#implementationsim)\n", + " - 5b [QAOAを実量子デバイスで動かす](#implementationdev)\n", + "6. [演習問題](#problems)\n", + "7. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "組合せ最適化[1](#references) とは、有限または可算無限集合の解の中から最適解を探し出す方法を意味します。最小化もしくは最大化する関数を基準として最適性は定義されて、その関数は通常コスト関数や目的関数と呼ばれます。\n", + "\n", + "様々なタイプの組合せ最適化問題があります。例えば最小化では、コスト、距離、移動の長さ、重さ、処理時間、物質とエネルギー消費、物の数を扱います。最大化では、利益、価値、アウトプット、リターン、利回り、ユーティリティー、効率、容量、物の数などです。どのような最大化問題も、最小化問題に変換できる(その逆も真)ので、組合せ最適化問題は一般的に次の形式で与えることができます。\n", + "\n", + "\n", + "$$ \\text{maximize } \\;\\; C(x)$$\n", + "\n", + "$$ \\text{subject to } \\;\\; x \\in S $$\n", + "\n", + "\n", + "ここで、$x \\in S$ は離散変数で、$C : D \\rightarrow \\mathbb{R}$ はコスト関数です。これは、ある定義域 $S$ からの実数 $\\mathbb{R}$ への写像です。変数 $x$ は複数の制約を受け、実行可能解は $S \\subset D$ 集合内に存在します。\n", + "\n", + "0-1変数のみの組合せ最適化問題では、典型的なコスト関数は、$n$ビットのバイナリ文字列 $x \\in \\{0,1\\}^n$ の部分集合 $Q \\subset[n]$ を含む項の和で表されます。そのようなコスト関数 $C$ は、以下の形式で記述されます。\n", + "\n", + "\n", + "$$ C(x) = \\sum_{(Q,\\overline{Q}) \\subset [n]} w_{(Q,\\overline{Q})} \\; \\prod_{i\\in Q} x_i \\; \\prod_{j\\in \\overline{Q}} (1- x_j), $$\n", + "\n", + "\n", + "ここで、$x_i \\in \\{0,1\\}$、及び $w_{(Q,\\overline{Q})}\\in \\mathbb{R}$ です。我々の目的は、$C(x)$ が最大になる、$n$ビット文字列 $x$ を探すことです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 対角ハミルトニアン\n", + "\n", + "コスト関数は、計算基底において対角なハミルトニアンにマッピングすることが出来ます。コスト関数 $C$ が与えられると、ハミルトニアンは次のように記述できます:\n", + "\n", + "\n", + "$$ H = \\sum_{x \\in \\{0,1\\}^n} C(x) |x \\rangle\\langle x| $$\n", + "\n", + "ここで$x \\in \\{0,1\\}^n$ は、計算基底 $|x \\rangle \\in \\mathbb{C}^{2^n}$ でのラベルです。仮にコスト関数が高々$k$個の重み付き項しかない場合、つまり $Q$ が高々 $Q \\leq k$ ビットしか含まない時には、この対角ハミルトニアンは、$k$ 個の重み付きパウリ $Z$ 演算子の和になります。\n", + "\n", + "$H$ のパウリ $Z$ 演算子への展開は、コスト関数 $C$ の正規展開において、全てのバイナリ変数 $x_i \\in \\{0,1\\}$ を 行列 $x_i \\rightarrow 2^{-1}(1 - Z_i)$ に置き換えることで得られます。ここで、$Z_i$ は量子ビット $i$ に作用し、その他には自明なパウリ $Z$ 演算子、すなわち次の通りです。\n", + "\n", + "$$ Z_i = \\left(\\begin{array}{cc} 1 & 0 \\\\ 0 & -1 \\end{array}\\right). $$\n", + "\n", + "これは、古典コスト関数をエンコードするスピン-ハミルトニアンが $|Q|$ と記述され、ローカル量子スピンハミルトニアンがパウリ $Z$ 演算子しか含まないことになります。\n", + "\n", + "\n", + "$$ H = \\sum_{(Q,\\overline{Q}) \\subset [n]} w_{(Q,\\overline{Q})} \\; \\frac{1}{2^{|Q| + |\\overline{Q}|}}\\prod_{i\\in Q} \\left(1 - Z_i\\right) \\; \\prod_{j\\in \\overline{Q}} \\left(1 + Z_j\\right).$$\n", + "\n", + "ここで、数少ない($n$の多項式) $w_{(Q,\\overline{Q})}$ のみが非ゼロであると想定します。また、集合 $|(Q,\\overline{Q})|$ は有界であり、大きくないと想定します。これは、コスト関数とハミルトニアン $H$ を $m$ 個のローカル項 $\\hat{C}_k$ の和として書けることを意味します。\n", + "\n", + "\n", + "$$ H = \\sum_{k = 1}^m \\hat{C}_k, $$\n", + "\n", + "ここで、$m$ と $\\hat{C}_k$ の台は妥当性のある有界値です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 様々な例 \n", + "\n", + "ここでは組合せ最適化問題を2つ例示します。最初の例のみQiskitで実装しますが、演習問題を通じて2番目の例の実装方法を示します。\n", + "\n", + "### 2.1 (重みつき) MAXCUT\n", + "\n", + "$n$個の頂点と$m$本の枝を含む無向グラフ $G = (V, E)$ を考えます。枝 $(j,k)\\in E$ の重みを $w_{ij} \\geq 0$, $w_{ij}=w_{ji}$とします。カットは、頂点集合 $V$ を2つの部分集合 $S, T \\subset V$ への分割として定義します $(S \\cap T = \\emptyset, S \\cup T = V)$。2つの部分集合$S$と$T$の間を結ぶ(横切る)枝の重みの合計 $\\sum_{s \\in S, t \\in T} w_{st}$ をコスト関数とします。各頂点 $i$ に対して、0-1変数$x_i$を割り当て、$x_i = 0$のとき$i \\in S$、 $x_i = 1$のとき$i \\in T$を意味します。(ここでは$n$個の頂点に対応する変数$x_i$が $0,1,\\dots,n-1$ のインデックスをとります)。MAXCUTは以下のコスト関数を最大化します。 \n", + "\n", + "\n", + "$$C(\\textbf{x}) = \\sum_{i,j = 1}^n w_{ij} x_i (1-x_j).$$\n", + "\n", + "表記を簡単にするために、以下では均一の重み $ w_{ij} = 1$ を仮定します。量子コンピューター上でこの問題の最適解を見つけるためには、上記で説明したように、これを対角ハミルトニアンにマッピングする必要があります。集合 $(i,j) = E$ の枝の総和を以下のように記述します。\n", + "\n", + "\n", + "\n", + "$$C(\\textbf{x}) = \\sum_{i,j = 1}^n w_{ij} x_i (1-x_j) = \\sum_{(i,j) \\in E} \\left( x_i (1-x_j) + x_j (1-x_i)\\right)$$\n", + "\n", + "これをスピンハミルトニアンにマップするために、$x_i\\rightarrow (1-Z_i)/2$ の変換を行います。ここで、$Z_i$ は固有値 $\\pm 1$ をもつパウリ$Z$演算子で、$X \\rightarrow H$ を得ます。\n", + "\n", + "\n", + "\n", + "$$ H = \\sum_{(j,k) \\in E} \\frac{1}{2}\\left(1 - Z_j Z_k \\right).$$\n", + "\n", + "この式が意味することは、ハミルトニアンはローカル項 $\\hat{C}_e = \\frac{1}{2}\\left(1 - Z_{j}Z_{k}\\right)$ ($e = (j,k) \\in E$) の $m = |E|$ 個の和として記述できるということです。\n", + "\n", + "### 2.2 制約充足問題とMAX-3-SAT\n", + "\n", + "組合せ最適化問題の別の例として、3-SAT があります。$n$個の0-1変数$\\textbf{x} \\in \\{0,1\\}^n$ のうち3つを含む$m$個の節 $c_k(\\textbf{x})$ を全て充足する($c_k(\\textbf{x})=1$になる)ようなビット文字列があるかどうかを判定する決定問題です。3-SATはNP完全な問題の主要な例になっています。\n", + "あるビット文字列 $\\textbf{x} \\in \\{0,1\\}^{133}$ に対して、以下で 3-SATの節の例を考えてみます。\n", + "\n", + "$$ c_1(\\textbf{x}) = (1-x_1)(1-x_3)x_{132} $$\n", + "\n", + "この節$c_1(\\textbf{x})$は、$x_1 = 0$、$x_3 = 0$ 及び $x_{132} = 1$ の時のみ充足します。\n", + "\n", + "3-SATと密接に関連している問題にMAX-3-SATがあります。この問題は充足する節の数$C(\\textbf{x}) = \\sum_{k = 1}^m c_k(\\textbf{x})$を最大化する問題で、NP困難です。この問題は最適化問題ですが、充足する節の数が閾値を超えるかどうか考えることで決定問題に変換することもできます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 近似アルゴリズム\n", + "\n", + "これまでに紹介したMAXCUTとMAX-3-SATの両者はNP困難として知られています [1](#references)。実は、一般的に組合せ最適化問題の多くは、厳密な最適解を求めることが計算上困難です。この事実に照らし合わせてみると、効率的なアルゴリズム、つまり問題のサイズに対して多項式時間でこれらの問題を解くアルゴリズムを見つけることは期待できません。これは量子アルゴリズムにも当てはまります。このような問題を扱うには、主に2つのアプローチがあります。1つ目のアプローチは、多項式時間内に指定された品質の解を見つけることが保証されている近似アルゴリズムです。2つ目のアプローチは、多項式の実行時間は保証されていないが、一部の問題例で良好なパフォーマンスを発揮するヒューリスティックなアルゴリズムです。\n", + "\n", + "近似アルゴリズムは$NP$困難な最適化問題に対して効率的に近似解を求め、近似解が最適解にどの程度近いかの理論保証を与えます。保証は典型的には、近似比 $\\alpha \\leq 0$ で示されます。確率的近似アルゴリズムの場合、 *高い確率で* 正の $C_{max} = \\max_{\\textbf{x}}C(\\textbf{x})$ をもつビット文字列 $\\textbf{x}^* \\in \\{0,1\\}^n$ が生成されます。\n", + "\n", + "$$ C_{max} \\geq C(\\textbf{x}^*) \\geq \\alpha C_{max}. $$\n", + "\n", + "MAXCUT問題に関しては、Goemans と Williamson [2](#references) による有名な近似アルゴリズムがあります。このアルゴリズムは元の問題のSDP緩和と確率的丸めのテクニックを組み合わせて、$\\alpha \\approx 0.878$ という近似比の近似解を高い確率で出力します。\n", + "この近似比は量子アルゴリズムをもってしても改善することができない最適な値と考えられています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. QAOA \n", + "Farhi、Goldsone、Gutmann [3](#references) による量子近似最適化アルゴリズム(Quantum approximate optimization algorithm, QAOA)は、ヒューリスティック・アルゴリズムの一例です。Goemans-Williamsonアルゴリズムとは異なり、QAOAは一般のグラフでは解の近似度が保証されていません。QAOAは古典近似アルゴリズムのアプローチで、高い確率でより良い解に相当する古典ビット文字列を生成する量子回路を探索します。詳細を議論する前に、まずこのアプローチの一般的な考え方を紹介しましょう。\n", + "\n", + "### 4.1 概要\n", + "我々は、問題のハミルトニアン $H$ に対して期待値が最大になるような、実数パラメータ $\\vec{\\gamma},\\vec{\\beta} \\in \\mathbb{R}^p$ を持つ量子状態 $|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ を見つけたいと考えています。この試行状態が与えられたとき、$F_p(\\vec{\\gamma},\\vec{\\beta}) = \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ を最大化するパラメーター $\\vec{\\gamma}^*と\\vec{\\beta}^*$ を探します。 \n", + "\n", + "このような状態と対応するパラメータが得られたら、量子コンピューター上で状態 $|\\psi_p(\\vec{\\gamma}^*,\\vec{\\beta}^*)\\rangle$ を準備し、$Z$ 基底 $|x \\rangle = |x_1,\\ldots x_n \\rangle$ で状態を測定してランダムな出力 $x^*$ を得ます。\n", + "\n", + "このランダムなビット文字列 $x^*$ は、期待値 $M_p = F_p(\\vec{\\gamma}^*,\\vec{\\beta}^*)$ に高確率で近くなります。\n", + "したがって、もし $M_p$ が $C_{max}$ に近いならば、$C(x^*)$ も同様です。\n", + "\n", + "### 4.2 QAOA の構成要素\n", + "\n", + "### 4.2.1 QAOA の試行状態 \n", + "QAOAの中心となるのは、量子コンピュータ上に用意される試行状態 $|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ です。理想的には、この状態が問題のハミルトニアン $H$ に対して、大きな期待値 $F_p(\\vec{\\gamma},\\vec{\\beta}) = \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta}))|H|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ をもたらすことが望まれます。Farhi [3](#references) では、試行状態 $|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ は一量子ビットのパウリ $X$ 回転と問題のハミルトニアン $H$ から構築されます。つまり、計算基底で対角な問題のハミルトニアン\n", + "\n", + "\n", + "$$ H = \\sum_{k = 1}^m \\hat{C}_k $$\n", + "\n", + " \n", + "と、横磁場のハミルトニアン\n", + "\n", + "\n", + "$$ B = \\sum_{i = 1}^n X_i $$\n", + "\n", + "\n", + "が与えられたとき、試行状態は、$ X |+\\rangle = |+\\rangle$ となる $|+\\rangle$ の積状態 $|+\\rangle^n$ に以下のように交互に $p$ 回 $B$ と $H$ に関するユニタリー行列をかけることで用意します。\n", + "\n", + "\n", + "$$ |\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle = e^{ -i\\beta_p B } e^{ -i\\gamma_p H } \\ldots e^{ -i\\beta_1 B } e^{ -i\\gamma_1 H } |+\\rangle^n $$\n", + "\n", + "\n", + "この特定の試行状態の利点は、$M_p = F_p(\\vec{\\gamma}^*,\\vec{\\beta}^*)$ としたときに極限が $\\lim_{p \\rightarrow \\infty} M_p = C_{max}$ となるようなパラメーター $\\vec{\\gamma}^*,\\vec{\\beta}^*$ が存在することです。これは、試行状態 $|\\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle$ を、$H$ と横磁場ハミルトニアン $B$ に関して断熱発展をトロッター展開をして得られる状態とみなせます(参考文献 [3](#references))。\n", + "\n", + "この試行状態の欠点は、一般的にあまり深くない量子回路から生成された状態が生成されることです。ここで、深さは量子チップ上に直接作用するゲートの数で決まります。したがって、量子チップのハードウェアにより合わせた試行状態の提案があります (参考文献 [4](#references)、 [5](#references)) 。\n", + "\n", + "\n", + "### 4.2.2 期待値の計算 \n", + "このアプローチの重要な構成要素は、以下の期待値を計算もしくは推定することです。\n", + "\n", + "$$\n", + "F_p(\\vec{\\gamma},\\vec{\\beta}) = \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle \n", + "$$\n", + "\n", + "これにより、パラメーター $\\vec{\\gamma},\\vec{\\beta}$ の最適化をします。\n", + "\n", + "#### 古典的な期待値の評価方法\n", + "なお、$|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle$ の試行状態の回路があまり深くない場合、期待値 $F_p$ を古典的に評価できる場合があります。\n", + "\n", + "例えば、次数が制限されたグラフに対する MAXCUT で、$p=1$ の回路を考える場合です。セクション 5.2にてQiskitでの実装例を見て、期待値を計算する演習問題を提供します。\n", + "\n", + "このアイデアを説明するにはハミルトニアンが、$H = \\sum_{k = 1}^m \\hat{C}_k$ のように個々の項の和として記述されることを思い出してください。期待値の線形性により、個々の被加数の期待値を考えれば十分です。$p = 1$の場合は、以下の通りです。\n", + "\n", + "\n", + "$$ \\langle \\psi_1(\\vec{\\gamma},\\vec{\\beta})|\\hat{C}_k|\\psi_1(\\vec{\\gamma},\\vec{\\beta})\\rangle = \\langle +^n | e^{ i\\gamma_1 H } e^{ i\\beta_1 B } | \\hat{C}_k | e^{ -i\\beta_1 B } e^{ -i\\gamma_1 H } |+^n\\rangle $$\n", + "\n", + "\n", + "$B = \\sum_{i = 1}^n X_i$ において、ユニタリー行列 $e^{ -i\\beta_1 B }$ は、実際のところ角度 $\\beta$ での単一量子ビットの回転 $X$ の積であることに注意してください。これを、$X(\\beta)_k = \\exp(i\\beta X_k)$ と記述します。 \n", + "\n", + "$\\hat{C}_k$の台である量子ビットに作用しない全ての個々の回転は、$\\hat{C}_k$と可換で、すなわちキャンセルされます。これはオペレーター $\\hat{C}_k$ の台を増やしません。これは、ユニタリー・ゲート $e^{ -i\\gamma_1 H } = \\prod_{l=1}^m U_l(\\gamma)$ の第2集合が、オペレーター $e^{ i\\beta_1 B } \\hat{C}_k e^{ -i\\beta_1 B }$ と可換な、ゲート $U_l(\\gamma) = e^{ -i\\gamma_1 \\hat{C}_l }$ の大きな集合であること意味します。期待値に寄与するゲート $U_l(\\gamma) = e^{ -i\\gamma_1 \\hat{C}_l }$ だけが、元の $\\hat{C}_k$ の台である量子ビットを含むゲートになります。\n", + "\n", + "これ故、制限された次数での相互作用において、$e^{ i\\gamma_1 H } e^{ i\\beta_1 B } \\hat{C}_k e^{ -i\\beta_1 B } e^{ -i\\gamma_1 H }$ の台は、$H$ の相互作用の次数により与えられる量によってのみ拡張します。すなわちシステムのサイズとは独立です。つまり、これらのより小さい部分問題において、期待値は $n$ と独立で、古典的に推定できることを意味します。一般的な次数 $3$ のケースは、参考資料 [3](#references) にて考察されています。\n", + "\n", + "これは一般的な見解であり、試行状態の準備に使われている回路がハミルトニアンのそれぞれの項の台を定数しか増やさない場合、コスト関数は直接推定できることを意味します。\n", + "\n", + "この様な場合、かつ試行状態の準備に数個のパラメーター $\\beta, \\gamma$ だけが必要な場合は、単純なグリッド探索で簡単に見つけることができます。さらに、$M_p$ の厳密な最適値を用いて、近似比の上限\n", + "\n", + "\n", + "$$ \\frac{M_p}{C_{max}} \\geq \\alpha $$\n", + "\n", + "\n", + "から $\\alpha$ の推定値を取得できます。この場合、QAOAは問題サイズの多項式時間で保証つきの近似比が得られる従来の近似最適化アルゴリズムと同じ特徴を持ちます。\n", + "\n", + "\n", + "#### 量子コンピューター上での評価方法\n", + "\n", + "量子回路が深すぎて古典的に評価できない時、もしくは問題ハミルトニアンの結合が高すぎる時は、期待値を推定する別な手段を利用します。量子コンピューター上で $F_p(\\vec{\\gamma},\\vec{\\beta})$ を直接推定する方法を含みます。ここでは、VQE [4](#references) で用いられていた、量子コンピュータ上に直接試行状態 $| \\psi(\\vec{\\gamma},\\vec{\\beta}) \\rangle$ を用意し、サンプリングから期待値を求める、従来の期待値推定の手法を踏襲しています。\n", + "\n", + "\n", + "QAOAは対角ハミルトニアン $H$ を持つので、期待値を推定するのは実に簡単です。計算基底の試行状態からサンプルを入手するだけでよいのです。$H = \\sum_{x \\in \\{0,1\\}^n} C(x) |x \\rangle\\langle x|$ であることを思い出すと、\n", + "\n", + "\n", + "\n", + "$$ \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle = \\sum_{x \\in \\{0,1\\}^n} C(x) |\\langle x| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle |^2$$\n", + "\n", + "\n", + "\n", + "のサンプリング推定値を、$Z$ 基底での状態 $| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle $ の単一量子ビット測定を繰り返すことで、取得することができます。分布 $|\\langle x| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle |^2$ から得られた各ビット文字列 $x$ について、コスト関数 $C(x)$ を評価し、サンプルの総数で平均化します。結果として得られる経験的平均は、状態の分散内にある加法性サンプリング誤差まで期待値を近似します。分散については後述します。\n", + "\n", + "\n", + "期待値を計算できると、参考文献 [6](#references) のような古典的な最適化アルゴリズムを実行することで、$F_p$を最適化できます。\n", + "\n", + "このアプローチは、$x^*$の理論的近似保証を与えませんが、最適化された関数値から近似比率 $\\alpha$ を推定することができます。\n", + "\n", + "\n", + "### 4.3.3 高確率で所定の近似比率の解を得ること\n", + "このアルゴリズムは、本質的に確率的であり、確率分布 $|\\langle x| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle |^2$ からランダムなビット文字列を生成します。では、最適化された期待値 $M_p$ の値に近い近似値 $x^*$ をサンプリングすることをどのように確認できるのでしょうか?この質問は、そもそも量子コンピューター上での $M_p$ の推定にも関連していることに注意してください。もし $|\\langle x| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle |^2$ から生成したサンプルの分散が大きすぎる時、平均を決定するためには多くのサンプルが必要です。\n", + "\n", + "変数であるエネルギーの分散が少ないときに、平均 $M_p$ に近いビット文字列 $x^*$ を高確率で引き出します。\n", + "\n", + "ハミルトニアン $H = \\sum_{k=1}^m \\hat{C}_k$ の項数は $m$ であることに注意してください。つまり個々の被加数 $\\hat{C}_k$ は、全ての$k = 1,\\ldots, m$ に対し $\\|\\hat{C}_k\\| \\leq \\tilde{C}$ の形で共通の定数で制限される演算子ノルムを持つと仮定します。すなわち、次の通りです。\n", + "\n", + "$$\n", + "\\begin{eqnarray}\n", + "\\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H^2|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle - \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle^2 &\\leq & \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|H^2|\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle \\\\\\nonumber\n", + "&=& \\sum_{k,l =1}^m \\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|\\hat{C}_k \\hat{C}_l |\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle \\\\\\nonumber \n", + "&\\leq& m^2 \\tilde{C}^2 \\\\\\nonumber\n", + "\\end{eqnarray}\n", + "$$\n", + "\n", + "\n", + "ここで $\\langle \\psi_p(\\vec{\\gamma},\\vec{\\beta})|\\hat{C}_k \\hat{C}_l |\\psi_p(\\vec{\\gamma},\\vec{\\beta})\\rangle \\leq \\tilde{C}^2$ を使用しました。\n", + "\n", + "\n", + "これは、どんな期待値 $F_p(\\vec{\\gamma},\\vec{\\beta})$ の分散も $m^2 \\tilde{C}^2$ 以下になることを意味します。これは $M_p$ にも当てはまります。さらに $m$ が量子ビット数 $n$ の多項式的にしか増えない場合、 $|\\langle x| \\psi_p(\\vec{\\gamma},\\vec{\\beta}) \\rangle |^2$ から、多項式的に増える数 $s = O\\left(\\frac{\\tilde{C}^2 m^2}{\\epsilon^2}\\right)$ のサンプルを生成すれば、$M_p$ に近い $C(x^*)$ を導く $x^*$ を得るのに十分です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Qiskit での実装\n", + "\n", + "実装例として、公開されているIBMQの5量子ビット・チップで、バタフライ・グラフの MAXCUT 問題を考えましょう。グラフは以下のように定義され、デバイスの量子ビットの結合関係と対応しています。この設定では、オリジナルの QAOA の実装が可能です。つまり、コスト関数 $C$ と状態を生成するために使用されたハミルトニアン $H$ が一致しています。さらに、このような簡単なグラフにおいて、正確なコスト関数は解析的に計算でき、変分的に最適なパラメーターを探す [7](#references) 必要がありません。回路の実装においては、 [Qiskitドキュメンテーション](https://qiskit.org/documentation/) の表記法やゲート定義に従うことにしましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最初のステップとして、Qiskitとその他のPythonパッケージをロードしましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import networkx as nx # tool to handle general Graphs \n", + "import matplotlib.pyplot as plt \n", + "from matplotlib import cm\n", + "from matplotlib.ticker import LinearLocator, FormatStrFormatter\n", + "\n", + "from qiskit import Aer, IBMQ\n", + "from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, transpile, assemble\n", + "from qiskit.providers.ibmq import least_busy\n", + "from qiskit.tools.monitor import job_monitor\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.1 問題の定義 \n", + "\n", + "超電導チップのバタフライ・グラフでコスト関数を定義します。このグラフは、$n = 5$ の頂点 $ V = \\{0,1,2,3,4,5\\}$ と、全てが同じ単位重み $w_{ij} = 1$の6つの枝 $E = \\{(0,1),(0,2),(1,2),(3,2),(3,4),(4,2)\\}$ を持ちます。networkxを用いて以下の通りグラフを符号化し量子ビットの接続関係を描画します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Generating the butterfly graph with 5 nodes \n", + "n = 5\n", + "V = np.arange(0,n,1)\n", + "E =[(0,1,1.0),(0,2,1.0),(1,2,1.0),(3,2,1.0),(3,4,1.0),(4,2,1.0)] \n", + "\n", + "G = nx.Graph()\n", + "G.add_nodes_from(V)\n", + "G.add_weighted_edges_from(E)\n", + "\n", + "# Generate plot of the Graph\n", + "colors = ['r' for node in G.nodes()]\n", + "default_axes = plt.axes(frameon=True)\n", + "pos = nx.spring_layout(G)\n", + "\n", + "nx.draw_networkx(G, node_color=colors, node_size=600, alpha=1, ax=default_axes, pos=pos)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 最適な試行状態のパラメーター \n", + "\n", + "この例において、$p = 1$ の場合、すなわちゲートのレイヤーのみの場合を考えます。期待値 $F_1(\\gamma,\\beta) = \\langle \\psi_1(\\beta,\\gamma)|H|\\psi_1(\\beta,\\gamma) \\rangle$ はこの簡単な設定で解析的に計算できます。ハミルトニアン $H = \\sum_{(j,k) \\in E} \\frac{1}{2}\\left(1 - Z_i Z_k\\right)$ の手順を明示的に説明しましょう。期待値の線形性により、個々の枝に対する期待値を計算できます。\n", + "\n", + "\n", + "$$f_{(i,k)}(\\beta,\\alpha) = \\langle \\psi_1(\\gamma,\\beta)|\\;\\frac{1}{2}\\left(1 - Z_i Z_k\\right)\\;|\\psi_1(\\gamma,\\beta)\\rangle $$\n", + "\n", + "\n", + "上記のバタフライ・グラフにおいては、枝を $A = \\{(0,1),(3,4)\\}$ と $B = \\{(0,2),(1,2),(2,3),(2,4)\\}$ の2種類に分類できます。$A$ の枝は隣り合う枝を2つしか持たない一方、$B$の枝は4つ持っています。各セットで一本の枝の期待値を計算すると、同じセットの枝の期待値も同じであると納得できると思います。これは、二つの枝の期待値を計算するだけで、$F_1(\\gamma,\\beta) = 2 f_A(\\gamma,\\beta) + 4f_B(\\gamma,\\beta)$ を計算できることを意味します。[セクション4.2.2](#section_422)で概説されている議論に続き、パウリ演算子 $Z_0Z_1$ もしくは $Z_0Z_2$ と作用しないすべてのゲートが可換でキャンセルすることに注意すると、計算が必要なのは、\n", + "\n", + "\n", + "$$f_A(\\gamma,\\beta) = \\frac{1}{2}\\left(1 - \\langle +^3|U_{21}(\\gamma)U_{02}(\\gamma)U_{01}(\\gamma)X_{0}(\\beta)X_{1}(\\beta)\\;Z_0Z_1\\; X^\\dagger_{1}(\\beta)X^\\dagger_{0}(\\beta)U^\\dagger_{01}(\\gamma)U^\\dagger_{02}(\\gamma)U^\\dagger_{12}(\\gamma) | +^3 \\rangle \\right)$$\n", + "\n", + "\n", + "と\n", + "\n", + "\n", + "$$f_B(\\gamma,\\beta) = \\frac{1}{2}\\left(1 - \\langle +^5|U_{21}(\\gamma)U_{24}(\\gamma)U_{23}(\\gamma)U_{01}(\\gamma)U_{02}(\\gamma)X_{0}(\\beta)X_{2}(\\beta)\\;Z_0Z_2\\; X^\\dagger_{0}(\\beta)X^\\dagger_{2}(\\beta)U^\\dagger_{02}(\\gamma)U^\\dagger_{01}(\\gamma)U^\\dagger_{12}(\\gamma)U^\\dagger_{23}(\\gamma)U^\\dagger_{24}(\\gamma) | +^5 \\rangle \\right)$$\n", + "\n", + "\n", + "だけです。これらの期待値がどの程度複雑になるかは、一般的には、我々が考慮しているグラフの次数にのみ依存し、次数が制限されている場合には、グラフ全体の大きさには依存しません。この式の直接的な評価は、$U_{k,l}(\\gamma) = \\exp\\frac{i\\gamma}{2}\\left(1 - Z_kZ_l\\right)$ と\n", + "$X_k(\\beta) = \\exp(i\\beta X_k)$ を用いて、\n", + "\n", + "\n", + "$$f_A(\\gamma,\\beta) = \\frac{1}{2}\\left(\\sin(4\\gamma)\\sin(4\\beta) + \\sin^2(2\\beta)\\sin^2(2\\gamma)\\right)$$\n", + "\n", + "\n", + "と\n", + "\n", + "\n", + "$$f_B(\\gamma,\\beta) = \\frac{1}{2}\\left(1 - \\sin^2(2\\beta)\\sin^2(2\\gamma)\\cos^2(4\\gamma) - \\frac{1}{4}\\sin(4\\beta)\\sin(4\\gamma)(1+\\cos^2(4\\gamma))\\right) $$\n", + "\n", + "\n", + "になります。これらの結果は上述の様に組み合わせると、すなわち、期待値は次の様に得られます。\n", + "\n", + "\n", + "$$ F_1(\\gamma,\\beta) = 3 - \\left(\\sin^2(2\\beta)\\sin^2(2\\gamma)- \\frac{1}{2}\\sin(4\\beta)\\sin(4\\gamma)\\right)\\left(1 + \\cos^2(4\\gamma)\\right),$$\n", + "\n", + "\n", + "関数 $F_1(\\gamma,\\beta)$ を描画し、簡単なグリッドサーチを使って期待値を最大化するパラメーター $(\\gamma^*,\\beta^*)$ を見つけましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " --- OPTIMAL PARAMETERS --- \n", + "\n", + "The maximal expectation value is: M1 = 3.431\n", + "This is attained for gamma = 1.900 and beta = 0.200\n" + ] + } + ], + "source": [ + "# Evaluate the function\n", + "step_size = 0.1;\n", + "\n", + "a_gamma = np.arange(0, np.pi, step_size)\n", + "a_beta = np.arange(0, np.pi, step_size)\n", + "a_gamma, a_beta = np.meshgrid(a_gamma,a_beta)\n", + "\n", + "F1 = 3-(np.sin(2*a_beta)**2*np.sin(2*a_gamma)**2-0.5*np.sin(4*a_beta)*np.sin(4*a_gamma))*(1+np.cos(4*a_gamma)**2)\n", + "\n", + "# Grid search for the minimizing variables\n", + "result = np.where(F1 == np.amax(F1))\n", + "a = list(zip(result[0],result[1]))[0]\n", + "\n", + "gamma = a[0]*step_size;\n", + "beta = a[1]*step_size;\n", + "\n", + "# Plot the expetation value F1\n", + "fig = plt.figure()\n", + "ax = fig.gca(projection='3d')\n", + "\n", + "surf = ax.plot_surface(a_gamma, a_beta, F1, cmap=cm.coolwarm, linewidth=0, antialiased=True)\n", + "\n", + "ax.set_zlim(1,4)\n", + "ax.zaxis.set_major_locator(LinearLocator(3))\n", + "ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))\n", + "\n", + "plt.show()\n", + "\n", + "#The smallest parameters and the expectation can be extracted\n", + "print('\\n --- OPTIMAL PARAMETERS --- \\n')\n", + "print('The maximal expectation value is: M1 = %.03f' % np.amax(F1))\n", + "print('This is attained for gamma = %.03f and beta = %.03f' % (gamma,beta))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.3 量子回路\n", + "\n", + "これらのパラメーターを用いると、グラフの試行状態、すなわち上述した頂点 $V = \\{0,1,2,3,4\\}$ と枝 $E = \\{(0,1),(0,2),(1,2),(3,2),(3,4),(4,2)\\}$ を持つグラフ $G = (V,E)$ を準備する回路を作成できます。回路は $n = 5$ 量子ビットを必要とし、以下の状態を準備します。\n", + "\n", + "\n", + "$$ |\\psi_1(\\gamma ,\\beta)\\rangle = e^{ -i\\beta B } e^{ -i\\gamma H } |+\\rangle^n. $$\n", + "\n", + "\n", + "項が $B = \\sum_{k \\in V} X_k$ と $H = \\sum_{(k,m) \\in E} \\frac{1}{2}\\left(1 - Z_kZ_m\\right)$ で与えられることを思い出してください。以下の手順で回路を生成します:\n", + "\n", + " - まず5つのアダマール・ゲート $H$ を実装し、均一な重ね合わせ状態を生成します。\n", + "\n", + "\n", + " - 枝 $(k,l) \\in E$ に 角度 $\\gamma$のイジング・タイプ・ゲート $U_{k,l}(\\gamma)$ を6つ作用させます。Qiskitに備わっているゲートを用いて以下のように表現することができます。\n", + "\n", + "\n", + "$$ U_{k,l}(\\gamma) = CU1(-2\\gamma)_{k,l} U1(\\gamma)_k U1(\\gamma)_l$$\n", + "\n", + "\n", + " - 各頂点 $k \\in V$ に角度 $\\beta$ の単一量子ビット $X$ 回転 $X_k(\\beta)$ を作用させます。このゲートは、Qiskitで $X_k(\\beta) = RX(2\\beta)_k$ として直接パラメーター化されています。\n", + "\n", + "\n", + " - 最後に、計算基底で量子ビットを測定します。すなわち、$Z$ 測定をして結果のビット文字列 $x \\in \\{0,1\\}^5$ を記録します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# prepare the quantum and classical resisters\n", + "QAOA = QuantumCircuit(len(V), len(V))\n", + "\n", + "# apply the layer of Hadamard gates to all qubits\n", + "QAOA.h(range(len(V)))\n", + "QAOA.barrier()\n", + "\n", + "# apply the Ising type gates with angle gamma along the edges in E\n", + "for edge in E:\n", + " k = edge[0]\n", + " l = edge[1]\n", + " QAOA.cp(-2*gamma, k, l)\n", + " QAOA.p(gamma, k)\n", + " QAOA.p(gamma, l)\n", + " \n", + "# then apply the single qubit X - rotations with angle beta to all qubits\n", + "QAOA.barrier()\n", + "QAOA.rx(2*beta, range(len(V)))\n", + "\n", + "# Finally measure the result in the computational basis\n", + "QAOA.barrier()\n", + "QAOA.measure(range(len(V)),range(len(V)))\n", + "\n", + "### draw the circuit for comparison\n", + "QAOA.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.4 コスト関数の評価\n", + "\n", + "最後にビット文字列からコスト関数値を計算するルーチンが必要です。\n", + "これは\"良い候補\"のビット文字列 $x$ を見つけたかどうか判断するのに必要なだけでなく、期待値を直接評価できない場合に $F_1(\\gamma,\\beta)$ の期待値を推定することにも使用されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Compute the value of the cost function\n", + "def cost_function_C(x,G):\n", + " \n", + " E = G.edges()\n", + " if( len(x) != len(G.nodes())):\n", + " return np.nan\n", + " \n", + " C = 0;\n", + " for index in E:\n", + " e1 = index[0]\n", + " e2 = index[1]\n", + " \n", + " w = G[e1][e2]['weight']\n", + " C = C + w*x[e1]*(1-x[e2]) + w*x[e2]*(1-x[e1])\n", + " \n", + " return C" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5a. QAOAをシミュレーターで動かす\n", + "\n", + "まず、このアルゴリズムをローカルのQASMシミュレーターで実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# run on local simulator\n", + "backend = Aer.get_backend(\"aer_simulator\")\n", + "shots = 10000\n", + "\n", + "TQAOA = transpile(QAOA, backend)\n", + "qobj = assemble(TQAOA, shots=shots)\n", + "QAOA_results = backend.run(qobj).result()\n", + "\n", + "plot_histogram(QAOA_results.get_counts(),figsize = (8,6),bar_labels = False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### シミュレーションのデータを評価する\n", + "\n", + "シミュレーションのデータから関連する情報を計算していきましょう。得られた結果を以下の様に使用します。\n", + "\n", + "- 平均エネルギーを計算し、理論的予想に合致しているか調べます\n", + "- 得られたビット文字列のサンプルの中からコスト関数値 $C(x^*)$ が最大になったビット文字列 $x^*$ を報告します\n", + "- エネルギーのヒストグラムを描画し、予想した平均の回りに本当に集中しているか確認します" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " --- SIMULATION RESULTS ---\n", + "\n", + "The sampled mean value is M1_sampled = 3.29 while the true value is M1 = 3.43 \n", + "\n", + "The approximate solution is x* = 00101 with C(x*) = 4 \n", + "\n", + "The cost function is distributed as: \n", + "\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Evaluate the data from the simulator\n", + "counts = QAOA_results.get_counts()\n", + "\n", + "avr_C = 0\n", + "max_C = [0,0]\n", + "hist = {}\n", + "\n", + "for k in range(len(G.edges())+1):\n", + " hist[str(k)] = hist.get(str(k),0)\n", + "\n", + "for sample in list(counts.keys()):\n", + "\n", + " # use sampled bit string x to compute C(x)\n", + " x = [int(num) for num in list(sample)]\n", + " tmp_eng = cost_function_C(x,G)\n", + " \n", + " # compute the expectation value and energy distribution\n", + " avr_C = avr_C + counts[sample]*tmp_eng\n", + " hist[str(round(tmp_eng))] = hist.get(str(round(tmp_eng)),0) + counts[sample]\n", + " \n", + " # save best bit string\n", + " if( max_C[1] < tmp_eng):\n", + " max_C[0] = sample\n", + " max_C[1] = tmp_eng\n", + " \n", + "M1_sampled = avr_C/shots\n", + "\n", + "print('\\n --- SIMULATION RESULTS ---\\n')\n", + "print('The sampled mean value is M1_sampled = %.02f while the true value is M1 = %.02f \\n' % (M1_sampled,np.amax(F1)))\n", + "print('The approximate solution is x* = %s with C(x*) = %d \\n' % (max_C[0],max_C[1]))\n", + "print('The cost function is distributed as: \\n')\n", + "plot_histogram(hist,figsize = (8,6),bar_labels = False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5b. QAOAを量子デバイスの実機で動かす" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、実機のバックエンドで同じ回路がどの様に実行されるか見ましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# Use the IBMQ essex device\n", + "provider = IBMQ.load_account()\n", + "backend = provider.get_backend('ibmq_santiago')\n", + "shots = 2048\n", + "\n", + "TQAOA = transpile(QAOA, backend)\n", + "job_exp = backend.run(TQAOA, shots=shots)\n", + "job_monitor(job_exp)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exp_results = job_exp.result()\n", + "plot_histogram(exp_results.get_counts(),figsize = (10,8),bar_labels = False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 実験データを評価する\n", + "\n", + "前と同じ分析を繰り返して、実験結果を比較します。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " --- EXPERIMENTAL RESULTS ---\n", + "\n", + "The sampled mean value is M1_sampled = 3.14 while the true value is M1 = 3.43 \n", + "\n", + "The approximate solution is x* = 00101 with C(x*) = 4 \n", + "\n", + "The cost function is distributed as: \n", + "\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Evaluate the data from the experiment\n", + "counts = exp_results.get_counts()\n", + "\n", + "avr_C = 0\n", + "max_C = [0,0]\n", + "hist = {}\n", + "\n", + "for k in range(len(G.edges())+1):\n", + " hist[str(k)] = hist.get(str(k),0)\n", + "\n", + "for sample in list(counts.keys()):\n", + "\n", + " # use sampled bit string x to compute C(x)\n", + " x = [int(num) for num in list(sample)]\n", + " tmp_eng = cost_function_C(x,G)\n", + " \n", + " # compute the expectation value and energy distribution\n", + " avr_C = avr_C + counts[sample]*tmp_eng\n", + " hist[str(round(tmp_eng))] = hist.get(str(round(tmp_eng)),0) + counts[sample]\n", + " \n", + " # save best bit string\n", + " if( max_C[1] < tmp_eng):\n", + " max_C[0] = sample\n", + " max_C[1] = tmp_eng\n", + " \n", + "M1_sampled = avr_C/shots\n", + "\n", + "print('\\n --- EXPERIMENTAL RESULTS ---\\n')\n", + "print('The sampled mean value is M1_sampled = %.02f while the true value is M1 = %.02f \\n' % (M1_sampled,np.amax(F1)))\n", + "print('The approximate solution is x* = %s with C(x*) = %d \\n' % (max_C[0],max_C[1]))\n", + "print('The cost function is distributed as: \\n')\n", + "plot_histogram(hist,figsize = (8,6),bar_labels = False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 演習問題" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. QAOAはビット文字列を生成しますが、この文字列はそのグラフにとって最適解でしょうか?実機上の実験結果とローカルQASMシミュレーターの結果を比較してください。\n", + "\n", + "\n", + "2. [セクション 5.2](#implementation_sec52) で、コスト関数 $F_1$ を解析的に計算しました。ステップを検証し、$f_A(\\gamma,\\beta)$ ならびに $f_B(\\gamma,\\beta)$ を計算してください。\n", + "\n", + "\n", + "3. Qiskitでの実装において $F_1$ の正確な式が与えられました。 \n", + "\n", + " - 結果で得られたサンプルから期待値 $F_1(\\gamma,\\beta)$ を推定するルーチンを作成してください (ヒント: [セクション 5.4](#implementation_sec54) での cost_function_C(x,G)関数 と [セクション 5.a / 5.b](#implementationsim)のデータの評価を使用します)。\n", + " \n", + " - 最適化ルーチン、例えばこのチュートリアルのVQEの例のSPSAなどを使って、サンプリングされた$F_1(\\gamma,\\beta)$ のパラメーターを数値的に最適化してください。$\\gamma^*$ と $\\beta^*$ に対し同じ値を見つけましたか?\n", + "\n", + "\n", + "4. [セクション 5.3](#implementation_sec53)の試行回路は、深さ $p=1$ で、ハードウェアと互換性があるよう意図したものでした。\n", + "\n", + " - 問題2のルーチンを使って、$p=2,3$ に対しコスト関数 $F_p(\\gamma,\\beta)$ を評価してください。実機上での実行でどうなると思いますか?\n", + " \n", + " - 参考文献 [4](#references) のハードウェアに特化した試行状態を参考にして、この節で取り上げた試行状態のクラスを他の波動関数に一般化してください。\n", + "\n", + "\n", + "5. 様々な例のセクションで説明した MAX-3-SAT の例を考え、それに応じて $F_p$ を計算するために使用した [セクション 5.4](#implementation_sec54) の cost_function_C(x,G) 関数を修正してください。ハードウェアに特化したアルゴリズムを使用して、この MAX-3-SAT のインスタンスに対してQAOAを実行し、その結果を分析してください。 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. 参考文献" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Garey, Michael R.; David S. Johnson (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness. W. H. Freeman. ISBN 0-7167-1045-5\n", + "2. Goemans, Michel X., and David P. Williamson. [Journal of the ACM (JACM) 42.6 (1995): 1115-1145](http://www-math.mit.edu/~goemans/PAPERS/maxcut-jacm.pdf).\n", + "3. Farhi, Edward, Jeffrey Goldstone, and Sam Gutmann. \"A quantum approximate optimization algorithm.\" arXiv preprint [arXiv:1411.4028 (2014)](https://arxiv.org/abs/1411.4028).\n", + "4. Kandala, Abhinav, et al. \"Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets.\" [Nature 549.7671 (2017): 242](https://www.nature.com/articles/nature23879).\n", + "5. Farhi, Edward, et al. \"Quantum algorithms for fixed qubit architectures.\" arXiv preprint [arXiv:1703.06199 (2017)](https://arxiv.org/abs/1703.06199).\n", + "6. Spall, J. C. (1992), [IEEE Transactions on Automatic Control, vol. 37(3), pp. 332–341](https://ieeexplore.ieee.org/document/119632).\n", + "7. Michael Streif and Martin Leib \"Training the quantum approximate optimization algorithm without access to a quantum processing unit\" (2020) [Quantum Sci. Technol. 5 034008](https://doi.org/10.1088/2058-9565/ab8c2b)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-applications/satisfiability-grover.ipynb b/translations/ja/ch-applications/satisfiability-grover.ipynb new file mode 100644 index 0000000..637459d --- /dev/null +++ b/translations/ja/ch-applications/satisfiability-grover.ipynb @@ -0,0 +1,345 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Groverのアルゴリズムを用いた充足可能性問題の解法" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセクションでは、Qiskit Aqua内のGroverのアルゴリズムの実装を用いた、充足可能性問題の解法を説明します。 \n", + "\n", + "## 目次\n", + "\n", + "1. [序論](#introduction)\n", + "\n", + "2. [3-SAT問題](#3satproblem)\n", + "\n", + "3. [Qiskitでの実装](#implementation)\n", + "\n", + "4. [演習問題](#problems)\n", + "\n", + "5. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 序論 \n", + "\n", + "[前のセクション](../ch-algorithms/grover.ipynb)では、非構造化探索に対するGroverのアルゴリズムについて、Qiskit Terraを用いた例と実装とともに紹介しました。Groverの探索は、古典的なコンピューターのものより二乗のオーダーで、早く正しい解を探すことができる量子アルゴリズムであることがお分かりいただけたと思います。ここでは、Groverのアルゴリズムを使用して、組合せブール値の充足可能性問題の解法を説明しましょう。\n", + "\n", + "コンピューター・サイエンスにおいて、ブール値の充足性問題とは、与えられたブール式を満たす解が存在するかどうかを決定する問題です。言い換えると、式がTRUEと評価されるように、与えられたブール式の変数をTRUEまたはFALSEの値で置き換えることができるかどうかを問う問題になります。置き換えられる場合、式は「充足している」と言います。 一方、そのような値の割り当てが存在しない場合は、式で表される関数は、すべての可能な変数値に対してFALSEになり、式は「充足していない」と言います。 つまり、ブール式を満たす割り当てを解とすると、これは探索問題と見なすことができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 3-SAT問題 \n", + "\n", + "3体充足度問題(3-SAT問題)は、次の具体的な問題が最良の説明となります。以下の様に、3つのブール変数 $v_1,v_2,v_3$ とブール関数 $f$ を考えましょう:\n", + "\n", + "$$f(v_1,v_2,v_3) = (\\neg v_1 \\vee \\neg v_2 \\vee \\neg v_3) \\wedge (v_1 \\vee \\neg v_2 \\vee v_3) \\wedge (v_1 \\vee v_2 \\vee \\neg v_3) \\wedge (v_1 \\vee \\neg v_2 \\vee \\neg v_3) \\wedge (\\neg v_1 \\vee v_2 \\vee v_3)$$\n", + "\n", + "上の関数において、右側の方程式の項の$()$の内側を、節と呼びます。つまり、この関数には5つの節があります。3-SAT問題であるため、各節には必ず3つのリテラルがあります。 例えば、最初の節には、 $ \\neg v_1$、 $\\neg v_2$ 、および $\\neg v_3$ がリテラルとして含まれています。 記号 $\\neg$ は、後続のリテラルの値を否定する(または反転する)論理NOTです。 記号 $\\vee$ と $\\wedge$ は、それぞれ論理ORと論理ANDになります。 $f(v_1, v_2, v_3) = 1$ と評価できる $v_1, v_2, v_3$ の値がある場合には、ブール関数 $f$ は充足します(つまり、 $f$ がTrueと評価できるということです)。\n", + "\n", + "そのような値を見つけるための馬鹿正直な方法は、$f$の入力値の可能なすべての組み合わせを試行することです。以下の表は、 $v_1, v_2, v_3$ のすべての可能な組み合わせを試行した時に得られる表です。 説明を容易にするため、 $0$ はFalseと、 $1$ はTrueと同義とします。\n", + "\n", + "|$v_1$ | $v_2$ | $v_3$ | $f$ | コメント | \n", + "|------|-------|-------|-----|---------|\n", + "| 0 | 0 | 0 | 1 | **解** | \n", + "| 0 | 0 | 1 | 0 | $f$ がFalseなので解ではない | \n", + "| 0 | 1 | 0 | 0 | $f$ がFalseなので解ではない | \n", + "| 0 | 1 | 1 | 0 | $f$ がFalseなので解ではない | \n", + "| 1 | 0 | 0 | 0 | $f$ がFalseなので解ではない | \n", + "| 1 | 0 | 1 | 1 | **解** | \n", + "| 1 | 1 | 0 | 1 | **解** | \n", + "| 1 | 1 | 1 | 0 | $f$ がFalseなので解ではない | \n", + "\n", + "上の表から、この3-SAT問題が、3つの充足解 $(v_1, v_2, v_3) = (T, F, T)$ or $(F, F, F)$ or $(T, T, F)$ を持つことがわかります。\n", + "\n", + "一般的に、ブール関数 $f$ は、多くの節と、より多くのブール型変数を持ちます。3-SAT問題は、連言標準形(Conjunctive Normal Form、CNF)、つまり3つのリテラルの選言からなる節と一つ以上の節の連言として常に表現できることに注意してください。すなわち、3つの論理和の論理積となります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskitでの実装 \n", + "\n", + "では、Qiskit Aquaを使って、3-SATの例題を解いてみましょう: \n", + "$$f(v_1,v_2,v_3) = (\\neg v_1 \\vee \\neg v_2 \\vee \\neg v_3) \\wedge (v_1 \\vee \\neg v_2 \\vee v_3) \\wedge (v_1 \\vee v_2 \\vee \\neg v_3) \\wedge (v_1 \\vee \\neg v_2 \\vee \\neg v_3) \\wedge (\\neg v_1 \\vee v_2 \\vee v_3)$$\n", + "\n", + "まず、Qiskit Aquaがこの様な問題を解くために使用している入力フォーマット [DIMACS CNF](http://www.satcompetition.org/2009/format-benchmarks2009.html) ついて理解する必要があります:\n", + "\t\n", + "~~~\n", + "c example DIMACS CNF 3-SAT\n", + "p cnf 3 5\n", + "-1 -2 -3 0\n", + "1 -2 3 0\n", + "1 2 -3 0\n", + "1 -2 -3 0\n", + "-1 2 3 0\n", + "~~~\n", + "\n", + "- `c` から始まる行はコメントです\n", + " - 例: `c example DIMACS CNF 3-SAT`\n", + "- 最初の非コメント行は、`p cnf nbvar nbclauses` という形である必要があります。ここで:\n", + " - `cnf` は、入力がCNF形式であることを意味します\n", + " - `nbvar` は、ファイル内に出現する変数の正確な数です\n", + " - `nbclauses` は、ファイル内に含まれる節の正確な数です\n", + " - 例: `p cnf 3 5`\n", + "- 次に、各節の行が記述されます。ここで:\n", + " - 各節は `-nbvar` から `nbvar`の間の個別の非Null値の数列で、行は`0`で終わります\n", + " - 反数 i と -i を同時に含むことはできません\n", + " - 正の数は対応する変数を意味します\n", + " - 負の数は対応する変数の否定を意味します\n", + " - 例:`-1 2 3 0` は、節 $\\neg v_1 \\vee v_2 \\vee v_3$ に対応します。\n", + "\n", + "同様に、前の問題の解 $(v_1, v_2, v_3) = (T, F, T)$ , $(F, F, F)$ , $(T, T, F)$ は、`1 -2 3` , `-1 -2 -3` , `1 2 -3` と書くことができます.\n", + "\n", + "この例題を入力として、Grover探索に対応する Oracle を作成します。具体的には、Aquaで提供されるLogicalExpressionOracleコンポーネントを使用します。このコンポーネントは、DIMACS CNF構文文字列の解析と、対応するOracle回路の構築をサポートしています。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from qiskit import BasicAer\n", + "from qiskit.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice\n", + "from qiskit.aqua import QuantumInstance, run_algorithm\n", + "from qiskit.aqua.algorithms import Grover\n", + "from qiskit.aqua.components.oracles import LogicalExpressionOracle, TruthTableOracle" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "input_3sat = '''\n", + "c example DIMACS-CNF 3-SAT\n", + "p cnf 3 5\n", + "-1 -2 -3 0\n", + "1 -2 3 0\n", + "1 2 -3 0\n", + "1 -2 -3 0\n", + "-1 2 3 0\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "oracle = LogicalExpressionOracle(input_3sat)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`oracle` はGroverのインスタンスを作成するために使用されます:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "grover = Grover(oracle)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "シミュレーター・バックエンドを構成し、Groverのインスタンスを実行して結果を得ることができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, -2, 3]\n" + ] + } + ], + "source": [ + "backend = BasicAer.get_backend('qasm_simulator')\n", + "quantum_instance = QuantumInstance(backend, shots=1024)\n", + "result = grover.run(quantum_instance)\n", + "print(result['result'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上に示される通り、与えられた3-SAT問題を充足する解が得られました。これは確かに3つの充足解の1つです。\n", + "\n", + "シミュレーター・バックエンドを使用しているため、以下の図に示すように、完全な測定結果も返されます。3つの充足解に対応するバイナリ文字列 `000`、`011`および`101`(各文字列のビット・オーダーに注意してください)が高い確率を持っていることが見て取れます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_histogram(result['measurement'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "シミュレーターが例題の解を見つけられることを確認しました。ノイズと不完全なゲートを持つ本物の量子デバイスを使用したとき、何が起こるか見てみましょう。\n", + "\n", + "ただし、ネットワークを介して実装置に送信できる文字列の長さの制限(この回路のQASMは6万文字以上あります)があるため、上記の回路を実装置のバックエンドで実行することはできません。以下のように、実装置の`ibmq_16_melbourne`バックエンド上でコンパイルしたQASMを表示することはできます:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# Load our saved IBMQ accounts and get the ibmq_16_melbourne backend\n", + "from qiskit import IBMQ\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = provider.get_backend('ibmq_16_melbourne')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "gates = OrderedDict([('cx', 366), ('u3', 120), ('u2', 79), ('u1', 74), ('measure', 3), ('barrier', 2)])\n", + "depth = 408\n" + ] + } + ], + "source": [ + "from qiskit.compiler import transpile\n", + "\n", + "# transpile the circuit for ibmq_16_melbourne\n", + "grover_compiled = transpile(result['circuit'], backend=backend, optimization_level=3)\n", + "\n", + "print('gates = ', grover_compiled.count_ops())\n", + "print('depth = ', grover_compiled.depth())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "必要とされるゲート数は、現在の短期量子コンピュータのデコヒーレンス時間に関する制限をはるかに上回ります。 つまり、充足問題や他の最適化問題を解決するGrover探索の量子回路を設計することはまだ難しいのです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 演習問題 \n", + "\n", + "1. Qiskit Aquaを使用して、次の3-SAT問題を解いてください: $f(x_1, x_2, x_3) = (x_1 \\vee x_2 \\vee \\neg x_3) \\wedge (\\neg x_1 \\vee \\neg x_2 \\vee \\neg x_3) \\wedge (\\neg x_1 \\vee x_2 \\vee x_3)$ 。 結果は期待したものでしたか?\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 参考文献 \n", + "\n", + "1. Giacomo Nannicini (2017), \"An Introduction to Quantum Computing, Without the Physics\", [arXiv:1708.03684 ](https://arxiv.org/abs/1708.03684)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-applications/vqe-molecules.ipynb b/translations/ja/ch-applications/vqe-molecules.ipynb new file mode 100644 index 0000000..53adb1c --- /dev/null +++ b/translations/ja/ch-applications/vqe-molecules.ipynb @@ -0,0 +1,709 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# VQE を利用しての分子シミュレーションを行う" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このチュートリアルでは、Variational Quantum Eigensolver (VQE)とその利用の狙いを紹介し、必要な理論を説明します。また、分子の基底状態エネルギーを見つけるための実装例を紹介します。\n", + "\n", + "## 目次\n", + "1. [はじめに](#introduction)\n", + "2. [量子力学での変分法](#varmethod)\n", + " 1. [数学的背景](#backgroundmath)\n", + " 2. [基底状態の下限](#groundstate)\n", + "3. [Variational Quantum Eigensolver](#vqe)\n", + " 1. [変分フォーム](#varforms)\n", + " 2. [単純な変分フォーム](#simplevarform)\n", + " 3. [パラメーター最適化](#optimization)\n", + " 4. [単一量子ビットの変分フォームの例](#example)\n", + " 5. [一般的な変分フォームの構造](#commonvarforms)\n", + "4. [Qiskit での VQE 実装](#implementation)\n", + " 1. [VQE を状態ベクトルシミュレーターで実行する](#implementationstatevec)\n", + " 2. [VQE をノイズのあるシミュレーターで実行する](#implementationnoisy)\n", + "5. [問題](#problems)\n", + "6. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## はじめに \n", + "多くのアプリケーションでは、行列固有値の最小値を見つけるのが重要です。例えば、化学では、分子を特徴付けるエルミート行列の最小固有値は、そのシステムの基底状態のエネルギーになります。将来的には、最小固有値を見つけるのに量子位相推定アルゴリズムが使われる見込みですが、実用的な応用問題の実装に必要な回路の深さが、NISQ時代に利用可能なハードウェアの限界を超えています。それゆえに、2014年にPeruzzoらが、浅い回路を利用した分子の基底状態エネルギーを推定する VQE を提案しました[1]。\n", + "\n", + "形式的に述べると、最小値が不明な固有値 $\\lambda_{min}$ と関連する固有状態 $|\\psi_{min}\\rangle$ をもったエルミート行列 $H$ が与えられた場合、VQEは $\\lambda_{min}$ を下に有界として、$\\lambda_{\\theta}$ を推定します(下限):\n", + "\n", + "\\begin{align*}\n", + " \\lambda_{min} \\le \\lambda_{\\theta} \\equiv \\langle \\psi(\\theta) |H|\\psi(\\theta) \\rangle\n", + "\\end{align*} \n", + "\n", + "ここで、$|\\psi(\\theta)\\rangle$ は、$\\lambda_{\\theta}$ に関係する固有状態です。適当な状態 $|\\psi\\rangle$ から開始し、$U(\\theta)$ で表現されるパラメータ化された回路を適用することで、このアルゴリズムにより、$|\\psi_{min}\\rangle$ に対する推定 $U(\\theta)|\\psi\\rangle \\equiv |\\psi(\\theta)\\rangle$ が得られます。パラメータ $\\theta$ を期待値 $\\langle \\psi(\\theta) |H|\\psi(\\theta) \\rangle$ が最小になるように古典的制御を繰り返し実施しながら推定します。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 量子力学における変分法\n", + "### 数学的背景\n", + "\n", + "VQEは、量子力学の変分法アプリケーションです。変分法をよりよく理解するために、基礎的な数学的背景を説明します。行列 $A$ の固有ベクトル $|\\psi_i\\rangle$ は、$A$ による変換でスカラー乗数($A$ の固有値$\\lambda_i$)分の違いだけで変化しません。すなわち、 \n", + "\n", + "\\begin{align*}\n", + " A |\\psi_i\\rangle = \\lambda_i |\\psi_i\\rangle\n", + "\\end{align*}\n", + "\n", + "です。また、行列 $H$ が随伴行列(転置と複素共役)の場合は、エルミートと呼ばれます。\n", + "\n", + "\\begin{align*}\n", + " H = H^{\\dagger}\n", + "\\end{align*}\n", + "\n", + "スペクトル定理によると、エルミート行列の固有値は実数になります。したがって、$H$ の任意の固有値は $\\lambda_i = \\lambda_i^*$ を満たします。測定できる量は実数である必要があるため、量子システムのハミルトニアンを記述するために、エルミート行列が適切です。さらには、$H$ は以下のように表現できます。\n", + "\n", + "\\begin{align*}\n", + " H = \\sum_{i = 1}^{N} \\lambda_i |\\psi_i\\rangle \\langle \\psi_i |\n", + "\\end{align*}\n", + "\n", + "ここで、各 $\\lambda_i$ は、対応する固有ベクトル $|\\psi_i\\rangle$ の固有値です。また、任意の量子状態に対するオブザーバブル $H$ の期待値は、以下の式で求められます。\n", + "\n", + "\\begin{align}\n", + " \\langle H \\rangle_{\\psi} &\\equiv \\langle \\psi | H | \\psi \\rangle\n", + "\\end{align}\n", + "\n", + "$H$ を重み付きの固有ベクトルの和として代入すると、次のようになります。\n", + "\n", + "\\begin{align}\n", + " \\langle H \\rangle_{\\psi} = \\langle \\psi | H | \\psi \\rangle &= \\langle \\psi | \\left(\\sum_{i = 1}^{N} \\lambda_i |\\psi_i\\rangle \\langle \\psi_i |\\right) |\\psi\\rangle\\\\\n", + " &= \\sum_{i = 1}^{N} \\lambda_i \\langle \\psi | \\psi_i\\rangle \\langle \\psi_i | \\psi\\rangle \\\\\n", + " &= \\sum_{i = 1}^{N} \\lambda_i | \\langle \\psi_i | \\psi\\rangle |^2\n", + "\\end{align}\n", + "\n", + "最後の式は、任意の状態に対するオブザーバブルの期待値は、$H$ に関係する固有値を利用して重みのついた線形結合として示せることを現しています。さらには、$| \\langle \\psi_i | \\psi\\rangle |^2 \\ge 0$ であるため、線型結合における重みは 0以上の数値になるので、次は自明です。\n", + "\n", + "\\begin{align}\n", + " \\lambda_{min} \\le \\langle H \\rangle_{\\psi} = \\langle \\psi | H | \\psi \\rangle = \\sum_{i = 1}^{N} \\lambda_i | \\langle \\psi_i | \\psi\\rangle |^2\n", + "\\end{align}\n", + "\n", + "上記の式が**変分法**と呼ばれるものです(テキストによっては変分原理と呼んでいます)[2]。この式の結果から、任意の波動関数の期待値は、最小でも $H$ に関係する最小固有値にしかならないことがわかります。また、$|\\psi_{min}\\rangle$ 状態の期待値は、$\\langle \\psi_{min}|H|\\psi_{min}\\rangle = \\langle \\psi_{min}|\\lambda_{min}|\\psi_{min}\\rangle = \\lambda_{min}$ となり、期待通り $\\langle H \\rangle_{\\psi_{min}}=\\lambda_{min}$ になります。\n", + "\n", + "\n", + "### 基底状態の下限\n", + "系のハミルトニアンがエルミート行列 $H$ で表現されている場合、系の基底状態(ground state)エネルギー $E_{gs}$ は $H$ に関係する最小の固有値になります。*ansatz* と呼ばれる適当な波動関数 $|\\psi \\rangle$ を $|\\psi_{min}\\rangle$ に近似させるため初期推測をして、期待値 $\\langle H \\rangle_{\\psi}$ を計算します。波動関数を繰り返し更新することで、ハミルトニアンの基底状態エネルギーに近い下限を得ることができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Variational Quantum Eigensolver\n", + "### 変分フォーム\n", + "量子コンピューター上で変分法を実装するには、系統的に ansatz を変更する方法が必要です。VQE はこれを固定フォームのパラメータ化された回路の利用を通じて行います。この回路は、しばしば *変分フォーム(variational form)* と呼ばれ、その実行は線形変換 $U(\\theta)$ で表現されます。変分フォームは開始状態 $|\\psi\\rangle$ (例えば、真空 $|0\\rangle$ あるいは、Hartree Fock 状態)に適用され、出力状態 $U(\\theta)|\\psi\\rangle\\equiv |\\psi(\\theta)\\rangle$ を生成します。$|\\psi(\\theta)\\rangle$ に対して繰り返し最適化を適用することで、期待値 $\\langle \\psi(\\theta)|H|\\psi(\\theta)\\rangle \\approx E_{gs} \\equiv \\lambda_{min}$ が出力されることを狙います。理想的には、$|\\psi(\\theta)\\rangle$ は $|\\psi_{min}\\rangle$ に近くなるでしょう(ここで、'近く' というのは、状態フィデリティー、もしくはマンハッタン距離(Manhattan distance)で特徴付けられます)。実際には、この場合でなくても、$E_{gs}$ に限りなく近い有効値が得られます。\n", + "\n", + "さらには、多項式パラメータ数をもった固定変分フォームは、指数関数サイズのヒルベルト空間内の全ての状態を、多項式サイズの部分空間へのみ変換します。その結果として、様々な変分フォームがあります。いくつか、例えば、Ry や RyRz は目的とするドメインを考慮せず、いわば発見的に設計されたものがあります。その他、UCCSD などは、問題の構造に基づいて近似を生成するために、特定のドメイン知識を利用しています。よく利用される変分フォームの構造は、このドキュメントの後半で詳しく説明します。\n", + "\n", + "### 単純な変分フォーム\n", + "変分フォームを構築する際には、2つの相反する目的のバランスを考える必要があります。理想的には、$n$ 量子ビットの変分フォームは、$|\\psi\\rangle \\in \\mathbb{C}^N$ かつ $N=2^n$の任意の状態 $|\\psi\\rangle$ を生成できます。しかしながら、可能な限り少ないパラメータで変分フォームを構築したいでしょう。ここでは、簡単に、最初のゴールを満たし、2つめのゴールを満たさない変分フォームの構築を見てみたいと思います。\n", + "\n", + "$n=1$ の場合を考えます。U3 ゲートは3つのパラメータ、$\\theta, \\phi$ 及び $\\lambda$ を受け取り、以下の変換を表現します:\n", + "\n", + "\\begin{align}\n", + " U3(\\theta, \\phi, \\lambda) = \\begin{pmatrix}\\cos(\\frac{\\theta}{2}) & -e^{i\\lambda}\\sin(\\frac{\\theta}{2}) \\\\ e^{i\\phi}\\sin(\\frac{\\theta}{2}) & e^{i\\lambda + i\\phi}\\cos(\\frac{\\theta}{2}) \\end{pmatrix}\n", + "\\end{align}\n", + "\n", + "グローバル位相を除いて、3つのパラメータを適切に設定して実装することで、どのような単一量子ビットへも変換が行えます。その結果、単一量子ビットの場合、以下の回路で、どのような状態も生成できる変分フォームを作成できます:\n", + "\n", + "\"U3\n", + "\n", + "\n", + "その上、このユニバーサルな'変分フォーム'は3つしかパラメータがないため、効率的に最適化できます。強調すべきは、任意の状態を生成できるということは、変分フォームが生成できるのは、$H$ が取りうる期待値上での達成可能な状態のセットに限定されないということです。理想的には、最小の期待値を求める部分は、古典計算の最適化の能力だけに依存します。\n", + "\n", + "あまり自明でないユニバーサル変分フォームは、2量子ビットの場合から導出できます。この場合、2体相互作用があり、従って、ユニバーサルを達成するためには、エンタングルメントを考慮に入れる必要があります。*Shende et al.* [3] らによる調査に従うと、以下の例がパラメータ化された、ユニバーサル2量子ビット回路になります:\n", + "\n", + "\"Two\n", + " \n", + "上記回路で実行される変換を $U(\\theta)$ とします。変分を利用して最適化した場合、$H$ の期待値は、$U(\\theta)|\\psi\\rangle \\equiv |\\psi(\\theta)\\rangle \\approx |\\psi_{min}\\rangle$ の時に、最小化されます。形式から、$U(\\theta)$ は任意の可能な状態に変換するので、この変分フォームは2量子ビットの基底エネルギーに強く関係したものを得ることができるでしょう。制限は、古典最適化の能力だけになります。\n", + "\n", + "### パラメーター最適化\n", + "効率的にパラメータ化された変分フォームを選択したら、変分法に従って、そのパラメータをターゲットとなるハミルトニアンの期待値を最小化するように最適化する必要があります。パラメータの最適化のプロセスには様々な課題があります。例えば、量子ハードウェアには様々なタイプのノイズがあり、目的関数の評価(エネルギーの計算)は実際の目的関数を反映しないかも知れません。また、いくつかのオプティマイザーはパラメーター集合の濃度(パラメーターの数)に依存して、目的関数の評価を数多く実施します。アプリケーションの要求を考慮しながら、最適なオプティマイザーを選択する必要があります。\n", + "\n", + "もっとも一般的な最適化戦略は、エネルギーの変化が極大になるような方向にパラメータを更新する最急降下法です。結果として、評価の数は、最適化すべきパラメータの数に依存します。これにより、探索スペースにおいてローカル最適値をクイックに発見するアルゴリズムとなります。しかしながら、この最適化方法はしばしば局所最適時に止まることがあり、実施される回路評価数によっては比較的時間がかかります。直感的な最適化戦略ですが、VQEで利用するにはお勧めできません。\n", + "\n", + "ノイズのある目的関数を最適化する適切なオプティマイザーとして、*Simultaneous Perturbation Stochastic Approximation* オプティマイザー (SPSA)があります。SPSAは2回の測定だけで、目的関数の勾配を近似します。最急降下法では各パラメータを独立に摂動させるのに対して、全てのパラメータを同時にランダムに摂動させます。VQEをノイズ込みのシミュレーター、もしくは実ハードウェアで利用する場合には、古典オプティマイザーとして SPSA が推奨されます。\n", + "\n", + "コスト関数の評価にノイズがない場合(例えば、VQEを状態ベクトルシミュレーターで利用する場合など)は、多様な古典オプティマイザーを利用できます。Qiskit Aqua でサポートされている2つのオプティマイザーは、*Sequential Least Squares Programming* オプティマイザー (SLSQP) と *Constrained Optimization by Linear Approximation* オプティマイザー (COBYLA) です。COBYLAでは、目的関数の評価を最適化の繰り返しで1回のみ実施(つまり評価の数はパラメータセットの濃度には依存しない)ということに着目します。従って、目的関数がノイズがない場合、及び評価の数を最小化したい場合は、COBYLAの利用がお勧めです。\n", + "\n", + "### 単一量子ビットの変分フォームの例\n", + "ではここで、基底エネルギー推定問題と似たような単一量子ビットの変分フォームを利用してみましょう。問題は、ランダムな確率ベクトルが$\\vec{x}$ が与えられており、出力の確率分布が $\\vec{x}$ に近くなるように、可能な単一量子ビット変分フォームのパラメーターを決定します(ここで近くは2つの確率ベクトル間のマンハッタン距離によって定義します)。\n", + "\n", + "最初に python でランダム確率ベクトルを作成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "np.random.seed(999999)\n", + "target_distr = np.random.rand(2)\n", + "# We now convert the random vector into a valid probability vector\n", + "target_distr /= sum(target_distr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、単一の U3 変分フォームの3つのパラメーターを引数として受け取り、対応する量子回路をリターンする関数を定義します:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", + "def get_var_form(params):\n", + " qr = QuantumRegister(1, name=\"q\")\n", + " cr = ClassicalRegister(1, name='c')\n", + " qc = QuantumCircuit(qr, cr)\n", + " qc.u3(params[0], params[1], params[2], qr[0])\n", + " qc.measure(qr, cr[0])\n", + " return qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "また、変分フォームのパラメータのリストを入力とし、パラメータに対応したコストを計算する目的関数を定義します:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import Aer, transpile, assemble\n", + "backend = Aer.get_backend(\"qasm_simulator\")\n", + "NUM_SHOTS = 10000\n", + "\n", + "def get_probability_distribution(counts):\n", + " output_distr = [v / NUM_SHOTS for v in counts.values()]\n", + " if len(output_distr) == 1:\n", + " output_distr.append(1 - output_distr[0])\n", + " return output_distr\n", + "\n", + "def objective_function(params):\n", + " # Obtain a quantum circuit instance from the paramters\n", + " qc = get_var_form(params)\n", + " # Execute the quantum circuit to obtain the probability distribution associated with the current parameters\n", + " t_qc = transpile(qc, backend)\n", + " qobj = assemble(t_qc, shots=NUM_SHOTS)\n", + " result = backend.run(qobj).result()\n", + " # Obtain the counts for each measured state, and convert those counts into a probability vector\n", + " output_distr = get_probability_distribution(result.get_counts(qc))\n", + " # Calculate the cost as the distance between the output distribution and the target distribution\n", + " cost = sum([np.abs(output_distr[i] - target_distr[i]) for i in range(2)])\n", + " return cost" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、COBYLA オプティマイザーのインスタンスを作成し、アルゴリズムを実行します。出力は実行の度に異なることに注意してください。また、近いとはいえ、得られた分布はターゲットの分布とは完全に同じではありません。しかしながら、ショットの数を増やすことで出力の確度を向上させることができるでしょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Target Distribution: [0.51357006 0.48642994]\n", + "Obtained Distribution: [0.5182, 0.4818]\n", + "Output Error (Manhattan Distance): 0.0001401187388391789\n", + "Parameters Found: [1.59966854 0.66273002 0.28432001]\n" + ] + } + ], + "source": [ + "from qiskit.aqua.components.optimizers import COBYLA\n", + "\n", + "# Initialize the COBYLA optimizer\n", + "optimizer = COBYLA(maxiter=500, tol=0.0001)\n", + "\n", + "# Create the initial parameters (noting that our single qubit variational form has 3 parameters)\n", + "params = np.random.rand(3)\n", + "ret = optimizer.optimize(num_vars=3, objective_function=objective_function, initial_point=params)\n", + "\n", + "# Obtain the output distribution using the final parameters\n", + "qc = get_var_form(ret[0])\n", + "t_qc = transpile(qc, backend)\n", + "qobj = assemble(t_qc, shots=NUM_SHOTS)\n", + "counts = backend.run(qobj).result().get_counts(qc)\n", + "output_distr = get_probability_distribution(counts)\n", + "\n", + "print(\"Target Distribution:\", target_distr)\n", + "print(\"Obtained Distribution:\", output_distr)\n", + "print(\"Output Error (Manhattan Distance):\", ret[1])\n", + "print(\"Parameters Found:\", ret[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 一般的な変分フォームの構造\n", + "既に説明したように、多項式パラメーターの変分フォームでは、任意の状態への変換を生成できません。変分フォームはこの制限をどのように扱うかによって2つのカテゴリーに分類されます。変分フォームの最初のカテゴリーはドメイン、あるいはアプリケーション固有の知識を生かして可能な出力状態のセットを制限するというものです。2つ目は、ドメインやアプリケーション固有の知識なしに、発見的な回路を利用するアプローチです。\n", + "\n", + "最初のカテゴリーの変分フォームは、必要となる変換のセットを制限するために、課題ドメインの特徴を流用します。例えば、分子の基底状態エネルギーの計算には、粒子の数は*前もって*知られているとします。従って、正しい粒子数をもった開始状態を利用し、変分フォームを粒子数を保存する変換にのみ制限することで、新しい変換の部分空間への展開に必要なパラメーター数をを大きく削減することができます。実際に、結合クラスター(Coupled-Cluster)理論と同じような情報を利用して、変分フォームの UCCSD は、Hartree Fock状態から開始する場合には、分子の基底状態エネルギー値を非常に正確に推定することが出来ます。ドメイン固有の知識を利用する別の例として、実量子ハードウェアで実現可能な回路を考慮するというものが挙げられます。超電導型量子ビットに基づくような現存する量子コンピューターは量子ビット間接続に制限があります。つまり、(スワップゲートを挟み込むことなく)任意の量子ビットペアに基づく、2量子ビットゲートを実装することが出来ません。与えられた利用可能な接続性とゲートを最大限活用した回路により特定の量子コンピューターに特化した変分フォームの構築がなされています。このような変分フォームにより 2017年にIBM量子コンピューター上で、 BeH$_2$ までの大きさをもつ分子の基底状態エネルギーの推定をするVQE実装に成功しました[4]。\n", + "\n", + "2番目のアプローチでは、広範囲の状態に対してよい近似が得られるようにゲートがレイヤー化されます。Qiskit Aqua では、3つのこのような変分フォーム: RyRz、Ry、及び SwapRzをサポートします(ここでは最初の2つのみ説明します)。これらの変分フォームはすべて、複数のユーザー指定の構成を受け付けます。3つの不可欠な構成は、システム上の量子ビット数、深さの設定、及びエンタグルメント設定です。変分フォームの一つのレイヤーでは、特定のパターンの単一量子ビットの回転と CX ゲートを指定します。深さの設定では、例えば、変分フォームがこのパターンを何回繰り返すかを指定します。深さの設定を増やすことで、最適化すべきパラメーター数を増やすことで生じるコストが上がりますが、変分フォームが生成できる状態のセットも増加します。最後に、エンタングルメント設定は、CXゲートの構成、内部的には数、を選択します。例えば、エンタングルメント設定が linear の場合、CXゲートは順番に直近の量子ビットペアに適用されます(したがって$n-1$ CX ゲートがレイヤーに追加されます)。エンタングルメント設定が full の場合、CXゲートは、各レイヤーのそれぞれの量子ビットペアに適用されます。`entanglement=\"full\"` と `entanglement=\"linear\"`の場合の、RxRz回路は以下のコードを実行することで確認できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=============Linear Entanglement:=============\n", + " ┌───────────┐┌───────┐ ┌───────────┐ ┌───────┐ »\n", + "q_0: |0>┤ U3(0,0,0) ├┤ U1(0) ├──────────────────■───┤ U3(0,0,0) ├──┤ U1(0) ├────────────────»\n", + " ├───────────┤├───────┤┌──────────────┐┌─┴─┐┌┴───────────┴─┐└───────┘ ┌───────────┐ »\n", + "q_1: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├┤ X ├┤ U2(0,3.1416) ├────■─────┤ U3(0,0,0) ├──»\n", + " ├───────────┤├───────┤├──────────────┤└───┘└──────────────┘ ┌─┴─┐ ┌┴───────────┴─┐»\n", + "q_2: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├───────────────────────┤ X ├──┤ U2(0,3.1416) ├»\n", + " ├───────────┤├───────┤├──────────────┤ └───┘ └──────────────┘»\n", + "q_3: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├──────────────────────────────────────────────»\n", + " └───────────┘└───────┘└──────────────┘ »\n", + "« ░ \n", + "«q_0: ────────────────────────────────────────────────░─\n", + "« ┌───────┐ ░ \n", + "«q_1: ┤ U1(0) ├───────────────────────────────────────░─\n", + "« └───────┘ ┌───────────┐ ┌───────┐ ░ \n", + "«q_2: ────■─────┤ U3(0,0,0) ├────┤ U1(0) ├────────────░─\n", + "« ┌─┴─┐ ┌┴───────────┴─┐┌─┴───────┴─┐┌───────┐ ░ \n", + "«q_3: ──┤ X ├──┤ U2(0,3.1416) ├┤ U3(0,0,0) ├┤ U1(0) ├─░─\n", + "« └───┘ └──────────────┘└───────────┘└───────┘ ░ \n", + "\n", + "=============Full Entanglement:=============\n", + " ┌───────────┐┌───────┐ »\n", + "q_0: |0>┤ U3(0,0,0) ├┤ U1(0) ├──────────────────■────■────────────────────■──────────────────»\n", + " ├───────────┤├───────┤┌──────────────┐┌─┴─┐ │ ┌──────────────┐ │ »\n", + "q_1: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├┤ X ├──┼──┤ U2(0,3.1416) ├──┼──────────────────»\n", + " ├───────────┤├───────┤├──────────────┤└───┘┌─┴─┐└──────────────┘ │ ┌──────────────┐»\n", + "q_2: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├─────┤ X ├──────────────────┼──┤ U2(0,3.1416) ├»\n", + " ├───────────┤├───────┤├──────────────┤ └───┘ ┌─┴─┐└──────────────┘»\n", + "q_3: |0>┤ U3(0,0,0) ├┤ U1(0) ├┤ U2(0,3.1416) ├──────────────────────────┤ X ├────────────────»\n", + " └───────────┘└───────┘└──────────────┘ └───┘ »\n", + "« ┌───────────┐ ┌───────┐ »\n", + "«q_0: ─┤ U3(0,0,0) ├─────┤ U1(0) ├──────────────────────────────────────────────────────────────»\n", + "« └───────────┘ └───────┘ ┌───────────┐ ┌───────┐ »\n", + "«q_1: ───────────────────────■──────────■───────────────────┤ U3(0,0,0) ├─────┤ U1(0) ├─────────»\n", + "« ┌──────────────┐ ┌─┴─┐ │ ┌──────────────┐ └───────────┘ └───────┘ »\n", + "«q_2: ┤ U2(0,3.1416) ├─────┤ X ├────────┼──┤ U2(0,3.1416) ├──────────────────────────────────■──»\n", + "« ├──────────────┤┌────┴───┴─────┐┌─┴─┐└──────────────┘┌──────────────┐┌──────────────┐┌─┴─┐»\n", + "«q_3: ┤ U2(0,3.1416) ├┤ U2(0,3.1416) ├┤ X ├────────────────┤ U2(0,3.1416) ├┤ U2(0,3.1416) ├┤ X ├»\n", + "« └──────────────┘└──────────────┘└───┘ └──────────────┘└──────────────┘└───┘»\n", + "« ░ \n", + "«q_0: ───────────────────────────────────────░─\n", + "« ░ \n", + "«q_1: ───────────────────────────────────────░─\n", + "« ┌───────────┐ ┌───────┐ ░ \n", + "«q_2: ─┤ U3(0,0,0) ├────┤ U1(0) ├────────────░─\n", + "« ┌┴───────────┴─┐┌─┴───────┴─┐┌───────┐ ░ \n", + "«q_3: ┤ U2(0,3.1416) ├┤ U3(0,0,0) ├┤ U1(0) ├─░─\n", + "« └──────────────┘└───────────┘└───────┘ ░ \n", + "\n" + ] + } + ], + "source": [ + "from qiskit.circuit.library import EfficientSU2\n", + "entanglements = [\"linear\", \"full\"]\n", + "for entanglement in entanglements:\n", + " form = EfficientSU2(num_qubits=4, entanglement=entanglement)\n", + " if entanglement == \"linear\":\n", + " print(\"=============Linear Entanglement:=============\")\n", + " else:\n", + " print(\"=============Full Entanglement:=============\")\n", + " # We initialize all parameters to 0 for this demonstration\n", + " display(form.draw(fold=100))\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "深さの設定を $d$ とします。この時、RyRz は $n\\times (d+1)\\times 2$ 個のパラメーターを持ち、linear エンタングルメントの Ry は $2n\\times(d + \\frac{1}{2})$ 個のパラメーター、また Ryで full エンタングルメントの場合は、$d\\times n\\times \\frac{(n + 1)}{2} + n$ 個のパラメーターを持つようになります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qiskit での VQE 実装\n", + "このセクションでは、プログラミングアプローチでのVQEの実装例を示します。Qiskit Aqua では宣言的な実装もできますが、この場合動作しているアルゴリズムの情報が表面に出てきません。このコードは、特に量子ビット操作の準備は、Qiskit チュートリアルリポジトリに基づいています(リポジトリは 2019年7月の時点で https://github.com/Qiskit/qiskit-tutorials にあります)。\n", + "\n", + "次のライブラリを最初にインポートします。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.aqua.algorithms import VQE, NumPyEigensolver\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from qiskit.chemistry.components.variational_forms import UCCSD\n", + "from qiskit.chemistry.components.initial_states import HartreeFock\n", + "from qiskit.circuit.library import EfficientSU2\n", + "from qiskit.aqua.components.optimizers import COBYLA, SPSA, SLSQP\n", + "from qiskit.aqua.operators import Z2Symmetries\n", + "from qiskit import IBMQ, BasicAer, Aer\n", + "from qiskit.chemistry.drivers import PySCFDriver, UnitsType\n", + "from qiskit.chemistry import FermionicOperator\n", + "from qiskit.aqua import QuantumInstance\n", + "from qiskit.ignis.mitigation.measurement import CompleteMeasFitter\n", + "from qiskit.providers.aer.noise import NoiseModel" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### VQEを状態ベクトルシミュレーターで実行する\n", + "様々な原子間距離での LiH の基底エネルギーの計算をデモンストレーションしてみます。各距離での分子ドライバーを作成する必要があります。この実験では、利用する量子ビットの数を減らすため、内核固定(frozen core)し、2つの非占有起動を削除していることに注意してください。最初に、原子間距離を引数とし、適切な量子ビット演算子 $H$ と演算子に関するその他の情報を返却する関数を定義します。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "def get_qubit_op(dist):\n", + " driver = PySCFDriver(atom=\"Li .0 .0 .0; H .0 .0 \" + str(dist), unit=UnitsType.ANGSTROM, \n", + " charge=0, spin=0, basis='sto3g')\n", + " molecule = driver.run()\n", + " freeze_list = [0]\n", + " remove_list = [-3, -2]\n", + " repulsion_energy = molecule.nuclear_repulsion_energy\n", + " num_particles = molecule.num_alpha + molecule.num_beta\n", + " num_spin_orbitals = molecule.num_orbitals * 2\n", + " remove_list = [x % molecule.num_orbitals for x in remove_list]\n", + " freeze_list = [x % molecule.num_orbitals for x in freeze_list]\n", + " remove_list = [x - len(freeze_list) for x in remove_list]\n", + " remove_list += [x + molecule.num_orbitals - len(freeze_list) for x in remove_list]\n", + " freeze_list += [x + molecule.num_orbitals for x in freeze_list]\n", + " ferOp = FermionicOperator(h1=molecule.one_body_integrals, h2=molecule.two_body_integrals)\n", + " ferOp, energy_shift = ferOp.fermion_mode_freezing(freeze_list)\n", + " num_spin_orbitals -= len(freeze_list)\n", + " num_particles -= len(freeze_list)\n", + " ferOp = ferOp.fermion_mode_elimination(remove_list)\n", + " num_spin_orbitals -= len(remove_list)\n", + " qubitOp = ferOp.mapping(map_type='parity', threshold=0.00000001)\n", + " qubitOp = Z2Symmetries.two_qubit_reduction(qubitOp, num_particles)\n", + " shift = energy_shift + repulsion_energy\n", + " return qubitOp, num_particles, num_spin_orbitals, shift" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最初に、正確な基底状態エネルギーを、量子ビット演算子及び古典的固有値計算法(ExactEigensolver)を使って計算します。次に、初期状態 $|\\psi\\rangle$ を作成し、これを使って VQE が最終的 ansatz $\\min_{\\theta}(|\\psi(\\theta)\\rangle)$ を生成するようにします。各原子間距離での正確な値と VQEの結果を記録します。`vqe.run(backend)['energy'] + shift` で与えられる結果と $\\min_{\\theta}\\left(\\langle \\psi(\\theta)|H|\\psi(\\theta)\\rangle\\right)$ 量は同じであることに着目してください。ここでは、最小はかならずしももっとも最小ではありません。\n", + "\n", + "`VQE(qubitOp, var_form, optimizer, 'matrix')` で VQE インスタンスを初期化する時には、$|\\psi(\\theta)\\rangle$ に対する $H$ の期待値は行列の掛け算で直接計算しています。しかしながら、実量子デバイスや、`VQE(qubitOp, var_form, optimizer, 'paulis')` を使った `qasm_simulator`などの実シミュレーターの場合は、期待値の計算はより複雑になります。ハミルトニアンはパウリストリング (Pauli strings - パウリ行列のテンソル積)の足し算で表現され、使用したマッピングで指定されたパウリ項が、量子ビットに適用されます。$|\\psi(\\theta)\\rangle$ に対応した回路の後に、各パウリストリングに対応する回路が追加されます。結果的に、これらの回路が実行されると、$|\\psi(\\theta)\\rangle$ に対する $H$ の期待値の決定に利用できます。以下の例では、VQE のインスタンスを `matrix` モードで初期化しているので、期待値の計算には行列の掛け算を通じて直接計算しています。\n", + "\n", + "注意: 以下のコードは完了までしばらく時間がかかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Interatomic Distance: 0.5 VQE Result: -7.039710219020506 Exact Energy: -7.039732521635202\n", + "Interatomic Distance: 0.6 VQE Result: -7.313344302334236 Exact Energy: -7.313345828761008\n", + "Interatomic Distance: 0.7 VQE Result: -7.500921095743192 Exact Energy: -7.500922090905936\n", + "Interatomic Distance: 0.8 VQE Result: -7.630976914468914 Exact Energy: -7.630978249333209\n", + "Interatomic Distance: 0.9 VQE Result: -7.7208107952020795 Exact Energy: -7.720812412134773\n", + "Interatomic Distance: 1.0 VQE Result: -7.782240655298441 Exact Energy: -7.782242402637011\n", + "Interatomic Distance: 1.1 VQE Result: -7.823597493320795 Exact Energy: -7.82359927636281\n", + "Interatomic Distance: 1.2 VQE Result: -7.850696622934822 Exact Energy: -7.850698377596024\n", + "Interatomic Distance: 1.3 VQE Result: -7.867561602181376 Exact Energy: -7.867563290110052\n", + "Interatomic Distance: 1.4 VQE Result: -7.876999876757721 Exact Energy: -7.877001491818373\n", + "Interatomic Distance: 1.5 VQE Result: -7.8810141736656405 Exact Energy: -7.881015715646992\n", + "Interatomic Distance: 1.6 VQE Result: -7.881070662952161 Exact Energy: -7.88107204403092\n", + "Interatomic Distance: 1.7 VQE Result: -7.878267162143656 Exact Energy: -7.878268167584993\n", + "Interatomic Distance: 1.8 VQE Result: -7.873440112155302 Exact Energy: -7.873440293132828\n", + "Interatomic Distance: 1.9 VQE Result: -7.86723366674701 Exact Energy: -7.8672339648160285\n", + "Interatomic Distance: 2.0 VQE Result: -7.860152327529411 Exact Energy: -7.86015320737878\n", + "Interatomic Distance: 2.1 VQE Result: -7.852595105536979 Exact Energy: -7.852595827876738\n", + "Interatomic Distance: 2.2 VQE Result: -7.844878726366329 Exact Energy: -7.844879093009722\n", + "Interatomic Distance: 2.3 VQE Result: -7.837257439448259 Exact Energy: -7.8372579676155025\n", + "Interatomic Distance: 2.4 VQE Result: -7.829935045088515 Exact Energy: -7.829937002623394\n", + "Interatomic Distance: 2.5 VQE Result: -7.823070191557451 Exact Energy: -7.82307664213409\n", + "Interatomic Distance: 2.6 VQE Result: -7.816782591999657 Exact Energy: -7.816795150472929\n", + "Interatomic Distance: 2.7 VQE Result: -7.8111534373726 Exact Energy: -7.811168284803366\n", + "Interatomic Distance: 2.8 VQE Result: -7.806218299266321 Exact Energy: -7.806229560089845\n", + "Interatomic Distance: 2.9 VQE Result: -7.801962397475152 Exact Energy: -7.8019736023325486\n", + "Interatomic Distance: 3.0 VQE Result: -7.798352412318197 Exact Energy: -7.7983634309151295\n", + "Interatomic Distance: 3.1 VQE Result: -7.795326815750017 Exact Energy: -7.795340451637537\n", + "Interatomic Distance: 3.2 VQE Result: -7.792800698225245 Exact Energy: -7.792834806738612\n", + "Interatomic Distance: 3.3 VQE Result: -7.790603799019874 Exact Energy: -7.790774009971014\n", + "Interatomic Distance: 3.4 VQE Result: -7.788715354695274 Exact Energy: -7.789088897991478\n", + "Interatomic Distance: 3.5 VQE Result: -7.787215781080283 Exact Energy: -7.787716973466144\n", + "Interatomic Distance: 3.6 VQE Result: -7.786080393658009 Exact Energy: -7.786603763673838\n", + "Interatomic Distance: 3.7 VQE Result: -7.785203497342158 Exact Energy: -7.785702912499886\n", + "Interatomic Distance: 3.8 VQE Result: -7.7844795319924325 Exact Energy: -7.784975591698873\n", + "Interatomic Distance: 3.9 VQE Result: -7.783853361693722 Exact Energy: -7.7843896116723315\n", + "All energies have been calculated\n" + ] + } + ], + "source": [ + "backend = BasicAer.get_backend(\"statevector_simulator\")\n", + "distances = np.arange(0.5, 4.0, 0.1)\n", + "exact_energies = []\n", + "vqe_energies = []\n", + "optimizer = SLSQP(maxiter=5)\n", + "for dist in distances:\n", + " qubitOp, num_particles, num_spin_orbitals, shift = get_qubit_op(dist)\n", + " result = NumPyEigensolver(qubitOp).run()\n", + " exact_energies.append(np.real(result.eigenvalues) + shift)\n", + " initial_state = HartreeFock(\n", + " num_spin_orbitals,\n", + " num_particles,\n", + " qubit_mapping='parity'\n", + " ) \n", + " var_form = UCCSD(\n", + " num_orbitals=num_spin_orbitals,\n", + " num_particles=num_particles,\n", + " initial_state=initial_state,\n", + " qubit_mapping='parity'\n", + " )\n", + " vqe = VQE(qubitOp, var_form, optimizer)\n", + " vqe_result = np.real(vqe.run(backend)['eigenvalue'] + shift)\n", + " vqe_energies.append(vqe_result)\n", + " print(\"Interatomic Distance:\", np.round(dist, 2), \"VQE Result:\", vqe_result, \"Exact Energy:\", exact_energies[-1])\n", + " \n", + "print(\"All energies have been calculated\")" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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ypQpzJ8/n8bGRubOncuGDRu6PDnedo6j7fXCCy+cMOuvf/1rnnzySaZMmcKkSZN48cXItwfcf//9vP7665x55pk8//zzFBYWkpmZ2Z517ty5LFiwoL1pq7d5/szxWJg5c6br6YOcdnxvCjXJhUz9P6/1ciqRgWnjxo1MmDDB6xinlaamJnw+H36/n/fff5/bb7+9vYkrGAwyffp0nn/+ecaMGRPx/ZG+EzNb6ZybGc32dY6jk+rUInIbdnodQ0SkS7t372bBggUEg0GSkpLaLyXesGEDl112GVdffXWXRaM3qHB00pQ5gqH1H9AaCODz+CYbEZFIxowZw0cffXTc9IkTJ7J9+/aYb1/nODqxvFEkWYCKfTrPISISiQpHJ+mFocO7Q7s3epxERCQ+qXB0klcyHoCjB7Z5nEREJD6pcHQyePhomp2P1spPvI4iIhKXVDg68fn9HPAVklK7y+soInKK5s6dy2uvHXtp/cMPP8ztt98OwPr165k3bx7jxo1j9OjR3H///QSDQQCeeuopCgoKjrkPY8OGDcdtI5bdtscrXTYUweHkIrIay7yOISKnaOHChTz77LPH3EH97LPP8q//+q80NDRwxRVX8NOf/pSLLrqIo0ePcu211/LII49w7733ArR3hngisei2PR66Tj8RHXFE0JhRwtDAPlz4Lw8R6Z+uu+46/vSnP9Hc3AyEOhjct28fc+bM4Te/+Q2zZ8/moosuAiAtLY1HH32UH/7wh72y7dLSUu6//36mT5/O5MmT27tIP3LkCLfccguzZs1i2rRp7XeHP/XUU1xxxRXMmzePCy64gGAwyB133MH48eOZP38+l156KS+88AJvvvkmV111Vft23njjDa6++upeyRyt+C1pXsodRVpFE4cO7iW/sNjrNCKnj1e+BQfW9u46CyfD5yI3D+Xm5jJr1ixeeeUVrrzySp599lkWLFiAmbF+/XpmzJhxzPKjR4+moaGB6upqABYvXsy7777bPv/9998nNTX1mPd01W07QH5+PqtWreInP/kJP/rRj3jiiSd48MEHmTdvHj//+c+prq5m1qxZXHjhhQCsWrWKNWvWkJubywsvvMDOnTvZsGEDBw8eZMKECdxyyy3MnTuXO+64g4qKCgoKCvjFL34Rs84Mu6IjjghSh4Qvyd2lS3JF+ru25ioINVMtXLgw6vfecMMNrF69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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(distances, exact_energies, label=\"Exact Energy\")\n", + "plt.plot(distances, vqe_energies, label=\"VQE Energy\")\n", + "plt.xlabel('Atomic distance (Angstrom)')\n", + "plt.ylabel('Energy')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "VQEの結果は、正確な値と非常に近いことに着目してください。そのため、正確な値のカーブは VQEカーブに隠れてしまっています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### VQE をノイズのあるシミュレーターで実行する\n", + "\n", + "ここでは、H$_2$ の基底状態エネルギーの計算に、ノイズのあるシミュレーターとエラー軽減を利用してみます。\n", + "\n", + "最初に、分子のハミルトニアンを表現する量子ビット演算子を用意します:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "driver = PySCFDriver(atom='H .0 .0 -0.3625; H .0 .0 0.3625', unit=UnitsType.ANGSTROM, charge=0, spin=0, basis='sto3g')\n", + "molecule = driver.run()\n", + "num_particles = molecule.num_alpha + molecule.num_beta\n", + "qubitOp = FermionicOperator(h1=molecule.one_body_integrals, h2=molecule.two_body_integrals).mapping(map_type='parity')\n", + "qubitOp = Z2Symmetries.two_qubit_reduction(qubitOp, num_particles)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、デバイスのカップリングマップとノイズモデルを IBMQ プロバイダーからロードし、量子インスタンスを作成し、エラー軽減を有効にします:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q')\n", + "backend = Aer.get_backend(\"qasm_simulator\")\n", + "device = provider.get_backend(\"ibmq_lima\")\n", + "coupling_map = device.configuration().coupling_map\n", + "noise_model = NoiseModel.from_backend(device.properties())\n", + "quantum_instance = QuantumInstance(backend=backend, \n", + " shots=8192, \n", + " noise_model=noise_model, \n", + " coupling_map=coupling_map,\n", + " measurement_error_mitigation_cls=CompleteMeasFitter,\n", + " cals_matrix_refresh_period=30)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、オプティマイザー、変分フォーム、および VQE インスタンスを構成します。2量子ビット回路の深さが増すにつれて、ノイズの効果が増加するため、ここでは UCCSD ではなく、発見的な変分フォーム (RYRZ)を利用します。RYRZは、UCCSDに比べ浅い回路で、実質的により少ない2量子ビットゲート数となります。\n", + "\n", + "注意:以下のコードは完了までしばらく時間がかかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Exact Result: -1.86712097834127\n", + "VQE Result: -1.8220854070067132\n" + ] + } + ], + "source": [ + "exact_solution = NumPyEigensolver(qubitOp).run()\n", + "print(\"Exact Result:\", np.real(exact_solution.eigenvalues) + molecule.nuclear_repulsion_energy)\n", + "optimizer = SPSA(maxiter=100)\n", + "var_form = EfficientSU2(qubitOp.num_qubits, entanglement=\"linear\")\n", + "vqe = VQE(qubitOp, var_form, optimizer=optimizer)\n", + "ret = vqe.run(quantum_instance)\n", + "vqe_result = np.real(ret['eigenvalue']+ molecule.nuclear_repulsion_energy)\n", + "print(\"VQE Result:\", vqe_result)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "たとえ結果が化学有効値(正しい結果に対して 0.0016 Hartree と定義されている)になっていませんが、ノイズ軽減が有効な場合、正確な値にかなり近いと言えるでしょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 問題\n", + "1. 基底状態が $n$ 量子ビットの最大エンタングルに近いことが約束されている、ハミルトニアン $H$ が与えられているとする。どの変分フォームが、$H$ の基底状態エネルギーを効率的かつ正確に与えるかを説明せよ。ここでは自作の変分フォームを使ってもよい。その場合、このハミルトニアンになぜそれが適切かを説明せよ。\n", + "\n", + "2. COPYLAオプティマイザーと 1000ショットの `qasm_simulator`、および 60パウリストリングをもったハミルトニアンを使う場合、1回の最適化の際に行われる回路評価数を計算せよ。\n", + "\n", + "3. 原子間距離が $1.3$Å の BeH$_2$ の基底状態エネルギーを推定せよ。`get_qubit_op(dist)` 関数を再利用する場合、`atom=\"Li .0 .0 .0; H .0 .0 \" + str(dist)` を、`atom=\"Be .0 .0 .0; H .0 .0 -\" + str(dist) + \"; H .0 .0 \" + str(dist)` で置き換え、`get_qubit_op(1.3)` を実行する。この分子の場合、非占有軌道の削除をすると、化学的な正確性が失われることに注意すること。しかしながら、必要となる量子ビット数を6まで下げる(多くのラップトップで効果的なシミュレーションができるようにする)場合は、このロスは許容範囲である。興味のある読者は、必要する量子ビット数を 7 までにして化学正確性を失わないように試みてもよい。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 参考文献\n", + "1. Peruzzo, Alberto, et al. \"A variational eigenvalue solver on a photonic quantum processor.\" *Nature communications* 5 (2014): 4213.\n", + "2. Griffiths, David J., and Darrell F. Schroeter. Introduction to quantum mechanics. *Cambridge University Press*, 2018.\n", + "3. Shende, Vivek V., Igor L. Markov, and Stephen S. Bullock. \"Minimal universal two-qubit cnot-based circuits.\" arXiv preprint quant-ph/0308033 (2003).\n", + "4. Kandala, Abhinav, et al. \"Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets.\" Nature 549.7671 (2017): 242." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-demos/.gitignore b/translations/ja/ch-demos/.gitignore new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/translations/ja/ch-demos/.gitignore @@ -0,0 +1 @@ + diff --git a/translations/ja/ch-demos/2_qubit_circuit.png b/translations/ja/ch-demos/2_qubit_circuit.png new file mode 100644 index 0000000..ae1478a Binary files /dev/null and b/translations/ja/ch-demos/2_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/3_qubit_circuit.png b/translations/ja/ch-demos/3_qubit_circuit.png new file mode 100644 index 0000000..c07769f Binary files /dev/null and b/translations/ja/ch-demos/3_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/4_qubit_circuit.png b/translations/ja/ch-demos/4_qubit_circuit.png new file mode 100644 index 0000000..0afb3a5 Binary files /dev/null and b/translations/ja/ch-demos/4_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/5_qubit_circuit.png b/translations/ja/ch-demos/5_qubit_circuit.png new file mode 100644 index 0000000..8bca43a Binary files /dev/null and b/translations/ja/ch-demos/5_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/6_qubit_circuit.png b/translations/ja/ch-demos/6_qubit_circuit.png new file mode 100644 index 0000000..0f0a54c Binary files /dev/null and b/translations/ja/ch-demos/6_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/7_qubit_circuit.png b/translations/ja/ch-demos/7_qubit_circuit.png new file mode 100644 index 0000000..3151399 Binary files /dev/null and b/translations/ja/ch-demos/7_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/8_qubit_circuit.png b/translations/ja/ch-demos/8_qubit_circuit.png new file mode 100644 index 0000000..e2e62af Binary files /dev/null and b/translations/ja/ch-demos/8_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/9_qubit_circuit.png b/translations/ja/ch-demos/9_qubit_circuit.png new file mode 100644 index 0000000..6cef79d Binary files /dev/null and b/translations/ja/ch-demos/9_qubit_circuit.png differ diff --git a/translations/ja/ch-demos/index.md b/translations/ja/ch-demos/index.md new file mode 100644 index 0000000..83d43c9 --- /dev/null +++ b/translations/ja/ch-demos/index.md @@ -0,0 +1,23 @@ +この章のゲームとデモは、量子コンピューティングを楽しく学ぶためのものです。テキストブック内の適切なところで紹介しますが、簡単に見つけられるようにすべてここにリストしています。 + + +
    +
    +{% for entry in site.data.demostoc %} + +{% endfor %} + + + +
    +
    + + + diff --git a/translations/ja/ch-demos/piday-code.ipynb b/translations/ja/ch-demos/piday-code.ipynb new file mode 100644 index 0000000..5554809 --- /dev/null +++ b/translations/ja/ch-demos/piday-code.ipynb @@ -0,0 +1,381 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# [量子位相推定](../ch-algorithms/quantum-phase-estimation.html)を使った円周率($\\pi$)の推定" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.[量子位相推定アルゴリズム](../ch-algorithms/quantum-phase-estimation.html)の概要\n", + "\n", + "量子推定アルゴリズム(QPE)は多くの非常に複雑な量子アルゴリズムの一角を担う量子アルゴリズムの1つです。その中心にあるのは、QPEはかなり簡単な問題を解きます。$U\\vert\\psi\\rangle = \\exp\\left(2 \\pi i \\theta\\right)\\vert\\psi\\rangle$)となっている演算子$U$の量子状態$\\vert\\psi\\rangle$が与えられているとき、$\\theta$の推定値を得ることができますか?\n", + "\n", + "この答えは”yes\"です。QPEアルゴリズムから$2^n\\theta$を得られます。ここで$n$とは$\\theta$を推定するために使っている量子ビット数です。\n", + "\n", + "\n", + "### 2.円周率$\\pi$の推定\n", + "\n", + "このデモでは、演算子と状態を次のように選びます。\n", + "\n", + "$$U = u_1(\\theta), \\vert\\psi\\rangle = \\vert1\\rangle$$\n", + "\n", + "ここで\n", + "\n", + "$$\n", + "u_1(\\theta) = \\begin{bmatrix}\n", + "1 & 0\\\\ 0 & \\exp(i\\theta)\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "この行列はQiskitで利用可能な量子ゲートの1つで、そして以下を満たします。\n", + "\n", + "$$u_1(\\theta)\\vert1\\rangle = \\exp(i\\theta)\\vert1\\rangle.$$ \n", + "\n", + "$\\theta = 1$となるようにゲートの位相を選ぶと、次の関係性を利用して$\\pi$を推定することができます。\n", + "\n", + "1. QPEアルゴリズムの結果から、$2^n\\theta$の推定値を測定します。そのとき、 $\\theta = \\text{measured} / 2^n$ となります。\n", + "2. 上記の$u_1(\\theta)$ゲートの定義から、$2\\pi\\theta = 1 \\Rightarrow \\pi = 1 / 2\\theta$であることを知ることができます。\n", + "\n", + "これらの関係性を使って、 $\\pi = 1 / \\left(2 \\times (\\text{(measured)}/2^n)\\right)$であることがわかります。\n", + "\n", + "QPEのより詳細な解説には、Qiskit Textbook中の専用の章を参照してください。 \n", + "[qiskit.org/textbook](../ch-algorithms/quantum-phase-estimation.html)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. コードを書いてみよう!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まずは、次の必要なライブラリをインポートすることから始めていきましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "## 作業に必要になるライブラリのインポート\n", + "from IPython.display import clear_output\n", + "from qiskit import *\n", + "from qiskit.visualization import plot_histogram\n", + "import numpy as np\n", + "import matplotlib.pyplot as plotter\n", + "from qiskit.tools.monitor import job_monitor\n", + "# 可視化の設定\n", + "import seaborn as sns, operator\n", + "sns.set_style(\"dark\")\n", + "\n", + "pi = np.pi" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "関数`qft_dagger`は、逆量子フーリエ変換を計算します。このアルゴリズムのより詳細な解説は、[Qiskit Textbook](../ch-algorithms/quantum-fourier-transform.html)の以下の章を参照してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "## 逆量子フーリエ変換のコード\n", + "## Qiskit Textbook qiskit.org/textbookから抜粋\n", + "\n", + "def qft_dagger(circ_, n_qubits):\n", + " \"\"\"n-qubit QFTdagger the first n qubits in circ\"\"\"\n", + " for qubit in range(int(n_qubits/2)):\n", + " circ_.swap(qubit, n_qubits-qubit-1)\n", + " for j in range(0,n_qubits):\n", + " for m in range(j):\n", + " circ_.cp(-np.pi/float(2**(j-m)), m, j)\n", + " circ_.h(j)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次の関数`qpe_pre`は、推定値に対する初期状態を準備します。開始時の状態は、最後の量子ビット以外の全ての量子ビットにアダマールゲートを適用し、最後の量子ビットには$\\vert1\\rangle$をセットすることで生成されていることに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "## 量子位相推定の初期状態のコード\n", + "## Qiskit textbook qiskit.org/textbookから抜粋\n", + "## 開始時の状態には最後の量子ビット以外にHを適用し、最後の量子ビットには|psi> = |1>にセットすることに注意\n", + "\n", + "def qpe_pre(circ_, n_qubits):\n", + " circ_.h(range(n_qubits))\n", + " circ_.x(n_qubits)\n", + "\n", + " for x in reversed(range(n_qubits)):\n", + " for _ in range(2**(n_qubits-1-x)):\n", + " circ_.cp(1, n_qubits-1-x, n_qubits)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、回路を実行し結果を返すための簡単な関数`run_job`を書きましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "## 実機かシミュレーターでQiskitジョブの実行\n", + "\n", + "def run_job(circ, backend, shots=1000, optimization_level=0):\n", + " t_circ = transpile(circ, backend, optimization_level=optimization_level)\n", + " qobj = assemble(t_circ, shots=shots)\n", + " job = backend.run(qobj)\n", + " job_monitor(job)\n", + " return job.result().get_counts()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "その次に、クラウドのシミュレーターか実デバイスを使うためにご自身のアカウントを読み込みます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "## クラウド上のシミュレーターか実量子デバイスを使いたい場合は、ご自身のIBMQアカウントを読み込む\n", + "my_provider = IBMQ.load_account()\n", + "simulator_cloud = my_provider.get_backend('ibmq_qasm_simulator')\n", + "device = my_provider.get_backend('ibmq_16_melbourne')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "simulator = Aer.get_backend('aer_simulator')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、上記の関数を$\\pi$の推定値を得るために`n_qubits`を使うように`get_pi_estimate`と呼ばれる関数にまとめます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "## 円周率を推定するための関数\n", + "## サマリ:Qiskit textbook(qiskit.org/textbook)の記法を用いて、\n", + "## u1(theta)|1> = exp(2 x pi x i x theta)|1>であるような\n", + "## 演算子U = u1(theta) and |psi> = |1>の量子位相推定を実行する。\n", + "## thetaを1ラジアンにセットすることで 2^n x 1 ラジアン = 最も頻繁したカウント = 2 x piを用いることで円周率を求める\n", + "\n", + "def get_pi_estimate(n_qubits):\n", + "\n", + " # 量子回路の生成\n", + " circ = QuantumCircuit(n_qubits + 1, n_qubits)\n", + " # 入力状態の生成\n", + " qpe_pre(circ, n_qubits)\n", + " # バリアの適用\n", + " circ.barrier()\n", + " # 逆フーリエ変換の実行\n", + " qft_dagger(circ, n_qubits)\n", + " # バリアの適用\n", + " circ.barrier()\n", + " # 最終量子ビット以外の測定\n", + " circ.measure(range(n_qubits), range(n_qubits))\n", + "\n", + " # ジョブの実行と結果の取得\n", + " counts = run_job(circ, backend=simulator, shots=10000, optimization_level=0)\n", + " # print(counts) \n", + "\n", + " # 最も多く発生した結果の取得\n", + " max_counts_result = max(counts, key=counts.get)\n", + " max_counts_result = int(max_counts_result, 2)\n", + " \n", + " # 測定値から円周率を推定する\n", + " theta = max_counts_result/2**n_qubits\n", + " return (1./(2*theta))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでは、異なる量子ビット数で`get_pi_estimate`関数を実行し、推定値を表示しています。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n", + "2 qubits, pi ≈ 2.0\n", + "Job Status: job has successfully run\n", + "3 qubits, pi ≈ 4.0\n", + "Job Status: job has successfully run\n", + "4 qubits, pi ≈ 2.6666666666666665\n", + "Job Status: job has successfully run\n", + "5 qubits, pi ≈ 3.2\n", + "Job Status: job has successfully run\n", + "6 qubits, pi ≈ 3.2\n", + "Job Status: job has successfully run\n", + "7 qubits, pi ≈ 3.2\n", + "Job Status: job has successfully run\n", + "8 qubits, pi ≈ 3.1219512195121952\n", + "Job Status: job has successfully run\n", + "9 qubits, pi ≈ 3.1604938271604937\n", + "Job Status: job has successfully run\n", + "10 qubits, pi ≈ 3.1411042944785277\n", + "Job Status: job has successfully run\n", + "11 qubits, pi ≈ 3.1411042944785277\n", + "Job Status: job has successfully run\n", + "12 qubits, pi ≈ 3.1411042944785277\n" + ] + } + ], + "source": [ + "# 異なる量子ビット数で円周率を推定\n", + "nqs = list(range(2,12+1))\n", + "pi_estimates = []\n", + "for nq in nqs:\n", + " thisnq_pi_estimate = get_pi_estimate(nq)\n", + " pi_estimates.append(thisnq_pi_estimate)\n", + " print(f\"{nq} qubits, pi ≈ {thisnq_pi_estimate}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして、全ての結果をプロットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plotter.plot(nqs, [pi]*len(nqs), '--r')\n", + "plotter.plot(nqs, pi_estimates, '.-', markersize=12)\n", + "plotter.xlim([1.5, 12.5])\n", + "plotter.ylim([1.5, 4.5])\n", + "plotter.legend(['$\\pi$', 'estimate of $\\pi$'])\n", + "plotter.xlabel('Number of qubits', fontdict={'size':20})\n", + "plotter.ylabel('$\\pi$ and estimate of $\\pi$', fontdict={'size':20})\n", + "plotter.tick_params(axis='x', labelsize=12)\n", + "plotter.tick_params(axis='y', labelsize=12)\n", + "plotter.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.15.1',\n", + " 'qiskit-aer': '0.6.1',\n", + " 'qiskit-ignis': '0.4.0',\n", + " 'qiskit-ibmq-provider': '0.8.0',\n", + " 'qiskit-aqua': '0.7.5',\n", + " 'qiskit': '0.20.0'}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-ex/Solutions/Exercise for 1.1.ipynb b/translations/ja/ch-ex/Solutions/Exercise for 1.1.ipynb new file mode 100644 index 0000000..3f97af4 --- /dev/null +++ b/translations/ja/ch-ex/Solutions/Exercise for 1.1.ipynb @@ -0,0 +1,406 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, Aer, execute" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ccfRql22_IBL" + }, + "source": [ + "# Solutions: Classical logic gates with quantum circuits" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OKCkpBD0_c6L" + }, + "source": [ + "## NOT gate\n", + "\n", + "This function takes a binary string input (`'0'` or `'1'`) and returns the opposite binary output'." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "6JPMpemG_RMb" + }, + "outputs": [], + "source": [ + "def NOT(input):\n", + "\n", + " q = QuantumRegister(1) # a qubit in which to encode the inout\n", + " c = ClassicalRegister(1) # a bit to store the output\n", + " qc = QuantumCircuit(q, c) # this is where the quantum program goes\n", + " \n", + " # We encode '0' as the qubit state |0⟩, and '1' as |1⟩\n", + " # Since the qubit is initially |0⟩, we don't need to do anything for an input of '0'\n", + " # For an input of '1', we do an x to rotate the |0⟩ to |1⟩\n", + " if input=='1': #\n", + " qc.x( q[0] )\n", + " \n", + " # Now we've encoded the input, we can do a NOT on it using x\n", + " qc.x( q[0] )\n", + " \n", + " # Finally, we extract the |0⟩/|1⟩ output of the qubit and encode it in the bit c[0]\n", + " qc.measure( q[0], c[0] )\n", + " \n", + " # We'll run the program on a simulator\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # Since the output will be deterministic, we can use just a single shot to get it\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Gd-9DEAaAarK" + }, + "source": [ + "## XOR gate\n", + "\n", + "Takes two binary strings as input and gives one as output.\n", + "\n", + "The output is `'0'` when the inputs are equal and `'1'` otherwise." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "oPVCyyaHAays" + }, + "outputs": [], + "source": [ + "def XOR(input1,input2):\n", + " \n", + " q = QuantumRegister(2) # a qubit in which to encode the inout\n", + " c = ClassicalRegister(1) # a bit to store the output\n", + " qc = QuantumCircuit(q, c) # this is where the quantum program goes\n", + " \n", + " if input1=='1':\n", + " qc.x( q[0] )\n", + " if input2=='1':\n", + " qc.x( q[1] )\n", + " \n", + " qc.cx(q[0],q[1]) # just needs a cnot\n", + " qc.measure(q[1],c[0]) # output from qubit 1 is measured\n", + " \n", + " # We'll run the program on a simulator\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # Since the output will be deterministic, we can use just a single shot to get it\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "dPMfIpfYAAT7" + }, + "source": [ + "## AND gate\n", + "\n", + "Takes two binary strings as input and gives one as output.\n", + "\n", + "The output is `'1'` only when both the inputs are `'1'`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "HdYfpnslAAeJ" + }, + "outputs": [], + "source": [ + "def AND(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # a qubit in which to encode the inout\n", + " c = ClassicalRegister(1) # a bit to store the output\n", + " qc = QuantumCircuit(q, c) # this is where the quantum program goes\n", + " \n", + " if input1=='1':\n", + " qc.x( q[0] )\n", + " if input2=='1':\n", + " qc.x( q[1] )\n", + " \n", + " qc.ccx(q[0],q[1],q[2]) # just needs a ccx controlled on qubits 0 and 1 and targeted on 2\n", + " qc.measure(q[2],c[0]) # output from qubit 2 is measured\n", + " \n", + " # We'll run the program on a simulator\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # Since the output will be deterministic, we can use just a single shot to get it\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OXfchiSyAAoo" + }, + "source": [ + "## NAND gate\n", + "\n", + "Takes two binary strings as input and gives one as output.\n", + "\n", + "The output is `'0'` only when both the inputs are `'1'`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "nJhmG115AAwv" + }, + "outputs": [], + "source": [ + "def NAND(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # a qubit in which to encode the inout\n", + " c = ClassicalRegister(1) # a bit to store the output\n", + " qc = QuantumCircuit(q, c) # this is where the quantum program goes\n", + " \n", + " if input1=='1':\n", + " qc.x( q[0] )\n", + " if input2=='1':\n", + " qc.x( q[1] )\n", + " \n", + " # can be done with an AND followed by a NOT\n", + " qc.ccx(q[0],q[1],q[2]) # the AND just needs a ccx controlled on qubits 0 and 1 and targeted on 2\n", + " qc.x(q[2]) # the NOT is done to the qubit containing the output\n", + " qc.measure(q[2],c[0]) # output from qubit 2 is measured\n", + " \n", + " # We'll run the program on a simulator\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # Since the output will be deterministic, we can use just a single shot to get it\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "n1KswU_jABFA" + }, + "source": [ + "## OR gate\n", + "\n", + "Takes two binary strings as input and gives one as output.\n", + "\n", + "The output is `'1'` if either input is `'1'`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "_gofB196ABMj" + }, + "outputs": [], + "source": [ + "def OR(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # a qubit in which to encode the inout\n", + " c = ClassicalRegister(1) # a bit to store the output\n", + " qc = QuantumCircuit(q, c) # this is where the quantum program goes\n", + " \n", + " if input1=='1':\n", + " qc.x( q[0] )\n", + " if input2=='1':\n", + " qc.x( q[1] )\n", + " \n", + " # can be done with NOTs on the inputs and output of an AND\n", + " qc.x(q[0])\n", + " qc.x(q[1])\n", + " qc.ccx(q[0],q[1],q[2]) # the AND just needs a ccx controlled on qubits 0 and 1 and targeted on 2\n", + " qc.x(q[2]) # the NOT is done to the qubit containing the output\n", + " qc.measure(q[2],c[0]) # output from qubit 2 is measured\n", + " \n", + " # We'll run the program on a simulator\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # Since the output will be deterministic, we can use just a single shot to get it\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "flbXaXrY_pNz" + }, + "source": [ + "## Tests\n", + "\n", + "The following code runs the functions above for all possible inputs, so that you can check whether they work." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 503 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 1018, + "status": "ok", + "timestamp": 1552903179929, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "S9hyGAZ9_VQc", + "outputId": "db6acf59-da89-4469-a12c-0dcdeddc4cf8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for the NOT gate\n", + " NOT with input 0 gives output 1\n", + " NOT with input 1 gives output 0\n", + "\n", + "Results for the XOR gate\n", + " NOT with inputs 0 0 gives output 0\n", + " NOT with inputs 0 1 gives output 1\n", + " NOT with inputs 1 0 gives output 1\n", + " NOT with inputs 1 1 gives output 0\n", + "\n", + "Results for the AND gate\n", + " NOT with inputs 0 0 gives output 0\n", + " NOT with inputs 0 1 gives output 0\n", + " NOT with inputs 1 0 gives output 0\n", + " NOT with inputs 1 1 gives output 1\n", + "\n", + "Results for the NAND gate\n", + " NOT with inputs 0 0 gives output 1\n", + " NOT with inputs 0 1 gives output 1\n", + " NOT with inputs 1 0 gives output 1\n", + " NOT with inputs 1 1 gives output 0\n", + "\n", + "Results for the OR gate\n", + " NOT with inputs 0 0 gives output 0\n", + " NOT with inputs 0 1 gives output 1\n", + " NOT with inputs 1 0 gives output 1\n", + " NOT with inputs 1 1 gives output 1\n" + ] + } + ], + "source": [ + "print('\\nResults for the NOT gate')\n", + "for input in ['0','1']:\n", + " print(' NOT with input',input,'gives output',NOT(input))\n", + " \n", + "print('\\nResults for the XOR gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' NOT with inputs',input1,input2,'gives output',XOR(input1,input2))\n", + " \n", + "print('\\nResults for the AND gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' NOT with inputs',input1,input2,'gives output',AND(input1,input2))\n", + " \n", + "print('\\nResults for the NAND gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' NOT with inputs',input1,input2,'gives output',NAND(input1,input2))\n", + " \n", + "print('\\nResults for the OR gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' NOT with inputs',input1,input2,'gives output',OR(input1,input2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "LQT8YfpMNBfH" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Solution_1.ipynb", + "provenance": [ + { + "file_id": "15D2t0WBtMOEgrlHWrgJAeCVmjvPPmx-l", + "timestamp": 1550567685385 + } + ], + "version": "0.3.2" + }, + "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.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/Solutions/Exercise for 2.4.ipynb b/translations/ja/ch-ex/Solutions/Exercise for 2.4.ipynb new file mode 100644 index 0000000..06e001c --- /dev/null +++ b/translations/ja/ch-ex/Solutions/Exercise for 2.4.ipynb @@ -0,0 +1,353 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "CshpxnyNQQNu" + }, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.tools.visualization import plot_histogram\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "pmm5uV8cQQN6" + }, + "source": [ + "# Solution: Basic synthesis of single qubit gates\n", + "\n", + "## 1\n", + "\n", + "Show that the Hadamard gate can be written in the following two forms\n", + "\n", + "$$H = \\frac{X+Z}{\\sqrt{2}} \\equiv \\exp\\left(i \\frac{\\pi}{2} \\, \\frac{X+Z}{\\sqrt{2}}\\right)$$\n", + "\n", + "Here $\\equiv$ is used to denote that the equality is valid up to a global phase, and hence that the resulting gates are physically equivalent.\n", + "\n", + "Hint: it might even be easiest to prove that $e^{i\\frac{\\pi}{2} M} \\equiv M$ for any matrix whose eigenvalues are all $\\pm 1$, and that such matrices uniquely satisfy $M^2=I$." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CJyxxSDUQQN9" + }, + "source": [ + "## 2\n", + "\n", + "The Hadamard can be constructed from `rx` and `rz` operations as\n", + "\n", + "$$ R_x(\\theta) = e^{i\\frac{\\theta}{2} X}, ~~~ R_z(\\theta) = e^{i\\frac{\\theta}{2} Z},\\\\ H \\equiv \\lim_{n\\rightarrow\\infty} \\left( ~R_x\\left(\\frac{\\theta}{n}\\right) ~~R_z \\left(\\frac{\\theta}{n}\\right) ~\\right)^n$$\n", + "\n", + "For some suitably chosen $\\theta$. When implemented for finite $n$, the resulting gate will be an approximation to the Hadamard whose error decreases with $n$.\n", + "\n", + "The following shows an example of this implemented with Qiskit with an incorrectly chosen value of $\\theta$ (and with the global phase ignored).\n", + "\n", + "* Determine the correct value of $\\theta$.\n", + "\n", + "* Show that the error (when using the correct value of $\\theta$) decreases quadratically with $n$." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 329 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 3497, + "status": "ok", + "timestamp": 1552904155482, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "4yqeQMlZQQN_", + "outputId": "4bb803d8-c0da-48a0-c413-d26749a2c22a" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(1)\n", + "cr = ClassicalRegister(1)\n", + "\n", + "error = {}\n", + "for n in range(1,11):\n", + "\n", + " # Create a blank circuit\n", + " qc = QuantumCircuit(qr,cr)\n", + " \n", + " # Implement an approximate Hadamard\n", + " theta = np.pi/np.sqrt(2) # here we correctly choose theta=pi/sqrt(2)\n", + " for j in range(n):\n", + " qc.rx(theta/n,qr[0])\n", + " qc.rz(theta/n,qr[0])\n", + " \n", + " # We need to measure how good the above approximation is. Here's a simple way to do this.\n", + " # Step 1: Use a real hadamard to cancel the above approximation.\n", + " # For a good approximatuon, the qubit will return to state 0. For a bad one, it will end up as some superposition.\n", + " qc.h(qr[0])\n", + " \n", + " # Step 2: Run the circuit, and see how many times we get the outcome 1.\n", + " # Since it should return 0 with certainty, the fraction of 1s is a measure of the error.\n", + " qc.measure(qr,cr)\n", + " shots = 20000\n", + " job = execute(qc, Aer.get_backend('qasm_simulator'),shots=shots)\n", + " try:\n", + " error[n] = (job.result().get_counts()['1']/shots)\n", + " except:\n", + " pass\n", + " \n", + "plot_histogram(error)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 329 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 3480, + "status": "ok", + "timestamp": 1552904155490, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "dW8YTZJeQQON", + "outputId": "372dd6e5-6e3e-4faa-efc8-37c6984239ed" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAckAAAE4CAYAAAAw8QjNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XlYVfXe//8ng+wtKLChFEEM0wpx\nSHFMVOrOzPR2LIe09D4ez62VU6dMj0cMow6pmDkdPaY2KaTYeEpN7NxlDqGYJmmaUyEV4gDIjMD6\n/eHP/W0HW7cJG9LX47q4rr0+67PWfr9d2/3ea/osF8MwDERERKQC15oOQEREpLZSkRQREbFDRVJE\nRMQOFUkRERE7VCRFRETsUJEUERGxw72mA3CmrKwsp76ft7c3Fy5ccOp7Xo1iclxtjEsxOa42xlUb\nY4LaGZczY7JYLHbnaU+yGrm5udV0CBUoJsfVxrgUk+NqY1y1MSaonXHVlphUJEVEROxQkRQREbFD\nRVJERMQOFUkRERE7VCRFRETsUJEUERGxQ0VSRETEDhVJERERO1QkRURE7FCRFBERsUNFUkRExA4V\nSRERETucWiR/+eUXxo8fT+fOnYmMjOSFF16gpKSk0r5JSUkMHDiQdu3a8cADD7By5Uqb+WvXruWh\nhx4iPDycoUOHkpKS4owURETkJuLUIjlhwgQsFgtJSUnEx8ezb98+Fi1aVKHfgQMH+Otf/8r48ePZ\ns2cPsbGxLFmyhM2bNwPw+eef88orrxATE8OuXbsYPHgw48aN4+zZs85MR0REbnBOK5KpqakcOnSI\nqVOn4u3tTVBQEOPGjWP9+vWUl5fb9M3OzmbcuHH07t0bd3d3OnToQPv27a17iwkJCQwaNIgOHTpg\nMpkYPnw4jRo14uOPP3ZWOiIichNwWpE8ePAgjRo1ws/Pz9rWsmVLcnJySEtLs+nbo0cPJkyYYJ02\nDIPTp0/ToEED67rCwsJslgkLCyM1NbUaMxARkZuNu7PeKDs7G29vb5s2Hx8fALKysggJCbG77IoV\nK8jOzmbo0KFXXNeJEyeuGIPZbKZu3brW6ctPvf71ugoLCykqKsLHxwdX10u/IUpLS8nNzcXT0xOT\nyWSTk7u7O/Xq1bO25efnU1JSYn3StcVioaSkhPz8fLy8vPDw8LD2zcrKwsPDAy8vL2tbXl4epaWl\n+Pr6WtuKi4spKCigfv36uLtf2mTl5eXk5ORcc06XY7qenIAqzelyTL83p6rYTvZyslgsNbKdrpST\nxWKpke10pZwsFkuNbid7OdWpU6fGtpO9nDw8PGpsO9nL6bKa2k6V5XSZM7bTlbgYhmE41PM6LV++\nnE2bNvHhhx9a2y5cuEDHjh155513aNeuXaXLLV26lLfeeovXX3/duvfYqlUrXn31VXr27Gnt99JL\nL3HixAlWrVplN4asrKwqysYxl79gaxPF5LjaGJdiclxtjKs2xgS1My5nxvTr4v5bTtuT9PPzIzs7\n26bt8rS/v3+F/oZhMGvWLHbt2kV8fDzNmjWzzqvsHy87O9vmUK6IiMj1cto5yVatWnH69GnOnDlj\nbTtw4AD+/v4EBwdX6P/yyy+zf/9+3nnnHZsCeXld3377rU3bgQMHaNu2bfUELyIiNyWnFcmwsDDa\ntm3LvHnzyM3N5dSpUyxbtoyRI0fi4uJC7969SU5OBuDrr79mw4YNvPbaa9xyyy0V1jVy5Eg++ugj\nUlJSKC4u5o033iAnJ4f//u//dlY6IiLigJSUFEaNGsWQIUOYOHEimZmZFfoYhsGaNWuIiIhg//79\n1vZ169YxbNgw69/DDz9Mr169ADh37hxTp05l6NChDB8+nLfeeqta4nfa4VaAhQsX8vzzz9O9e3fM\nZjODBg1i/PjxAJw8eZKCggIANmzYQEFBAQ888IDN8h07dmT16tV069aNv/3tbzz33HOcOXOG0NBQ\nVqxYYb0wRUREal5hYSFRUVEsWLCA0NBQ1q1bx5w5c5g/f75Nv7lz51JWVlbhlNnl4njZ22+/zfnz\n54FL9aRJkybMmzeP/Px8/ud//ofQ0FA6depUpTk4tUg2bNiQ5cuXVzrvyJEj1tf/+Mc/+Mc//nHF\ndQ0dOtR6tauIiNQ+KSkpBAYGEhoaCkC/fv1YvHix9arXy/r06UPr1q0ZOHCg3XWdO3eO9957z7rH\nePz4cfr06QOAl5cXLVq04MSJE1VeJDV2q4iIVIu0tDSCgoKs056envj4+JCenm7Tr3Xr1lddV3x8\nPH379rXeNtaxY0c+++wzSktLOXPmDIcOHaJ9+/ZVmwAqkiIiUk2Ki4sr3I9oMpkoLCy8pvXk5eWx\nceNGHnnkEWvb2LFjOXToEA8++CADBw7kvvvu44477qiSuH9NRVJERKqF2WymuLjYpq2oqAhPT89r\n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\nlizhyJEjeHl50bBhQ6fHNGfOHFq0aEFBQQHnz5+ndevW1i/Ymvq/uGDBAj7++GPq16/Pl19+iY+P\nD02aNGHbtm14enpSr169Golr7dq1zJ8/n++++45Dhw7xj3/8g+3bt1NWVkZYWFiNf3cVFBRQVFSE\n2Wy2xlLT21JXt1aBHTt2VLhHs6ysDFdX1xrZsIZh0KlTJ+Lj42nUqBE///wzTz75JAMGDGDixImU\nlJTg4eHB8ePHadiwoVP+wxqGQefOnVm7di233norq1atIiMjg5KSEvbs2cP58+fp06cPf//73yuM\nwFSdtm3bxvTp07nrrru4cOEChw4don379kyZMoWtW7fi6+trvU3JWQzDIDw8nM2bN9OwYUOeffZZ\nUlNTadiwIenp6fz888/86U9/YuLEiXh6ejo1rnbt2vHBBx8QEhLCpEmT+OGHH2jSpAk//vgjR48e\npX///vz97393WhE3DIO2bduydetWvvvuO/71r3/x9NNP06FDB6e8v72YOnfuTGJiIg0bNiQpKYm1\na9fi5eXFkSNHOHv2LL1792bmzJnccsstTo2rffv2rFixguDgYOrUqUN0dDRZWVlkZmbi7e3N9OnT\nad++vdNiuiwtLY3169dz5MgRLly4gNlspk+fPgwaNAgPDw+nx2PDkOuyceNG46677jL69OljPP/8\n88bXX39tM//ixYuGYRhGcnKy9XV1+/zzz41BgwbZtO3Zs8fo1auXcf78eWvbPffcY2zdutUpMW3a\ntMkmpmPHjhlt2rQx4uPjjV9++cXYtWuXcf/99xsfffSRU+L5tU8++cR48sknjR9++ME4dOiQER0d\nbXTt2tW46667jMcee8z45ptvnBrPu+++awwYMMAwDMM4evSo0bFjR+PkyZNGUVGRUVxcbPz73/82\n7r//fiMlJcWpcX377bfG4MGDDcMwjJMnTxqdO3c2zp49a51/+TOWlJTktJgSExNtPlf//Oc/jfbt\n2xsJCQlGQUGBYRiGUVpaapSXlzstpi1bthgDBw60TmdlZRktWrQwPvnkEyMrK8vYs2eP8eCDDxof\nfvih02IyDMNISkqyfq5KS0sNwzCM7777zpg/f75x/Phx46WXXjKGDRtmZGRkODUuwzCMxx9/3Jg2\nbZrxyiuvGGvWrDGmT59uREREGO3btzdmz55t/PTTT06P6TKdk7xOvr6+hIWFERkZyY8//siUKVMY\n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\nRK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "# The linear nature of error^(-1/2) shows that the error has a quadratic decay.\n", + "inverse_square_of_error = {}\n", + "for n in error:\n", + " inverse_square_of_error[n] = (error[n])**(-1/2)\n", + "plot_histogram(inverse_square_of_error)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Yr5vuU_eQQOU" + }, + "source": [ + "## 3\n", + "\n", + "An improved version of the approximation can be found from,\n", + "\n", + "$$H \\equiv \\lim_{n\\rightarrow\\infty} \\left( ~ R_z \\left(\\frac{\\theta}{2n}\\right)~~ R_x\\left(\\frac{\\theta}{n}\\right) ~~ R_z \\left(\\frac{\\theta}{2n}\\right) ~\\right)^n$$.\n", + "\n", + "Implement this, and investigate the scaling of the error." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 329 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 5398, + "status": "ok", + "timestamp": 1552904157424, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "JXScz_BtQQOV", + "outputId": "6cd904d6-42da-4839-ce01-49eb5bb039e6" + }, + "outputs": [ + { + "data": { + "image/png": "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\n/fr1AQCxsbH46aefYGtriy5dumDMmDGwsrJ6qJzGKP2lb07MMRNgnrmYyXjmmMscMwHmmUvOTPeX\n+3+Z5VXrlfW2zL2ONm3aiBf836+0IAGgX79+6NevX5ltbG1tMXXqVMnnfu+99/Dee+9VTVAiIqpS\nZvcGWOmhpPtpNBq4urrC2dkZlpaW5d7v4uIiZ0wiInoKmF1JNm/eHH/88YfBWEpKCp5//nnY2tqi\nSZMmSElJEe/T6/U4d+4cWrZsKXdUIiJ6wplFSQYHB4tnfA4ZMgRJSUlISEiAXq/Hjh07kJycjCFD\nhgAAhg4dirVr1+Kvv/6CTqdDdHQ03Nzc0LFjR1NOgYiInkCyvScZFBSEv//+GyUlJSgqKkKLFi0A\n3Fs4IC0tDTqdDgDwzDPPIDo6GgsXLsSECRPg7e2NJUuWiNdXDh48GLdv38bbb7+NnJwctG7dGsuX\nL4eNjY1cUyEioqeE7Ge3mpLcZ2897WeMGcscMwHmmYuZjGeOucwxE2Ceuczl7FazONxKRERkjliS\nREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEszyU0DM3ZTvpC88LavibT8b\nbl4X8BIR0b/4SpKIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgC\nS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KI\niEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgC\nS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KIiEgCS5KI\niEgCS5KIiEgCS5KIiEgCS5KIiEiCtZzfLDMzE7Nnz8bJkyehVCrRrVs3TJs2DQqFwmC7mTNnYtu2\nbQZjJSUlaN26NdauXYslS5Zg6dKlsLGxMdgmMTER7u7u1T4PIiJ6OshakmFhYfDx8UFCQgK0Wi3C\nwsKwePFihIeHG2w3d+5czJ07V7wtCAJee+01vPLKK+JYQEAA1q5dK1t2IiJ6+sh2uDUlJQWpqamY\nPHkyHB0d4enpiZEjR2LTpk0oKSmp8LFbtmzB3bt3MXDgQJnSEhERyViSZ8+eRZ06deDi4iKONWvW\n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\nojrzERERmYzRJfnWW29h1apV8PX1FZeGIyIiepIZ/Z6kRqPBmTNnqjMLERGRWTH6lWT79u0xbtw4\ntGjRAnXr1i1zpuuUKVOqPBwREZEpGV2SKSkp8PLygkajKbO4+P2LoBMRET0pjCrJS5cuITAwENbW\n1ujevTvq1atX3bmIiIhMrtL3JH/77Tf07dsX27dvx+bNm/Hqq6/i5MmTcmQjIiIyqUpLcsmSJZg6\ndSq2b9+On3/+GRMnTsQXX3whRzYiIiKTqrQkL168iEGDBom3BwwYgL/++qtaQxEREZmDSktSr9dD\noVCIt+3s7FBQUFCtoYiIiMyB0ddJEhERPW0qPbu1uLgYcXFxuP9jJ8sbGzp0aPUkJCIiMpFKS9LN\nzQ3ffPNNhWMWFhYsSSIieuJUWpJ79+6VIwcREZHZ4XuSREREEliSREREEliSREREEliSREREEliS\nREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSRERE\nEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliS\nREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEliSREREEmQtyczMTIwaNQpt\n27ZFYGAg5syZA71eX+62CQkJ6Nu3L1q1aoUePXrgm2++Ee9bsmQJfH190aJFC4P/srKy5JoKERE9\nBazl/GZhYWHw8fFBQkICtFotwsLCsHjxYoSHhxtsd+bMGUycOBELFixA9+7dcerUKbz77ruoV68e\ngoODAQABAQFYu3atnPGJiOgpI9sryZSUFKSmpmLy5MlwdHSEp6cnRo4ciU2bNqGkpMRgW41Gg5Ej\nRyI4OBjW1tbw9/dHmzZtkJycLFdcIiIi+Ury7NmzqFOnDlxcXMSxZs2aITs7G+np6QbbdunSBWFh\nYeJtQRCQlZUFNzc3cSwzMxPDhw+Hv78/goKCsGfPnuqfBBERPVVkO9yq0Wjg6OhoMObk5AQAUKvV\n8Pb2lnxsbGwsNBoNBg0aBADw8PBAo0aNEB4ejvr162PLli0YO3YsfvzxR/j4+Eg+j1KphJ2dnXg7\nJycHAAxy5efno6CgAE5OTrC0vPc3RFFREbRaLezt7WFra/tgE6+EQqGAg4ODeDs3NxdFRUVwdnYW\nxwoLC6HT6VCzZk1YW9/bZSUlJcjOzn7gOQGASqWSnJNGo4G1tTVq1KghjuXl5UGv10OlUoljer0e\neXl5cHBwgEKhEMfVavUDz6k008POqbL99ChzUqlUDzWnR91PFc1JpVKZZD9VNCeVSmXS/SQ1Jxsb\nG5PtJ6k5KRQKk+0nqTmVMtV+Km9OpeTYTxWxEARBMGrLR/T1119jx44d2LZtmziWk5ODgIAAbNiw\nAa1atSr3cUuXLsWaNWuwatUq+Pn5ST7/wIED0a5dO0yaNElyG7Va/fATuM+U71SVb2Skz4ZXTSZj\nlf7SNyfmmAkwz1zMZDxzzGWOmQDzzCVnpvvL/b9keyXp4uICjUZjMFZ629XVtcz2giBg1qxZOHLk\nCOLi4tC4ceMKn9/T0xM3b96susBERPTUk+09yebNmyMrKwu3bt0Sx86cOQNXV1d4eXmV2X7+/Pk4\ndeoUNmzYUKYgly1bhiNHjhiMXbp0qdznISIieliylaSfnx9atmyJBQsWQKvVIiMjAzExMRg6dCgs\nLCwQHByMpKQkAMCJEyewZcsWrFixArVq1SrzXBqNBrNnz8bly5dRWFiIlStXIj09Hf3795drOkRE\n9BSQ9TrJRYsWITIyEp07d4ZSqURoaChGjRoFAEhLS4NOpwMAbNmyBTqdDj169DB4fEBAAFauXCm+\n7/i///0ParUaTZo0werVq1GnTh05p0NERE842U7cMQc8cYdv0D8Ic8zFTMYzx1zmmAkwz1zmcuIO\n124lIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIk\nIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKS\nwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIkIiKSwJIk\nIiKSYG3qAPRwkpOTsXjxYuTn58PDwwMRERFwc3Mz2ObChQv47LPPoNFo4OzsjClTpuCFF17A8ePH\nMXHiRHh4eIjbBgYGYsyYMRAEAcuWLcP+/fthYWEhjhMRPY1Yko+h/Px8REREIDo6Gr6+vti4cSM+\n/fRTLFy40GC7mTNnYsyYMQgMDMSBAwcQFRWFX375BQDg5+eHmJiYMs+dmJiIEydOYN26dbCwsMDo\n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\n+/E2l68CAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(1)\n", + "cr = ClassicalRegister(1)\n", + "\n", + "error = {}\n", + "for n in range(1,11):\n", + "\n", + " # Create a blank circuit\n", + " qc = QuantumCircuit(qr,cr)\n", + " \n", + " # Implement an approximate Hadamard\n", + " theta = np.pi/np.sqrt(2) # here we correctly use theta=pi/sqrt(2)\n", + " for j in range(n):\n", + " qc.rz(theta/(2*n),qr[0])\n", + " qc.rx(theta/n,qr[0])\n", + " qc.rz(theta/(2*n),qr[0])\n", + " \n", + " # We need to measure how good the above approximation is. Here's a simple way to do this.\n", + " # Step 1: Use a real hadamard to cancel the above approximation.\n", + " # For a good approximatuon, the qubit will return to state 0. For a bad one, it will end up as some superposition.\n", + " qc.h(qr[0])\n", + " \n", + " # Step 2: Run the circuit, and see how many times we get the outcome 1.\n", + " # Since it should return 0 with certainty, the fraction of 1s is a measure of the error.\n", + " qc.measure(qr,cr)\n", + " shots = 100000\n", + " job = execute(qc, Aer.get_backend('qasm_simulator'),shots=shots)\n", + " try:\n", + " error[n] = (job.result().get_counts()['1']/shots)\n", + " except:\n", + " pass\n", + " \n", + "plot_histogram(error)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 329 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 5387, + "status": "ok", + "timestamp": 1552904157429, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "y10zaCS8QQOb", + "outputId": "6e0850db-9e58-4398-e231-763daaba96f1" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAckAAAE4CAYAAAAw8QjNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XlcVPX+P/AX6wygwIALiCjmhriE\nKLmgcr1imV43EjEtfeStqyWWmqhXRVErN5Sr5dUsLUshwMy8uSRauaSimCaJGioKmIjLADPDDMNy\nfn/443wdYWAU5gzq6/l49GjO53zOmffbMzNvzvqxEgRBABEREVVibekAiIiI6isWSSIiIiNYJImI\niIxgkSQiIjKCRZKIiMgIFkkiIiIjbC0dgJSUSqWk7+fs7IzCwkJJ37MmjMl09TEuxmS6+hhXfYwJ\nqJ9xSRmTQqEwOo97kmZkY2Nj6RAqYUymq49xMSbT1ce46mNMQP2Mq77ExCJJRERkBIskERGRESyS\nRERERrBIEhERGcEiSUREZASLJBERkREskkREREawSBIRERnBIklERGQEiyQREZERLJJERERGsEgS\nEREZwSJJRERkBIskERGRESySRERERrBIEhERGcEiSUREZASLJBERkREskkREREawSBIRERlha+kA\niIieRKmpqVi7di20Wi08PDwQFRWFJk2aGPT5/fffsWbNGmg0GsjlckRFRaFNmzYAgOTkZHzxxRco\nLS3Fc889h/nz56NBgwYoLS3F6tWrcfr0aZSXl6N79+54//33YWtb88/148Q0bdo0/P3vfzdbTE86\n7kkSET0irVaLqKgozJ07F0lJSejTpw+WL19u0Eev12PWrFmYMmUKEhISMGnSJMyYMQMAkJubi1Wr\nVmH16tVITEyEp6cnNmzYAADYtm0blEol4uLisHXrVmRkZGDnzp1mi2nBggVmi+lpwCJJRPSIUlNT\n0axZM/j6+gIAhg4dipSUFGg0GrFPaWkp5syZg27dugEAnn/+eeTl5UGlUuHw4cPo3r07PDw8AADD\nhg3DwYMHAQBdu3bFO++8AxsbG8hkMnTp0gVZWVlmi+n27dsoLCw0S0xPAxZJIqJHlJWVBS8vL3Ha\n0dERLi4uyMnJMWjr37+/OH3s2DH4+PigYcOGlZb38vKCUqlEYWEhunTpAm9vbwDAnTt3cPz4cQQF\n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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "# The linear nature of error^(-1/3) shows that the error has a cubic decay.\n", + "# Note: this needs loads of shots to get a good result.\n", + "inverse_cube_of_error = {}\n", + "for n in error:\n", + " error[n]\n", + " inverse_cube_of_error[n] = (error[n])**(-1/3)\n", + "plot_histogram(inverse_cube_of_error)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "TeQnxYGDQ2ro" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "name": "Exercise_4.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/Solutions/Exercise for 2.5.ipynb b/translations/ja/ch-ex/Solutions/Exercise for 2.5.ipynb new file mode 100644 index 0000000..adf1932 --- /dev/null +++ b/translations/ja/ch-ex/Solutions/Exercise for 2.5.ipynb @@ -0,0 +1,757 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "CshpxnyNQQNu" + }, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.tools.visualization import plot_histogram\n", + "from qiskit.providers.aer import noise\n", + "from qiskit.compiler import transpile\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "pmm5uV8cQQN6" + }, + "source": [ + "# Solution: Building the best AND gate\n", + "\n", + "In the first exercise you made and AND gate with quantum gates. This time you'll do the same again, but for a real device. Using real devices gives you two major constraints to deal with. One is the connectivity, and the other is noise.\n", + "\n", + "The connectivity tells you what `cx` gates it is possible to do perform directly. For example, the device `ibmq_5_tenerife` has five qubits numbered from 0 to 4. It has a connectivity defined by" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wczhwQrcoQVB" + }, + "outputs": [], + "source": [ + "coupling_map = [[1, 0], [2, 0], [2, 1], [3, 2], [3, 4], [4, 2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "vrk5N1ZZpOmY" + }, + "source": [ + "Here the `[1,0]` tells us that we can implement a `cx` with qubit 1 as control and qubit 0 as target, the `[2,0]` tells us we can have qubit 2 as control and 0 as target, and so on. The are the `cx` gates that the device can implement directly.\n", + "\n", + "The 'noise' of a device is the collective effects of all the things that shouldn't happen, but nevertheless do happen. Noise results in the output not always having the result we expect. There is noise associated with all processes in a quantum circuit: preparing the initial states, applying gates and measuring the output. For the gates, noise levels can vary between different gates and between different qubits. The `cx` gates are typically more noisy than any single qubit gate.\n", + "\n", + "We can also simulate noise using a noise model. And we can set the noise model based on measurements of the noise for a real device. The following noise model is based on `ibmq_5_tenerife`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "K9SSOA2RXOUo" + }, + "outputs": [], + "source": [ + "noise_dict = {'errors': [{'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0004721766167523067, 0.0004721766167523067, 0.0004721766167523067, 0.9985834701497431], 'gate_qubits': [[0]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0005151090708174488, 0.0005151090708174488, 0.0005151090708174488, 0.9984546727875476], 'gate_qubits': [[1]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0005151090708174488, 0.0005151090708174488, 0.0005151090708174488, 0.9984546727875476], 'gate_qubits': [[2]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.000901556048412383, 0.000901556048412383, 0.000901556048412383, 0.9972953318547628], 'gate_qubits': [[3]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0011592423249461303, 0.0011592423249461303, 0.0011592423249461303, 0.9965222730251616], 'gate_qubits': [[4]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0009443532335046134, 0.0009443532335046134, 0.0009443532335046134, 0.9971669402994862], 'gate_qubits': [[0]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0010302181416348977, 0.0010302181416348977, 0.0010302181416348977, 0.9969093455750953], 'gate_qubits': [[1]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0010302181416348977, 0.0010302181416348977, 0.0010302181416348977, 0.9969093455750953], 'gate_qubits': [[2]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.001803112096824766, 0.001803112096824766, 0.001803112096824766, 0.9945906637095256], 'gate_qubits': [[3]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0023184846498922607, 0.0023184846498922607, 0.0023184846498922607, 0.9930445460503232], 'gate_qubits': [[4]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.9672573379090872], 'gate_qubits': [[1, 0]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.9699888805021712], 'gate_qubits': [[2, 0]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.9627184072576159], 'gate_qubits': [[2, 1]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.9437457618579164], 'gate_qubits': [[3, 2]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.9339816349935997], 'gate_qubits': [[3, 4]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.9307167621063416], 'gate_qubits': [[4, 2]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9372499999999999, 0.06275000000000008], [0.06275000000000008, 0.9372499999999999]], 'gate_qubits': [[0]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9345, 0.0655], [0.0655, 0.9345]], 'gate_qubits': [[1]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.97075, 0.029249999999999998], [0.029249999999999998, 0.97075]], 'gate_qubits': [[2]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9742500000000001, 0.02574999999999994], [0.02574999999999994, 0.9742500000000001]], 'gate_qubits': [[3]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.8747499999999999, 0.12525000000000008], [0.12525000000000008, 0.8747499999999999]], 'gate_qubits': [[4]]}], 'x90_gates': []}\n", + "noise_model = noise.noise_model.NoiseModel.from_dict( noise_dict )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cR0-hEoSqgr8" + }, + "source": [ + "Running directly on the device requires you to have an IBMQ account, and for you to sign in to it within your program. In order to not worry about all this, we'll instead use a simulation of the 5 qubit device defined by the constraints set above." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "MTQMjOzOWuw8" + }, + "outputs": [], + "source": [ + " qr = QuantumRegister(5, 'qr')\n", + " cr = ClassicalRegister(1, 'cr')\n", + " backend = Aer.get_backend('qasm_simulator')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "e_p8IgvCrd5a" + }, + "source": [ + "We now define the `NAND` function. This has a few differences to the version in Exercise 1. Firstly, it is defined on a 5 qubit circuit, so you'll need to decide which of the 5 qubits are used to encode `input1`, `input2` and the output. Secondly, the output is a histogram of the number of times that each output is found when the process is repeated over 10000 samples." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "4yqeQMlZQQN_" + }, + "outputs": [], + "source": [ + "def AND (input1,input2, q_1=0,q_2=1,q_out=2):\n", + " # The keyword q_1 specifies the qubit used to encode input1\n", + " # The keyword q_2 specifies qubit used to encode input2\n", + " # The keyword q_out specifies qubit to be as output\n", + " \n", + " qc = QuantumCircuit(qr, cr)\n", + " \n", + " # prepare input on qubits q1 and q2\n", + " if input1=='1':\n", + " qc.x( qr[ q_1 ] )\n", + " if input2=='1':\n", + " qc.x( qr[ q_2 ] )\n", + " \n", + " qc.ccx(qr[ q_1 ],qr[ q_2 ],qr[ q_out ]) # the AND just needs a c\n", + " qc.measure(qr[ q_out ],cr[0]) # output from qubit 1 is measured\n", + " \n", + " # the circuit is run on a simulator, but we do it so that the noise and connectivity of Tenerife are also reproduced \n", + " job = execute(qc, backend, shots=10000, noise_model=noise_model,\n", + " coupling_map=coupling_map,\n", + " basis_gates=noise_model.basis_gates)\n", + " output = job.result().get_counts()\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "i7qCHniitYIZ" + }, + "source": [ + "For example, here are the results when both inputs are `0`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 339 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 4279, + "status": "ok", + "timestamp": 1553509296368, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "ZPRa9f8LtYeX", + "outputId": "df5b2663-0531-4cfd-e6cf-395a8cb3eebd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'1': 980, '0': 9020}\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = AND('0','0')\n", + "print( result )\n", + "plot_histogram( result )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "KzqsXxXcSlKN" + }, + "source": [ + "We'll compare across all results to find the most unreliable." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 260 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 11198, + "status": "ok", + "timestamp": 1553509303307, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "5jbzYvA5f5bD", + "outputId": "828ef3d2-b42c-4999-e893-eed78bd7d323" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Probability of correct answer for inputs 0 0\n", + "0.9033\n", + "\n", + "Probability of correct answer for inputs 0 1\n", + "0.8942\n", + "\n", + "Probability of correct answer for inputs 1 0\n", + "0.9084\n", + "\n", + "Probability of correct answer for inputs 1 1\n", + "0.9018\n", + "\n", + "The lowest of these probabilities was 0.8942\n" + ] + } + ], + "source": [ + "worst = 1\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print('\\nProbability of correct answer for inputs',input1,input2)\n", + " prob = AND(input1,input2, q_1=0,q_2=1,q_out=2)[str(int( input1=='1' and input2=='1' ))]/10000\n", + " print( prob )\n", + " worst = min(worst,prob)\n", + "print('\\nThe lowest of these probabilities was',worst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "b2ZFynrdSxFj" + }, + "source": [ + "Our job is to make a better `AND` gate. Let's start by looking at how good the qubits are.\n", + "\n", + "We'll do this by running a trivial circuit using different qubits as outputs. We can then see the probability that the output is incorrect, giving a simply measure of noise for each qubit." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 104 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 11496, + "status": "ok", + "timestamp": 1553509303625, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "qR5WxStVStPx", + "outputId": "5d7321a8-3b05-4cec-82c9-8aaf4618f7f6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Probability of incorrect output for qubit 0 is 0.0648\n", + "Probability of incorrect output for qubit 1 is 0.07\n", + "Probability of incorrect output for qubit 2 is 0.0297\n", + "Probability of incorrect output for qubit 3 is 0.0258\n", + "Probability of incorrect output for qubit 4 is 0.1241\n" + ] + } + ], + "source": [ + "for j in range(5):\n", + " qc = QuantumCircuit(qr, cr)\n", + " qc.measure(qr[j],cr[0])\n", + " job = execute(qc, backend, shots=10000, noise_model=noise_model, coupling_map=coupling_map, basis_gates=noise_model.basis_gates)\n", + " output = job.result().get_counts()\n", + " print('Probability of incorrect output for qubit',j,'is',output['1']/10000)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "5q4UDFbbTLYN" + }, + "source": [ + "It looks like qubit 4 is the worst and qubits 2 and 3 are the best.\n", + "\n", + "The implementation of an `AND` typically required us to have three qubits in which one is connected to the other two. Unfortunately, the only triple of qubits that include 2 and 3 must also include 4 to have this property. So we would be mixing the best with the worst. Let's try it anyway." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 260 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 14980, + "status": "ok", + "timestamp": 1553509307124, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "4ABQ3ZInUHlE", + "outputId": "377c9bb1-9a32-4660-b495-974869300e64" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Probability of correct answer for inputs 0 0\n", + "0.8258\n", + "\n", + "Probability of correct answer for inputs 0 1\n", + "0.8334\n", + "\n", + "Probability of correct answer for inputs 1 0\n", + "0.8308\n", + "\n", + "Probability of correct answer for inputs 1 1\n", + "0.8352\n", + "\n", + "The lowest of these probabilities was 0.8258\n" + ] + } + ], + "source": [ + "worst = 1\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print('\\nProbability of correct answer for inputs',input1,input2)\n", + " prob = AND(input1,input2, q_1=3,q_2=4,q_out=2)[str(int( input1=='1' and input2=='1' ))]/10000\n", + " print( prob )\n", + " worst = min(worst,prob)\n", + "print('\\nThe lowest of these probabilities was',worst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cEsZbW82UV5A" + }, + "source": [ + "This is worse than the use of 0, 1 and 2 that was tried in the original test. Though it doesn't follow that that was neccessarily the best triple to use, let's stick with it anyway.\n", + "\n", + "Let's now use these three qubits to implement the `AND` described [here](https://learnqiskit.gitbook.io/composerguide/quantum-algorithms/basic-circuit-identities) which uses a controlled-Z and two controlled-Hs.\n", + "\n", + "Qiskit gives us `cz` and `ch` to use directly." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "DFzW7R2JuEXW" + }, + "outputs": [], + "source": [ + "def AND (input1,input2, q_1=0,q_2=1,q_out=2):\n", + " # The keyword q_1 specifies the qubit used to encode input1\n", + " # The keyword q_2 specifies qubit used to encode input2\n", + " # The keyword q_out specifies qubit to be as output\n", + " \n", + " qc = QuantumCircuit(qr, cr)\n", + " \n", + " # prepare input on qubits q1 and q2\n", + " if input1=='1':\n", + " qc.x( qr[ q_1 ] )\n", + " if input2=='1':\n", + " qc.x( qr[ q_2 ] )\n", + " \n", + " qc.ch(qr[q_1],qr[q_out])\n", + " qc.cz(qr[q_2],qr[q_out])\n", + " qc.ch(qr[q_1],qr[q_out])\n", + " \n", + " qc.measure(qr[ q_out ],cr[0]) # output from qubit 1 is measured\n", + " \n", + " # the circuit is run on a simulator, but we do it so that the noise and connectivity of Tenerife are also reproduced \n", + " job = execute(qc, backend, shots=10000, noise_model=noise_model,\n", + " coupling_map=coupling_map,\n", + " basis_gates=noise_model.basis_gates)\n", + " output = job.result().get_counts()\n", + " \n", + " return output" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 260 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 7780, + "status": "ok", + "timestamp": 1553515227601, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "BbtmGdcjuOE3", + "outputId": "2820c752-faaa-440b-9b75-49729bffc233" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Probability of correct answer for inputs 0 0\n", + "0.8882\n", + "\n", + "Probability of correct answer for inputs 0 1\n", + "0.882\n", + "\n", + "Probability of correct answer for inputs 1 0\n", + "0.887\n", + "\n", + "Probability of correct answer for inputs 1 1\n", + "0.8893\n", + "\n", + "The lowest of these probabilities was 0.882\n" + ] + } + ], + "source": [ + "worst = 1\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print('\\nProbability of correct answer for inputs',input1,input2)\n", + " prob = AND(input1,input2, q_1=0,q_2=1,q_out=2)[str(int( input1=='1' and input2=='1' ))]/10000\n", + " print( prob )\n", + " worst = min(worst,prob)\n", + "print('\\nThe lowest of these probabilities was',worst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "GddO8td3ubQ7" + }, + "source": [ + "The results aren't great. Let's look at the compiled circuit to see what's going on. Specifically, let's see what's going on for the controlled Hadamard." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 503 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 850, + "status": "ok", + "timestamp": 1553515389340, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "YCciy2qauo0V", + "outputId": "e9d1f649-db3b-4fef-a458-03bf3975be71" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original circuit\n", + " ┌───┐\n", + "qr_0: |0>┤ H ├\n", + " └─┬─┘\n", + "qr_1: |0>──■──\n", + " \n", + "qr_2: |0>─────\n", + " \n", + "qr_3: |0>─────\n", + " \n", + "qr_4: |0>─────\n", + " \n", + " cr_0: 0 ═════\n", + " \n", + "Compiled circuit\n", + " ┌───┐┌─────┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐\n", + "qr_0: |0>┤ H ├┤ Sdg ├┤ X ├┤ H ├┤ T ├┤ X ├┤ T ├┤ H ├┤ S ├┤ X ├\n", + " └───┘└─────┘└─┬─┘└───┘└───┘└─┬─┘├───┤└───┘└───┘└───┘\n", + "qr_1: |0>──────────────■──────────────■──┤ S ├───────────────\n", + " └───┘ \n", + "qr_2: |0>────────────────────────────────────────────────────\n", + " \n", + "qr_3: |0>────────────────────────────────────────────────────\n", + " \n", + "qr_4: |0>────────────────────────────────────────────────────\n", + " \n", + " cr_0: 0 ════════════════════════════════════════════════════\n", + " \n" + ] + } + ], + "source": [ + "qc = QuantumCircuit(qr, cr)\n", + "qc.ch(qr[1],qr[0])\n", + "print('Original circuit')\n", + "print(qc)\n", + "\n", + "print('Compiled circuit')\n", + "\n", + "qc_compiled = transpile(qc,backend=backend)\n", + "print(qc_compiled)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "3Pj8bfp7uT4W" + }, + "source": [ + "This uses more single qubit gates than are minimally required, so we can try to do better. Let's make our AND with a custum `ch`." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "I75oBAwbUx4w" + }, + "outputs": [], + "source": [ + "def AND (input1,input2, q_1=0,q_2=1,q_out=2):\n", + " # The keyword q_1 specifies the qubit used to encode input1\n", + " # The keyword q_2 specifies qubit used to encode input2\n", + " # The keyword q_out specifies qubit to be as output\n", + " \n", + " qc = QuantumCircuit(qr, cr)\n", + " \n", + " # prepare input on qubits q1 and q2\n", + " if input1=='1':\n", + " qc.x( qr[ q_1 ] )\n", + " if input2=='1':\n", + " qc.x( qr[ q_2 ] )\n", + " \n", + " qc.ry(-np.pi/4,qr[q_out])\n", + " qc.cx(qr[q_1],qr[q_out])\n", + " qc.ry(np.pi/4,qr[q_out])\n", + " \n", + " qc.cz(qr[q_2],qr[q_out])\n", + " \n", + " qc.ry(-np.pi/4,qr[q_out])\n", + " qc.cx(qr[q_1],qr[q_out])\n", + " qc.ry(np.pi/4,qr[q_out])\n", + " \n", + " qc.measure(qr[ q_out ],cr[0]) # output from qubit 1 is measured\n", + " \n", + " # the circuit is run on a simulator, but we do it so that the noise and connectivity of Tenerife are also reproduced \n", + " job = execute(qc, backend, shots=10000, noise_model=noise_model,\n", + " coupling_map=coupling_map,\n", + " basis_gates=noise_model.basis_gates)\n", + " output = job.result().get_counts()\n", + " \n", + " return output" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 260 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 3659, + "status": "ok", + "timestamp": 1553515520214, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "GqwD3yjoVVZH", + "outputId": "aee7b7c0-58ca-47d2-a070-c9b6ee047f79" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Probability of correct answer for inputs 0 0\n", + "0.9158\n", + "\n", + "Probability of correct answer for inputs 0 1\n", + "0.9198\n", + "\n", + "Probability of correct answer for inputs 1 0\n", + "0.9136\n", + "\n", + "Probability of correct answer for inputs 1 1\n", + "0.9122\n", + "\n", + "The lowest of these probabilities was 0.9122\n" + ] + } + ], + "source": [ + "worst = 1\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print('\\nProbability of correct answer for inputs',input1,input2)\n", + " prob = AND(input1,input2, q_1=0,q_2=1,q_out=2)[str(int( input1=='1' and input2=='1' ))]/10000\n", + " print( prob )\n", + " worst = min(worst,prob)\n", + "print('\\nThe lowest of these probabilities was',worst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "yu_7vyLoXkke" + }, + "source": [ + "A better result that the one in the question, as required." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "9puVgP6ZVZDe" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Solution_5.ipynb", + "provenance": [ + { + "file_id": "1PCA2ewVXvUfws6I3fP73Ax3GlJDzGvzr", + "timestamp": 1553506031146 + }, + { + "file_id": "1DK-wi3r3dwzfxLEAuVV7M_KUCrVGR1eK", + "timestamp": 1552904885600 + }, + { + "file_id": "1E3Fczlf2qyCWi-IEWOU00b71e5rx0Jwa", + "timestamp": 1552904169221 + } + ], + "version": "0.3.2" + }, + "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.7.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/ex1.ipynb b/translations/ja/ch-ex/ex1.ipynb new file mode 100644 index 0000000..e1b1d05 --- /dev/null +++ b/translations/ja/ch-ex/ex1.ipynb @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ccfRql22_IBL", + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子回路による古典論理ゲートの実現" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.tools.visualization import plot_histogram\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ccfRql22_IBL" + }, + "source": [ + "NOTゲート(Qiskitでは`x`と表現)、CNOTゲート(Qiskitでは`cx`と表現)、Toffoliゲート(Qiskitでは`ccx`と表現)を使用して、XOR、AND、NAND、および ORゲートを実装してください。\n", + "\n", + "例として、NOTゲートの実装を示します。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OKCkpBD0_c6L" + }, + "source": [ + "## NOT ゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OKCkpBD0_c6L" + }, + "source": [ + "この関数は、バイナリ文字列入力( `'0'`または`' 1'`)を受け取り、反対のバイナリ出力 を返します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "6JPMpemG_RMb" + }, + "outputs": [], + "source": [ + "def NOT(input):\n", + "\n", + " q = QuantumRegister(1) # 入力を量子ビットに符号化するための量子レジスター\n", + " c = ClassicalRegister(1) # 出力を格納するための古典レジスター\n", + " qc = QuantumCircuit(q, c) # 量子回路\n", + " \n", + " # '0' を |0⟩ に, '1' を |1⟩ に符号化する\n", + " # '0'が入力されたら、量子ビットはデフォルトで |0⟩なので何もしない\n", + " # '1'が入力されたら、Xゲートを用いて |0⟩ を |1⟩ に変換する\n", + " if input=='1':\n", + " qc.x( q[0] )\n", + " \n", + " # Xゲートを用いて NOT を量子回路の上で実装する。\n", + " qc.x( q[0] )\n", + " \n", + " # 最後に、量子状態 |0⟩ または |1⟩ を観測し、古典ビット c[0] に格納する\n", + " qc.measure( q[0], c[0] )\n", + " \n", + " # シミュレーター上で実行する\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 結果は確定的なので、一回の実行結果だけで十分\n", + " job = execute(qc,backend,shots=1)\n", + " output = next(iter(job.result().get_counts()))\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Gd-9DEAaAarK" + }, + "source": [ + "## XOR ゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Gd-9DEAaAarK" + }, + "source": [ + "2つのバイナリ文字列を入力として受け取り、1つのバイナリ文字列を出力します。\n", + "\n", + "入力が等しい場合、出力は `'0'`であり、そうでない場合、出力は`' 1'`です。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "oPVCyyaHAays" + }, + "outputs": [], + "source": [ + "def XOR(input1,input2):\n", + " \n", + " q = QuantumRegister(2) # 入力を格納する 2 量子ビット\n", + " c = ClassicalRegister(1) # 出力を格納する 1 古典ビット\n", + " qc = QuantumCircuit(q, c) # 量子回路\n", + " \n", + " # 量子プログラムをここに記述する\n", + " \n", + " qc.measure(q[1],c[0]) # 必要ならここは変更しても良い\n", + " \n", + " # シミュレーター上で実行する\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 結果は確定的なので、一回の実行結果だけで十分\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "dPMfIpfYAAT7" + }, + "source": [ + "## AND ゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "dPMfIpfYAAT7" + }, + "source": [ + "2つのバイナリ文字列を入力として受け取り、1つのバイナリ文字列を出力します。\n", + "\n", + "両方の入力が `'1'`の場合のみ、出力は`' 1'`になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "HdYfpnslAAeJ" + }, + "outputs": [], + "source": [ + "def AND(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # 入力を格納する 2 量子ビットと出力を格納する 1 量子ビット\n", + " c = ClassicalRegister(1) # 出力を格納する 1 古典ビット\n", + " qc = QuantumCircuit(q, c) # 量子回路\n", + " \n", + " # 量子プログラムをここに記述する\n", + " \n", + " qc.measure(q[2],c[0]) # 必要ならここは変更しても良い\n", + " \n", + " # シミュレーター上で実行する\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 結果は確定的なので、一回の実行結果だけで十分\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OXfchiSyAAoo" + }, + "source": [ + "## NAND ゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OXfchiSyAAoo" + }, + "source": [ + "2つのバイナリ文字列を入力として受け取り、1つのバイナリ文字列を出力します。\n", + "\n", + "両方の入力が `'1'`の場合のみ、出力は`'0'`になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "nJhmG115AAwv" + }, + "outputs": [], + "source": [ + "def NAND(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # 入力を格納する 2 量子ビットと出力を格納する 1 量子ビット\n", + " c = ClassicalRegister(1) # 出力を格納する 1 古典ビット\n", + " qc = QuantumCircuit(q, c) # 量子回路\n", + " \n", + " # 量子プログラムをここに記述する\n", + " \n", + " qc.measure(q[2],c[0]) # 必要ならここは変更しても良い\n", + " \n", + " # シミュレーター上で実行する\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 結果は確定的なので、一回の実行結果だけで十分\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "n1KswU_jABFA" + }, + "source": [ + "## OR ゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "n1KswU_jABFA" + }, + "source": [ + "2つのバイナリ文字列を入力として受け取り、1つのバイナリ文字列を出力します。\n", + "\n", + "いずれかの入力が `'1'`の場合、出力は`'1'`になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "_gofB196ABMj" + }, + "outputs": [], + "source": [ + "def OR(input1,input2):\n", + " \n", + " q = QuantumRegister(3) # 入力を格納する 2 量子ビットと出力を格納する 1 量子ビット\n", + " c = ClassicalRegister(1) # 出力を格納する 1 古典ビット\n", + " qc = QuantumCircuit(q, c) # 量子回路\n", + " \n", + " # 量子プログラムをここに記述する\n", + " \n", + " qc.measure(q[2],c[0]) # 必要ならここは変更しても良い\n", + " \n", + " # シミュレーター上で実行する\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 結果は確定的なので、一回の実行結果だけで十分\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "flbXaXrY_pNz" + }, + "source": [ + "## 検証" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "flbXaXrY_pNz" + }, + "source": [ + "次のコードを実行し、すべての可能な入力に対して上記の関数が機能するかどうかを確認してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "S9hyGAZ9_VQc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for the NOT gate\n", + " Input 0 gives output 1\n", + " Input 1 gives output 0\n", + "\n", + "Results for the XOR gate\n", + " Inputs 0 0 give output 0\n", + " Inputs 0 1 give output 1\n", + " Inputs 1 0 give output 1\n", + " Inputs 1 1 give output 0\n", + "\n", + "Results for the AND gate\n", + " Inputs 0 0 give output 0\n", + " Inputs 0 1 give output 0\n", + " Inputs 1 0 give output 0\n", + " Inputs 1 1 give output 1\n", + "\n", + "Results for the NAND gate\n", + " Inputs 0 0 give output 1\n", + " Inputs 0 1 give output 1\n", + " Inputs 1 0 give output 1\n", + " Inputs 1 1 give output 0\n", + "\n", + "Results for the OR gate\n", + " Inputs 0 0 give output 0\n", + " Inputs 0 1 give output 1\n", + " Inputs 1 0 give output 1\n", + " Inputs 1 1 give output 1\n" + ] + } + ], + "source": [ + "print('\\nResults for the NOT gate')\n", + "for input in ['0','1']:\n", + " print(' Input',input,'gives output',NOT(input))\n", + " \n", + "print('\\nResults for the XOR gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' Inputs',input1,input2,'give output',XOR(input1,input2))\n", + "\n", + "print('\\nResults for the AND gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' Inputs',input1,input2,'give output',AND(input1,input2))\n", + "\n", + "print('\\nResults for the NAND gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' Inputs',input1,input2,'give output',NAND(input1,input2))\n", + "\n", + "print('\\nResults for the OR gate')\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print(' Inputs',input1,input2,'give output',OR(input1,input2))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.16.1',\n", + " 'qiskit-aer': '0.7.1',\n", + " 'qiskit-ignis': '0.5.1',\n", + " 'qiskit-ibmq-provider': '0.11.1',\n", + " 'qiskit-aqua': '0.8.1',\n", + " 'qiskit': '0.23.1'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "翻訳担当: 野ヶ山尊秀 (nogayama @jp.ibm.com)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Exercise_1.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/ex2.ipynb b/translations/ja/ch-ex/ex2.ipynb new file mode 100644 index 0000000..6044b79 --- /dev/null +++ b/translations/ja/ch-ex/ex2.ipynb @@ -0,0 +1,202 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 1量子ビットゲートの合成の基礎" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.tools.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # 画像をいい感じに表示する\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "pmm5uV8cQQN6" + }, + "source": [ + "## 1\n", + "\n", + "アダマールゲートが次の2つの形で書けることを示してください。\n", + "\n", + "\n", + "$$H = \\frac{X+Z}{\\sqrt{2}} \\equiv \\exp\\left(i \\frac{\\pi}{2} \\, \\frac{X+Z}{\\sqrt{2}}\\right).$$\n", + "\n", + "\n", + "ここで、$\\equiv$はグローバル位相の違いを除いて等しいということを示すために使用されています。\n", + "したがって、得られたゲートは物理的に等価です。\n", + "\n", + "ヒント: 固有値が $\\pm 1$ の任意の行列 $M$ が、$M^2=I$ を満たしていることと、 $e^{i\\frac{\\pi}{2} M} \\equiv M$ が成り立つことを証明するのが簡単かもしれません。" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CJyxxSDUQQN9" + }, + "source": [ + "## 2\n", + "\n", + "アダマールゲートは次のように `rx` と `rz` の操作から構成することが出来ます。 \n", + "\n", + "\n", + "$$ R_x(\\theta) = e^{i\\frac{\\theta}{2} X}, ~~~ R_z(\\theta) = e^{i\\frac{\\theta}{2} Z},\\\\ H \\equiv \\lim_{n\\rightarrow\\infty} \\left( ~R_x\\left(\\frac{\\theta}{n}\\right) ~~R_z \\left(\\frac{\\theta}{n}\\right) ~\\right)^n.$$\n", + "\n", + "\n", + "\n", + "この等式は適切に選んだ $\\theta$ について成り立ちます。 有限の $n$ について実装をすると、得られるゲートは $n$ が大きくなるとアダマールゲートに漸近していく近似となっているでしょう。\n", + "\n", + "次で、誤った$\\theta$ を選んで、Qiskit で実装した例を示しています。(グローバル位相は無視しています。)\n", + "\n", + "* $\\theta$ の正しい値を決定してください。\n", + "\n", + "* (正しい $\\theta$ を用いているときに)エラーが $n$ が増えるにつれて二次的に減少していくことを示してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "4yqeQMlZQQN_" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q = QuantumRegister(1)\n", + "c = ClassicalRegister(1)\n", + "\n", + "error = {}\n", + "for n in range(1,11):\n", + "\n", + " # 空の量子回路を作る\n", + " qc = QuantumCircuit(q,c)\n", + " \n", + " # 近似アダマールを実装する\n", + " theta = np.pi # ここで theta として誤った値 π を設定\n", + " for j in range(n):\n", + " qc.rx(theta/n,q[0])\n", + " qc.rz(theta/n,q[0])\n", + " \n", + " # 上の近似がどのくらい良いか測る必要があります。これを行う簡単な方法があります。\n", + " # Step 1: 上の近似アダマールをキャンセルする実際のアダマールを使います。\n", + " # 良い近似ならば, 量子ビットは0状態になるでしょう。悪い近似ならば、何かしらの重ね合わせ状態になっているでしょう。\n", + " qc.h(q[0])\n", + " \n", + " # Step 2: 量子回路を実行して、どのくらい測定値 1 が出るのかを調べます。\n", + " # (良い近似ならば)確実に0 が出るはずなので、1 が出る割合は誤差の指標となります。\n", + " qc.measure(q,c)\n", + " shots = 20000\n", + " job = execute(qc, Aer.get_backend('qasm_simulator'),shots=shots)\n", + " try:\n", + " error[n] = (job.result().get_counts()['1']/shots)\n", + " except:\n", + " pass\n", + " \n", + "plot_histogram(error)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Yr5vuU_eQQOU" + }, + "source": [ + "## 3\n", + "\n", + "近似の改善版が次の式から得られます。\n", + "\n", + "\n", + "\n", + "$$H \\equiv \\lim_{n\\rightarrow\\infty} \\left( ~ R_z \\left(\\frac{\\theta}{2n}\\right)~~ R_x\\left(\\frac{\\theta}{n}\\right) ~~ R_z \\left(\\frac{\\theta}{2n}\\right) ~\\right)^n.$$\n", + "\n", + "\n", + "これを実装し、エラーのスケーリングを調べてみてください。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.16.1',\n", + " 'qiskit-aer': '0.7.1',\n", + " 'qiskit-ignis': '0.5.1',\n", + " 'qiskit-ibmq-provider': '0.11.1',\n", + " 'qiskit-aqua': '0.8.1',\n", + " 'qiskit': '0.23.1'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Exercise_4.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/ex3.ipynb b/translations/ja/ch-ex/ex3.ipynb new file mode 100644 index 0000000..91953cb --- /dev/null +++ b/translations/ja/ch-ex/ex3.ipynb @@ -0,0 +1,357 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ベストなANDゲートの構築\n", + "\n", + "全てインポートします:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "CshpxnyNQQNu" + }, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.tools.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # 画像をきれいに見せるため\n", + "from qiskit.providers.aer import noise\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "pmm5uV8cQQN6" + }, + "source": [ + "問題セット1では、量子ゲートを使用してANDゲートを作成しました。 今回も同じことを行いますが、本物のデバイスを対象にします。 本物のデバイスを使用する際には、主に2つの制約があります。 1つは接続性で、もう1つはノイズです。\n", + "\n", + "接続性により、直接実行できる`cx` ゲートがわかります。 たとえば、デバイス`ibmq_5_tenerife` には、0から4までの番号が付けられた5つの量子ビットがあります。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wczhwQrcoQVB" + }, + "outputs": [], + "source": [ + "coupling_map = [[1, 0], [2, 0], [2, 1], [3, 2], [3, 4], [4, 2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "vrk5N1ZZpOmY" + }, + "source": [ + "ここで、`[1,0]` は、量子ビット1をコントロールとして量子ビット0をターゲットとして`cx`を実装できることを示し、`[2,0]`は、量子ビット2をコントロールとして0をターゲットとして持つことができることを示します。 これが、デバイスに直接実装できる`cx`ゲートです。\n", + "\n", + "デバイスの「ノイズ」は、発生してはならないけれども発生してしまうもの、すべての影響の集合です。ノイズが発生すると、出力が必ずしも期待どおりの結果になるとは限りません。量子回路のすべてのプロセス(初期状態の準備、ゲートの適用、出力の測定)に関連してノイズが発生します。ゲートのノイズは、ゲートの種類や量子ビットの違いによって異なる可能性があります。`cx`ゲートは通常、単一の量子ビットゲートよりもノイズが多くなります。\n", + "\n", + "ノイズモデルを使用してノイズをシミュレートすることもできます。 また、本物のデバイスのノイズ測定に基づいてノイズモデルを設定できます。 次のノイズモデルは、`ibmq_5_tenerife`に基づいたものです。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "K9SSOA2RXOUo" + }, + "outputs": [], + "source": [ + "noise_dict = {'errors': [{'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0004721766167523067, 0.0004721766167523067, 0.0004721766167523067, 0.9985834701497431], 'gate_qubits': [[0]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0005151090708174488, 0.0005151090708174488, 0.0005151090708174488, 0.9984546727875476], 'gate_qubits': [[1]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0005151090708174488, 0.0005151090708174488, 0.0005151090708174488, 0.9984546727875476], 'gate_qubits': [[2]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.000901556048412383, 0.000901556048412383, 0.000901556048412383, 0.9972953318547628], 'gate_qubits': [[3]]}, {'type': 'qerror', 'operations': ['u2'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0011592423249461303, 0.0011592423249461303, 0.0011592423249461303, 0.9965222730251616], 'gate_qubits': [[4]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0009443532335046134, 0.0009443532335046134, 0.0009443532335046134, 0.9971669402994862], 'gate_qubits': [[0]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0010302181416348977, 0.0010302181416348977, 0.0010302181416348977, 0.9969093455750953], 'gate_qubits': [[1]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0010302181416348977, 0.0010302181416348977, 0.0010302181416348977, 0.9969093455750953], 'gate_qubits': [[2]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.001803112096824766, 0.001803112096824766, 0.001803112096824766, 0.9945906637095256], 'gate_qubits': [[3]]}, {'type': 'qerror', 'operations': ['u3'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0023184846498922607, 0.0023184846498922607, 0.0023184846498922607, 0.9930445460503232], 'gate_qubits': [[4]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.002182844139394187, 0.9672573379090872], 'gate_qubits': [[1, 0]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.0020007412998552473, 0.9699888805021712], 'gate_qubits': [[2, 0]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.002485439516158936, 0.9627184072576159], 'gate_qubits': [[2, 1]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.0037502825428055767, 0.9437457618579164], 'gate_qubits': [[3, 2]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.004401224333760022, 0.9339816349935997], 'gate_qubits': [[3, 4]]}, {'type': 'qerror', 'operations': ['cx'], 'instructions': [[{'name': 'x', 'qubits': [0]}], [{'name': 'y', 'qubits': [0]}], [{'name': 'z', 'qubits': [0]}], [{'name': 'x', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'x', 'qubits': [1]}], [{'name': 'y', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'y', 'qubits': [1]}], [{'name': 'z', 'qubits': [1]}], [{'name': 'x', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'y', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'z', 'qubits': [0]}, {'name': 'z', 'qubits': [1]}], [{'name': 'id', 'qubits': [0]}]], 'probabilities': [0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.0046188825262438934, 0.9307167621063416], 'gate_qubits': [[4, 2]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9372499999999999, 0.06275000000000008], [0.06275000000000008, 0.9372499999999999]], 'gate_qubits': [[0]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9345, 0.0655], [0.0655, 0.9345]], 'gate_qubits': [[1]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.97075, 0.029249999999999998], [0.029249999999999998, 0.97075]], 'gate_qubits': [[2]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.9742500000000001, 0.02574999999999994], [0.02574999999999994, 0.9742500000000001]], 'gate_qubits': [[3]]}, {'type': 'roerror', 'operations': ['measure'], 'probabilities': [[0.8747499999999999, 0.12525000000000008], [0.12525000000000008, 0.8747499999999999]], 'gate_qubits': [[4]]}], 'x90_gates': []}\n", + "noise_model = noise.noise_model.NoiseModel.from_dict( noise_dict )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cR0-hEoSqgr8" + }, + "source": [ + "デバイス上で直接実行するには、IBMQアカウントが必要となり、プログラム内でIBMQアカウントにサインインする必要があります。今回は、IBMQアカウントにサインインする代わりに、上で定義された5量子ビットデバイスのシミュレーションを使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "MTQMjOzOWuw8" + }, + "outputs": [], + "source": [ + "qr = QuantumRegister(5, 'qr')\n", + "cr = ClassicalRegister(1, 'cr')\n", + "backend = Aer.get_backend('qasm_simulator')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "e_p8IgvCrd5a" + }, + "source": [ + "ここで、`AND`関数を定義しますが、問題セット1での定義といくつか違いがあります。違いの一つは、5量子ビット回路で定義されているため、`input1`、`input2`、および出力のエンコードに5量子ビットのどれを使用するかを決定する必要があることです。 もう一つの違いは、この計算を10000回繰り返したときに、各出力が検出される回数のヒストグラムを出力にしていることです。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "4yqeQMlZQQN_" + }, + "outputs": [], + "source": [ + "def AND (input1,input2, q_1=0,q_2=1,q_out=2):\n", + " # q_1 が入力1の量子ビット\n", + " # q_2 が入力2の量子ビット\n", + " # q_out が出力\n", + " \n", + " qc = QuantumCircuit(qr, cr)\n", + " \n", + " # 量子ビットq1, q2を入力ビットとして準備\n", + " if input1=='1':\n", + " qc.x( qr[ q_1 ] )\n", + " if input2=='1':\n", + " qc.x( qr[ q_2 ] )\n", + " \n", + " qc.ccx(qr[ q_1 ],qr[ q_2 ],qr[ q_out ]) # ANDはcが必要です\n", + " qc.measure(qr[ q_out ],cr[0]) # 量子ビット1からの出力を測定\n", + " \n", + " # 回路はシミュレーターで実行されますが、Tenerife のノイズと接続性も再現されるように実行されます \n", + " job = execute(qc, backend, shots=10000, noise_model=noise_model,\n", + " coupling_map=coupling_map,\n", + " basis_gates=noise_model.basis_gates)\n", + " output = job.result().get_counts()\n", + " \n", + " return output" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "i7qCHniitYIZ" + }, + "source": [ + "たとえば、両方の入力が`0`の場合の結果は次のとおりです。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 339 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 3929, + "status": "ok", + "timestamp": 1553510818721, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "ZPRa9f8LtYeX", + "outputId": "58cc4272-5508-40f4-9ab9-0b81285b3c1f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'1': 991, '0': 9009}\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = AND('0','0')\n", + "print( result )\n", + "plot_histogram( result )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "KrrEj0u-SSHq" + }, + "source": [ + "すべての結果を比較して、最も信頼性の低いものを見つけます。\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 260 + }, + "colab_type": "code", + "executionInfo": { + "elapsed": 10524, + "status": "ok", + "timestamp": 1553510825335, + "user": { + "displayName": "James Wootton", + "photoUrl": "https://lh4.googleusercontent.com/-XnQWpq03OeQ/AAAAAAAAAAI/AAAAAAAAAi0/qKYJsrtH0Oo/s64/photo.jpg", + "userId": "11461323495081829290" + }, + "user_tz": -60 + }, + "id": "5jbzYvA5f5bD", + "outputId": "92b2a3c0-09be-4fe2-9913-acb3d9a87464" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Probability of correct answer for inputs 0 0\n", + "0.9035\n", + "\n", + "Probability of correct answer for inputs 0 1\n", + "0.8978\n", + "\n", + "Probability of correct answer for inputs 1 0\n", + "0.8995\n", + "\n", + "Probability of correct answer for inputs 1 1\n", + "0.9046\n", + "\n", + "The lowest of these probabilities was 0.8978\n" + ] + } + ], + "source": [ + "worst = 1\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " print('\\nProbability of correct answer for inputs',input1,input2)\n", + " prob = AND(input1,input2, q_1=0,q_2=1,q_out=2)[str(int( input1=='1' and input2=='1' ))]/10000\n", + " print( prob )\n", + " worst = min(worst,prob)\n", + "print('\\nThe lowest of these probabilities was',worst)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "5_YtLn0Uue94" + }, + "source": [ + "上の`AND` 関数は、`ccx`ゲートを使用して、必要な操作を実装しています。 しかし、あなたはもう独自の`AND` 関数を作る方法を知っています。 上のようにして求めた確率の中で最も低い確率が、単純な`ccx`ゲートよりも優れている`AND` を実装してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Exercise_5.ipynb", + "provenance": [ + { + "file_id": "1DK-wi3r3dwzfxLEAuVV7M_KUCrVGR1eK", + "timestamp": 1552904885600 + }, + { + "file_id": "1E3Fczlf2qyCWi-IEWOU00b71e5rx0Jwa", + "timestamp": 1552904169221 + } + ], + "version": "0.3.2" + }, + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/translations/ja/ch-ex/hello-qiskit.ipynb b/translations/ja/ch-ex/hello-qiskit.ipynb new file mode 100755 index 0000000..eba959a --- /dev/null +++ b/translations/ja/ch-ex/hello-qiskit.ipynb @@ -0,0 +1,2403 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# こんにちはQiskitゲーム" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットと量子ゲートを使い始めるための簡単なパズル。\n", + "\n", + "# レベル 1: ビットから始める\n", + "\n", + "このテキストブックの他の章と同様に、このドキュメントはJupyter notebookです。ただし、他の多くの章とは異なり、実際に実行して機能させる必要があります。\n", + "\n", + "これまでJupyter notebookを使用したことがなくても心配しないでください。これは、以下のように、コードが入った灰色のボックスがたくさん表示されることを意味します。 これらはセルとして知られています。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Hello! I'm a code cell\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "セル内でコードを実行する方法は、使用しているデバイスと入力方法によって異なります。ほとんどの場合、セルをクリックして**ShiftとEnterキー**を押す必要があります。ただし、QiskitテキストブックのWebサイトでこれを実行している場合は、下の`RUN`ボタンをクリックするだけです。\n", + "\n", + "以下のセルに対してこれを実行することから始めます(実行には1〜2秒かかります)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Set up started...')\n", + "from qiskit_textbook.games import hello_quantum\n", + "print('Set up complete!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このJupyter notebookの残りのセルには、解くためのパズルを設定するコードが含まれています。パズルを解くには、セルを実行するだけです。パズルを再開するには、パズルを再実行するだけです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 1\n", + "\n", + "### 導入\n", + "量子コンピューターは*量子ビット*に基づいています:ビットの量子力学のルールに従います。しかし、正確にはビットとは何ですか?そして、それらはコンピューターでどのように使用されていますか?\n", + "\n", + "ビットの特徴は、2つの可能な出力値があることです。これらは、`1`と`0`、または「オン」と「オフ」、または「真」と「偽」と呼ぶことができます。私たちが使用する名前は重要ではありません。重要な点は、2つあるということです。\n", + "\n", + "ビットに慣れるために、ビットで遊んでみましょう。ビットでできる最も簡単なことは(そのままにしておく以外に)、その値を反転することです。この単純な操作に派手な名前を付けます。これは`NOT`ゲートと呼ばれます。\n", + "\n", + "以下で試してみてください。\n", + "\n", + "### 練習問題\n", + "*`NOT`ゲートを3回使用してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {}\n", + "allowed_gates = {'0': {'NOT': 3}, '1': {}, 'both': {}}\n", + "vi = [[1], False, False]\n", + "qubit_names = {'0':'the only bit', '1':None}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "ここでは、オン(白)またはオフ(黒)の円を使用してビットを視覚化しました。`NOT`ゲートの効果は、ビットの2つの状態を切り替えて、オンとオフを切り替えることでした。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 2\n", + "\n", + "### 導入\n", + "1つだけではなく2つのビットで遊ぶ方が面白いです。ここに遊ぶための別のものがあります。以前と同じように見えます。しかし、それは別のビットなので、別の場所にあります。\n", + "\n", + "### 練習問題\n", + "* もう一方のビットをオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {}\n", + "allowed_gates = {'0': {}, '1': {'NOT': 0}, 'both': {}}\n", + "vi = [[], False, False]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "これで、コンピューティングの最も基本的な構成要素である`NOT`ゲートをマスターしました。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 3\n", + "\n", + "### 導入\n", + "「ゲート」という言葉を使用して、量子ビットを操作するために使用できる簡単なツールを説明します。`NOT`ゲートは最も単純な例です。しかし、ビットを使って面白いことをするためには、単にオンとオフを切り替える以上のことをする必要があります。\n", + "\n", + "もう少し洗練されたゲートは`CNOT`と呼ばれ、「controled-NOT」の略です。これはビットのペアで使用されます。\n", + "\n", + "「コントロール」となるビットの1つを選択します。これにより、CNOTが実際に何かを実行するかどうかが決まります。もう1つのビットは「ターゲット」です。簡単に言えば、CNOTはターゲットビットに対して`NOT`を実行しますが、コントロールビットがオンの場合に限ります。\n", + "\n", + "これを理解する最良の方法は、試してみることです。\n", + "\n", + "### 練習問題\n", + "\n", + "*CNOTを使用して、右側のビットをオンにします。\n", + "\n", + "***注**:ビットを選択するように求められた場合は、どちらをターゲットビットにするかを選択しています。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '0']]\n", + "success_condition = {'IZ': -1.0}\n", + "allowed_gates = {'0': {'CNOT': 0}, '1': {'CNOT': 0}, 'both': {}}\n", + "vi = [[], False, False]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 4\n", + "\n", + "### 導入・導入\n", + "私たちが実行するプログラムはすべて、多くの量子ビット上の多くのゲートで構成されています。これに向けたステップとして、`CNOT`をいくつか使用する必要があるものを試してみましょう。\n", + "\n", + "### 練習問題\n", + "\n", + "* 複数のCNOTを使用して、左ビットをオフにし、右ビットをオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '0']]\n", + "success_condition = {'ZI': 1.0, 'IZ': -1.0}\n", + "allowed_gates = {'0': {'CNOT': 0}, '1': {'CNOT': 0}, 'both': {}}\n", + "vi = [[], False, False]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "素晴らしい!\n", + "\n", + "これらの種類の操作は、あらゆるコンピューティングがコンパイルするものです。より多くのビットと制御制御`NOT`ゲートがあれば、テトリスから自動運転車まですべてを構築できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 5\n", + "\n", + "### 導入\n", + "お気づきかもしれませんが、パズルボードにはたくさんの空きスペースがあります。これは、ビットに関するより多くの情報を視覚化するために使用できるためです。たとえば、ビット値がランダムなプロセスによって生成された場合はどうなるでしょうか?\n", + "\n", + "0または1のビット値を表すために黒と白の円を使用しました。したがって、等確率で0または1が得られるランダムビットの場合、灰色の円を使用します。\n", + "\n", + "これで、ゲートがこのランダム性をどのように操作するかを見ることができます。\n", + "\n", + "### 練習問題\n", + "* CNOTを使用して、右側のビットをランダムにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0']]\n", + "success_condition = {'IZ': 0.0}\n", + "allowed_gates = {'0': {'CNOT': 0}, '1': {'CNOT': 0}, 'both': {}}\n", + "vi = [[], False, False]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "\n", + "\n", + "素晴らしいでしょう!\n", + "\n", + "ここで何が起こったのか考えてみましょう。ランダムにオンまたはオフのいずれかであるビットによってコントロールされる`CNOT`を実行しました。オフの場合、`CNOT`は何もせず、右ビットはオフのままです。左側のビットがオンの場合、`CNOT`は右側のビットでも`NOT`を実行してオンにします。\n", + "\n", + "このプロセスは、左ビットのランダム値を右に効果的にコピーします。したがって、両方からの出力はランダムに見えますが、重要な特性があります。それらは常に互いに同じランダムな結果を出力します。\n", + "\n", + "上のパズルの終わりに、2つのビットは2つの灰色の円で表されました。これは、両方がランダムであることを示していますが、常に一致しているという事実については何も教えてくれません。ビットが独立してランダムである場合、またはランダムであるが常に一致しない場合にも、同じ2つの灰色の円が使用されます。\n", + "この違いを見分けるために,問題ボードに何かを追加する必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 6\n", + "\n", + "### 導入\n", + "下のパズルでは、新しい円が表示されます。\n", + "\n", + "これまでに見た円とは異なり、新しいビットを表すものではありません。代わりに、2ビットが一致するかどうかを示します。\n", + "\n", + "それらが一致することが確実であるとき、それはオフになります。それらが一致しないことが確実な場合、それはオンになります。それらの一致と不一致がランダムである場合、それは灰色になります。\n", + "\n", + "### 練習問題\n", + "\n", + "* 2つのビットを常に一致させないようにします(つまり、真ん中の円を白にします)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [['h', '0']]\n", + "success_condition = {'ZZ': -1.0}\n", + "allowed_gates = {'0': {'NOT': 0, 'CNOT': 0}, '1': {'NOT': 0, 'CNOT': 0}, 'both': {}}\n", + "vi = [[], False, True]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 7\n", + "\n", + "### 導入\n", + "これで、ビットについて知る必要があるすべてがほぼ必要であることがわかりました。先に進む前に、もう1つ演習を行いましょう。\n", + "\n", + "### 練習問題\n", + "* 右側のビットをオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '1']]\n", + "success_condition = {'IZ': -1.0}\n", + "allowed_gates = {'0': {'NOT': 0, 'CNOT': 0}, '1': {'NOT': 0, 'CNOT': 0}, 'both': {}}\n", + "vi = [[], False, True]\n", + "qubit_names = {'0':'the bit on the left', '1':'the bit on the right'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "次に、ビットが量子になったときに何が起こるかを見てみましょう。量子ビットの時間です!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# レベル 2: 基本的な単一量子ビットゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 1\n", + "\n", + "### 導入\n", + "量子力学の講義から始める代わりに、ここで遊ぶための量子ビットがあります。`X`と呼ばれる最も単純な量子ビットゲートを試してみてください。\n", + "\n", + "### 練習問題\n", + "* `X`ゲートを3回使用して、何が起こるかを確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [ [\"x\",\"0\"] ]\n", + "success_condition = {\"ZI\":1.0}\n", + "allowed_gates = { \"0\":{\"x\":3}, \"1\":{}, \"both\":{} }\n", + "vi = [[1],True,True]\n", + "qubit_names = {'0':'the only qubit', '1':None}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "このパズルはとてもなじみのあるものに思えたはずです。何も変化しなかった円があったこと以外は、ビットの最初のものとまったく同じでした。\n", + "`X`ゲートは`NOT`ゲートとまったく同じ効果がありました。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 2\n", + "\n", + "### 導入\n", + "さきほどのパズルには2つの円がありました。これらは異なるビットではなく、両方とも同じ量子ビットを表しています。\n", + "\n", + "量子ビットはビットの量子バージョンです。それらはビットと同じプロパティのいくつかを持っていますが、いくつかの追加機能も持っています。\n", + "\n", + "ビットと同じように、量子ビットも使える値は2つに制限されています。量子ビットから出力を抽出すると、0または1の単純なビット値が得られます。ただし、量子ビットでは、このビットを抽出するための方法が複数あります。得られる結果は、使用する方法によって異なります。\n", + "\n", + "さきほどのパズルの2つの円は、同じ量子ビットからビットを取り出す2つの異なる手法を表しています。それらはXおよびZ測定と呼ばれます。下の円はZ測定の出力を表し、上の円はX出力を表します。\n", + "\n", + "円の色は以前とまったく同じように使用されます。円が黒の場合、対応する出力は値`0`になります。白い円は`1`を取得することを意味します。\n", + "\n", + "### 練習問題\n", + "* Z出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '0']]\n", + "success_condition = {'ZI': 1.0}\n", + "allowed_gates = {'0': {'x': 0}, '1': {}, 'both': {}}\n", + "vi = [[1], True, True]\n", + "qubit_names = {'0':'the only qubit', '1':None}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "量子ビットからビットを抽出するプロセスは、「測定」と呼ばれます。\n", + "\n", + "X出力とZ出力の両方を個別に抽出することはできません。1つだけ選択する必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 3\n", + "\n", + "### 導入\n", + "このパズルでは、別の量子ビットが表示されます。これもまた、2つの円で表される内部動作を持ちます。この量子ビットの場合、これらの円はパズルボードの右側にあります。\n", + "\n", + "### 練習問題\n", + "* もう片方の量子ビットのZ出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '1']]\n", + "success_condition = {'IZ': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'x': 0}, 'both': {}}\n", + "vi = [[0], True, True]\n", + "qubit_names = {'0':None, '1':'the other qubit'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "これから、プログラムで使用される名前で量子ビットの呼び出しを開始します。左側の量子ビットは`q[0]`になり、右側の量子ビットは`q[1]`になります。\n", + "\n", + "また、Z出力およびX出力という用語は広く使用されていないことに注意してください。「Z測定の出力」などと言うのがより一般的です。しかし、それはこれらのパズルにとって少し長い表現です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 4\n", + "\n", + "### 導入\n", + "次に、新しいゲートであるHゲートを試してみましょう。\n", + "\n", + "これは、単純なビットでは不可能なことです。それは、それが適用される量子ビットの2つの円を交換する効果があります。\n", + "\n", + "これを素敵なアニメーション形式で見たい場合は、[Hello Quantumアプリ](https://helloquantum.mybluemix.net/)をチェックしてください。しかし、ここでは、3回繰り返すという古いトリックでこれをテストしてください。\n", + "\n", + "### 練習問題\n", + "* `H`ゲートを3回使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'ZI': 0.0}\n", + "allowed_gates = {'0': {'h': 3}, '1': {}, 'both': {}}\n", + "vi = [[1], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "ここから先は、下のコードをパズルの下に置き、量子プログラムを表示します。\n", + "\n", + "これらは、実際の量子コンピューターで実行できる実際のQiskitプログラムです。それらは、いわゆる回路図で表すこともできます。量子プログラムの回路図を表示するには、以下のコードセルを実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 5\n", + "\n", + "### 導入\n", + "Z出力が一定の場合(完全にオフまたはオンの場合)、`X`ゲートは単に値を反転します。しかし、さきほどのパズルで見たように、Z出力がランダムである場合はどうなりますか?この練習問題で、その答えがわかります。\n", + "\n", + "### 練習問題\n", + "* Z出力を完全にオフにします。 `h`ゲートはいくつでも使用できますが、`x`は正確に3回使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '1']]\n", + "success_condition = {'IZ': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'x': 3, 'h': 0}, 'both': {}}\n", + "vi = [[0], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "たとえそれをひっくり返したとしても、ランダムな結果はただのランダムな結果であることがわかります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 6\n", + "\n", + "### 導入\n", + "`x`ゲートがZ出力を反転することを確認しましたが、X出力には影響しません。そのためには、新しいゲート、`z`ゲートが必要です。\n", + "\n", + "### 練習問題\n", + "* X出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0'], ['z', '0']]\n", + "success_condition = {'XI': 1.0}\n", + "allowed_gates = {'0': {'z': 0, 'h': 0}, '1': {}, 'both': {}}\n", + "vi = [[1], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "`x`ゲートはZ出力を反転し、`z`ゲートはx出力を反転します。今のところ、これは物事に名前を付ける奇妙な方法のように思えるかもしれません。しかし、量子コンピューティングについてさらに学ぶにつれて、それは意味を持つようになるでしょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 7\n", + "\n", + "### 導入\n", + "ゲートを組み合わせることで、新しい効果を得ることができます。簡単な例として、`z`と`h`を組み合わせることで、`x`の作用をすることができます。\n", + "\n", + "### 練習問題\n", + "* `x`ゲートを使用せずにZ出力をオンにします" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'ZI': -1.0}\n", + "allowed_gates = {'0': {'z': 0, 'h': 0}, '1': {}, 'both': {}}\n", + "vi = [[1], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 8\n", + "\n", + "### 導入\n", + "Z出力が完全にオンまたはオフの場合、X出力は常にランダムであることに気付くかもしれません。これは、量子ビットがそれぞれの出力について同時に確実になることは決してないためです。それらが一方について確実である場合、もう一方はランダムでなければなりません。\n", + "\n", + "もし上記ではない場合、Z出力とX出力を使用して2ビットを格納できてしまいます。つまり量子ビットが持っているより多くのメモリーを持つことになってしまいます。複数の方法で出力を抽出できるという事実にもかかわらず、それでも、量子ビットにビット以上を格納することは許可されていません。\n", + "\n", + "### 練習問題\n", + "* X出力をオフにし、Z出力をランダムにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0']]\n", + "success_condition = {'IX': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[0], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 9\n", + "\n", + "## 導入\n", + "量子ビットの限られた確実性は、2つの出力間で共有することもできます。たとえば、両方の出力を、それらが提供する出力についてほぼ確実(完全に確実ではない)にすることで妥協することができます。\n", + "\n", + "さまざまなグレーの色合いを使用して、これを視覚化します。円が暗いほど、出力は`0`になる可能性が高くなります。円が明るいほど、出力は`1`になる可能性が高くなります。\n", + "\n", + "\n", + "### 練習問題\n", + "* `q[1]`の2つの円を両方とも明るい灰色にします。これは、`1`を出力する可能性が高いことを意味しますが、確実ではありません。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['ry(pi/4)', '1']]\n", + "success_condition = {'IZ': -0.7071, 'IX': -0.7071}\n", + "allowed_gates = {'0': {}, '1': {'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[0], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 10\n", + "\n", + "### 導入\n", + "これで基本的なツールがわかったので、両方の量子ビットに同時に取り組むことができます。\n", + "\n", + "### 練習問題\n", + "* 両方のZ出力をランダムにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '1']]\n", + "success_condition = {'ZI': 0.0, 'IZ': 0.0}\n", + "allowed_gates = {'0': {'x': 0, 'z': 0, 'h': 0}, '1': {'x': 0, 'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, False]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "ここでの各Z出力は、ランダムに`0`または`1`を出力します。しかし、それらの出力は相関しますか? 反相関? 完全に無関係ですか?\n", + "\n", + "ビットで行ったように、いくつかの追加の円を使用してこの情報を追跡します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 11\n", + "\n", + "### 導入\n", + "このパズルでは、4つの新しい円が表示されます。そのうちの1つは、レベル1ですでに見たものです。そこでは、2つのビット値が確実に一致するか(黒)、一致しないか(白)を追跡していました。ここでは、両方の量子ビットのZ出力に対して同じ作用をします。\n", + "\n", + "### 練習問題\n", + "* Z出力が確実に一致しないようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h','0'],['h','1']]\n", + "success_condition = {'ZZ': -1.0}\n", + "allowed_gates = {'0': {'x': 0, 'z': 0, 'h': 0}, '1': {'x': 0, 'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 12\n", + "\n", + "### 導入\n", + "一番上の新しい円にも同様の作用があります。この場合、両方の量子ビットのX出力について一致する確率と一致しない確率を追跡します。\n", + "\n", + "### 練習問題\n", + "* X出力が確実に一致するようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x','0']]\n", + "success_condition = {'XX': 1.0}\n", + "allowed_gates = {'0': {'x': 0, 'z': 0, 'h': 0}, '1': {'x': 0, 'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "この情報を表すのがこの新しい円である理由がわからない場合は、一方の量子ビットのX出力から伸びる行と、もう一方の量子ビットのX出力から伸びる別の行について考えてみてください。最上部の円は、これら2つの行が交わる場所にあります。これが、2つのX出力間の一致を表す理由です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 13\n", + "\n", + "### 導入\n", + "説明する必要のある新しい円がまだ2つあります。1つは、`q[0]`からのZ出力行が`q[1]`からのX出力行と交わる場所です。これは、`q[0]`のZ出力が`q[1]`からのX出力と一致するかどうかを示します。もう1つも同じですが、`q[0]`がX出力と`q[1]`がZ出力です。\n", + "\n", + "### 練習問題\n", + "* `q[0]`のX出力が`q[1]`のZ出力と一致しないことを確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'XZ': -1.0}\n", + "allowed_gates = {'0': {'x': 0, 'z': 0, 'h': 0}, '1': {'x': 0, 'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 14\n", + "\n", + "### 導入\n", + "`x`、`z`、`h`ゲートが新しい円にどのように影響するかに注目してください。具体的には、xゲートは、単一のZ出力だけでなく、それらの行全体に影響を与えます。つまり、各円を黒から白(または暗い色から明るい色)に、またはその逆に反転します。\n", + "\n", + "### 練習問題\n", + "* 2つのZ出力をオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['ry(-pi/4)', '1'], ['ry(-pi/4)','0']]\n", + "success_condition = {'ZI': -0.7071, 'IZ': -0.7071}\n", + "allowed_gates = {'0': {'x': 0}, '1': {'x': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "次のパズルで分かるように、Zゲートは同じような方法でX出力の列に影響します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 15\n", + "\n", + "### 導入\n", + "以前、`h`ゲートが円のペアを交換する方法を見てきました。これと同じように行のペアに影響を与えます。行全体が反転されるまで、円の各ペアを反転します。再度、[Hello Quantumアプリ](https://helloquantum.mybluemix.net/)で素敵なアニメーションをチェックすることをお勧めします。\n", + "\n", + "### 練習問題\n", + "* X出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '1'], ['x','0']]\n", + "success_condition = {'XI':1, 'IX':1}\n", + "allowed_gates = {'0': {'z': 0, 'h': 0}, '1': {'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 結果\n", + "これで、2つの量子ビットがどのように見えるか、およびそれらを個別に操作する方法の基本を理解しました。しかし、2つの量子ビットゲートを使い始めると、本当の楽しみが出てきます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# レベル 3: 2量子ビットのゲート" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### パズル 1\n", + "\n", + "### 導入\n", + "ビットの演習では、`CNOT`ゲートを使用しました。量子ビットの場合、NOTの量子バージョンとしてxを使用して、同様のゲートがあります。このため、Qiskitプログラムでは`cx`と呼びます。\n", + "\n", + "従来の`CNOT`と同様に、`cx`ゲートには「コントロール」と「ターゲット」があります。コントロールのZ出力を調べ、その結果で、xがターゲット量子ビットに適用されるかどうかを決定します。\n", + "\n", + "このゲートを適用すると、選択した量子ビットがターゲットとして機能します。その場合、他の量子ビットがコントロールになります。\n", + "\n", + "### 練習問題\n", + "* `cx`を1回か2回使用して、q[1]のZ出力をオンにし、q[0]のZ出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [['x', '0']]\n", + "success_condition = {'ZI': 1.0, 'IZ': -1.0}\n", + "allowed_gates = {'0': {'cx': 0}, '1': {'cx': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 2\n", + "\n", + "### 導入\n", + "`cx`ゲートだけでなく、`cz`もあります。これは同じことを行いますが、`x`ではなく`z`をターゲットに適用する可能性がある点が異なります。\n", + "\n", + "### 練習問題\n", + "* q [0]のX出力をオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0'],['x', '1']]\n", + "success_condition = {'XI': -1.0, 'IZ': 1.0}\n", + "allowed_gates = {'0': {'cz': 0}, '1': {}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 2b\n", + "\n", + "### 導入\n", + "量子ゲートの興味深い点は、量子ゲートが何をしているのかを説明する方法が複数あることが多いということです。これらの説明は完全に互換性がないように見える場合がありますが、同じ操作です。\n", + "\n", + "たとえば、`cz`は、*ターゲット*の潜在的なZ出力に応じて、*コントロール*量子ビットにzを適用するゲートとして説明することもできます。以前とまったく同じ説明ですが、量子ビットの役割が逆になっています。それにもかかわらず、それは等しく真実です。\n", + "\n", + "### 練習問題\n", + "* 前回の練習問題と同じですが、量子ビットが逆になっています。ただし、czは以前と同じ方法です。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '1'],['x', '0']]\n", + "success_condition = {'IX': -1.0, 'ZI': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'cz': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 3\n", + "\n", + "### 導入\n", + "ここで、czについて別の説明をします。`h`ゲートと同様に、円が入れ替わっていると考えることができます。czの作用は以下のようなものです。\n", + "\n", + "- q[0]のX出力を右上の隣接する円と交換します。\n", + "- q[1]のX出力(左上の隣の場合)でも同じことを行います。czはまた、盤面の上部にある円で何か奇妙なことをしますが、それは後で解決される謎です!\n", + "ここでも、[Hello Quantumアプリ](https://helloquantum.mybluemix.net/)で素晴らしいアニメーションをみることができます。\n", + "\n", + "### 練習問題\n", + "* コントロールとして各量子ビットで2回`cz`を実行し、何が起こるかを確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [['h', '0'],['x', '1'],['h', '1']]\n", + "success_condition = { }\n", + "allowed_gates = {'0':{'cz': 2}, '1':{'cz': 2}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "これで、`cz`について非常に役立つことがわかりました。コントロールとしてどの量子ビットを選択しても、`cz`はどちらの場合も同じことを行います。このため、これからは`cz`のコントロール量子ビットを選択する必要はありません。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 3b\n", + "\n", + "### 導入\n", + "前述のように、XおよびZ出力は、量子ビットから出力を取得する2つの方法に対応します。XおよびZ測定です。これらの名前が示すように、Y測定として知られる3番目の方法もあります。\n", + "\n", + "これらのパズルでは、物事を少し簡単にするために、Y測定をほとんど無視します。ただし、量子ビットの完全な説明については、Y出力がどのように見えるかを追跡する必要があります。これは、各量子ビットのY出力に対して、さらに2、3行の円を追加することを意味します。\n", + "\n", + "次の演習は、Y出力行が表示されることを除いて、前回とまったく同じです。これらを使用すると、最後のパズルで見られた奇妙な効果はまったく奇妙になりません。ご自分の目で確かめてみてください!\n", + "\n", + "### 練習問題\n", + "* `cz`を2回実行して、何が起こるかを確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0'],['x', '1'],['h', '1']]\n", + "success_condition = { }\n", + "allowed_gates = {'0': {}, '1': {}, 'both': {'cz': 2}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='y')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "ここでは、`cz`によって行われた3番目の円の交換が表示されます。上部の円(両方の量子ビットのX出力の相関を表す)が中央の円(両方の量子ビットのY出力の相関を表す)と交換されます。\n", + "\n", + "量子ビットの説明が完全ではなかったという理由だけで、中央の行が欠落しているとき、これは奇妙に見えました。それでも、Y出力のない単純な盤面を引き続き使用します。`hello_quantum.run_game()`で`mode = 'y'引数`を使用すると自分でY出力を追加できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 4\n", + "\n", + "### 導入\n", + "前の練習問題では、`z`ゲートといくつかの`h`ゲートから`x`を作成しました。同様に、`cz`といくつかの`h`から`cx`を構築することも可能です。\n", + "\n", + "### 練習問題\n", + "* q[1]のZ出力をオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '0']]\n", + "success_condition = {'IZ': -1.0}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0}, 'both': {'cz': 0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "`cz`とは異なり、`cx`は対称ではありません。代わりに、ターゲットがq[0]であるcxを作成したい場合は、代わりにq[0]で`h`を実行する必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 5\n", + "\n", + "### 導入\n", + "`cz`の「逆方向性」を解釈することができました:つまり、ターゲット量子ビットがコントロール量子ビットの役割を果たし、また、その逆の役割も果たすという解釈です。`cx`でも同じことをします。ただし、このゲートには対称効果がないため、これはもう少し注意が必要です。\n", + "\n", + "具体的には、コントロールのZ出力の実行内容に応じてターゲットに対してxを実行すると考えるのではなく、ターゲットのX出力の実行内容に応じてコントロールに対してzを実行すると考えることができます。\n", + "\n", + "この演習では、ターゲットがコントロールを行っているように見え、コントロールがターゲットであることがわかります。\n", + "\n", + "### 練習問題\n", + "* `q[0]`のX出力をオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h', '0'],['h', '1']]\n", + "success_condition = {'XI': -1.0, 'IX': -1.0}\n", + "allowed_gates = {'0': {}, '1': {'z':0,'cx': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "`cx`がどのように機能するかについてのこれらの2つの異なる話は矛盾しているように見えるかもしれませんが、それらは等しく有効な説明です。量子ゲートの奇妙で素晴らしい性質の素晴らしい例です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 6\n", + "\n", + "### 導入\n", + "これで、`cx`のこれら2つの解釈がわかったので、非常に便利なことを行うことができます。\n", + "\n", + "このパズルでは、`q[1]`をターゲットとして`cx`を取得しますが、`q[0]`をターゲットとして`cx`が必要になります。いくつかの`h`ゲートのヘルプを使用して同じ効果を得る方法を理解できるかどうかを確認してください。\n", + "\n", + "### 練習問題\n", + "* `q[1]`のZ出力を維持しますが、`q[0]`のZ出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [('x','0'),('x','1')]\n", + "success_condition = {'ZI': 1.0,'IZ': -1.0}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0,'cx':0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "これらの練習問題から何かを覚えているなら、それはおそらくこれであるはずです。実際の量子ビットデバイスでは、`cx`を実行できる方法を制限するのが一般的であるため、それらを方向転換する機能は非常に便利です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 7\n", + "\n", + "### 導入\n", + "もう1つの有用な量子ゲートは`swap`です。これは、名前が示すとおり、2つの量子ビットの状態を交換します。Qiskitでは単に`swap`コマンドを呼び出すことができますが、このゲートを`cz`または`cx`ゲートから作成する方が興味深いです。\n", + "\n", + "### 練習問題\n", + "* 2つの量子ビットを交換します。\n", + " - q[0]のZ出力を白、X出力を灰色にします。\n", + " - q[1]のZ出力を濃い灰色にし、X出力を薄い灰色にします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['ry(-pi/4)','0'],['ry(-pi/4)','0'],['ry(-pi/4)','0'],['x','0'],['x','1']]\n", + "success_condition = {'ZI': -1.0,'XI':0,'IZ':0.7071,'IX':-0.7071}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0}, 'both': {'cz': 0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "このパズルの解決策は、汎用のswapではない可能性があることに注意してください。今回の解決策を、次のパズルの解決策と比較してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 8\n", + "\n", + "#### 導入\n", + "これは、`swap`を作成するというアイデアに基づいた別のパズルです。\n", + "\n", + "#### 練習問題\n", + "* 2つの量子ビットを交換します。\n", + " * q[0]のX出力を黒にします。\n", + " * q[1]のZ出力を白にします。\n", + "* そして、3つの`cz`ゲートでそれを行います" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x','0'],['h','1']]\n", + "success_condition = {'XI':1,'IZ':-1}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0}, 'both': {'cz':3}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names,shots=2000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 9\n", + "\n", + "#### 導入\n", + "また別の`swap`ベースのパズル。\n", + "\n", + "#### 練習問題\n", + "* 2つの量子ビットを交換します。\n", + " * q[0]のZ出力をオンにします。\n", + " * Z出力q[1]をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [['x','1']]\n", + "success_condition = {'IZ':1.0,'ZI':-1.0}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0}, 'both': {'cz':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names,shots=2000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# レベル 4:クリフォードゲートを越えて" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 1a\n", + "\n", + "### 導入\n", + "これまでに見たゲートは「クリフォードゲート」と呼ばれています。それらは、量子コンピューターで情報を移動および操作するために非常に重要です。ただし、クリフォードゲートのみを使用して標準的なコンピューターよりも優れたパフォーマンスを発揮できるアルゴリズムを作成することはできません。新しいゲートが必要です。\n", + "\n", + "このパズルで試すことができます。数回実行して、何ができるかを確認してください。\n", + "\n", + "### 練習問題\n", + "* `ry(pi/4)`をq[0]に4回適用します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {}\n", + "allowed_gates = {'0': {'ry(pi/4)': 4}, '1': {}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "よくできました!残りの問題で、これを理解するために新しいことを試してみましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 1b\n", + "\n", + "### 導入\n", + "今見たゲートをよりよく理解するために、量子ビットを視覚化するために少し異なる方法を使用します。この場合、確実に`0`になる出力は、白い円ではなく白い線で表されます。`1`を与えることが確実な出力は、黒い円ではなく黒い線になります。ランダムな出力の場合、灰色の円ではなく、一部が白で一部が黒の線が表示されます。\n", + "\n", + "これは、この新しい視覚化に慣れるのに役立つ古い練習問題です。\n", + "\n", + "### 練習問題\n", + "* X出力が確実に一致するようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x','0']]\n", + "success_condition = {'XX': 1.0}\n", + "allowed_gates = {'0': {'x': 0, 'z': 0, 'h': 0}, '1': {'x': 0, 'z': 0, 'h': 0}, 'both': {}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 1c\n", + "\n", + "### 導入\n", + "このパズルでは、`ブロッホ`で新しいことができることがわかります。これは実際にはゲートではなく、量子プログラムには表示されません。代わりに、各量子ビットの2本の線を互いに重ねて描画することにより、見た目を変更するだけです。また、それらのレベルが交差するポイントを配置します。ブロッホを使用すると、`ry(pi / 4)`がどのように機能するかを理解できるはずです。\n", + "\n", + "### 練習問題\n", + "* `q[0]`の一番下の行を完全にオンにして、`ブロッホ`ゲートを使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'ZI': -1.0}\n", + "allowed_gates = {'0': {'bloch':1, 'ry(pi/4)': 0}, '1':{}, 'both': {'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 終結\n", + "ポイントをたどった場合、`ry(pi/4)`の効果はポイントを$\\pi/4$ラジアン(45度)回転させることであることに気付くはずです。\n", + "\n", + "線のレベルもそれに合わせて変化します。`ry(-pi/4)`ゲートの効果は、回転が反対方向であることを除いて同じです。\n", + "\n", + "おそらくお気づきかもしれませんが、ブロッホを使用すると、各量子ビットの2つの線が組み合わされるだけではなく、行全体が組み合わされます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 2\n", + "\n", + "### 導入\n", + "では、これらのゲートを他の量子ビットでも使用しましょう。\n", + "\n", + "### 練習問題\n", + "* ボトムラインを完全にオンにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = [['h','0'],['h','1']]\n", + "success_condition = {'ZI': -1.0,'IZ': -1.0}\n", + "allowed_gates = {'0': {'bloch':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, '1': {'bloch':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, 'both': {'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 3\n", + "\n", + "### 導入\n", + "これは`cx`、`cz`、`h`があれば解くことができるパズルですが、残念ながら、今回は、cxとhがありません。そのため、`cz`と`ry`がどのように機能するかを理解する必要があります。\n", + "\n", + "### 練習問題\n", + "* Z出力を一致させます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['h','0']]\n", + "success_condition = {'ZZ': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'bloch':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, 'both': {'unbloch':0,'cz':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 4\n", + "\n", + "### 導入\n", + "`x`または`z`を使用すると、`ry`を*反転*させて、反対方向に向けることができます。\n", + "\n", + "### 練習問題\n", + "* それぞれに1つの`ry(pi/4)`を付けて、Z出力を完全にオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['ry(pi/4)','0'],['ry(pi/4)','1']]\n", + "success_condition = {'ZI': 1.0,'IZ': 1.0}\n", + "allowed_gates = {'0': {'bloch':0, 'z':0, 'ry(pi/4)': 1}, '1': {'bloch':0, 'x':0, 'ry(pi/4)': 1}, 'both': {'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パズル 5\n", + "\n", + "### 導入\n", + "`ry`を使用すると、`cz`や`cx`よりも興味深い条件付きゲートを作成できます。たとえば、制御`h`を作成できます。\n", + "\n", + "### 練習問題\n", + "* q[1]の量子ビットで1回の`ry(pi/4)`と`ry(-pi/4)`を使用して、q[1]のZ出力をオフにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x','0'],['h','1']]\n", + "success_condition = {'IZ': 1.0}\n", + "allowed_gates = {'0': {}, '1': {'bloch':0, 'cx':0, 'ry(pi/4)': 1, 'ry(-pi/4)': 1}, 'both': {'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "puzzle.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ボーナスレベル: Sandbox\n", + "\n", + "これで、完全に強力な量子プログラムを構築するのに十分な基本的な量子ゲートを理解できました。最終レベルでこれを味わうことができます。しかしその前に、ここにいくつかのボーナスレベルがあります。\n", + "\n", + "まず、新しいスキルを試すためのSandboxです。すべてのゲートが有効になっている2つの図面で、遊んでみてください。\n", + "\n", + "クリフォード以外のゲートもサポートするために、線での描写になっています。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'IZ': 1.0,'IX': 1.0}\n", + "allowed_gates = {'0': {'bloch':0, 'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, '1': {'bloch':0, 'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, 'both': {'cz':0, 'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "line_sandbox = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "line_sandbox.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、y測定の出力を表す中央の線のある図面です。新しい非クリフォードゲート、`rx(pi/4)`と`rx(-pi /4)`も試すことができます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'IZ': 1.0,'IX': 1.0}\n", + "allowed_gates = {'0': {'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'rx(pi/4)': 0, 'ry(-pi/4)': 0, 'rx(-pi/4)': 0}, '1': {'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'rx(pi/4)': 0, 'ry(-pi/4)': 0, 'rx(-pi/4)': 0}, 'both': {'cz':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'q[0]', '1':'q[1]'}\n", + "y_sandbox = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='y')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_sandbox.get_circuit().draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ボーナスレベル: 自分でパズルをつくってみましょう。\n", + "\n", + "こちらからパズルを提供するだけでなく、みなさんがご自分でパズルを作成できるようにしました。Quantum Experienceを使用すると、自分のパズルのnotebookを簡単に作成できます。\n", + "\n", + "この[ページ](https://quantum-computing.ibm.com/jupyter)の「New Notebook」のボタンをクリックして開始します。次に、importのリストに次の行を追加します。\n", + "\n", + "```\n", + "from qiskit_textbook.games import hello_quantum\n", + "```\n", + "これにより、パズルを作成するために必要なツールが提供されます。具体的には、次のフォームを使用して`run_game`関数への独自の呼び出しを作成する必要があります。\n", + "\n", + "```\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode=None)\n", + "```\n", + "\n", + "これのすべての要素を以下に説明します。\n", + "\n", + "`puzzle`\n", + " * これは、作成したパズルを含むオブジェクトです。\n", + " * プレイヤーが作成した量子回路には、`puzzle.get_circuit()`を使用してアクセスできます。\n", + "\n", + "`initialize`\n", + "* 初期状態を準備するために、パズルが始まる前に適用されたゲートのリスト。\n", + "* これが空の場合、量子ビットのデフォルトの初期状態が使用されます(Z出力は確実に`0`になります)。\n", + "* サポートされている単一量子ビットゲート(量子ビット「0」または「1」に適用)は、`x`、`y`、`z`、`h`、および`ry(pi/ 4)`です。\n", + "* サポートされている2量子ビットゲートは`cz`と`cx`です。これらには、ターゲット量子ビットのみを指定します。\n", + "* 例: `initialize = [['x', '0'],['cx', '1']]`\n", + "\n", + "`success_condition`\n", + "* パズルが一致を宣言するために取得する必要のあるパウリの観測値。\n", + "* 次の形式で、キーが円の名前である辞書として表されます。\n", + " * `ZI`は左側の量子ビットのZ出力を示し、`XI`はそのX出力を示します。\n", + " * `IZ`と`IX`も同様に、右側の量子ビットの出力です。\n", + " * `ZX`は、左側の量子ビットのZ出力と右側のX出力の間の相関関係の円を指します。\n", + " * 上記以外にも様々です。\n", + "* 辞書の値は、パズルを完成させるためにこれらの円が保持しなければならない値です。\n", + " * 黒の場合は1.0\n", + " * 白の場合は-1.0\n", + " * 灰色の場合は0.0\n", + " * 上記以外にも様々です。\n", + "* 条件に含めたい円のみをリストする必要があります。\n", + "* 例:`success_condition = {'IZ':1.0}` \n", + "\n", + "`allowed_gates`\n", + "* 量子ビットごとに、このパズルで許可される操作を指定します。\n", + "* 量子ビットを指定する必要のない操作(`cz`および`unbloch`)の場合は、量子ビット`0`または`1`ではなく「両方」に操作を割り当てます。\n", + "* ゲートは、値が整数の辞書として表されます。\n", + " * 整数がゼロ以外の場合、パズルを正常に解くためにゲートを使用する必要がある正確な回数を指定します。 \n", + " * ゼロの場合、プレイヤーはゲートを何度でも使用できます。\n", + "* 例: `allowed_gates = {'0':{'h':0}, '1':{'h':0}, 'both':{'cz':1}}`\n", + "\n", + "`vi`\n", + "* 3つの要素リストとしてのいくつかの視覚化情報: `vi = [hidden,qubit,corr]` これらは以下を指定します:\n", + " * hidden:非表示の量子ビット(両方が表示されている場合は空のリスト)。\n", + " * qubit:各量子ビットに両方の円が表示されているかどうか。(量子ビットパズルにはTrueを使用し、ビットパズルにはFalseを使用します)。\n", + " * corr:相関円(中央の4つ)が表示されているかどうか。\n", + "* 例: `vi = [[],True,True]`\n", + "\n", + "`qubit_names`\n", + "* 2つの量子ビットは常に内部で`0`および`1`と呼ばれます。ただし、プレーヤーの場合は、別の名前を表示できます。\n", + "* 例: `qubit_names = {'0': 'qubit 0', '1': 'qubit 1'}`\n", + "\n", + "`mode`\n", + "* オプションの引数。これにより、Y出力行を含めるか、行ベースの視覚化を使用するかを選択できます。\n", + "* `mode = None`を使用するか、mode引数をまったく含めない場合、デフォルトのモードになります。\n", + "* `mode = 'y'`には、Y出力の行が含まれます。\n", + "* `mode = 'line'`は、線ベースの視覚化を提供します。\n", + "\n", + "ここに示した例で定義されているパズルは、次のセルで実行できます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "initialize = [['x', '0'],['cx', '1']]\n", + "success_condition = {'IZ': 1.0}\n", + "allowed_gates = {'0': {'h':0}, '1': {'h':0}, 'both': {'cz': 1}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'qubit 0', '1':'qubit 1'}\n", + "mode = None\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode=mode)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "プレイヤーに何を目指すべきかを伝えることを忘れないでください。このノートブックのすべてのパズルについて、ターゲットの状態がテキストブックで記述されていました。ただし、代わりに、次の方法で、プレーヤーへの短いメッセージを含む、ターゲット状態のイメージを作成できます。これも、上記のパラメータの例を使用しています。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "message = '\\nRules:\\n Use exactly one cz gate.'\n", + "grid = hello_quantum.pauli_grid(mode=mode)\n", + "grid.update_grid(rho=success_condition, hidden=vi[0], qubit=vi[1], corr=vi[2], message=message)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一致させる必要のある円のみが表示されていることに注意してください。\n", + "\n", + "パズルを他の人と共有するには、作成したノートブックを保存して他の人に送信するだけです。Quantum Experienceのこの[ページ](https://quantum-computing.ibm.com/jupyter)の「インポート」ボタンを使用して、実行して、プレイできます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# レベル 5: 量子変数の一意性の証明" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 古典変数を用いたベルのテスト\n", + "ここでは、量子変数(量子ビットに基づく)が標準のもの(ビットに基づく)とどのように異なるかを調査します。\n", + "\n", + "これを行うには、`A`と`B`と呼ぶ変数のペアを作成します。これらが何であるか、またはどのように初期化されるかについては、条件を設定しません。したがって、多くの可能性があります。\n", + "\n", + "* それらは、次のような任意の種類の変数である可能性があります。\n", + " * 整数\n", + " * リスト\n", + " * 辞書\n", + " * ...\n", + " \n", + "* それらは、次のようなあらゆる種類のプロセスによって初期化できます。\n", + " * 空のまま\n", + " * 与えられた値のセットで満たす\n", + " * 与えられたランダムプロセスによって生成する\n", + " * AとBに独立して適用する\n", + " * AとBに一緒に適用され、それらのランダム性における相関を与える\n", + "\n", + "変数がランダムプロセスによって初期化される場合、プログラムを実行するたびに異なる値を持つことを意味します。これはまったく問題ありません。従う必要がある唯一のルールは、ランダム性を生成するプロセスがすべての実行において同じであるということです。\n", + "\n", + "以下の関数を使用して、これらの変数を設定します。これには現在、部分的に相関するランダム浮動小数点数として定義された`A`と`B`があります。しかし、あなたはそれをあなたが望むものに変えることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import random\n", + "def setup_variables ():\n", + " \n", + " ### セクションを必要なものに置き換えます ###\n", + " \n", + " r = random.random()\n", + " \n", + " A = r*(2/3)\n", + " B = r*(1/3)\n", + " \n", + " ### セクションの最後 ###\n", + " \n", + " return A, B" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次の仕事は、ハッシュ関数を定義することです。これを行うには、変数の1つを入力として受け取り、ビット値を出力として与える必要があります。\n", + "\n", + "この関数は、2つの異なるタイプのハッシュを実行できる必要もあります。つまり、変数をかみ砕いて、さまざまな方法で出力する必要があります。したがって、ハッシュの種類を関数に指示します。\n", + "\n", + "プログラムの残りの部分と一貫性を保つために、2つの可能なハッシュタイプは`H`および`V`と呼ばれる必要があります。 また、出力は`0`または`1` のいずれかの単一値ビット文字列の形式である必要があります。\n", + "\n", + "次の(かなり恣意的な)例では、AとBを特定の値と比較することで、ビットを作ります。その値を下回る場合、出力は`1`であり、それ以外の場合、出力は`0`です。 ハッシュのタイプによって、使用される値が決まります。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hash2bit ( variable, hash ):\n", + " \n", + " ### セクションを必要なものに置き換えます ###\n", + " \n", + " if hash=='V':\n", + " bit = (variable<0.5)\n", + " elif hash=='H':\n", + " bit = (variable<0.25)\n", + " \n", + " bit = str(int(bit)) # Turn True or False into '1' and '0'\n", + " \n", + " ### セクションの最後 ###\n", + " \n", + " return bit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらが定義されたら、計算したい4つの量があります:`P['HH']`、`P['HV']`、`P['VH']`、および`P['VV']`\n", + "\n", + "例として`P['HV']`に焦点を当てましょう。これは、`A`の`H`タイプのハッシュから派生したビット値が`B`の`V`タイプのハッシュから派生したビット値と異なる確率です。何度もサンプリングし、対応するビット値が一致しないサンプルの割合を決定することにより、この確率を推定します。\n", + "\n", + "他の確率も同様に定義されます。P['HH']はAとBの両方でHタイプのハッシュを比較し、P['VV']は両方でVタイプのハッシュを比較し、P['VH']は、AのVタイプのハッシュとBのHタイプのハッシュを比較します。\n", + "`P['HH']`は`A`と`B`の両方で`H`タイプのハッシュを比較し、`P['VV']`は両方で`V`タイプのハッシュを比較し、`P['VH']`はの`A`の`V`タイプのハッシュと`B`の`H`タイプのハッシュを比較します。\n", + "\n", + "これらの確率は、辞書内のPのすべての値を返す次の関数で計算されます。パラメータショットは、使用するサンプルの数です。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "shots = 8192\n", + "def calculate_P ( ):\n", + " \n", + " P = {}\n", + " for hashes in ['VV','VH','HV','HH']:\n", + " \n", + " # calculate each P[hashes] by sampling over `shots` samples\n", + " P[hashes] = 0\n", + " for shot in range(shots):\n", + "\n", + " A, B = setup_variables()\n", + "\n", + " a = hash2bit ( A, hashes[0] ) # hash type for variable `A` is the first character of `hashes`\n", + " b = hash2bit ( B, hashes[1] ) # hash type for variable `B` is the second character of `hashes`\n", + "\n", + " P[hashes] += (a!=b) / shots\n", + " \n", + " return P" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、変数を設定してハッシュするために選択したメソッドのこれらの値を実際に計算してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "P = calculate_P()\n", + "print(P)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらの値は、有限数のショットしか使用しないため、実行ごとにわずかに異なります。それらを大幅に変更するには、変数の開始方法やハッシュ関数の定義方法を変更する必要があります。\n", + "\n", + "これらの関数がどのように定義されていても、Pの値が常に従う、ある制限があります。\n", + "\n", + "たとえば、`P['HV']`、`P['VH']`、および`P['VV']`がすべて`0.0`である場合を考えてみます。これが可能な唯一の方法は、`P['HH']`も`0.0`にすることです。\n", + "\n", + "この理由を理解するために、`hash2bit(A, H)`と`hash2bit(B,V)`がどの実行でも違う値にならないことを`P['HV'] = 0.0`が示していることから始めましょう。つまり、これは常にそれらが等しいことを期待できることを意味します。\n", + "\n", + " hash2bit(A, H) = hash2bit(B, V) (1)\n", + " \n", + "`P['VV'] = 0.0`および`P['VH'] = 0.0`から、同様に以下が取得できます。\n", + "\n", + " hash2bit(A, V) = hash2bit(B, V) (2)\n", + " \n", + " hash2bit(A, V) = hash2bit(B, H) (3)\n", + " \n", + "(1)と(2)を組み合わせると、\n", + "\n", + " hash2bit(A, H) = hash2bit(A, V) (4)\n", + " \n", + "これを(3)と組み合わせると、\n", + "\n", + " hash2bit(A, H) = hash2bit(B, H) (5)\n", + "\n", + "そして、これらの値が常に等しい場合、異なる実行はありえません。これはまさに私たちが証明しようとしたものです: `P['HH'] = 0.0`\n", + "\n", + "より一般的には、`P['HV']`、 `P['VH']`、および`P['VV']`の値を使用して、`P['HH']`の上限を設定できます。[CHSH不等式](https://en.wikipedia.org/wiki/CHSH_inequality)を適応させることにより、次のことがわかります。\n", + "\n", + "$\\,\\,\\,\\,\\,\\,\\,$ `P['HH']` $\\, \\leq \\,$ `P['HV'] + P['VH'] + P['VV']`\n", + "\n", + "これは、`P['HH’]`だけの特別な特徴ではありません。他のすべての確率にも当てはまります。これらの確率のそれぞれは、他の確率の合計より大きくすることはできません。\n", + "\n", + "この論理が成り立つかどうかをテストするために、確率がこれらの不等式にどれだけよく従うかを確認します。`P`値が正確ではなく、限られた数のサンプルを使用して推定されているため、わずかな違反が発生する可能性があることに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def bell_test (P):\n", + " \n", + " sum_P = sum(P.values())\n", + " for hashes in P:\n", + " \n", + " bound = sum_P - P[hashes]\n", + " \n", + " print(\"The upper bound for P['\"+hashes+\"'] is \"+str(bound))\n", + " print(\"The value of P['\"+hashes+\"'] is \"+str(P[hashes]))\n", + " if P[hashes]<=bound:\n", + " print(\"The upper bound is obeyed :)\\n\")\n", + " else:\n", + " if P[hashes]-bound < 0.1:\n", + " print(\"This seems to have gone over the upper bound, but only by a little bit :S\\nProbably just rounding errors or statistical noise.\\n\")\n", + " else:\n", + " print(\"!!!!! This has gone well over the upper bound :O !!!!!\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bell_test(P)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このノートブックで提供されている初期化関数とハッシュ関数を使用すると、`P('HV')`の値は上界とほぼ同じになります。数値は統計的に推定されており、統計的なノイズの影響で若干近似的な値になっており、少しオーバーすることもあるかもしれません。しかし、それが限界を大幅に超えることは決してありません。\n", + "\n", + "あなたが私を信じられないのであれば、自分で試してみてください。変数の初期化方法とハッシュの計算方法を変更し、境界の1つが大幅に破られるようにします。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 量子変数を用いたベルのテスト\n", + "ここで、変数AとBが量子変数になることを除いて、同じことをもう一度やり直します。具体的には、それらは最も単純な種類の量子変数、つまり量子ビットになります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子プログラムを作成するときは、使用する前に量子ビットとビットを設定する必要があります。これは、以下の関数によって実行されます。2ビットのレジスタを定義し、それらを変数`A`および`B`として割り当てます。次に、出力を受信するために2ビットのレジスタを設定し、それらを`a`および`b`として割り当てます。\n", + "\n", + "最後に、これらのレジスタを使用して空の量子プログラムを設定します。これは`qc`と呼ばれます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit\n", + "\n", + "def initialize_program ():\n", + " \n", + " qubit = QuantumRegister(2)\n", + " A = qubit[0]\n", + " B = qubit[1]\n", + " \n", + " bit = ClassicalRegister(2)\n", + " a = bit[0]\n", + " b = bit[1]\n", + " \n", + " qc = QuantumCircuit(qubit, bit)\n", + " \n", + " return A, B, a, b, qc" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "変数を設定するための量子プログラムを書き始める前に、プログラムの最後に何が必要かを考えてみましょう。ここで、量子ビットをビットに変換するさまざまなハッシュ関数を定義します。\n", + "\n", + "量子ビットからビットを抽出する最も簡単な方法は、`measure`ゲートを使用することです。これは、これまで使用してきた視覚化における量子ビットのZ出力に対応します。これを`V`タイプのハッシュとして使用しましょう。\n", + "\n", + "X出力に対応する出力の場合、直接アクセスする手段はありません。ただし、最初に`h`を実行してトップ出力とZ出力を交換し、次に`measure`ゲートを使用することで、間接的に行うことができます。これがHタイプのハッシュになります。\n", + "\n", + "この関数には、従来の関数よりも多くの入力があることに注意してください。結果を書き込む`ビット`と、ゲートを書き込む量子プログラム`qc`を指定する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hash2bit ( variable, hash, bit, qc ):\n", + " \n", + " if hash=='H':\n", + " qc.h( variable )\n", + " \n", + " qc.measure( variable, bit )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、変数AとBを設定します。このプログラムを作成するには、以下の盤面を使用できます。提案された演習に従うか、好きなことをすることができます。準備ができたら、次に進みます。`setup_variables()関数`を含むセルは、盤面で作成したプログラムを使用します。\n", + "\n", + "選択するということは、確率`P['HH']`、`P['HV']`、`P['VH']`、および`P['VV']`が盤面上の円に明示的に対応することを意味することに注意してください。たとえば、一番上の円は、2つのX出力が一致しない可能性がどの程度あるかを示しています。これが白の場合、`P['HH'] = 1`、黒の場合、`P['HH'] = 0`です。\n", + "\n", + "### 練習問題\n", + "* 両方の量子ビットのX出力が一致しない可能性が高く、他のすべての出力の組み合わせが一致する可能性が高くなるようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "initialize = []\n", + "success_condition = {'ZZ':+0.7071,'ZX':+0.7071,'XZ':+0.7071,'XX':-0.7071}\n", + "allowed_gates = {'0': {'bloch':0, 'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, '1': {'bloch':0, 'x':0, 'z':0, 'h':0, 'cx':0, 'ry(pi/4)': 0, 'ry(-pi/4)': 0}, 'both': {'cz':0, 'unbloch':0}}\n", + "vi = [[], True, True]\n", + "qubit_names = {'0':'A', '1':'B'}\n", + "puzzle = hello_quantum.run_game(initialize, success_condition, allowed_gates, vi, qubit_names, mode='line')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、上記のプログラムを使用して量子変数を設定します。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "def setup_variables ( A, B, qc ):\n", + " \n", + " for line in puzzle.program:\n", + " eval(line)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`P`の値は、以下の関数で計算されます。これでは、ここでは、このnotebookの他の部分のパズルと同様に、可能な出力を与えたサンプルの数がわかる結果を得ています。出力はビット文字列、`文字列`として提供され、Qiskitは右から左に番号を付けます。 これは、`bit[0]`に対応するaの値が右から1番目であることを意味します。\n", + "\n", + " a = string[-1]\n", + "\n", + "`b`の値は、右から2番目のすぐ隣にあります。\n", + "\n", + " b = string[-2]\n", + "\n", + "\n", + "このビット文字列のサンプル数は、結果の辞書型`stats`によって`stats [string]`として提供されます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "shots = 8192\n", + "from qiskit import execute\n", + "\n", + "def calculate_P ( backend ):\n", + " \n", + " P = {}\n", + " program = {}\n", + " for hashes in ['VV','VH','HV','HH']:\n", + "\n", + " A, B, a, b, program[hashes] = initialize_program ()\n", + "\n", + " setup_variables( A, B, program[hashes] )\n", + "\n", + " hash2bit ( A, hashes[0], a, program[hashes])\n", + " hash2bit ( B, hashes[1], b, program[hashes])\n", + " \n", + " # submit jobs\n", + " job = execute( list(program.values()), backend, shots=shots )\n", + "\n", + " # get the results\n", + " for hashes in ['VV','VH','HV','HH']:\n", + " stats = job.result().get_counts(program[hashes])\n", + " \n", + " P[hashes] = 0\n", + " for string in stats.keys():\n", + " a = string[-1]\n", + " b = string[-2]\n", + " \n", + " if a!=b:\n", + " P[hashes] += stats[string] / shots\n", + "\n", + " return P" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、実際に使用するデバイスを選択してセットアップします。デフォルトでは、シミュレーターを使用します。代わりに、バックエンドを適宜変更することで、実際のクラウドベースのデバイスを使用できます。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import Aer\n", + "device = 'qasm_simulator'\n", + "backend = Aer.get_backend(device)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "P = calculate_P( backend )\n", + "print(P)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bell_test( P )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "練習問題で状態の提案を準備した場合、`P['HH']`の上限に重大な違反があることがわかります。では、ここで何が起こっているのでしょうか?ベルのテストに基づいた論理の連鎖は、明らかに量子変数には適用されません。しかし、なぜでしょうか?\n", + "\n", + "答えは、その論理には隠された仮定があるということです。その理由を理解するために、式(4)に戻りましょう。\n", + "\n", + " hash2bit ( A, H ) = hash2bit ( A, V ) (4)\n", + " \n", + "ここでは、変数`A`の`H`タイプのハッシュから取得する値を`V`タイプのハッシュの値と比較します。\n", + "\n", + "古典的な変数の場合、これは完全に理にかなっています。両方のハッシュを計算して結果を比較することを妨げるものは何もありません。変数のハッシュを計算すると変数が変更されても、それは問題ではありません。事前にコピーするだけで、両方のハッシュを問題なく実行できます。\n", + "\n", + "同じことは量子変数には当てはまりません。ハッシュの結果は、実際に実行するまでわかりません。量子ビットが実際に与えるビット値を決定するのはその時だけです。そして、あるタイプのハッシュの値を決定すると、別のタイプのハッシュを使用した場合に何を決定したかを判断することはできません。[量子変数はコピーできない](https://en.wikipedia.org/wiki/No-cloning_theorem)ため、量子変数をコピーしてもこれを回避することはできません。つまり、`hash2bit(A, H)`と`hash2bit(A, V)`の値が同時に明確に定義されているコンテキストがないため、それらを比較することはできません。\n", + "\n", + "もう1つの隠れた仮定は、`hash2bit(A,hash)`は、変数`A`に選択されたハッシュのタイプにのみ依存し、変数`B`に選択されたハッシュのタイプには依存しないということです。ただし、上界が違反しているという事実は、それぞれの変数が他の変数に対してどのようなハッシュが行われているかを知っているということを暗示しているように見えます。したがって、両方がHタイプのハッシュを持っている場合、それらは共謀して非常に異なる動作を与えることができます。\n", + "\n", + "そうは言っても、我々の選択したハッシュが他のビットでの結果に影響を与えるとは言えません。その効果はそれよりも微妙です。たとえば、どの変数がどの変数に影響を与えているかを判断することはできません。ハッシュが実行される順序を変更したり、[効果的に同時に実行したりする](https://en.wikipedia.org/wiki/Loopholes_in_Bell_test_experiments#Communication,_or_locality)と、同じ結果が得られます。私たちが言えることは、結果は[文脈的](https://en.wikipedia.org/wiki/Quantum_contextuality)であるということです。ある変数からの結果を完全に理解するには、別の変数に対して何が行われたかを調べる必要がある場合があります。\n", + "\n", + "これはすべて、量子変数が常に私たちが慣れている論理に従うとは限らないことを示しています。それらは異なる規則、つまり量子力学の規則に従います。これにより、新しい異なる方法で計算を実行する方法を見つけることができます。" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-ex/index.md b/translations/ja/ch-ex/index.md new file mode 100644 index 0000000..c848aea --- /dev/null +++ b/translations/ja/ch-ex/index.md @@ -0,0 +1 @@ +このテキストブックの概念を完全に理解するには、できるだけ多くの問題セットに取り組むことが重要です。各章に簡単な練習問題がありましたが、これまでに学んだトピックをカバーする問題セットをここで提供します。関連する章の最後にリンクをおきますが、こちらにあるリストからも、簡単に見つけることができます。 \ No newline at end of file diff --git a/translations/ja/ch-gates/basic-circuit-identities.ipynb b/translations/ja/ch-gates/basic-circuit-identities.ipynb new file mode 100644 index 0000000..42a137e --- /dev/null +++ b/translations/ja/ch-gates/basic-circuit-identities.ipynb @@ -0,0 +1,554 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Basic Circuit Identities" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.circuit import Gate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we program quantum computers, our aim is always to build useful quantum circuits from the basic building blocks. But sometimes, we might not have all the basic building blocks we want. In this section, we'll look at how we can transform basic gates into each other, and how to use them to build some gates that are slightly more complex \\(but still pretty basic\\).\n", + "\n", + "Many of the techniques discussed in this chapter were first proposed in a paper by Barenco and coauthors in 1995 [1]." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Making a controlled-$Z$ from a CNOT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The controlled-Z or `cz` gate is another well-used two-qubit gate. Just as the CNOT applies an $X$ to its target qubit whenever its control is in state $|1\\rangle$, the controlled-$Z$ applies a $Z$ in the same case. In Qasm it can be invoked directly with\n", + "\n", + "```python\n", + "# a controlled-Z\n", + "qc.cz(c,t)\n", + "```\n", + "\n", + "where c and t are the control and target qubits. In IBM Q devices, however, the only kind of two-qubit gate that can be directly applied is the CNOT. We therefore need a way to transform one to the other.\n", + "\n", + "The process for this is quite simple. We know that the Hadamard transforms the states $|0\\rangle$ and $|1\\rangle$ to the states $|+\\rangle$ and $|-\\rangle$. We also know that the effect of the $Z$ gate on the states $|+\\rangle$ and $|-\\rangle$ is the same as that for $X$ on the state $|0\\rangle$ and $|1\\rangle$. From this reasoning, or from simply multiplying matrices, we find that\n", + "\n", + "$$\n", + "H X H = Z,\\\\\\\\\n", + "H Z H = X.\n", + "$$\n", + "\n", + "The same trick can be used to transform a CNOT into a controlled-$Z$. All we need to do is precede and follow the CNOT with a Hadamard on the target qubit. This will transform any $X$ applied to that qubit into a $Z$.\n", + "\n", + "```python\n", + "# also a controlled-Z\n", + "qc.h(t)\n", + "qc.cx(c,t)\n", + "qc.h(t)\n", + "```\n", + "\n", + "More generally, we can transform a single CNOT into a controlled version of any rotation around the Bloch sphere by an angle $\\pi$, by simply preceding and following it with the correct rotations. For example, a controlled-$Y$:\n", + "\n", + "```python\n", + "# a controlled-Y\n", + "qc.sdg(t)\n", + "qc.cx(c,t)\n", + "qc.s(t)\n", + "```\n", + "\n", + "and a controlled-$H$:\n", + "\n", + "```python\n", + "# a controlled-H\n", + "qc.ry(-pi/4,t)\n", + "qc.cx(c,t)\n", + "qc.ry(pi/4,t)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Swapping qubits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes we need to move information around in a quantum computer. For some qubit implementations, this could be done by physically moving them. Another option is simply to move the state between two qubits. This is done by the SWAP gate.\n", + "\n", + "```python\n", + "# swaps states of qubits a and b\n", + "qc.swap(a,b)\n", + "```\n", + "\n", + "The command above directly invokes this gate, but let's see how we might make it using our standard gate set. For this, we'll need to consider a few examples.\n", + "\n", + "First, we'll look at the case that qubit a is in state $|1\\rangle$ and qubit b is in state $|0\\rangle$. For this we'll apply the following gates:\n", + "\n", + "```python\n", + "# swap a 1 from a to b\n", + "qc.cx(a,b) # copies 1 from a to b\n", + "qc.cx(b,a) # uses the 1 on b to rotate the state of a to 0\n", + "```\n", + "\n", + "This has the effect of putting qubit b in state $|1\\rangle$ and qubit a in state $|0\\rangle$. In this case at least, we have done a SWAP.\n", + "\n", + "Now let's take this state and SWAP back to the original one. As you may have guessed, we can do this with the reverse of the above process:\n", + "\n", + "```python\n", + "# swap a q from b to a\n", + "qc.cx(b,a) # copies 1 from b to a\n", + "qc.cx(a,b) # uses the 1 on a to rotate the state of b to 0\n", + "```\n", + "\n", + "Note that in these two processes, the first gate of one would have no effect on the initial state of the other. For example, when we swap the $|1\\rangle$ b to a, the first gate is `cx q[b], q[a]`. If this were instead applied to a state where no $|1\\rangle$ was initially on b, it would have no effect.\n", + "\n", + "Note also that for these two processes, the final gate of one would have no effect on the final state of the other. For example, the final `cx q[b], q[a]` that is required when we swap the $|1\\rangle$ from a to b has no effect on the state where the $|1\\rangle$ is not on b.\n", + "\n", + "With these observations, we can combine the two processes by adding an ineffective gate from one onto the other. For example,\n", + "\n", + "```python\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "```\n", + "\n", + "We can think of this as a process that swaps a $|1\\rangle$ from a to b, but with a useless `qc.cx(b,a)` at the beginning. We can also think of it as a process that swaps a $|1\\rangle$ from b to a, but with a useless `qc.cx(b,a)` at the end. Either way, the result is a process that can do the swap both ways around.\n", + "\n", + "It also has the correct effect on the $|00\\rangle$ state. This is symmetric, and so swapping the states should have no effect. Since the CNOT gates have no effect when their control qubits are $|0\\rangle$, the process correctly does nothing.\n", + "\n", + "The $|11\\rangle$ state is also symmetric, and so needs a trivial effect from the swap. In this case, the first CNOT gate in the process above will cause the second to have no effect, and the third undoes the first. Therefore, the whole effect is indeed trivial.\n", + "\n", + "We have thus found a way to decompose SWAP gates into our standard gate set of single-qubit rotations and CNOT gates.\n", + "\n", + "```python\n", + "# swaps states of qubits a and b\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "```\n", + "\n", + "It works for the states $|00\\rangle$, $|01\\rangle$, $|10\\rangle$ and $|11\\rangle$, as well as for all superpositions of them. It therefore swaps all possible two-qubit states.\n", + "\n", + "The same effect would also result if we changed the order of the CNOT gates:\n", + "\n", + "```python\n", + "# swaps states of qubits a and b\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "```\n", + "\n", + "This is an equally valid way to get the SWAP gate.\n", + "\n", + "The derivation used here was very much based on the z basis states, but it could also be done by thinking about what is required to swap qubits in states $|+\\rangle$ and $|-\\rangle$. The resulting ways of implementing the SWAP gate will be completely equivalent to the ones here." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Making the CNOTs we need from the CNOTs we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The gates in any quantum computer are driven by the physics of the underlying system. In IBM Q devices, the physics behind CNOTs means that they cannot be directly applied to all possible pairs of qubits. For those pairs for which a CNOT can be applied, it typically has a particular orientation. One specific qubit must act as control, and the other must act as the target, without allowing us to choose.\n", + "\n", + "#### Changing the direction of a CNOT\n", + "\n", + "Let's deal with the second problem described above: If we have a CNOT with control qubit $c$ and target qubit $t$, how can we make one for which qubit $t$ acts as the control and qubit $c$ is the target?\n", + "\n", + "This question would be very simple to answer for the controlled-$Z$. For this gate, it doesn't matter which way around the control and target qubits are.\n", + "\n", + "```python\n", + "qc.cz(c,t)\n", + "```\n", + "\n", + "has exactly the same effect as \n", + "\n", + "```python\n", + "qc.cz(t,c)\n", + "```\n", + "\n", + "This means that we can think of either one as the control, and the other as the target.\n", + "\n", + "To see why this is true, let's remind ourselves of what the Z gate is:\n", + "\n", + "$$\n", + "Z= \\begin{pmatrix} 1&0 \\\\\\\\ 0&-1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "We can think of this as multiplying the state by $-1$, but only when it is $|1\\rangle$.\n", + "\n", + "For a controlled-$Z$ gate, the control qubit must be in state $|1\\rangle$ for a $Z$ to be applied to the target qubit. Given the above property of $Z$, this only has an effect when the target is in state $|1\\rangle$. We can therefore think of the controlled-$Z$ gate as one that multiplies the state of two qubits by $-1$, but only when the state is $|11\\rangle$.\n", + "\n", + "This new interpretation is phrased in a perfectly symmetric way, and demonstrates that the labels of 'control' and 'target' are not necessary for this gate.\n", + "\n", + "This property gives us a way to reverse the orientation of a CNOT. We can first turn the CNOT into a controlled-$Z$ by using the method described earlier: placing a Hadamard both before and after on the target qubit.\n", + "\n", + "```python\n", + "# a cz\n", + "qc.h(t)\n", + "qc.cx(c,t)\n", + "qc.h(t)\n", + "```\n", + "\n", + "Then, since we are free to choose which way around to think about a controlled-$Z$'s action, we can choose to think of $t$ as the control and $c$ as the target. We can then transform this controlled-$Z$ into a corresponding CNOT. We just need to place a Hadamard both before and after on the target qubit \\(which is now qubit $c$\\).\n", + "\n", + "```python\n", + "# a cx with control qubit t and target qubit c\n", + "qc.h(c)\n", + "qc.h(t)\n", + "qc.cx(c,t)\n", + "qc.h(t)\n", + "qc.h(c)\n", + "```\n", + "\n", + "And there we have it: we've turned around the CNOT. All that is needed is a Hadamard on both qubits before and after.\n", + "\n", + "The rest of this subsection is dedicated to another explanation of how to turn around a CNOT, with a bit of math (introduced in the 'States for Many Qubits' article of the previous chapter, and the 'Fun with Matrices' article of this chapter), and some different insight. Feel free to skip over it.\n", + "\n", + "Here is another way to write the CNOT gate:\n", + "\n", + "$$\n", + "{\\rm CX}_{c,t} = |0\\rangle \\langle0| \\otimes I + |1\\rangle \\langle1| \\otimes X.\n", + "$$\n", + "\n", + "Here the $|1\\rangle \\langle1|$ ensures that the second term only affects those parts of a superposition for which the control qubit $c$ is in state $|1\\rangle$. For those, the effect on the target qubit t is $X$. The first terms similarly address those parts of the superposition for which the control qubit is in state $|0\\rangle$, in which case it leaves the target qubit unaffected.\n", + "\n", + "Now let's do a little math. The $X$ gate has eigenvalues $\\pm 1$ for the states $|+\\rangle$ and $|-\\rangle$. The $I$ gate has an eigenvalue of $1$ for all states including $|+\\rangle$ and $|-\\rangle$. We can thus write them in spectral form as\n", + "\n", + "$$\n", + "X = |+\\rangle \\langle+| \\, \\, - \\, \\, |-\\rangle \\langle-|, \\, \\, \\, \\, I = |+\\rangle \\langle+| \\, \\, + \\, \\, |-\\rangle \\langle-|\n", + "$$\n", + "\n", + "Substituting these into the expression above gives us\n", + "\n", + "$$\n", + "{\\rm CX}_{c,t} = |0\\rangle \\langle0| \\otimes |+\\rangle \\langle+| \\, \\, + \\, \\, |0\\rangle \\langle0| \\otimes |-\\rangle \\langle-| \\, \\, + \\, \\, |1\\rangle \\langle1| \\otimes |+\\rangle \\langle+| \\, \\, - \\, \\, |1\\rangle \\langle1| \\otimes |-\\rangle \\langle-|\n", + "$$\n", + "\n", + "Using the states $|0\\rangle$ and $|1\\rangle$, we can write the $Z$ gate in spectral form, and also use an alternative \\(but completely equivalent\\) spectral form for $I$:\n", + "\n", + "$$\n", + "Z = |0\\rangle \\langle0| ~-~ |1\\rangle \\langle1|, ~~~ I = |0\\rangle \\langle0| ~+~ |1\\rangle \\langle1|.\n", + "$$\n", + "\n", + "With these, we can factorize the parts of the CNOT expressed with the $|0\\rangle$ and $|1\\rangle$ state:\n", + "\n", + "$$\n", + "{\\rm CX}_{c,t} = I \\otimes |+\\rangle \\langle+| \\, \\, + \\, \\, Z \\otimes |-\\rangle \\langle-|\n", + "$$\n", + "\n", + "This gives us a whole new way to interpret the effect of the CNOT. The $Z \\otimes |-\\rangle \\langle-| $ term addresses the parts of a superposition for which qubit $t$ is in state $|-\\rangle$ and then applies a $Z$ gate to qubit $c$. The other term similarly does nothing to qubit $c$ when qubit $t$ is in state $|+\\rangle.$ \n", + "\n", + "In this new interpretation, it is qubit $t$ that acts as the control. It is the $|+\\rangle$ and $|-\\rangle$ states that decide whether an action is performed, and that action is the gate $Z$. This sounds like a very different gate to our familiar CNOT, and yet it is the CNOT. These are two equally true descriptions of its effects.\n", + "\n", + "Among the many uses of this property is the method to turn around a CNOT. For example, consider applying a Hadamard to qubit $c$ both before and after this CNOT:\n", + "\n", + "```python\n", + "h(c)\n", + "cx(c,t)\n", + "h(c)\n", + "```\n", + "\n", + "This transforms the $Z$ in the $Z \\otimes |-\\rangle \\langle-| $ term into an $X$, and leaves the other term unchanged. The combined effect is then a gate that applies an $X$ to qubit $c$ when qubit $t$ is in state $|-\\rangle$. This is halfway to what we are wanting to build.\n", + "\n", + "To complete the process, we can apply a Hadamard both before and after on qubit $t$. This transforms the $|+\\rangle$ and $|-\\rangle$ states in each term into $|0\\rangle$ and $|1\\rangle$. Now we have something that applies an $X$ to qubit $c$ when qubit $t$ is in state $|1\\rangle$. This is exactly what we want: a CNOT in reverse, with qubit $t$ as the control and $c$ as the target.\n", + "\n", + "#### CNOT between distant qubits\n", + "\n", + "Suppose we have a control qubit $c$ and a target qubit $t$, and we want to do a CNOT gate between them. If this gate is directly possible on a device, we can just do it. If it's only possible to do the CNOT in the wrong direction, we can use the method explained above. But what if qubits $c$ and $t$ are not connected at all?\n", + "\n", + "If qubits $c$ and $t$ are on completely different devices in completely different labs in completely different countries, you may be out of luck. But consider the case where it is possible to do a CNOT between qubit $c$ and an additional qubit $a$, and it is also possible to do one between qubits $a$ and $t$. The new qubit can then be used to mediate the interaction between $c$ and $t$.\n", + "\n", + "One way to do this is with the SWAP gate. We can simply SWAP $a$ and t, do the CNOT between $c$ and $a$, and then swap $a$ and $t$ back again. The end result is that we have effectively done a CNOT between $c$ and $t$. The drawback of this method is that it costs a lot of CNOT gates, with six needed to implement the two SWAPs.\n", + "\n", + "Another method is to use the following sequence of gates.\n", + "\n", + "```python\n", + "# a CNOT between qubits c and t, with no end effect on qubit a\n", + "qc.cx(a,t)\n", + "qc.cx(c,a)\n", + "qc.cx(a,t)\n", + "qc.cx(c,a)\n", + "```\n", + "\n", + "To see how this works, first consider the case where qubit $c$ is in state $|0\\rangle$. The effect of the `cx(c,a)` gates in this case are trivial. This leaves only the two `cx q[a], q[t]` gates, which cancel each other out. The net effect is therefore that nothing happens.\n", + "\n", + "If qubit $c$ is in state $|1\\rangle$, things are not quite so simple. The effect of the `cx q(c,a)` gates is to toggle the value of qubit $a$; it turns any $|0\\rangle$ in the state of qubit $a$ into $|1\\rangle$ and back again, and vice versa.\n", + "\n", + "This toggle effect affects the action of the two `cx(a,t)` gates. It ensures that whenever one is controlled on a $|0\\rangle$ and has trivial effect, the other is controlled on a $|1\\rangle$ and applies an $X$ to qubit $t$. The end effect is that qubit $a$ is left unchanged, but qubit $t$ will always have had an $X$ applied to it.\n", + "\n", + "Putting everything together, this means that an $X$ is applied to qubit $t$ only when qubit $c$ is in state $|1\\rangle$. Qubit $a$ is left unaffected. We have therefore engineered a CNOT between qubits $c$ and $t$. Unlike when using SWAP gates, this required only four CNOT gates to implement.\n", + "\n", + "It is similarly possible to engineer CNOT gates when there is a longer chain of qubits required to connect our desired control and target. The methods described above simply need to be scaled up." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Controlled rotations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have already seen how to build controlled $\\pi$ rotations from a single CNOT gate. Now we'll look at how to build any controlled rotation.\n", + "\n", + "First, let's consider arbitrary rotations around the y axis. Specifically, consider the following sequence of gates.\n", + "\n", + "```python\n", + "qc.ry(theta/2,t)\n", + "qc.cx(c,t)\n", + "qc.ry(-theta/2,t)\n", + "qc.cx(c,t)\n", + "```\n", + "\n", + "If the control qubit is in state $|0\\rangle$, all we have here is a $R_y(\\theta/2)$ immediately followed by its inverse, $R_y(-\\theta/2)$. The end effect is trivial. If the control qubit is in state $|1\\rangle$, however, the `ry(-theta/2)` is effectively preceded and followed by an X gate. This has the effect of flipping the direction of the y rotation and making a second $R_y(\\theta/2)$. The net effect in this case is therefore to make a controlled version of the rotation $R_y(\\theta)$. \n", + "\n", + "This method works because the x and y axis are orthogonal, which causes the x gates to flip the direction of the rotation. It therefore similarly works to make a controlled $R_z(\\theta)$. A controlled $R_x(\\theta)$ could similarly be made using CNOT gates.\n", + "\n", + "We can also make a controlled version of any single-qubit rotation, $U$. For this we simply need to find three rotations A, B and C, and a phase $\\alpha$ such that\n", + "\n", + "$$\n", + "ABC = I, ~~~e^{i\\alpha}AZBZC = U\n", + "$$\n", + "\n", + "We then use controlled-Z gates to cause the first of these relations to happen whenever the control is in state $|0\\rangle$, and the second to happen when the control is state $|1\\rangle$. An $R_z(2\\alpha)$ rotation is also used on the control to get the right phase, which will be important whenever there are superposition states.\n", + "\n", + "```python\n", + "qc.append(a, [t])\n", + "qc.cz(c,t)\n", + "qc.append(b, [t])\n", + "qc.cz(c,t)\n", + "qc.append(c, [t])\n", + "qc.u1(alpha,c)\n", + "```\n", + "\n", + "![A controlled version of a gate V](images/iden1.png)\n", + "\n", + "Here `A`, `B` and `C` are gates that implement $A$ , $B$ and $C$, respectively, and must be defined as custom gates. For example, if we wanted $A$ to be $R_x(\\pi/4)$, the custom would be defined as\n", + "\n", + "```python\n", + "qc_a = QuantumCircuit(1, name='A')\n", + "qc_a.rx(np.pi/4,0)\n", + "A = qc_a.to_instruction()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Toffoli" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Toffoli gate is a three-qubit gate with two controls and one target. It performs an X on the target only if both controls are in the state $|1\\rangle$. The final state of the target is then equal to either the AND or the NAND of the two controls, depending on whether the initial state of the target was $|0\\rangle$ or $|1\\rangle$. A Toffoli can also be thought of as a controlled-controlled-NOT, and is also called the CCX gate.\n", + "\n", + "```python\n", + "# Toffoli with control qubits a and b and target t\n", + "qc.ccx(a,b,t)\n", + "```\n", + "\n", + "To see how to build it from single- and two-qubit gates, it is helpful to first show how to build something even more general: an arbitrary controlled-controlled-U for any single-qubit rotation U. For this we need to define controlled versions of $V = \\sqrt{U}$ and $V^\\dagger$. In the Qasm code below, we assume that subroutines `cv` and `cvdg` have been defined for these, respectively. The controls are qubits $a$ and $b$, and the target is qubit $t$.\n", + "\n", + "```python\n", + "qc.cv(b,t)\n", + "qc.cx(a,b)\n", + "qc.cvdg(b,t)\n", + "qc.cx(a,b)\n", + "qc.cv(a,t)\n", + "```\n", + "\n", + "![A doubly controlled version of a gate V](images/iden2.png)\n", + "\n", + "By tracing through each value of the two control qubits, you can convince yourself that a U gate is applied to the target qubit if and only if both controls are 1. Using ideas we have already described, you could now implement each controlled-V gate to arrive at some circuit for the doubly-controlled-U gate. It turns out that the minimum number of CNOT gates required to implement the Toffoli gate is six [2].\n", + "\n", + "\n", + "![A Toffoli](images/iden3.png)\n", + "\n", + "\n", + "The Toffoli is not the unique way to implement an AND gate in quantum computing. We could also define other gates that have the same effect, but which also introduce relative phases. In these cases, we can implement the gate with fewer CNOTs.\n", + "\n", + "For example, suppose we use both the controlled-Hadamard and controlled-$Z$ gates, which can both be implemented with a single CNOT. With these we can make the following circuit:\n", + "\n", + "```python\n", + "qc.ch(a,t)\n", + "qc.cz(b,t)\n", + "qc.ch(a,t)\n", + "```\n", + "\n", + "For the state $|00\\rangle$ on the two controls, this does nothing to the target. For $|11\\rangle$, the target experiences a $Z$ gate that is both preceded and followed by an H. The net effect is an $X$ on the target. For the states $|01\\rangle$ and $|10\\rangle$, the target experiences either just the two Hadamards \\(which cancel each other out\\) or just the $Z$ \\(which only induces a relative phase\\). This therefore also reproduces the effect of an AND, because the value of the target is only changed for the $|11\\rangle$ state on the controls -- but it does it with the equivalent of just three CNOT gates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Arbitrary rotations from H and T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The qubits in current devices are subject to noise, which basically consists of gates that are done by mistake. Simple things like temperature, stray magnetic fields or activity on neighboring qubits can make things happen that we didn't intend.\n", + "\n", + "For large applications of quantum computers, it will be necessary to encode our qubits in a way that protects them from this noise. This is done by making gates much harder to do by mistake, or to implement in a manner that is slightly wrong.\n", + "\n", + "This is unfortunate for the single-qubit rotations $R_x(\\theta)$, $R_y(\\theta)$ and $R_z(\\theta)$. It is impossible to implent an angle $\\theta$ with perfect accuracy, such that you are sure that you are not accidentally implementing something like $\\theta + 0.0000001$. There will always be a limit to the accuracy we can achieve, and it will always be larger than is tolerable when we account for the build-up of imperfections over large circuits. We will therefore not be able to implement these rotations directly in fault-tolerant quantum computers, but will instead need to build them in a much more deliberate manner.\n", + "\n", + "Fault-tolerant schemes typically perform these rotations using multiple applications of just two gates: $H$ and $T$.\n", + "\n", + "The T gate is expressed in Qasm as\n", + "\n", + "```python\n", + "qc.t(0) # T gate on qubit 0\n", + "```\n", + "\n", + "It is a rotation around the z axis by $\\theta = \\pi/4$, and so is expressed mathematically as $R_z(\\pi/4) = e^{i\\pi/8~Z}$.\n", + "\n", + "In the following we assume that the $H$ and $T$ gates are effectively perfect. This can be engineered by suitable methods for error correction and fault-tolerance.\n", + "\n", + "Using the Hadamard and the methods discussed in the last chapter, we can use the T gate to create a similar rotation around the x axis.\n", + "\n", + "```python\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "```\n", + "\n", + "Now let's put the two together. Let's make the gate $R_z(\\pi/4)~R_x(\\pi/4)$.\n", + "\n", + "```python\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "```\n", + "\n", + "Since this is a single-qubit gate, we can think of it as a rotation around the Bloch sphere. That means that it is a rotation around some axis by some angle. We don't need to think about the axis too much here, but it clearly won't be simply x, y or z. More important is the angle.\n", + "\n", + "The crucial property of the angle for this rotation is that it is irrational. You can prove this yourself with a bunch of math, but you can also see the irrationality in action by applying the gate. Repeating it $n$ times results in a rotation around the same axis by a different angle. Due to the irrationality, the angles that result from different repetitions will never be the same.\n", + "\n", + "We can use this to our advantage. Each angle will be somewhere between $0$ and $2\\pi$. Let's split this interval up into $n$ slices of width $2\\pi/n$. For each repetition, the resulting angle will fall in one of these slices. If we look at the angles for the first $n+1$ repetitions, it must be true that at least one slice contains two of these angles. Let's use $n_1$ to denote the number of repetitions required for the first, and $n_2$ for the second.\n", + "\n", + "With this, we can prove something about the angle for $n_2-n_1$ repetitions. This is effectively the same as doing $n_2$ repetitions, followed by the inverse of $n_1$ repetitions. Since the angles for these are not equal \\(because of the irrationality\\) but also differ by no greater than $2\\pi/n$ \\(because they correspond to the same slice\\), the angle for $n_2-n_1$ repetitions satisfies\n", + "\n", + "$$\n", + "\\theta_{n_2-n_1} \\neq 0, ~~~~-\\frac{2\\pi}{n} \\leq \\theta_{n_2-n_1} \\leq \\frac{2\\pi}{n} .\n", + "$$\n", + "\n", + "We therefore have the ability to do rotations around small angles. We can use this to rotate around angles that are as small as we like, just by increasing the number of times we repeat this gate.\n", + "\n", + "By using many small-angle rotations, we can also rotate by any angle we like. This won't always be exact, but it is guaranteed to be accurate up to $2\\pi/n$, which can be made as small as we like. We now have power over the inaccuracies in our rotations.\n", + "\n", + "So far, we only have the power to do these arbitrary rotations around one axis. For a second axis, we simply do the $R_z(\\pi/4)$ and $R_x(\\pi/4)$ rotations in the opposite order.\n", + "\n", + "```python\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "```\n", + "\n", + "The axis that corresponds to this rotation is not the same as that for the gate considered previously. We therefore now have arbitrary rotation around two axes, which can be used to generate any arbitrary rotation around the Bloch sphere. We are back to being able to do everything, though it costs quite a lot of $T$ gates.\n", + "\n", + "It is because of this kind of application that $T$ gates are so prominent in quantum computation. In fact, the complexity of algorithms for fault-tolerant quantum computers is often quoted in terms of how many $T$ gates they'll need. This motivates the quest to achieve things with as few $T$ gates as possible. Note that the discussion above was simply intended to prove that $T$ gates can be used in this way, and does not represent the most efficient method we know." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "[1] [Barenco, *et al.* 1995](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.52.3457?cm_mc_uid=43781767191014577577895&cm_mc_sid_50200000=1460741020)\n", + "\n", + "[2] [Shende and Markov, 2009](http://dl.acm.org/citation.cfm?id=2011799)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.12.0',\n", + " 'qiskit-aer': '0.4.0',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.6',\n", + " 'qiskit-aqua': '0.6.4',\n", + " 'qiskit': '0.15.0'}" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/fun-matrices.ipynb b/translations/ja/ch-gates/fun-matrices.ipynb new file mode 100644 index 0000000..09a8c4c --- /dev/null +++ b/translations/ja/ch-gates/fun-matrices.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fun with Matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Manipulating matrices is the heart of how we analyze quantum programs. In this section we'll look at some of the most common tools that can be used for this." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unitary and Hermitian matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Studying universality is inherently an endeavour that needs math -- so we'll need to get ourselves some mathematical tools.\n", + "\n", + "Firstly, we need the concept of the Hermitian conjugate. For this we take a matrix $M$ , then we replace every element with its complex conjugate, and finally we transpose them \\(replace the top left element with the bottom right, and so on\\). This gives us a new matrix that we call $M^\\dagger$.\n", + "\n", + "Two families of matrices that are very important to quantum computing are defined by their relationship with the Hermitian conjugate. One is the family of unitary matrices, for which\n", + "\n", + "$$\n", + "U U^\\dagger = U^\\dagger U = 1.\n", + "$$\n", + "\n", + "This means that the Hermitian conjugate of a unitary is its inverse. This is another unitary $U^\\dagger$ with the power to undo the effects of $U$. All gates in quantum computing, with the exception of measurement, can be represented by unitary matrices.\n", + "\n", + "The other important family of matrices are the Hermitian matrices. These are the matrices that are unaffected by the Hermitian conjugate\n", + "\n", + "$$\n", + "H = H^\\dagger.\n", + "$$\n", + "\n", + "The matrices $X$, $Y$, $Z$ and $H$ are examples of Hermitian matrices that you've already seen \\(coincidentally, they are also all unitary since they are their own inverses\\)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Matrices as outer products" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In a previous section, we calculated many inner products, such as $\\langle0|0\\rangle =1$. These combine a bra and a ket to give us a single number. We can also combine them in a way that gives us a matrix, simply by putting them in the opposite order. This is called an outer product, and works by standard matrix multiplication. For example\n", + "\n", + "$$\n", + "|0\\rangle\\langle0|= \\begin{pmatrix} 1 \\\\\\\\ 0 \\end{pmatrix} \\begin{pmatrix} 1 & 0 \\end{pmatrix} = \\begin{pmatrix} 1&0 \\\\\\\\ 0&0 \\end{pmatrix},\\\\\\\\\n", + "|0\\rangle\\langle1| = \\begin{pmatrix} 1 \\\\\\\\ 0 \\end{pmatrix} \\begin{pmatrix} 0 & 1 \\end{pmatrix} = \\begin{pmatrix} 0&1 \\\\\\\\ 0&0 \\end{pmatrix},\\\\\\\\\n", + "|1\\rangle\\langle0| = \\begin{pmatrix} 0 \\\\\\\\ 1 \\end{pmatrix} \\begin{pmatrix} 1 & 0 \\end{pmatrix} = \\begin{pmatrix} 0&0 \\\\\\\\ 1&0 \\end{pmatrix},\\\\\\\\\n", + "|1\\rangle\\langle1| = \\begin{pmatrix} 0 \\\\\\\\ 1 \\end{pmatrix} \\begin{pmatrix} 0 & 1 \\end{pmatrix} = \\begin{pmatrix} 0&0 \\\\\\\\ 0&1 \\end{pmatrix}.\\\\\\\\\n", + "$$\n", + "\n", + "This also means that we can write any matrix purely in terms of outer products. In the examples above, we constructed the four matrices that cover each of the single elements in a single-qubit matrix, so we can write any other single-qubit matrix in terms of them.\n", + "\n", + "$$\n", + "M= \\begin{pmatrix} m_{0,0}&m_{0,1} \\\\\\\\ m_{1,0}&m_{1,1} \\end{pmatrix} = m_{0,0} |0\\rangle\\langle0|+ m_{0,1} |0\\rangle\\langle1|+ m_{1,0} |1\\rangle\\langle0|+ m_{1,1} |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "This property also extends to matrices for any number of qubits, $n$. We simply use the outer products of the corresponding $n$-bit strings." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Spectral form" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Outer products provide a very useful way of writing matrices. They are especially useful for unitaries, since we can simply capture the way that states are transformed.\n", + "\n", + "To do this, we first pick a set of orthogonal states that describe our qubits. For example, for two qubits we could simply choose $\\{|00\\rangle,|01\\rangle,|10\\rangle,|11\\rangle\\}$. Then we determine the state to which the unitary rotates each of these states. Let's call these $\\{|u_{00}\\rangle,|u_{01}\\rangle,|u_{10}\\rangle,|u_{11}\\rangle\\}$. The unitary that performs this can then be written\n", + "\n", + "$$\n", + "U = |u_{00}\\rangle\\langle00| + |u_{01}\\rangle\\langle01| + |u_{10}\\rangle\\langle10| +|u_{11}\\rangle\\langle11|\n", + "$$\n", + "\n", + "In a form like this, we can directly read out the effect of the unitary on the basis states we have chosen.\n", + "\n", + "This way of writing a unitary is not unique for each unitary. You can do it for every possible set of orthogonal input states. However, for at least one possible set of states it will take an especially simple form. These are the eigenstates of the matrix, for which\n", + "\n", + "$$\n", + "U = \\sum_j e^{ih_j} |h_j\\rangle\\langle h_j|\n", + "$$\n", + "\n", + "Here the unitary takes each state of this basis, which we've called $|h_j\\rangle$, and replaces it with $e^{ih_j}|h_j\\rangle$. Since the $e^{ih_j} |h_j\\rangle$ must themselves be valid quantum states, the $e^{ih_j}$ must be complex numbers of magnitude 1. In fact, this is exactly why we wrote them as a complex exponential; to ensure that they have magnitude 1, we simply need to ensure that the $h_j$ are real numbers.\n", + "\n", + "For these states, the unitary simply induces a global phase. The non-trivial effects of this unitary will come for superpositions of these states, for which a relative phase may be induced.\n", + "\n", + "Hermitian matrices also have well-defined eigenstates and eigenvalues, and can be written in the same form as the unitary matrix above.\n", + "\n", + "$$\n", + "H = \\sum_j h_j |h_j\\rangle\\langle h_j| .\n", + "$$\n", + "\n", + "In order to satisfy the constraint that $H = H^\\dagger$, we must determine what properties are required for the eigenstates and eigenvalues.\n", + "\n", + "For the eigenstates, we can see what happens when we take the outer product of a state with itself. For this we use the fact that the Hermitian conjugate of a product can be evaluated by taking the Hermitian conjugate of each factor, and then reversing the order of the factors. If we also note that the Hermitian conjugate of a ket is the corresponding bra, and vice versa, we find\n", + "\n", + "$$\n", + "(|h_j\\rangle\\langle h_j|)^\\dagger = \\langle (h_j|^\\dagger) ~(|h_j\\rangle^\\dagger) = |h_j\\rangle\\langle h_j| .\n", + "$$\n", + "\n", + "The outer product of a state with itself is therefore inherently Hermitian. To ensure that $H$ is Hermitian as a whole, we only need to require the eigenvalues $h_j$ to be real.\n", + "\n", + "If you were wondering about the coincidence of notation used above for $U$ and $H$ in spectral form, this should hopefully begin to explain it. Essentially, these two types of matrices differ only in that one must have real numbers for eigenvalues, and the other must have complex exponentials of real numbers. This means that, for every unitary, we can define a corresponding Hermitian matrix. For this we simply reuse the same eigenstates, and use the $h_j$ from each $e^{ih_j}$ as the corresponding eigenvalue.\n", + "\n", + "Similarly, for each Hermitian matrix there exists a unitary. We simply reuse the same eigenstates, and exponentiate the $h_j$ to create the eigenvalues $e^{ih_j}$. This can be expressed as\n", + "\n", + "$$\n", + "U = e^{iH}\n", + "$$\n", + "\n", + "Here we have used the standard definition of how to exponentiate a matrix. This has exactly the properties we require: preserving the eigenstates and exponentiating the eigenvalues.\n", + "\n", + "We can also build a whole family of unitaries for each given Hermitian, using\n", + "\n", + "$$\n", + "U(\\theta) = e^{i \\theta H},\n", + "$$\n", + "\n", + "where $\\theta$ is an arbitrary real number. This allows us to interpolate between $\\theta=0$, which will be the identity matrix, to $\\theta=1$, which is $U$. It also allows us to define a notion of a gate that is the square root of $U$: one that must be done twice to get the full effect of $U$. This would simply have $\\theta=1/2$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pauli decomposition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we saw above, it is possible to write matrices entirely in terms of outer products.\n", + "\n", + "$$\n", + "M= \\begin{pmatrix} m_{0,0}&m_{0,1} \\\\\\\\ m_{1,0}&m_{1,1} \\end{pmatrix} = m_{0,0} |0\\rangle\\langle0|+ m_{0,1} |0\\rangle\\langle1|+ m_{1,0} |1\\rangle\\langle0|+ m_{1,1} |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "Now we will see that it is also possible to write them completely in terms of Pauli operators. For this, the key thing to note is that\n", + "\n", + "$$\n", + "\\frac{1+Z}{2} = \\frac{1}{2}\\left[ \\begin{pmatrix} 1&0 \\\\\\\\0&1 \\end{pmatrix}+\\begin{pmatrix} 1&0 \\\\\\\\0&-1 \\end{pmatrix}\\right] = |0\\rangle\\langle0|,\\\\\\\\\\frac{1-Z}{2} = \\frac{1}{2}\\left[ \\begin{pmatrix} 1&0 \\\\\\\\0&1 \\end{pmatrix}-\\begin{pmatrix} 1&0 \\\\\\\\0&-1 \\end{pmatrix}\\right] = |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "This shows that $|0\\rangle\\langle0|$ and $|1\\rangle\\langle1|$ can be expressed using the identity matrix and $Z$. Now, using the property that $X|0\\rangle = |1\\rangle$, we can also produce\n", + "\n", + "$$\n", + "|0\\rangle\\langle1| = |0\\rangle\\langle0|X = \\frac{1}{2}(1+Z)~X = \\frac{X+iY}{2},\\\\\\\\\n", + "|1\\rangle\\langle0| = X|0\\rangle\\langle0| = X~\\frac{1}{2}(1+Z) = \\frac{X-iY}{2}.\n", + "$$\n", + "\n", + "Since we have all the outer products, we can now use this to write the matrix in terms of Pauli matrices:\n", + "\n", + "$$\n", + "M = \\frac{m_{0,0}+m_{1,1}}{2}~1~+~\\frac{m_{0,1}+m_{1,0}}{2}~X~+~i\\frac{m_{0,1}-m_{1,0}}{2}~Y~+~\\frac{m_{0,0}-m_{1,1}}{2}~Z.\n", + "$$\n", + "\n", + "This example was for a general single-qubit matrix, but the corresponding result is true also for matrices for any number of qubits. We simply start from the observation that\n", + "\n", + "$$\n", + "\\left(\\frac{1+Z}{2}\\right)\\otimes\\left(\\frac{1+Z}{2}\\right)\\otimes\\ldots\\otimes\\left(\\frac{1+Z}{2}\\right) = |00\\ldots0\\rangle\\langle00\\ldots0|,\n", + "$$\n", + "\n", + "and can then proceed in the same manner as above. In the end it can be shown that any matrix can be expressed in terms of tensor products of Pauli matrices:\n", + "\n", + "$$\n", + "M = \\sum_{P_{n-1},\\ldots,P_0 \\in \\{1,X,Y,Z\\}} C_{P_{n-1}\\ldots,P_0}~~P_{n-1} \\otimes P_{n-2}\\otimes\\ldots\\otimes P_0.\n", + "$$\n", + "\n", + "For Hermitian matrices, note that the coefficients $C_{P_{n-1}\\ldots,P_0}$ here will all be real.\n", + "\n", + "\n", + "\n", + "Now we have some powerful tools to analyze quantum operations, let's look at the operations we will need to analyze for our study of universality." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/images/basic3.png b/translations/ja/ch-gates/images/basic3.png new file mode 100644 index 0000000..7790155 Binary files /dev/null and b/translations/ja/ch-gates/images/basic3.png differ diff --git a/translations/ja/ch-gates/images/iden1.png b/translations/ja/ch-gates/images/iden1.png new file mode 100644 index 0000000..295f393 Binary files /dev/null and b/translations/ja/ch-gates/images/iden1.png differ diff --git a/translations/ja/ch-gates/images/iden2.png b/translations/ja/ch-gates/images/iden2.png new file mode 100644 index 0000000..f3396fd Binary files /dev/null and b/translations/ja/ch-gates/images/iden2.png differ diff --git a/translations/ja/ch-gates/images/iden3.png b/translations/ja/ch-gates/images/iden3.png new file mode 100644 index 0000000..7790155 Binary files /dev/null and b/translations/ja/ch-gates/images/iden3.png differ diff --git a/translations/ja/ch-gates/images/identities_1.svg b/translations/ja/ch-gates/images/identities_1.svg new file mode 100644 index 0000000..e9405b6 --- /dev/null +++ b/translations/ja/ch-gates/images/identities_1.svg @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-gates/images/pkb_ex1.svg b/translations/ja/ch-gates/images/pkb_ex1.svg new file mode 100644 index 0000000..5b26a70 --- /dev/null +++ b/translations/ja/ch-gates/images/pkb_ex1.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-gates/images/pkb_ex2.svg b/translations/ja/ch-gates/images/pkb_ex2.svg new file mode 100644 index 0000000..d574fb2 --- /dev/null +++ b/translations/ja/ch-gates/images/pkb_ex2.svg @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-gates/images/pkb_ex3.svg b/translations/ja/ch-gates/images/pkb_ex3.svg new file mode 100644 index 0000000..a609cf2 --- /dev/null +++ b/translations/ja/ch-gates/images/pkb_ex3.svg @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-gates/images/pkb_z_equiv.svg b/translations/ja/ch-gates/images/pkb_z_equiv.svg new file mode 100644 index 0000000..7e43b68 --- /dev/null +++ b/translations/ja/ch-gates/images/pkb_z_equiv.svg @@ -0,0 +1,687 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-gates/introduction.ipynb b/translations/ja/ch-gates/introduction.ipynb new file mode 100644 index 0000000..07f148d --- /dev/null +++ b/translations/ja/ch-gates/introduction.ipynb @@ -0,0 +1,59 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# はじめに" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これまで、単一量子ビットや単一量子ビットゲートによる興味深い効果を見てきましたが、量子コンピュータの真の威力は、量子ビット間の相互作用によって実現されるものです。この章では、複数量子ビットゲートを紹介し、複数量子ビットシステムの興味深い挙動を探ります。\n", + "\n", + "一般的には、ハードウェアに直接実装可能なゲートは1量子ビットまたは2量子ビットに対して影響を及ぼすことができます。一方で、我々の回路においては、より多くの量子ビットに対して影響を及ぼすことができる複雑なゲートを使用したくなることがあります。幸運なことに、このことは問題ではありません。ハードウェアにより実現された1量子ビット用のゲートと2量子ビット用のゲートがあれば、その他の全てのゲートを構築することができるからです。\n", + "\n", + "この章では、まず最も基本的なゲートと、それらのゲートに関する説明と分析に使用する数学について紹介します。次に、これらのゲートがあらゆる量子アルゴリズムを構築するために使用できることを証明する方法を示します。\n", + "\n", + "その後、小規模の量子ゲートに関する用途について見ていくことで章を締めくくります。例として、1量子ビット操作や2量子ビット操作を用いてトフォリゲートのような3量子ビットゲートを組み立てる方法について見ていきます。\n", + "\n", + "![A Toffoli made from single- and two-qubit gates](images/basic3.png)\n", + "*これは3つの量子ビット(q0,q1,q2)をそれぞれ持つトフォリゲートです。この回路例では、q0はq2と接続されていますが、q0はq1と接続されていません。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/more-circuit-identities.ipynb b/translations/ja/ch-gates/more-circuit-identities.ipynb new file mode 100644 index 0000000..a69151b --- /dev/null +++ b/translations/ja/ch-gates/more-circuit-identities.ipynb @@ -0,0 +1,917 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# さらなる回路の等価性" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit\n", + "from qiskit.circuit import Gate\n", + "from math import pi\n", + "qc = QuantumCircuit(2)\n", + "c = 0\n", + "t = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子コンピューターをプログラムするとき、私たちの目標は常に、基本的なパーツから有用な量子回路を構築することです。ただし、必要とする基本的なパーツがすべて揃っていない場合もあります。このセクションでは、基本的なゲートを相互に変換する方法と、ゲートを使用して少し複雑な(ただしかなり基本的な)ゲートを構築する方法について説明します。\n", + "\n", + "この章で説明する手法の多くは、1995年にバレンコと共著者による論文で最初に提案されました[1]。\n", + "\n", + "## 目次\n", + "\n", + "1. [制御ZをCNOTから作成する](#c-from-cnot)\n", + "2. [量子ビットのスワップ](#swapping) \n", + "3. [制御回転](#controlled-rotations)\n", + "4. [トフォリゲート](#ccx)\n", + "5. [HとTによる任意の回転](#arbitrary-rotations)\n", + "6. [参考文献](#references)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 制御ZをCNOTから作成する \n", + "\n", + "制御Zまたは`cz`ゲートは、よく使用されるまた別の2量子ビットゲートです。 CNOTは、その制御量子ビットが $ |1\\rangle $の状態にあるときはその標的量子ビットに$X$を適用しますが、同じように、制御$Z$は、同じ場合に𝑍を適用します。 Qiskitでは、制御$Z$を直接呼び出すことができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 制御Z\n", + "qc.cz(c,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、cとtは制御量子ビットと標的量子ビットです。ただし、IBM Qデバイスでは、直接適用できる2量子ビットゲートはCNOTだけです。したがって、変換する方法が必要です。\n", + "\n", + "このプロセスは非常に簡単です。アダマールが$|0\\rangle$および$|1\\rangle$の状態を$|+\\rangle$および$|-\\rangle$の状態に変換することはわかっています。 $|+\\rangle$と$|-\\rangle$の状態に対する𝑍ゲートの影響は、$|0\\rangle$と$|1\\rangle$の状態に対する$X$の作用と同じであることもわかっています。このことから、または単純に行列を乗算することから、\n", + "\n", + "$$\n", + "H X H = Z,\\\\\\\\\n", + "H Z H = X.\n", + "$$\n", + "\n", + "同じトリックを使用して、CNOTを制御$Z$に変換できます。私たちがしなければならないのは、CNOTの前と後で、アダマールを標的量子ビットに作用させるだけです。これにより、その量子ビットに適用された$X$が$Z$に変換されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# こちらも制御Z\n", + "qc.h(t)\n", + "qc.cx(c,t)\n", + "qc.h(t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "より一般的には、単一のCNOTの前後に、正しい回転を配置することにより、ブロッホ球での角度$\\pi$の任意の回転の制御バージョンに変換できます。たとえば、制御$Y$は:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# 制御Y\n", + "qc.sdg(t)\n", + "qc.cx(c,t)\n", + "qc.s(t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "そして、制御$H$は:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# 制御H\n", + "qc.ry(pi/4,t)\n", + "qc.cx(c,t)\n", + "qc.ry(-pi/4,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 量子ビットのスワップ " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "a = 0\n", + "b = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子コンピューター上で情報を移動する必要なときがあります。これを物理的に移動することで実行できるように、実装された量子ビットもありますが、別のオプションとしては、2つの量子ビット間で状態を移動することで情報の移動を実現します。これはSWAPゲートによって行われます。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# 量子ビットaとbの状態をスワップする\n", + "qc.swap(a,b)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記のコマンドはこのゲートを直接呼び出しますが、標準のゲートセットを使用してこれを作成する方法を見てみましょう。このためには、いくつかの例を検討する必要があります。\n", + "\n", + "まず、量子ビットaが$|1\\rangle$の状態で、量子ビットbが$|0\\rangle$の状態である場合を見てみましょう。これには、次のゲートを適用します:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# aの1をaからbに交換\n", + "qc.cx(a,b) # aからbへ1をコピーする\n", + "qc.cx(b,a) # bの1を使用してaの状態を0に回転\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、量子ビットbを状態$|1\\rangle$にし、量子ビットaを状態$|0\\rangle$にする効果があります。この場合、少なくともSWAPを実行したことになります。\n", + "\n", + "次に、この状態を元の状態に戻します。ご想像のとおり、上記のプロセスの逆でこれを行うことができます:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# qをbからaに入れ替える\n", + "qc.cx(b,a) # 1をbからaにコピーする\n", + "qc.cx(a,b) # aの1を使用してbの状態を0に回転\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらの2つのプロセスでは、一方の最初のゲートが他方の初期状態に影響を与えないことに注意してください。たとえば、bの$|1\\rangle$をaに交換する場合、最初のゲートは`cx(b,a)`です。代わりに、これが最初にbに$|1\\rangle$がなかった状態に適用された場合、効果はありません。\n", + "\n", + "また、これらの2つのプロセスでは、一方の最終ゲートが他方の最終状態に影響を与えないことに注意してください。たとえば、$|1\\rangle$をaからbにスワップするときに必要な最後の`cx(b,a)`は、$|1\\rangle$がbにない状態には影響しません。\n", + "\n", + "これらの観察結果を元に、一方のゲートからもう一方のゲートに無効なゲートを追加して、2つのプロセスを組み合わせることができます。例えば、" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、aからbに$|1\\rangle$を交換するプロセスと考えることができますが、最初は役に立たない `qc.cx(b,a)`があります。また、$|1\\rangle$をbからaに交換するプロセスと考えることもできますが、最後に無用な`qc.cx(b,a)`があります。どちらにしても、結果は、双方向でスワップを実行できるプロセスです。\n", + "\n", + "また、状態$|00\\rangle$に対して正しく効果を発揮します。これは対称的であるため、状態を入れ替えても影響はありません。制御量子ビットが$|0\\rangle$の場合、CNOTゲートは効果がないため、プロセスは何もしません。\n", + "\n", + "状態$|11\\rangle$も対称的であるため、スワップによる効果はないに等しいです。この場合、上記のプロセスの最初のCNOTゲートは2番目のゲートに影響を与えず、3番目のゲートは最初のゲートを元に戻します。したがって、全体の効果は確かにないに等しいです。\n", + "\n", + "このようにして、SWAPゲートを標準ゲートセットである単一量子ビットの回転ゲートとCNOTゲートに分解する方法を見つけました。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# 量子ビットaとbの状態のスワップ\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、$|00\\rangle$、 $|01\\rangle$、 $|10\\rangle$、 $|11\\rangle$、およびそれらのすべての重ね合わせに対して機能します。したがって、可能なすべての2量子ビット状態をスワップします。\n", + "\n", + "CNOTゲートの順序を変更した場合も、同じ効果が得られます:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# 量子ビットaとbの状態を入れ替えます\n", + "qc.cx(a,b)\n", + "qc.cx(b,a)\n", + "qc.cx(a,b)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、SWAPゲートを取得するための同様に有効な方法です。\n", + "\n", + "ここでの導出には、z基底状態に基づいていましたが、状態 $|+\\rangle$ と $|-\\rangle$でも同じように量子ビットのスワップができ、SWAPゲートを実装する方法は、完全に同じです。\n", + "\n", + "#### 練習問題:\n", + "- 状態$|+\\rangle$ と $|-\\rangle$ で量子ビットをスワップする回路を作り、それが上記の回路と等価であることを示してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 制御回転 \n", + "\n", + "制御$\\pi$回転を単一のCNOTゲートから構築する方法についてをみてきました。 次に、任意の制御回転を構築する方法をみていきます。\n", + "\n", + "まず、y軸を中心とした任意の回転を考えてみましょう。 具体的には、次の一連のゲートを考えてみてください。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "theta = pi # thetaは何でもよい (任意の値としてpiを選択)\n", + "qc.ry(theta/2,t)\n", + "qc.cx(c,t)\n", + "qc.ry(-theta/2,t)\n", + "qc.cx(c,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は、制御量子ビットが状態 $|0\\rangle$の場合、$R_y(\\theta/2)$の後にその逆の $R_y(-\\theta/2)$ が続くだけです。この最終的な効果は、ないに等しいです。しかし、制御量子ビットが $|1\\rangle$ の場合、`ry(-theta/2)`の前後にXゲートが適用されます。これは、y回転の方向を反転し、2番目の $R_y(\\theta/2)$ を作成する効果があります。したがって、この場合の正味の作用は、制御バージョンの回転 $R_y(\\theta)$ を作ることと同じになります。\n", + "\n", + "この方法が機能するのは、xとy軸が直行し、そのためにxゲートが回転の方法を反転させるためです。したがって、制御$R_z(\\theta)$を作るのも同じように機能します。制御 $R_x(\\theta)$ は、CNOTゲートを使って同じように作ることができます。\n", + "\n", + "また、単一量子ビット回転$U$の制御バージョンも作ることができます。そのためには、3つの回転A、B、Cと、次のような位相 $\\alpha$ を見つけるだけです。\n", + "\n", + "$$\n", + "ABC = I, ~~~e^{i\\alpha}AZBZC = U\n", + "$$\n", + "\n", + "制御Zゲートを使うことで、上の左の式を制御ビットが$|0\\rangle$の状態の際に発生させ、右の式を制御ビットが$|1\\rangle$の状態のときに発生させます。正しい位相を得るために制御ビット側で$R_z(2\\alpha)$回転も使われ、これは、重ね合わせ状態がある場合に重要です。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "A = Gate('A', 1, [])\n", + "B = Gate('B', 1, [])\n", + "C = Gate('C', 1, [])\n", + "alpha = 1 # 回路描写のために任意のalphaを設定" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.append(C, [t])\n", + "qc.cz(c,t)\n", + "qc.append(B, [t])\n", + "qc.cz(c,t)\n", + "qc.append(A, [t])\n", + "qc.u1(alpha,c)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![A controlled version of a gate V](images/iden1.png)\n", + "\n", + "ここで、`A`、 `B` 、`C`はそれぞれ、$A$ 、$B$ 、$C$を実装するゲートです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. トフォリ \n", + "\n", + "トフォリゲートは、2つの制御と1つの標的を持つ3量子ビットゲートです。両方の制御ビットが $|1\\rangle$ の状態の時のみ標的ビットにXを適用します。標的ビットの最終状態は、標的ビットの初期状態が $|0\\rangle$ または $|1\\rangle$ のどちらであったかに応じて、2つの制御ビットのANDまたはNANDのいずれかに等しくなります。トフォリは、制御・制御NOTとも考えることもでき、CCXゲートとも呼ばれます。 " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3)\n", + "a = 0\n", + "b = 1\n", + "t = 2\n", + "# 制御ビットa、b、標的ビットtのトフォリ\n", + "qc.ccx(a,b,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "単一量子ビットゲートと2量子ビットゲートからこれを構築する方法を確認するために、まず、より一般的なものを構築する方法を示します:任意の単一量子ビット回転Uについての、任意の制御・制御Uです。そのためには、制御バージョンの $V = \\sqrt{U}$ と $V^\\dagger$ の定義が必要です。以下のコードでは、未定義のサブルーチン `cv` と `cvdg` の代わりに、それぞれ `cu1(theta,c,t)` と `cu1(-theta,c,t)` を使っています。制御ビットは量子ビット $a$ と $b$で、標的ビットは量子ビット $t$ です。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3)\n", + "qc.cu1(theta,b,t)\n", + "qc.cx(a,b)\n", + "qc.cu1(-theta,b,t)\n", + "qc.cx(a,b)\n", + "qc.cu1(theta,a,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![A doubly controlled version of a gate V](images/iden2.png)\n", + "\n", + "2つの制御ビットの各値をみていくことで、両方の制御ビットが1の場合にのみ、Uゲートが標的ビットに適用されることを確認できます。すでに説明したアイディアを使って、二重制御されたUゲートのある回路を使って、各制御Vゲートを実装することができるでしょう。これから、トフォリゲートを実装するために必要なCNOTゲートの数は最小で6であることがわかります[2]。\n", + "\n", + "\n", + "![A Toffoli](images/iden3.png)\n", + "\n", + "\n", + "トフォリは、量子コンピューティングでANDゲートを実装するための唯一の方法ではありません。同じ効果があり、相対位相を持つ他のゲートも定義することができます。これらの場合、より少ないCNOTでゲートを実装できます。\n", + "\n", + "例えば、制御アダマールゲートと制御$Z$ゲートを使うとします。これらのゲートは、両方とも1つのCNOTで実装できます。これらのゲートから次の回路を作成できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3)\n", + "qc.ch(a,t)\n", + "qc.cz(b,t)\n", + "qc.ch(a,t)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "2つの制御ビットの状態が $|00\\rangle$ の場合、標的ビットに対して何も行いません。$|11\\rangle$ の場合、標的ビットには、前後にHゲートのある$Z$ゲートが適用されます。$|01\\rangle$ と $|10\\rangle$ の状態の時には、標的ビットには2つのアダマール(相互に打ち消しあう)だけ、または$Z$(相対位相のみ変化させる)が適用されます。また、標的ビットは制御ビットが$|11\\rangle$状態でのみ変更されるため、制御ビットのANDの効果も生じます(ただしCNOTゲート3つのときのみの効果)。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. HとTによる任意の回転 \n", + "\n", + "現在のデバイスの量子ビットはノイズの影響を受けやすく、基本的にはエラーを起こすゲートで構成されています。温度、磁場のゆらぎ、隣の量子ビットの動きなどのような単純なことが、意図していないことを引き起こす可能性があります。\n", + "\n", + "量子コンピューターの大規模なアプリケーションでは、このノイズから量子ビットを保護するように量子ビットをエンコードする必要があります。これは、ゲートを間違って実行することを難しくするか、またはわずかに間違った方法で実装することによって行われます。\n", + "\n", + "単一量子ビットの回転$R_x(\\theta)$、 $R_y(\\theta)$ 、 $R_z(\\theta)$ は残念ですが、角度 $\\theta$ を完璧な精度で実装するのは不可能です。これは、あなたが、角度 $\\theta + 0.0000001$ のようなものを間違って実装することがないのと同じです。達成できる精度には常に限界があり、大きな回路ではエラーの積み重ねがあることを考慮すると、その精度は許容範囲を常に超えています。したがって、これらの回転をフォールトトレラントな量子コンピューターに直接実装することはできませんが、代わりに、より工夫した方法で回転を構築する必要があります。\n", + "\n", + "フォールトトレラントのスキームでは、通常、2つのみのゲート、$H$ と $T$ を複数適用することによってこれらの回転を実行します。\n", + "\n", + "Tゲートは、Qiskitでは`.t()`として表現されます:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.t(0) # 量子ビット0へTゲートを適用\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これはz軸を中心とした $\\theta = \\pi/4$ の回転なので、数学的には $R_z(\\pi/4) = e^{i\\pi/8~Z}$ と表されます。\n", + "\n", + "以下では、$H$ と $T$ ゲートの効果が完全であると仮定します。それは、エラー訂正とフォールトトレランスに適した方法で設計できます。\n", + "\n", + "アダマールと前の章で説明した方法を使用すると、Tゲートを使って、x軸を中心に同様の回転を作成できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "では、2つを組み合わせてみましょう。$R_z(\\pi/4)~R_x(\\pi/4)$ ゲートを作りましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは単一量子ビットゲートであるため、ブロッホ球の周りの回転と考えることができます。つまり、ある軸を中心としたある角度の回転です。ここでは軸について考えすぎる必要はありませんが、単にx、y、zの回転になることはありません。より重要なのは角度です。\n", + "\n", + "この回転の角度の重要な特性は、それが無理数であることです。これは、たくさんの数学で自分で証明できますが、ゲートを適用することで、動作から無理数であることを確認することもできます。 𝑛回繰り返すと、同じ軸を中心に異なる角度で回転します。無理数性により、異なる繰り返しから生じる角度は同じになることはありません。\n", + "\n", + "これを有利に利用できます。各角度は$0$ から $2\\pi$の間のどこかになります。この間隔を幅 $2\\pi/n$ の $n$個のスライスに分割してみましょう。繰り返す度に、その角度はこれらのスライスのどこか1つになります。最初の $n+1$ 回の繰り返しの角度を見ると、少なくとも1つのスライスにこれらの角度が2つ含まれていることは事実です。 $n_1$ を最初の繰り返し数、 $n_2$ を2番目の繰り返し数とします。\n", + "\n", + "これにより、$n_2-n_1$ 回の繰り返しの際の角度について何かを証明できます。これは実質的に $n_2$ 回の繰り返しの後に $n_1$ 回の逆向きの繰り返しをするのと同じです。これらの角度は等しくない(無理数のため)だけでなく、 $2\\pi/n$ 以下の差(同じスライスに対応するため)であるため、 $n_2-n_1$ 回の繰り返しの角度は、\n", + "\n", + "$$\n", + "\\theta_{n_2-n_1} \\neq 0, ~~~~-\\frac{2\\pi}{n} \\leq \\theta_{n_2-n_1} \\leq \\frac{2\\pi}{n} .\n", + "$$\n", + "\n", + "したがって、小さな角度で回転させることができます。 これを使用して、このゲートを繰り返す回数を増やすだけで、好きなだけ小さい角度で回転できます。\n", + "\n", + "小さな角度の回転を多用することで、好きな角度で回転させることもできます。 これは常に正確であるとは限りませんが、最大$2\\pi/n$まで正確であることが保証されています。これは、好きなだけ小さくすることができます。 これで、ローテーションの不正確さを管理できるようになりました。\n", + "\n", + "これまでのところ、私たちはこれらの任意の回転を1つの軸を中心に行う力しか持っていません。 2番目の軸については、$R_z(\\pi/4)$ と $R_x(\\pi/4)$ の回転を逆の順序で行うだけです。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.h(0)\n", + "qc.t(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回転に対応する軸は、以前に検討したゲートの軸と同じではありません。 したがって、2つの軸を中心とした任意の回転が得られ、ブロッホ球を中心とした任意の回転を生成するために使用できます。 $T$ ゲートのコストがかなりかかりますが、すべてを実行できるようになりました。\n", + "\n", + "$T$ ゲートが量子計算でよく見られるのは、このようなアプリケーションのためです。 実際、フォールトトレラントな量子コンピューターのアルゴリズムの複雑さは、 $T$ ゲートがいくつ必要かという点でしばしば引用されます。 これは、できるだけ少ない $T$ ゲートで達成するための探求の動機になります。 上記の説明は、 $T$ ゲートをこのように使用できることを証明するためのものであり、私たちが知っている最も効率的な方法を表すものではないことに注意してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "[1] [Barenco, *et al.* 1995](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.52.3457?cm_mc_uid=43781767191014577577895&cm_mc_sid_50200000=1460741020)\n", + "\n", + "[2] [Shende and Markov, 2009](http://dl.acm.org/citation.cfm?id=2011799)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.1',\n", + " 'qiskit-aer': '0.5.1',\n", + " 'qiskit-ignis': '0.3.0',\n", + " 'qiskit-ibmq-provider': '0.7.1',\n", + " 'qiskit-aqua': '0.7.1',\n", + " 'qiskit': '0.19.2'}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/multiple-qubits-entangled-states.ipynb b/translations/ja/ch-gates/multiple-qubits-entangled-states.ipynb new file mode 100644 index 0000000..3e29a77 --- /dev/null +++ b/translations/ja/ch-gates/multiple-qubits-entangled-states.ipynb @@ -0,0 +1,844 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 複数量子ビットともつれ状態" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "単一の量子ビットは興味深いものではありますが、これらは個別では計算的に優位性をもたらすものではありません。ここでは複数の量子ビットに関する表現方法と、これらの量子ビットがどのように相互作用することができるかについて見ていきます。これまでに、2次元ベクトルを使用して1つの量子ビットに関する状態を表現することができることを学びました。今回は複数量子ビットの状態についてどのように表現することができるかについて見ていくことにします。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "1. [複数量子ビット状態の表現](#represent) \n", + " 1.1 [練習問題](#ex1)\n", + "2. [複数量子ビット状態ベクトル上の単一量子ビットゲート](#single-qubit-gates) \n", + " 2.1 [練習問題](#ex2)\n", + "3. [複数量子ビットゲート](#multi-qubit-gates) \n", + " 3.1 [CNOTゲート](#cnot) \n", + " 3.2 [もつれ状態](#entangled) \n", + " 3.3 [もつれ状態の可視化](#visual) \n", + " 3.4 [練習問題](#ex3) \n", + "\n", + "\n", + "## 1. 複数量子ビット状態の表現 \n", + "\n", + "単一の量子ビットは2つの状態を持つことができ、その状態は2つの複素振幅を持つことを見てきました。同様に、2量子ビットは4つの状態を持ちます。\n", + "\n", + "`00` `01` `10` `11`\n", + "\n", + "さらに、2量子ビットの状態を説明するには4つの複素振幅が必要です。これらの振幅を以下のように4次元ベクトルで表します。\n", + "\n", + "$$ |a\\rangle = a_{00}|00\\rangle + a_{01}|01\\rangle + a_{10}|10\\rangle + a_{11}|11\\rangle = \\begin{bmatrix} a_{00} \\\\ a_{01} \\\\ a_{10} \\\\ a_{11} \\end{bmatrix} $$\n", + "\n", + "観測に関するルールについても単一量子ビットの時と同様に機能します。\n", + "\n", + "$$ p(|00\\rangle) = |\\langle 00 | a \\rangle |^2 = |a_{00}|^2$$\n", + "\n", + "また、規格化条件などについても同様です。\n", + "\n", + "$$ |a_{00}|^2 + |a_{01}|^2 + |a_{10}|^2 + |a_{11}|^2 = 1$$\n", + "\n", + "2つの分離された量子ビットがあった場合、テンソル積を使用することで2量子ビットの状態を説明することができます。\n", + "\n", + "$$ |a\\rangle = \\begin{bmatrix} a_0 \\\\ a_1 \\end{bmatrix}, \\quad |b\\rangle = \\begin{bmatrix} b_0 \\\\ b_1 \\end{bmatrix} $$\n", + "\n", + "$$ \n", + "|ba\\rangle = |b\\rangle \\otimes |a\\rangle = \\begin{bmatrix} b_0 \\times \\begin{bmatrix} a_0 \\\\ a_1 \\end{bmatrix} \\\\ b_1 \\times \\begin{bmatrix} a_0 \\\\ a_1 \\end{bmatrix} \\end{bmatrix} = \\begin{bmatrix} b_0 a_0 \\\\ b_0 a_1 \\\\ b_1 a_0 \\\\ b_1 a_1 \\end{bmatrix}\n", + "$$\n", + "\n", + "さらに、同じルールに則り、テンソル積を使用して任意の数の量子ビット状態について説明することができます。3量子ビットの場合の例は以下の通りです。\n", + "\n", + "$$ \n", + "|cba\\rangle = \\begin{bmatrix} c_0 b_0 a_0 \\\\ c_0 b_0 a_1 \\\\ c_0 b_1 a_0 \\\\ c_0 b_1 a_1 \\\\\n", + " c_1 b_0 a_0 \\\\ c_1 b_0 a_1 \\\\ c_1 b_1 a_0 \\\\ c_1 b_1 a_1 \\\\\n", + " \\end{bmatrix}\n", + "$$\n", + "\n", + "$n$個の量子ビットがある場合、$2^n$の複素振幅について記録する必要があります。これらのベクトルは量子ビットの数と共に指数関数的に大きくなります。これが多数の量子ビットを用いた量子コンピューターをシミュレートすることが大変困難である理由です。現代のラップトップは約20量子ビットのシミュレートは簡単にできますが、100量子ビットになると最も大きいスーパーコンピューターでも手に負えません。\n", + "\n", + "回路の例を見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, Aer, assemble\n", + "import numpy as np\n", + "from qiskit.visualization import plot_bloch_multivector, plot_histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(3)\n", + "# Apply H-gate to each qubit:\n", + "for qubit in range(3):\n", + " qc.h(qubit)\n", + "# See the circuit:\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "各量子ビットは$|+\\rangle$の状態をとっており、ベクトルは以下のとおりとなります。\n", + "\n", + "$$ \n", + "|{+++}\\rangle = \\frac{1}{\\sqrt{8}}\\begin{bmatrix} 1 \\\\ 1 \\\\ 1 \\\\ 1 \\\\\n", + " 1 \\\\ 1 \\\\ 1 \\\\ 1 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector} = \n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} & \\tfrac{1}{\\sqrt{8}} \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's see the result\n", + "svsim = Aer.get_backend('aer_simulator')\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "\n", + "# In Jupyter Notebooks we can display this nicely using Latex.\n", + "# If not using Jupyter Notebooks you may need to remove the \n", + "# array_to_latex function and use print(final_state) instead.\n", + "from qiskit.visualization import array_to_latex\n", + "array_to_latex(final_state, prefix=\"\\\\text{Statevector} = \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "期待した結果が得られたことが確認できます。\n", + "\n", + "### 1.1 練習問題:\n", + "\n", + "1.\t次の量子ビットのテンソル積の(状態)ベクトルを書け。 \n", + " a)\t$|0\\rangle|1\\rangle$ \n", + " b)\t$|0\\rangle|+\\rangle$ \n", + " c)\t$|+\\rangle|1\\rangle$ \n", + " d)\t$|-\\rangle|+\\rangle$ \n", + "2.\t状態を2つの別々の量子ビットとして記述せよ。\n", + " $|\\psi\\rangle = \\tfrac{1}{\\sqrt{2}}|00\\rangle + \\tfrac{i}{\\sqrt{2}}|01\\rangle $\n", + " \n", + "\n", + "## 2. 複数量子ビット状態ベクトル上の単一量子ビットゲート\n", + "\n", + "Xゲートは以下の行列で表現されます。\n", + "\n", + "$$\n", + "X = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix}\n", + "$$\n", + "\n", + "さらに、Xゲートは$|0\\rangle$の状態に以下のように作用します。\n", + "\n", + "$$\n", + "X|0\\rangle = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix}\\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 1\\end{bmatrix}\n", + "$$\n", + "\n", + "しかしながら、Xゲートが複数量子ビットベクトル内の量子ビットに対してどのような作用をするのかははっきりしません。幸運にもルールはかなり単純です。複数量子ビットの状態ベクトルを計算するのにテンソル積を使用したように、テンソル積を使用してこれらの状態ベクトルに作用する行列を計算することができます。例えば、以下の回路においては、" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.x(1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "HとXによる同時演算はそれらのテンソル積を用いて表現可能です。\n", + "\n", + "$$\n", + "X|q_1\\rangle \\otimes H|q_0\\rangle = (X\\otimes H)|q_1 q_0\\rangle\n", + "$$\n", + "\n", + "演算は以下の通りとなり、\n", + "\n", + "$$\n", + "X\\otimes H = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix} \\otimes \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix} = \\frac{1}{\\sqrt{2}}\n", + "\\begin{bmatrix} 0 \\times \\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}\n", + " & 1 \\times \\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}\n", + " \\\\ \n", + " 1 \\times \\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}\n", + " & 0 \\times \\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}\n", + "\\end{bmatrix} = \\frac{1}{\\sqrt{2}}\n", + "\\begin{bmatrix} 0 & 0 & 1 & 1 \\\\\n", + " 0 & 0 & 1 & -1 \\\\\n", + " 1 & 1 & 0 & 0 \\\\\n", + " 1 & -1 & 0 & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "4次元状態ベクトル$|q_1 q_0\\rangle$に適用することができます。表記がかなり煩雑になるため、以下のとおり簡略化した表記法がよく用いられます。\n", + "\n", + "$$\n", + "X\\otimes H = \n", + "\\begin{bmatrix} 0 & H \\\\\n", + " H & 0\\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "手で計算する代わりにQiskitの`aer_simulator`を使用すると計算をしてくれます。Aer simulatorは、回路にある全てのゲートを乗算して量子回路全体を表現する一つのユニタリー行列にしてくれます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "usim = Aer.get_backend('aer_simulator')\n", + "qc.save_unitary()\n", + "qobj = assemble(qc)\n", + "unitary = usim.run(qobj).result().get_unitary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果を見てみます:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Circuit = }\n", + "\n", + "\\begin{bmatrix}\n", + "0 & 0 & \\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}} \\\\\n", + " 0 & 0 & \\tfrac{1}{\\sqrt{2}} & -\\tfrac{1}{\\sqrt{2}} \\\\\n", + " \\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}} & 0 & 0 \\\\\n", + " \\tfrac{1}{\\sqrt{2}} & -\\tfrac{1}{\\sqrt{2}} & 0 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# In Jupyter Notebooks we can display this nicely using Latex.\n", + "# If not using Jupyter Notebooks you may need to remove the \n", + "# array_to_latex function and use print(unitary) instead.\n", + "from qiskit.visualization import array_to_latex\n", + "array_to_latex(unitary, prefix=\"\\\\text{Circuit = }\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1量子ビットのみにゲートを適用する場合(以下の回路など)、単位行列を使用してテンソル積を実行します。例:\n", + "\n", + "$$ X \\otimes I $$" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.x(1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Circuit = } \n", + "\\begin{bmatrix}\n", + "0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1 \\\\\n", + " 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Simulate the unitary\n", + "usim = Aer.get_backend('aer_simulator')\n", + "qc.save_unitary()\n", + "qobj = assemble(qc)\n", + "unitary = usim.run(qobj).result().get_unitary()\n", + "# Display the results:\n", + "array_to_latex(unitary, prefix=\"\\\\text{Circuit = } \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitが以下の通りテンソル積を計算したのが見て取れます。\n", + "$$\n", + "X \\otimes I =\n", + "\\begin{bmatrix} 0 & I \\\\\n", + " I & 0\\\\\n", + "\\end{bmatrix} = \n", + "\\begin{bmatrix} 0 & 0 & 1 & 0 \\\\\n", + " 0 & 0 & 0 & 1 \\\\\n", + " 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "### 2.1 練習問題: \n", + "\n", + "1. 次の一連のゲートにより作成される単一量子ビットユニタリー ($U$) を計算せよ。$U = XZH$ 結果の確認にはQisikitのAer simulatorを使用すること。\n", + "2. 上記の回路についてゲートを変更してみよ。テンソル積を計算し、Aer simulatorを用いて答え合わせをせよ。\n", + "\n", + "**Note:** 本、ソフトウェア、ウェブサイトによって量子ビットの順序が異なる。これは、同じ回路のテンソル積は全く異なるもののように見えることとなり、頭痛の種になることがある。他の情報源を参照する場合は注意すること。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 複数量子ビットゲート \n", + "\n", + "複数量子ビットの状態について表現方法を知ることができたため、複数量子ビットがそれぞれどのように相互作用するかについて学ぶ準備ができました。重要な2量子ビットゲートはCNOTゲートです。\n", + "\n", + "### 3.1 CNOTゲート \n", + "\n", + "このゲートは[計算の原子](../ch-states/atoms-computation.html)の章に出てきました。このゲートは条件付きゲートであり、1つ目の量子ビット(コントロール)が$|1\\rangle$の場合に2つ目の量子ビット(ターゲット)にXゲートを適用する、というものです。このゲートは`q0`をコントロール、`q1`をターゲットとして以下のような回路として描画できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# Apply CNOT\n", + "qc.cx(0,1)\n", + "# See the circuit:\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットが$|0\\rangle$と$|1\\rangle$の重ね合わせでない場合、このゲートはとても単純で直感的にわかりやすいです。古典の真理値表を使用できます。\n", + "\n", + "| Input (t,c) | Output (t,c) |\n", + "|:-----------:|:------------:|\n", + "| 00 | 00 |\n", + "| 01 | 11 |\n", + "| 10 | 10 |\n", + "| 11 | 01 |\n", + "\n", + "4次元状態ベクトルに従うと、どちらの量子ビットがコントロールでどちらがターゲットかにより、以下の2つの行列のいずれかになります。\n", + "\n", + "$$\n", + "\\text{CNOT} = \\begin{bmatrix} 1 & 0 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 1 \\\\\n", + " 0 & 0 & 1 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + " \\end{bmatrix}, \\quad\n", + "\\text{CNOT} = \\begin{bmatrix} 1 & 0 & 0 & 0 \\\\\n", + " 0 & 1 & 0 & 0 \\\\\n", + " 0 & 0 & 0 & 1 \\\\\n", + " 0 & 0 & 1 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$\n", + "\n", + "本、シミュレーター、論文によって量子ビットの順番は異なります。今回のケースでは、左の行列が上記回路のCNOTに相当します。この行列は状態ベクトルの$|01\\rangle$と$|11\\rangle$の振幅を交換します。\n", + "\n", + "$$ \n", + "|a\\rangle = \\begin{bmatrix} a_{00} \\\\ a_{01} \\\\ a_{10} \\\\ a_{11} \\end{bmatrix}, \\quad \\text{CNOT}|a\\rangle = \\begin{bmatrix} a_{00} \\\\ a_{11} \\\\ a_{10} \\\\ a_{01} \\end{bmatrix} \\begin{matrix} \\\\ \\leftarrow \\\\ \\\\ \\leftarrow \\end{matrix}\n", + "$$\n", + "\n", + "これまで古典的な状態に対する作用について見てきましたが、今度は重ね合わせ状態の量子ビットに対しての作用を見ていきましょう。1量子ビットを$|+\\rangle$の状態にします。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# Apply H-gate to the first:\n", + "qc.h(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector = }\n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{\\sqrt{2}} & \\tfrac{1}{\\sqrt{2}} & 0 & 0 \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's see the result:\n", + "svsim = Aer.get_backend('aer_simulator')\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "# Print the statevector neatly:\n", + "array_to_latex(final_state, prefix=\"\\\\text{Statevector = }\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは期待通りに$|0\\rangle \\otimes |{+}\\rangle = |0{+}\\rangle$の状態を作ります。\n", + "\n", + "$$\n", + "|0{+}\\rangle = \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |01\\rangle)\n", + "$$\n", + "\n", + "CNOTゲートを適用するとどうなるか見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "# Apply H-gate to the first:\n", + "qc.h(0)\n", + "# Apply a CNOT:\n", + "qc.cx(0,1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector = }\n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{\\sqrt{2}} & 0 & 0 & \\tfrac{1}{\\sqrt{2}} \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's get the result:\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "result = svsim.run(qobj).result()\n", + "# Print the statevector neatly:\n", + "final_state = result.get_statevector()\n", + "array_to_latex(final_state, prefix=\"\\\\text{Statevector = }\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下の状態が得られます。\n", + "\n", + "$$\n", + "\\text{CNOT}|0{+}\\rangle = \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)\n", + "$$ \n", + "\n", + "これはもつれ状態になっており、大変興味深いです。もつれ状態については次節に進みましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 もつれ状態 \n", + "\n", + "前節では以下の状態を作ることができることを見ました。:\n", + "\n", + "$$\n", + "\\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)\n", + "$$ \n", + "\n", + "これはベル状態として知られています。この状態は、50%の確率で$|00\\rangle$の状態が観測され、50%の確率で$|11\\rangle$の状態が観測されます。最も興味深いことに、$|01\\rangle$または$|10\\rangle$が観測される確率は**0%** です。このことは、Qiskitで確認することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_histogram(result.get_counts())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この結合された状態は、2つの別々の量子ビット状態として記述することはできません。このことには興味深い示唆があります。量子ビットが重ね合わせ状態にあるにも関わらず、1つの量子ビットを観測するともう1つの量子ビットの状態が得られると同時に重ね合わせ状態がなくなります。例として、一番上の量子ビットを観測して$|1\\rangle$の状態が得られたとすると、2つの量子ビットの状態は以下のように変化します。\n", + "\n", + "$$\n", + "\\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle) \\quad \\xrightarrow[]{\\text{measure}} \\quad |11\\rangle\n", + "$$\n", + "\n", + "2つの量子ビットを数光年の距離に離したとしても、1つの量子ビットに関する観測はもう1つの量子ビットに対して影響を及ぼしているようにみえます。この[不気味な遠隔作用](https://en.wikipedia.org/wiki/Quantum_nonlocality) は20世紀初期に非常に多くの物理学者を悩ませました。\n", + "\n", + "測定結果はランダムであり、一方の量子ビットの観測結果は、もう一方の量子ビットの操作の影響を受け**ない**ことに注意することが重要です。 このため、共量子もつれ状態を使用して通信をする方法は**ありません**。 これは、通信不可能定理[1]として知られています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 もつれ状態の可視化\n", + "\n", + "この状態は2つの別々の量子ビット状態として書けないことがわかりましたが、このことは、別々のブロッホ球に状態をプロットしようとすると、情報が失われることも意味します。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以前の章でどのようにブロッホ球を定義したかを考えると、Qiskitがこのようにもつれた量子ビットでどのようにブロッホベクトルを計算するのかさえ、はっきりしないかもしれません。単一量子ビットの場合、ある軸に沿ったブロッホベクトルの位置は、その基底で測定したときの期待値にうまく対応します。これをブロッホベクトルのプロットの**ルール**とすると、上のような結論になります。このことは、特定の測定が保証されるような単一の量子ビットの測定基底が存在**しない**ことを示しています。これは、常に単一の量子ビットの基底を選ぶことができる単一量子ビット状態とは対照的です。このように個々の量子ビットを見ていると、量子ビット間の相関の重要な効果を見逃してしまいます。異なるもつれ状態を区別することができないのです。例えば、2つの状態\n", + "\n", + "$$\\tfrac{1}{\\sqrt{2}}(|01\\rangle + |10\\rangle) \\quad \\text{and} \\quad \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)$$\n", + "\n", + "は、測定結果が異なる全く異なる状態であるにもかかわらず、この別々のブロッホ球の上ではどちらも同じに見えます。\n", + "\n", + "この状態ベクトルを他にどのように可視化すればよいのでしょうか?この状態ベクトルは単純に4つの振幅(複素数)の集まりであり、これを画像にうつす方法は無限にあります。そのような可視化の1つが「Q-sphere」で、ここでは各振幅を球の表面上のブロブで表現しています。ブロブの大きさは振幅の大きさに比例し、色は振幅の位相に比例します。$|00\\rangle$と$|11\\rangle$の振幅は等しく、他の振幅はすべて0です。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.visualization import plot_state_qsphere\n", + "plot_state_qsphere(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでは、量子ビットの間の相関を明確に見ることができます。Q-sphereの形は重要ではなく、単にブロブを並べるのにいい方法であるにすぎません。状態の`0`の個数はZ軸上の状態の位置に比例するので、ここでは$|00\\rangle$の振幅は球の上の極にあり、$|11\\rangle$の振幅は球の下の極にあることが分かります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.4 練習問題: \n", + "1. 以下のベル状態を作り出す量子回路を作成せよ。 $\\tfrac{1}{\\sqrt{2}}(|01\\rangle + |10\\rangle)$.\n", + " 状態ベクトルシミュレーターを使用して結果を検証せよ。\n", + "\n", + "2. 設問1にて作成した回路は状態$|00\\rangle$を$\\tfrac{1}{\\sqrt{2}}(|01\\rangle + |10\\rangle)$に変換するものである。この回路のユニタリー行列をQiskitシミュレータを使用して計算せよ。このユニタリー行列が正しい変換を行えることを検証せよ。\n", + "\n", + "3. 状態ベクトルを視覚的に表現する他の方法について考えてみよ。各振幅の大きさと位相を読み取ることができる、興味深い視覚化をデザインできるか?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 参考文献\n", + "\n", + "[1] Asher Peres, Daniel R. Terno, _Quantum Information and Relativity Theory,_ 2004, https://arxiv.org/abs/quant-ph/0212023" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-gates/oracles.ipynb b/translations/ja/ch-gates/oracles.ipynb new file mode 100644 index 0000000..f2dc549 --- /dev/null +++ b/translations/ja/ch-gates/oracles.ipynb @@ -0,0 +1,372 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子コンピューター上の古典計算" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [イントロダクション](#intro)\n", + "2. [オラクルへの問い合わせ](#oracle)\n", + "3. [ゴミの取り出し](#garbage)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. イントロダクション \n", + "普遍性を持つ量子ゲートの集合は古典計算を再現することができます。「*計算の原子*」で見てきたように、古典計算をブール論理ゲートにコンパイルして量子コンピューター上で再現するだけです。\n", + "\n", + "これは量子コンピューターにおける重要な事実を示しています。それは古典コンピューターに可能なことは量子コンピューター上でも可能であり、さらに少なくとも古典計算と同等の計算の複雑性が実行できるということです。量子コンピューターの活用は既に古典コンピューターの方が優れたパフォーマンスを発揮するタスクに対して行うことが目的ではありませんが、それでも量子コンピューターが一般的な問題を解決することが可能ということをよく説明しています。\n", + "\n", + "さらに量子コンピューターを用いた解決を要する問題はしばしば古典アルゴリズムを用いたアプローチが可能な側面を含んでいます。そのような場合は古典コンピューターを用いた解決も可能な場合もあります。しかし多くの場合、古典アルゴリズムは重ね合わせ状態が存在する入力に対して実行可能でなければありません。これは量子コンピューター上での古典アルゴリズムの実行を要します。本節ではそのようないくつかの例を紹介します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. オラクルへの問い合わせ \n", + "\n", + "多くの量子アルゴリズムは関数$f(x)$の解析を基本としており、入力$x$に対応する出力$f(x)$を返す関数が実装された「ブラックボックス」の存在を仮定しているだけの場合のことが多いです。このような関数は*オラクル*と呼ばれます。\n", + "\n", + "オラクルを持ち出して抽象的に考えることで、関数そのものよりも関数を解析するテクニックに集中することができます。\n", + "\n", + "量子アルゴリズム中でオラクルがどのように機能するか理解するために、オラクルがどのように定義されるのかを具体的に見ていく必要があります。オラクルがとる主要な形式の一つとして次のようなユニタリ発展で記述される*ブールオラクル*というものがあります。\n", + "\n", + "$$\n", + "U_f \\left|x , \\bar 0 \\right\\rangle = \\left|x, f(x)\\right\\rangle.\n", + "$$\n", + "\n", + "ここで$\\left|x , \\bar 0 \\right\\rangle = \\left|x \\right\\rangle \\otimes \\left|\\bar 0 \\right\\rangle$は2つのレジスターから構成された複数量子ビット状態を表します。最初のレジスターは状態$\\left|x\\right\\rangle$を表します。ここで$x$は関数の入力のバイナリ表現です。このレジスター中の量子ビット数は入力を表現するために必要なビット数です。\n", + "\n", + "2つ目のレジスターの役割は出力のエンコードです。具体的には$U_f$を作用させた後のこのレジスターの状態は出力$\\left|f(x)\\right\\rangle$のバイナリ表現となり、出力を表現するために必要な数の量子ビットによりレジスターは構成されます。\n", + "このレジスターの初期状態$\\left|\\bar 0 \\right\\rangle$は全ての量子ビットが$\\left|0 \\right\\rangle$の状態を表します。そのほかの初期状態では$U_f$を作用させると異なる結果が得られます。具体的な結果はユニタリ行列$U_f$をどのように定義するかによります。\n", + "\n", + "もう一つのオラクルの形式に次のように定義される*位相オラクル*があります。\n", + "\n", + "$$\n", + "P_f \\left|x \\right\\rangle = (-1)^{f(x)} \\left|x \\right\\rangle,\n", + "$$\n", + "\n", + "出力$f(x)$は基本的に$0$ or $1$の単純なビット値です。\n", + "\n", + "位相オラクルはブールオラクルとずいぶん異なる形に見えますが、基礎となる考えは同じ別表現です。前の節で扱った「位相キックバック」のメカニズムを用いて理解することができます。\n", + "\n", + "これを確認するために、同じ機能を持つブールオラクル$U_f$を考えてみます。この関数は本質的に一般化された制御NOTの形式で実装することができます。入力レジスターにより制御されるため、$f(x)=0$に対しては出力ビットは$\\left|0 \\right\\rangle$のままで、$f(x)=1$の場合は$X$を作用させて$\\left|1 \\right\\rangle$へと反転します。初期状態が$\\left|0 \\right\\rangle$ではなく$\\left|- \\right\\rangle$の場合、$U_f$は$(-1)^{f(x)}$だけ位相を与えます。\n", + "\n", + "$$\n", + "U_f \\left( \\left|x \\right\\rangle \\otimes \\left| - \\right\\rangle \\right) = (P_f \\otimes I) \\left( \\left|x \\right\\rangle \\otimes \\left| - \\right\\rangle \\right)\n", + "$$\n", + "\n", + "出力量子ビットの状態$\\left|- \\right\\rangle$は全過程において不変であるため無視することができます。結局位相オラクルはブールオラクルを用いて実装が可能だということです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. ゴミの取り除き \n", + "\n", + "オラクルで評価される関数は通常古典コンピューター上で効率よく評価される関数です。しかし、オラクルを上で示したような形のユニタリゲートとして実装する必要があることは、オラクルを量子ゲートを用いて実装しなくてはならないことを意味しています。しかしながら古典アルゴリズムに使われるブールゲートを持ち出して対応するものに置き換えればよいという単純な話ではありません。\n", + "\n", + "気を付けなければならない課題の1つは可逆性です。$U = \\sum_x \\left| f(x) \\right\\rangle \\left\\langle x \\right|$という形式のユニタリ性は一意の入力$x$に対して一意の出力$f(x)$が得られる場合にのみ成りたちますが、一般的に真とはなりません。しかし出力に入力のコピーを含めるようにするだけで真とすることができます。それは先ほど見たブールオラクルの形式です。\n", + "\n", + "$$\n", + "U_f \\left|x,\\bar 0 \\right\\rangle = \\left| x,f(x) \\right\\rangle\n", + "$$\n", + "\n", + "ユニタリ性を持つように演算を記述することで、重ね合わせ状態に対した演算を考察することが出来ます。例えば入力$x$がとり得る全ての状態の重ね合わせ状態である場合を考えましょう(簡単のため規格化はしていません)。結果はとり得る入出力ペアの重ね合わせとなるでしょう。\n", + "\n", + "$$\n", + "U_f \\sum_x \\left|x,0\\right\\rangle = \\sum_x \\left|x,f(x)\\right\\rangle.\n", + "$$\n", + "\n", + "古典アルゴリズムに適用する場合、重ね合わせは私たちの要求通りのふるまいをするように気を付ける必要もあります。古典アルゴリズムは所望の出力を演算するだけでなく、計算途中で追加の情報を生み出しもします。そのような演算における付加的な情報のゴミは古典的には重大な問題とはなりませんし、使われているメモリもゴミを削除すれば簡単に元通りにすることができます。しかし量子的な観点ではそう簡単なことではありません。\n", + "\n", + "例えば古典アルゴリズムでの次のような演算を考えましょう。\n", + "\n", + "$$\n", + "V_f \\left|x,\\bar 0, \\bar 0 \\right\\rangle = \\left| x,f(x), g(x) \\right\\rangle\n", + "$$\n", + "\n", + "ここにある3つ目のレジスターは、古典アルゴリズムにおいて「メモ」として使われています。演算が終るとレジスターに残された情報は「ゴミ」$g(x)$として扱われます。$V_f$を用いて上の実装のユニタリ性を示しましょう。\n", + "\n", + "量子アルゴリズムは通常干渉効果を元に構築されています。最も単純なのはユニタリ操作により重ね合わせを作り出し、逆操作によって重ね合わせを解消することです。全体としては些細なことですが、量子コンピュータが少なくともともそのような些細なことが可能であるということは確かめなければなりません。\n", + "\n", + "例えば量子演算で何らかの過程を経て重ね合わせ状態$\\sum_x \\left|x,f(x)\\right\\rangle$を作り出し、私たちは$\\sum_x \\left|x,0\\right\\rangle$の状態を返す必要があるという状況を考えてみましょう。この場合は単に$U_f^\\dagger$を作用させればよいです。これを適用する回路は$U_f$を作用させる回路を知っているとわかります。なぜなら単に$U_f$の回路中の各ゲートを逆演算のゲートに逆順で置き換えればよいからです。\n", + "\n", + "しかし$U_f$をどのように作用させればよいかわからないが$V_f$の作用のさせ方はわかっている場合を考えてみます。この場合$U_f^\\dagger$を作用させることは出来ませんが、$V_f^\\dagger$であれば可能です。残念なことに情報のゴミが存在することで$U_f$の場合と同じ結果は得られません。\n", + "\n", + "わかりやすい例として非常に単純な場合を考えます。$x$, $f(x)$, $g(x)$をそれぞれ単一ビットで構成し、また$f(x) = x$ and $g(x) = x$であるとします。これらは入力ビットで制御される単一の`cx`ゲートを用いることで実現可能です。\n", + "\n", + "具体的にいうと、$U_f$を実装する回路は単一の入出力レジスター間の`cx`ゲートであるということです。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, QuantumRegister" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_bit = QuantumRegister(1, 'input')\n", + "output_bit = QuantumRegister(1, 'output')\n", + "garbage_bit = QuantumRegister(1, 'garbage')\n", + "\n", + "Uf = QuantumCircuit(input_bit, output_bit, garbage_bit)\n", + "Uf.cx(input_bit[0], output_bit[0])\n", + "\n", + "Uf.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$V_f$ではゴミ(garbage)のために入力のコピーを作る必要があり、次のように2つの`cx`ゲートを用いることが出来ます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Vf = QuantumCircuit(input_bit, output_bit, garbage_bit)\n", + "Vf.cx(input_bit[0], garbage_bit[0])\n", + "Vf.cx(input_bit[0], output_bit[0])\n", + "Vf.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それでは最初に$U_f$を作用させ、次に$V_f^{\\dagger}$を作用させてみましょう。結果は次のような回路となります。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = Uf + Vf.inverse()\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は互いにキャンセルし合う二つの`cx`ゲートから始まります。残ったのは最後にある入力とgarbageレジスター間の`cx`ゲートになります。数学的には下のような意味を持ちます。\n", + "\n", + "$$\n", + "V_f^\\dagger U_f \\left| x,0,0 \\right\\rangle = V_f^\\dagger \\left| x,f(x),0 \\right\\rangle = \\left| x , 0 ,g(x) \\right\\rangle.\n", + "$$\n", + "\n", + "ここでわかることは$V_f^\\dagger$は単に初期状態を返すわけではなく、最初の量子ビットと望まないgarbageビットとのエンタングルとなっているということです。返ってくる状態が私たちが必要としているものではないために、アルゴリズムの一連の流れは予想通りに動作しないのです。\n", + "\n", + "このような理由から量子アルゴリズムでは古典的なgarbageビットを取り除く必要があります。「逆計算」と呼ばれる手法を用いることで実現することが可能です。必要なのはブランクの変数を用意して$V_f$をかけるだけです。\n", + "\n", + "$$\n", + "\\left| x, 0, 0, 0 \\right\\rangle \\rightarrow \\left| x,f(x),g(x),0 \\right\\rangle.\n", + "$$\n", + "\n", + "そして出力をエンコードする量子ビットをコントロールビットに、新しく用意したブランクの変数をターゲットビットとした制御NOTゲートを作用させます。\n", + "\n", + "これが1量子レジスターを用いた回路の例です。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_output_bit = QuantumRegister(1, 'final-output')\n", + "\n", + "copy = QuantumCircuit(output_bit, final_output_bit)\n", + "copy.cx(output_bit, final_output_bit)\n", + "\n", + "copy.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路は情報をコピーする役割を持っています(もし量子複製不可能定理を知っているなら、これは同じプロセスではありません)。具体的には状態を次のように変換しています。\n", + "\n", + "$$\n", + "\\left| x,f(x),g(x),0 \\right\\rangle \\rightarrow \\left| x,f(x),g(x),f(x) \\right\\rangle.\n", + "$$\n", + "\n", + "最後に最初の演算を取り消す$V_f^\\dagger$を作用させます。\n", + "\n", + "$$\n", + "\\left| x,f(x),g(x),0 \\right\\rangle \\rightarrow \\left| x,0,0,f(x) \\right\\rangle.\n", + "$$\n", + "\n", + "それでもコピーされた出力は残ります。結局garbageビットなしに演算が可能であり、目的の$U_f$を得ることが出来ました。\n", + "\n", + "この例で扱った1量子ビットレジスターで$f(x) = x$の場合の回路は次のようになります。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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CgoCjKsNFRcXO3yw29quHkEePHiQ0tJS+4h08ODB+Pn58eSTT/L0009TWFjIyy+/TFFREV5eXvawPnr0KIWFhS6baBQWFsadd97JCy+8QGBgIH379mXbtm0sXryYBx54gKSkJAACAgLo0aMHa9euZfLkyVitVpYvX87rr78O1NyFGxwczOeff87GjRsJCQkhOjqa4uJiSktL6dmzJ9OmTWP27NkUFRWRkpJiPzbsrG117NixxsUZSkpKHI49i7QGUSE1g9RZ/UrzaTOTja4+PlfbDFJb29UTg2zH8WxBGhERwerVqzl9+jSTJk3ipZde4te//jVjx45lwIABdOzY0WE9V55DumLFCu6++24WLFjAhAkT2LBhA6+++irLli1zWG7lypUUFhYSGxvL+PHjad++Pffddx9BQUH2ka1NcnIyffr0ITExkdGjR5Oammp/LuvXr8dqtTJlyhQefPBBEhIS2LFjh8MpK2a3FRMTQ0FBAYWFl6ce7t27t8bIVaSlGxRp/IqLsyX0dH6fUjddtF4aZd68eaxatYr8/Pxm2d5dd91Fz549SUlJYdWqVSxatIi8vDy8vb2bZfsizWXF9sZdlKGxu3YHhMPsH5uvSxqvzezaFXPS0tLqPIXHFZYuXcr06dMJDg4mJiaGdevWKUSlVZqQAHtPwQ+V5vvy9jJ+Uk2al0ak0iCr1UpQUBBz586tcdk/ETHvyzz4+y7z/UxMgFvjzPcjTaMgFRHxABszYXPOta8/NgYSR+j3SN1BQSoi4iG2H4T3041fcWksby+4Y5Dxw94KUfdQkIqIeJCCUlifAdknob5PZwswoAfcOQTCg5qtPKmFglRExAOduwCZx40L0J/5Hn6ognbe0L0zRHUxTnEJDXB3lQIKUhEREVPazAUZREREXEFBKiIiYoKCVERExAQFqYiIiAkKUhERERMUpCIiIiYoSEVERExQkIqIiJigIBURETFBQSoiImKCglRERMQEBamIiIgJClIRERETFKQiIiImKEhFRERMUJCKiIiYoCAVERExQUEqIiJigoJURETEBAWpiIiICQpSERERExSkIiIiJvx/idOTJgkQXokAAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(Vf.inverse() + copy + Vf).draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`cx`ゲートの知識を用いることで2つのgarbageレジスターは互いに打ち消し合うことを理解しましょう。それゆえにgarbageレジスターを取り除くことが出来るのです。\n", + "\n", + "### 練習問題\n", + "1. 「output」レジスターが$|0\\rangle$で初期化されているとき出力が「final output」(のみ)に正しく書き込まれることを示しましょう。\n", + "2. 「output」レジスターが$|1\\rangle$.で初期化されているとき何が起こるでしょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "本節および本章の他の節の手法を用いることで量子アルゴリズムを構築するのに必要なツールは手に入りました。それではアルゴリズムを実際に見ていきましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-gates/phase-kickback.ipynb b/translations/ja/ch-gates/phase-kickback.ipynb new file mode 100644 index 0000000..05ce3e7 --- /dev/null +++ b/translations/ja/ch-gates/phase-kickback.ipynb @@ -0,0 +1,859 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 位相キックバック\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## 目次\n", + "\n", + "1. [CNOTゲートの探索](#exploring-cnot)\n", + "2. [位相キックバック](#kickback) \n", + " 2.1 [CNOT回路の等価性の説明](#explaining-identity) \n", + " 2.2 [Tゲートでのキックバック](#kickback-t-gate) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Exploring the CNOT-Gate \n", + "\n", + "前のセクションでは、CNOTゲートを使用したいくつかの非常に基本的な結果を確認しました。ここでは、さらに興味深い結果をいくつか見ていきます。\n", + "\n", + "制御量子ビットを状態$|+\\rangle$におくことで、2つの量子ビットをエンタングルできました:\n", + "\n", + "$$\n", + "\\text{CNOT}|0{+}\\rangle = \\tfrac{1}{\\sqrt{2}}(|00\\rangle + |11\\rangle)\n", + "$$\n", + "\n", + "しかし、2番目の量子ビットも重ね合わせの状態にするとどうなるでしょうか? " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "thebelab-init" + ] + }, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, Aer, assemble\n", + "from math import pi\n", + "import numpy as np\n", + "from qiskit.visualization import plot_bloch_multivector, plot_histogram, array_to_latex" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.cx(0,1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上の回路について、CNOTを作用させます:\n", + "\n", + "$$ |{+}{+}\\rangle = \\tfrac{1}{2}(|00\\rangle + |01\\rangle + |10\\rangle + |11\\rangle) $$\n", + "\n", + "CNOTは$|01\\rangle$と$|11\\rangle$の振幅をスワップするため、結果に変わりが無いことが分かります:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector} = \n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{2} & \\tfrac{1}{2} & \\tfrac{1}{2} & \\tfrac{1}{2} \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.cx(0,1)\n", + "display(qc.draw()) # `display` is a command for Jupyter notebooks\n", + " # similar to `print`, but for rich content\n", + "\n", + "# Let's see the result\n", + "svsim = Aer.get_backend('aer_simulator')\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "display(array_to_latex(final_state, prefix=\"\\\\text{Statevector} = \"))\n", + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "標的量子ビットの状態を$|-\\rangle$にすると、マイナスの位相をもちます:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.x(1)\n", + "qc.h(1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この状態はこちらです:\n", + "\n", + "$$ |{-}{+}\\rangle = \\tfrac{1}{2}(|00\\rangle + |01\\rangle - |10\\rangle - |11\\rangle) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector} = \n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{2} & \\tfrac{1}{2} & -\\tfrac{1}{2} & -\\tfrac{1}{2} \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.x(1)\n", + "qc.h(1)\n", + "display(qc.draw())\n", + "# See the result\n", + "qc1 = qc.copy()\n", + "qc1.save_statevector()\n", + "final_state = svsim.run(qc1).result().get_statevector()\n", + "display(array_to_latex(final_state, prefix=\"\\\\text{Statevector} = \"))\n", + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "CNOTをこの状態に作用させる場合、$|01\\rangle$ と $|11\\rangle$ の振幅がスワップされて、次の状態になります:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\text{CNOT}|{-}{+}\\rangle & = \\tfrac{1}{2}(|00\\rangle - |01\\rangle - |10\\rangle + |11\\rangle) \\\\\n", + "\\text{CNOT}|{-}{+}\\rangle & = |{-}{-}\\rangle\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "\n", + "これは興味深いものです。なぜなら、*標的*量子ビットの状態を変更せずに、*制御*量子ビットの状態に影響を与えるからです。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$$\n", + "\\text{Statevector} = \n", + "\\begin{bmatrix}\n", + "\\tfrac{1}{2} & -\\tfrac{1}{2} & -\\tfrac{1}{2} & \\tfrac{1}{2} \\\\\n", + " \\end{bmatrix}\n", + "$$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.cx(0,1)\n", + "display(qc.draw())\n", + "\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "display(array_to_latex(final_state, prefix=\"\\\\text{Statevector} = \"))\n", + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hゲートが$|{+}\\rangle \\rightarrow |0\\rangle$ と $|{-}\\rangle \\rightarrow |1\\rangle$ の変換をすることを覚えていたら、CNOTをHゲートでラップすると、向きが反対のCNOTと同じ作用になることが分かると思います。\n", + "\n", + "![cnot_identity](images/identities_1.svg)\n", + "\n", + "これは、Qiskitのユニタリーシミュレーターを使って確認できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "\\text{Circuit = }\n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 1 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.cx(0,1)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "display(qc.draw()) \n", + "# `display` is an IPython tool, remove if it causes an error\n", + "\n", + "qc.save_unitary()\n", + "usim = Aer.get_backend('aer_simulator')\n", + "qobj = assemble(qc)\n", + "unitary = usim.run(qobj).result().get_unitary()\n", + "array_to_latex(unitary, prefix=\"\\\\text{Circuit = }\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "\\text{Circuit = }\n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 1 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.cx(1,0)\n", + "display(qc.draw())\n", + "qc.save_unitary()\n", + "\n", + "qobj = assemble(qc)\n", + "unitary = usim.run(qobj).result().get_unitary()\n", + "array_to_latex(unitary, prefix=\"\\\\text{Circuit = }\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この等価性は*位相キックバック*の一例であり、説明は次のセクションに続きます。。。\n", + "\n", + "## 2. 位相キックバック \n", + "\n", + "### 2.1 CNOT回路の等価性の説明 \n", + "前のセクションでこの等価性を確認しました:\n", + "\n", + "![cnot_identity](images/identities_1.svg)\n", + "\n", + "これは*キックバック*(または*位相キックバック*)の一例であり、ほとんどすべての量子アルゴリズムで使用されているほど、とても重要です。キックバックは、ゲートによって量子ビットに追加された固有値が、制御操作によって別の量子ビットに「キックバック」されることです。例えば、$|{-}\\rangle$ の量子ビットにXゲートを実行すると、位相 $-1$が得られます:\n", + "\n", + "$$\n", + "X|{-}\\rangle = -|{-}\\rangle\n", + "$$\n", + "\n", + "制御量子ビットが$|0\\rangle$ または$|1\\rangle$のいずれかにある場合、この位相は状態全体に影響しますが、グローバル位相であるため、観測されません:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\text{CNOT}|{-}0\\rangle & = |{-}\\rangle \\otimes |0\\rangle \\\\\n", + " & = |{-}0\\rangle \\\\\n", + " \\quad & \\\\\n", + "\\text{CNOT}|{-}1\\rangle & = X|{-}\\rangle \\otimes |1\\rangle \\\\\n", + " & = -|{-}\\rangle \\otimes |1\\rangle \\\\\n", + " & = -|{-}1\\rangle \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "興味深い効果は、制御量子ビットが重ね合わせの場合です。$|1\\rangle$の方向にある制御量子ビットの成分は、対応する標的量子ビットにこの位相因子を適用します。これにより、制御量子ビットに相対位相が追加されます:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\text{CNOT}|{-}{+}\\rangle & = \\tfrac{1}{\\sqrt{2}}(\\text{CNOT}|{-}0\\rangle + \\text{CNOT}|{-}1\\rangle) \\\\\n", + " & = \\tfrac{1}{\\sqrt{2}}(|{-}0\\rangle + X|{-}1\\rangle) \\\\\n", + " & = \\tfrac{1}{\\sqrt{2}}(|{-}0\\rangle -|{-}1\\rangle) \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "これは、2つの分離可能な量子ビット状態として書き込むことができます:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\text{CNOT}|{-}{+}\\rangle & = |{-}\\rangle \\otimes \\tfrac{1}{\\sqrt{2}}(|{0}\\rangle - |1\\rangle )\\\\\n", + " & = |{-}{-}\\rangle \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "HゲートでCNOTをラップすると、量子ビットが計算基底から$(|+\\rangle, |-\\rangle)$ 基底に変換され、この効果がわかります。一部のハードウェアは2つの特定の量子ビット間の一方向のCNOTしか許されないため、この等価性はハードウェアレベルで非常に有益です。この等価性を使ってこのハードウェアの問題を克服し、双方向のCNOTを実現できるようになります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 Tゲートでのキックバック \n", + "\n", + "別の制御オペレーションである、制御Tゲートを見てみましょう:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.cp(pi/4, 0, 1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Tゲートは、以下の行列です:\n", + "\n", + "$$\n", + "\\text{T} = \n", + "\\begin{bmatrix}\n", + "1 & 0 \\\\\n", + "0 & e^{i\\pi/4}\\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "そして、制御Tゲートは以下の行列です:\n", + "\n", + "$$\n", + "\\text{Controlled-T} = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & e^{i\\pi/4}\\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "これはQiskitのユニタリーシミュレーターで確認できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "\\text{Controlled-T} = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "0 & 0 & 0 & \\tfrac{1}{\\sqrt{2}}(1 + i) \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.cp(pi/4, 0, 1)\n", + "display(qc.draw())\n", + "# See Results:\n", + "qc.save_unitary()\n", + "qobj = assemble(qc)\n", + "unitary = usim.run(qobj).result().get_unitary()\n", + "array_to_latex(unitary, prefix=\"\\\\text{Controlled-T} = \\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "より一般的には、次の規則を使用して、制御Uオペレーションの行列を見つけることができます:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\text{U} & = \n", + "\\begin{bmatrix}\n", + "u_{00} & u_{01} \\\\\n", + "u_{10} & u_{11}\\\\\n", + "\\end{bmatrix} \\\\\n", + "\\quad & \\\\\n", + "\\text{Controlled-U} & = \n", + "\\begin{bmatrix}\n", + "I & 0 \\\\\n", + "0 & U\\\\\n", + "\\end{bmatrix}\n", + " = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 \\\\\n", + "0 & 0 & u_{00} & u_{01} \\\\\n", + "0 & 0 & u_{10} & u_{11}\\\\\n", + "\\end{bmatrix}\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "または、Qiskitの量子ビット配列では:\n", + "\n", + "$$\n", + "\\text{Controlled-U} = \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & u_{00} & 0 & u_{01} \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "0 & u_{10} & 0 & u_{11}\\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "\n", + "状態 $|1\\rangle$ の量子ビットにTゲートを適用すると、この量子ビットに $e^{i\\pi/4}$ の位相が追加されます:\n", + "\n", + "$$\n", + "T|1\\rangle = e^{i\\pi/4}|1\\rangle\n", + "$$\n", + "\n", + "これは*グローバル位相*であり、観測することはできませんが、$|{+}\\rangle$状態の別の量子ビットを使用してこの操作を制御すると、位相はグローバルではなく相対になり、制御ビットの相対位相が変化します:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "|1{+}\\rangle & = |1\\rangle \\otimes \\tfrac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle) \\\\\n", + "& = \\tfrac{1}{\\sqrt{2}}(|10\\rangle + |11\\rangle) \\\\\n", + "& \\\\\n", + "\\text{Controlled-T}|1{+}\\rangle & = \\tfrac{1}{\\sqrt{2}}(|10\\rangle + e^{i\\pi/4}|11\\rangle) \\\\\n", + "& \\\\\n", + "& = |1\\rangle \\otimes \\tfrac{1}{\\sqrt{2}}(|0\\rangle + e^{i\\pi/4}|1\\rangle)\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "これは、標的量子ビットを変化させずに、制御量子ビットをブロッホ球のZ軸回りに回転させる作用があります。これをQiskitで見てみましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.x(1)\n", + "display(qc.draw())\n", + "# See Results:\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.x(1)\n", + "# Add Controlled-T\n", + "qc.cp(pi/4, 0, 1)\n", + "display(qc.draw())\n", + "# See Results:\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "final_state = svsim.run(qobj).result().get_statevector()\n", + "plot_bloch_multivector(final_state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "予想していた通り、右側の量子ビット(ブロッホ球では左の図)がブロッホ球のZ軸回りに$\\pi/4$回転したことが分かります。この動作を調べるてみると、Qiskitが制御Z回転ゲートをこの対称的な表記(制御ビットと標的ビットではなく2つの制御ビット)で描画する理由が明らかになるかもしれません。制御Zゲートには、制御や標的量子ビットの区別はありません。\n", + "\n", + "\n", + "\n", + "### 練習問題:\n", + "\n", + "
      \n", + "
    1. (下の回路に示すように)標的量子ビット(q1)が$|0\\rangle$の状態にある場合、制御量子ビット(q0)の状態はどのような結果になりますか? Qiskitで回路を作成して、答えを確認してみましょう。\n", + "\n", + "\n", + "
    2. \n", + "
    3. (下の回路に示すように)標的量子ビット(q1)が$|1\\rangle$の状態で、回路が制御Tではなく制御Sdgゲートを使用した場合、制御量子ビット(q0)はどうなりますか?\n", + "\n", + "\n", + "
    4. \n", + "\n", + "
    5. (下の回路が示すように)制御量子ビット(q0)の制御Tを適用する前の状態が$|{+}\\rangle$ではなく、$|1\\rangle$の状態にあった場合、制御量子ビット(q0)はどうなりますか?\n", + "\n", + "\n", + "
    6. \n", + "
    " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.1',\n", + " 'qiskit-aer': '0.5.1',\n", + " 'qiskit-ignis': '0.3.0',\n", + " 'qiskit-ibmq-provider': '0.7.1',\n", + " 'qiskit-aqua': '0.7.1',\n", + " 'qiskit': '0.19.2'}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-gates/proving-universality.ipynb b/translations/ja/ch-gates/proving-universality.ipynb new file mode 100644 index 0000000..e96b1d8 --- /dev/null +++ b/translations/ja/ch-gates/proving-universality.ipynb @@ -0,0 +1,446 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 普遍性の証明" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [はじめに](#intro) \n", + "2. [行列を楽しむ](#fun) \n", + " 2.1 [外積としての行列](#outer) \n", + " 2.2 [ユニタリー行列とエルミート行列](#u-and-h) \n", + " 2.3 [パウリ行列分解](#pauli) \n", + "3. [普遍性の定義](#defining) \n", + "4. [基本的なゲートセット](#basic) \n", + " 4.1 [クリフォードゲート](#big-red) \n", + " 4.2 [非クリフォードゲート](#non-clifford) \n", + " 4.3 [ゲートセットの拡張](#expanding) \n", + "5. [普遍性の証明](#proving) \n", + "6. [量子ゲートのユニバーサルセット](#gate-sets)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "与えられたコンピューターは何ができるでしょうか?一般に、計算可能とされるものの限界はどの程度なのでしょうか? これらの問いは、コンピューターがどのようなものかがまだわからなかった時代にアラン・チューリングが挑戦した問題です。\n", + "\n", + "古典コンピューターについて、つまり標準的なデジタル・コンピューターについて、この質問をするためには、スクリーン、スピーカーや手の込んだ入力デバイスを全て取り除く必要があります。そうすると、入力ビット列を出力ビット列に変換する単純な機械だけが残されます。ある装置が、任意の入力セットを任意の出力セットへ変換することができる場合、このことを *普遍的* である、と呼びます。\n", + "\n", + "量子コンピューターも同様に入力状態を受け取り、それらを出力状態に変換します。ですので、同じような方法で普遍性を定義することができます。普遍性が達成できる場合とできない場合をより正確に証明するには、量子ゲートの行列表現を使用するのが良い方法です。ただし、最初にいくつかのテクニックを磨き直す必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 行列を楽しむ \n", + "\n", + "### 2.1 外積としての行列 \n", + "\n", + "前のセクションでは、$\\langle0|0\\rangle =1$などの様々な内積を計算しました。内積は、ブラとケットから一つの数を求めます。ブラとケットを逆に置くと、行列が得られ、これを外積と呼びます。外積は、標準の行列の乗算で計算でき、 例えば、以下のように計算されます。\n", + "\n", + "$$\n", + "|0\\rangle\\langle0|= \\begin{pmatrix} 1 \\\\\\\\ 0 \\end{pmatrix} \\begin{pmatrix} 1 & 0 \\end{pmatrix} = \\begin{pmatrix} 1&0 \\\\\\\\ 0&0 \\end{pmatrix},\\\\\\\\\n", + "|0\\rangle\\langle1| = \\begin{pmatrix} 1 \\\\\\\\ 0 \\end{pmatrix} \\begin{pmatrix} 0 & 1 \\end{pmatrix} = \\begin{pmatrix} 0&1 \\\\\\\\ 0&0 \\end{pmatrix},\\\\\\\\\n", + "|1\\rangle\\langle0| = \\begin{pmatrix} 0 \\\\\\\\ 1 \\end{pmatrix} \\begin{pmatrix} 1 & 0 \\end{pmatrix} = \\begin{pmatrix} 0&0 \\\\\\\\ 1&0 \\end{pmatrix},\\\\\\\\\n", + "|1\\rangle\\langle1| = \\begin{pmatrix} 0 \\\\\\\\ 1 \\end{pmatrix} \\begin{pmatrix} 0 & 1 \\end{pmatrix} = \\begin{pmatrix} 0&0 \\\\\\\\ 0&1 \\end{pmatrix}.\\\\\\\\\n", + "$$\n", + "\n", + "また、純粋に外積として任意の行列も記述できます。上の例で、1量子ビットの行列の各要素を表す4つの行列を作成しましたが、これを使って、任意の1量子ビットの行列を外積として記述できます。\n", + "\n", + "$$\n", + "M= \\begin{pmatrix} m_{0,0}&m_{0,1} \\\\\\\\ m_{1,0}&m_{1,1} \\end{pmatrix} = m_{0,0} |0\\rangle\\langle0|+ m_{0,1} |0\\rangle\\langle1|+ m_{1,0} |1\\rangle\\langle0|+ m_{1,1} |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "この性質は、$n$ビットの外積に拡張するだけで、任意の数の量子ビット$n$の行列にも拡張できます。\n", + "\n", + "\n", + "### 2.2 ユニタリー行列とエルミート行列 \n", + "\n", + "行列$M$のエルミート共役$M^\\dagger$は、行列$M$を転置(左下の要素を右上に置き換えるなど)し、各要素を複素共役にしたものです。これから紹介する、量子コンピューティングにとって非常に重要な2つの行列は、エルミート共役の関係によって定義されます。その1つは、ユニタリー行列です。\n", + "\n", + "$$\n", + "U U^\\dagger = U^\\dagger U = 1.\n", + "$$\n", + "\n", + "上記は、ユニタリー行列のエルミート共役がその逆行列($U$の効果を元に戻す力を持つ別のユニタリー$U^\\dagger$)であることを意味しています。量子コンピューティングにおいて、測定とリセット操作以外のすべてのゲートは、ユニタリー行列で表すことができます。\n", + "\n", + "ユニタリー性のもう1つの特徴は、2つの任意の状態の間で内積を保持することです。具体的には、$\\left| \\psi_0 \\right\\rangle$と$\\left| \\psi_1 \\right\\rangle$の2つの状態があるとき、これらの内積は$\\left\\langle \\psi_0 | \\psi_1 \\right\\rangle$となりますが、同じユニタリー行列$U$をそれぞれに適用すると、結果となる内積はまったく同じになります。\n", + "\n", + "$$\n", + "\\left( \\left\\langle \\psi_0 \\right| U^\\dagger \\right) \\left( U \\left| \\psi_1 \\right\\rangle \\right) = \\left\\langle \\psi_0 |U^\\dagger U| \\psi_1 \\right\\rangle = \\left\\langle \\psi_0 | \\psi_1 \\right\\rangle.\n", + "$$\n", + "\n", + "この性質は、ゲートについての便利な考え方を与えてくれます。つまり、システムの正規直交基底を与える状態のセット $\\{ \\left| \\psi_j \\right\\rangle \\}$があるとき、$\\{ \\left| \\phi_j \\right\\rangle = U \\left| \\psi_j \\right\\rangle \\}$である状態のセットも正規直交基底になります。よって、ユニタリー行列は、基底の回転と考えることができ、次のように書くことができます。\n", + "\n", + "$$\n", + "U = \\sum_j \\left| \\phi_j \\right\\rangle \\left\\langle \\psi_j \\right|.\n", + "$$\n", + "\n", + "これは本質的に、古典的なブーリアン・ゲートの動作を記述する「真理値表」の量子バージョンとなっています。\n", + "\n", + "もう一つの重要な行列は、エルミート行列です。エルミート行列は、エルミート共役を取っても影響を受けません。\n", + "\n", + "$$\n", + "H = H^\\dagger.\n", + "$$\n", + "\n", + "\n", + "行列$X$、$Y$、$Z$、$H$ は、すでに見てきたようにエルミート行列の例です(偶然にも、これらの行列は自身の逆行列であるため、すべてユニタリー行列です)。\n", + "\n", + "すべてのユニタリー行列とエルミート行列には、対角化可能であるという特徴があります。これは、この二つの行列が次の形で記述できることを意味します。\n", + "\n", + "$$\n", + "M = \\sum_j \\lambda_j |h_j\\rangle\\langle h_j|,\n", + "$$\n", + "\n", + "ここで、$\\lambda_j$はこの行列の固有値であり、$|h_j\\rangle$はその固有状態です。\n", + "\n", + "ユニタリー行列の場合、この対角形式で$U U^\\dagger=1$ の条件を適用すると、$\\lambda_j \\lambda_j^* = 1$が得られます。よって、ユニタリー行列の固有値は常に大きさ1の複素数であり、ある実数$h_j$を使って$e^{ih_j}$で表すことができます。 エルミート行列の場合、条件$H = H^\\dagger$ から$\\lambda_j = \\lambda_j^*$となり、つまりエルミート行列の固有値は実数となります。\n", + "\n", + "よって、この2つの行列の違いは、固有値が実数か、実数の複素指数かという点のみです。これは、すべてのユニタリー行列に対して、対応するエルミート行列を定義できることを意味します。これを定義するためには、同じ固有状態を用い、その固有値は$h_j$を使って$e^{ih_j}$とします。\n", + "\n", + "同様に、各エルミート行列にはそれぞれ対応するユニタリー行列が存在します。 同じ固有状態を使い、$h_j$をべき乗して、固有値$e^{ih_j}$を作成して、次のように表すことができます。\n", + "\n", + "$$\n", + "U = e^{iH}\n", + "$$\n", + "\n", + "ここでは、行列をべき乗する標準的な定義を使用しました。これには、固有状態の保持と固有値のべき乗という、私たちが必要としている特性が正確に含まれています。\n", + "\n", + "### 2.3 パウリ行列分解 \n", + "\n", + "上記でも示したように、任意の1量子ビットの行列を外積を使って表すことができます。\n", + "\n", + "$$\n", + "M= \\begin{pmatrix} m_{0,0}&m_{0,1} \\\\\\\\ m_{1,0}&m_{1,1} \\end{pmatrix} = m_{0,0} |0\\rangle\\langle0|+ m_{0,1} |0\\rangle\\langle1|+ m_{1,0} |1\\rangle\\langle0|+ m_{1,1} |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "次に、パウリ演算子で行列を完全に記述できることを見ていきましょう。そのために注意すべき重要なことは、以下です。\n", + "\n", + "$$\n", + "\\frac{1+Z}{2} = \\frac{1}{2}\\left[ \\begin{pmatrix} 1&0 \\\\\\\\0&1 \\end{pmatrix}+\\begin{pmatrix} 1&0 \\\\\\\\0&-1 \\end{pmatrix}\\right] = |0\\rangle\\langle0|,\\\\\\\\\\frac{1-Z}{2} = \\frac{1}{2}\\left[ \\begin{pmatrix} 1&0 \\\\\\\\0&1 \\end{pmatrix}-\\begin{pmatrix} 1&0 \\\\\\\\0&-1 \\end{pmatrix}\\right] = |1\\rangle\\langle1|\n", + "$$\n", + "\n", + "これは、$|0\\rangle\\langle0|$ と $|1\\rangle\\langle1|$が単位行列と$Z$を使って表せることを示しています。これで、$X|0\\rangle = |1\\rangle$という特性を使用して、次の式も生成できます。\n", + "\n", + "$$\n", + "|0\\rangle\\langle1| = |0\\rangle\\langle0|X = \\frac{1}{2}(1+Z)~X = \\frac{X+iY}{2},\\\\\\\\\n", + "|1\\rangle\\langle0| = X|0\\rangle\\langle0| = X~\\frac{1}{2}(1+Z) = \\frac{X-iY}{2}.\n", + "$$\n", + "\n", + "すべての外積が書き換えられたので、これを使って、パウリ行列として行列を記述できます。\n", + "\n", + "$$\n", + "M = \\frac{m_{0,0}+m_{1,1}}{2}~1~+~\\frac{m_{0,1}+m_{1,0}}{2}~X~+~i\\frac{m_{0,1}-m_{1,0}}{2}~Y~+~\\frac{m_{0,0}-m_{1,1}}{2}~Z.\n", + "$$\n", + "\n", + "この例は一般的な単一量子ビット行列の場合ですが、任意の数の量子ビットの行列にも当てはまります。簡単な次の式から見てみましょう。\n", + "\n", + "$$\n", + "\\left(\\frac{1+Z}{2}\\right)\\otimes\\left(\\frac{1+Z}{2}\\right)\\otimes\\ldots\\otimes\\left(\\frac{1+Z}{2}\\right) = |00\\ldots0\\rangle\\langle00\\ldots0|,\n", + "$$\n", + "\n", + "上記と同じ方法で変形を進めることができ、最終的に、任意の数の量子ビットの行列がパウリ行列のテンソル積で表せることが分かります。\n", + "\n", + "$$\n", + "M = \\sum_{P_{n-1},\\ldots,P_0 \\in \\{1,X,Y,Z\\}} C_{P_{n-1}\\ldots,P_0}~~P_{n-1} \\otimes P_{n-2}\\otimes\\ldots\\otimes P_0.\n", + "$$\n", + "\n", + "エルミート行列の場合、ここでの係数$C_{P_{n-1}\\ldots,P_0}$ はすべて実数になることに注意してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 普遍性の定義 \n", + "\n", + "各量子ゲートをユニタリー行列で表すことができるのと同じように、(非常に大きな)ユニタリー演算で量子計算全体を記述することもできます。このユニタリー演算による効果で、入力状態が回転して出力状態になります。\n", + "\n", + "このユニタリー演算の特殊なケースの1つは、入力状態と出力状態が量子形式で表現されたビット列を記述することです。各入力$x$の出力$f(x)$へのマッピングは、いくつかの(可逆的な)古典的な計算によって記述できます。したがって、そのような計算はすべてユニタリー行列として表すことができます。\n", + "\n", + "$$\n", + "U = \\sum_j \\left| f(x) \\right\\rangle \\left\\langle x \\right|.\n", + "$$\n", + "\n", + "したがって、どんなユニタリー演算でも実装することができれば、標準的なデジタルコンピューターと同じように普遍性を実現できます。 \n", + "\n", + "もう1つの特殊なケースは、入力状態と出力状態が物理システムを表す可能性があることです。その場合、実行する計算は、そのシステムのダイナミクスをシミュレートすることを意味します。これは、古典コンピューターでは実用的ではない重要な問題ですが、量子コンピューターの自然な応用です。この場合、システムの時間発展は、ユニタリー演算に対応し、エルミート行列は、システムのハミルトニアンに対応します。したがって、ユニタリー演算を実施することは、時間発展をシミュレートし、ハミルトニアンの効果を実験することに対応します。\n", + "\n", + "これらの洞察を組み合わせることで、量子コンピューターが普遍的であることの意味を定義できます。それは端的にいうと、任意の数の量子ビットで任意のユニタリー演算を実行できる能力です。これができれば、デジタルコンピューターでできることは何でも再現でき、また、どのような量子システムでもシミュレートでき、量子コンピューターで可能なすべてのことを実行できる、ということです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 基本的なゲートセット \n", + "\n", + "基本的なゲートのセットからユニタリー演算を構築できるかどうかは、どのような基本ゲートにアクセスできるかに大きく依存します。誤り耐性のある量子コンピューティングを実現するために、最も簡単に実現できる量子操作のセットがあります。 多くの場合、この組み合わせは1量子ビットゲートと2量子ビットゲートで構成され、そのほとんどはいわゆる*クリフォードゲート*のセットです。このセットは非常に重要な一連の操作であり、量子アルゴリズムでの大変な作業の多くを担っています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.1 クリフォードゲート \n", + "\n", + "クリフォードゲートを理解するために、すでに何度も見てきた例であるアダマールから始めましょう。\n", + "\n", + "$$\n", + "H = |+\\rangle\\langle0|~+~ |-\\rangle\\langle1| = |0\\rangle\\langle+|~+~ |1\\rangle\\langle-|.\n", + "$$\n", + "\n", + "このゲートは、上記のように外積を使って表現できます。この形式で表現すると、その有名な効果が明らかになります:つまり、$|0\\rangle$を、$|+\\rangle$に回転します。より一般的には、z測定の基底状態$\\{ |0\\rangle,|1\\rangle \\}$をx測定の基底状態$\\{ |+\\rangle,|-\\rangle \\}$に回転させ、その逆も行います。\n", + "\n", + "このように、アダマールの効果は、情報を量子ビットの周りに移動させることです。これは、以前にx測定された情報をz測定の情報と交換します。\n", + "\n", + "アダマールを他のゲートと組み合わせて、次のようなさまざまな操作を実行できます:\n", + "\n", + "$$\n", + "H X H = Z,\\\\\\\\\n", + "H Z H = X.\n", + "$$\n", + "\n", + "$X$の前後でアダマールを実行することにより、以前にz基底状態に適用されていた動作が、x基底状態に転送されます。この効果は、$Z$の効果と同じです。同様に、アダマールと$Z$から$X$を作成できます。\n", + "\n", + "$S$ゲートとそのエルミート共役についても同様の動作が見られます。\n", + "\n", + "$$\n", + "S X S^{\\dagger} = Y,\\\\\\\\\n", + "S Y S^{\\dagger} = -X,\\\\\\\\\n", + "S Z S^{\\dagger} = Z.\n", + "$$\n", + "\n", + "これには、アダマールと同様の効果がありますが、$X$と$Z$ではなく$X$と$Y$を交換します。また、アダマールと組み合わせて、情報をyとzの間でシフトする複合ゲートも作成できるでしょう。\n", + "\n", + "パウリ行列を他のパウリ行列に変えるこの特性が、クリフォードゲートの特徴です。1量子ビットの場合については、次のように明らかに述べられます:$U$がクリフォードで$P$がパウリ行列の場合、$U P U^{\\dagger}$ もパウリ行列になる。アダマールのようなエルミート行列の場合、$U P U$です。\n", + "\n", + "1量子ビットのクリフォードゲートのさらなる例は、パウリ行列それ自体です。これらは、作用するパウリ行列を変えず、代わりに、反交換する2つの行列に$-1$の位相を割り当てます。 例えば、\n", + "\n", + "$$\n", + "Z X Z = -X,\\\\\\\\\n", + "Z Y Z = -Y,\\\\\\\\\n", + "Z Z Z= ~~~~Z.\n", + "$$\n", + "\n", + "$S$ゲートでも同じ位相が発生することに気づいたかもしれません。これをパウリ行列と組み合わせることで、この位相をキャンセルする複合ゲートを作成し、アダマール行列による$X$と$Z$の交換に似た方法で、$X$と$Y$を交換することができます。\n", + "\n", + "複数量子ビットのクリフォードゲートの場合、パウリ行列のテンソル積を他のパウリ行列のテンソル積に変換することが特徴として定義されます。例えば、最も有名な2量子ビットのクリフォードゲートはCNOTです。この章で使用するCNOTの特性は次のとおりです。\n", + "\n", + "$$\n", + "{ CX}_{j,k}~ (X \\otimes 1)~{ CX}_{j,k} = X \\otimes X.\n", + "$$\n", + "\n", + "これにより、$X$が制御量子ビットからターゲット量子ビットに「コピー」されます。\n", + "\n", + "ユニタリー演算とそのエルミート共役の間に行列を挟むプロセスは、そのユニタリー演算による共役化として知られています。このプロセスは、行列の固有状態を変換しますが、固有値は変わりません。クリフォード行列で共役化することがパウリ行列間での変換となる理由は、すべてのパウリ行列が同じ固有値のセットを持っているためです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 非クリフォードゲート \n", + "\n", + "クリフォードゲートは非常に重要ですが、それ自体では強力ではありません。量子計算を行うには、クリフォードではないゲートが必要です。クリフォードではないゲートには、3つの重要な例があり、それは、量子ビットの3つの軸を中心とした任意の回転、$R_x(\\theta)$、$R_y(\\theta)$ 、 $R_z(\\theta)$です。\n", + "\n", + "$R_x(\\theta)$に注目してみます。上記で見たように、任意のユニタリー演算はエルミート行列を使用して指数形式で表現できます。$R_x(\\theta)$は、以下のように書くことができます。\n", + "\n", + "$$\n", + "R_x(\\theta) = e^{i \\frac{\\theta}{2} X}.\n", + "$$\n", + "\n", + "前のセクションでは、ユニタリー演算とそれに対応するエルミート行列が同じ固有状態を持っていることも示しました。 このセクションでは、ユニタリー演算による共役化が固有状態を変換するけれど、固有値はそのままであることを確認しました。これを念頭に置いて、次のことを示すことができます\n", + "\n", + "$$\n", + "U R_x(\\theta)U^\\dagger = e^{i \\frac{\\theta}{2} ~U X U^\\dagger}.\n", + "$$\n", + "\n", + "したがって、この回転をクリフォードゲートで共役化することで、別の軸を中心とした同じ回転に変換できます。つまり、$R_y(\\theta)$と$R_z(\\theta)$を直接実行する方法がなかったとしても、$R_x(\\theta)$をクリフォードゲートと組み合わせて実行することができます。非クリフォードゲートをクリフォードゲートと組み合わせてパワーを高めるこの手法は、量子コンピューティングで非常によく活用されています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.3 ゲートセットの拡張 \n", + "\n", + "$R_x(\\theta)$をクリフォードと組み合わせる別の例として、CNOTで共役化してみましょう。\n", + "\n", + "$$\n", + "CX_{j,k} ~(R_x(\\theta) \\otimes 1)~ CX_{j,k} = CX_{j,k} ~ e^{i \\frac{\\theta}{2} ~ (X\\otimes 1)}~ CX_{j,k} = e^{i \\frac{\\theta}{2} ~CX_{j,k} ~ (X\\otimes 1)~ CX_{j,k}} = e^{i \\frac{\\theta}{2} ~ X\\otimes X}\n", + "$$\n", + "\n", + "\n", + "これにより、単純な1量子ビットの回転がはるかに強力な2量子ビットゲートに変換されます。これは、それぞれの量子ビットで独立して回転を実行するのではなく、もつれ状態を生成し、操作することができるゲートです。\n", + "\n", + "同じトリックを使用して、任意の数の複数量子ビットに操作を拡張できます。必要なのは、$X$ を新しい量子ビットにコピーし続けるための更なるCNOTによる共役化です。\n", + "\n", + "さらに、1量子ビットのクリフォードゲートを使用して、異なる量子ビットにパウリ行列を変換することができます。例えば、2量子ビットの例では、右側の量子ビットを$S$で共役化して、$X$を$Y$に変換できます。\n", + "\n", + "$$\n", + "\\left( I \\otimes S \\right) ~e^{i \\frac{\\theta}{2} ~ X\\otimes X}~\\left( I \\otimes S^\\dagger \\right) = e^{i \\frac{\\theta}{2} ~ X\\otimes Y}.\n", + "$$\n", + "\n", + "これらの手法を使用すると、任意の数の複数量子ビットに作用する複雑なもつれ演算を作成することができます。\n", + "\n", + "$$\n", + "U = e^{i\\frac{\\theta}{2} ~ P_{n-1}\\otimes P_{n-2}\\otimes...\\otimes P_0}, ~~~ P_j \\in \\{I,X,Y,Z\\}.\n", + "$$\n", + "\n", + "これはすべて、1量子ビットと2量子ビットのクリフォードゲートをx軸を中心とした回転と組み合わせると、強力な可能性が得られることを示しています。普遍性の証明のために残されている課題は、これらを使用して何でもできることを示すことです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 普遍性の証明 \n", + "\n", + "古典コンピューターと同じように、この大きな仕事を扱いやすいかたまりに分割する必要があります。普遍性を実現するための基本的なゲートのセットを見つける必要があります。それは、後で見るように、前の章の1量子ビットゲートおよび2量子ビットゲートで十分です。\n", + "\n", + "以下のようにユニタリー演算を実装するとします。\n", + "\n", + "$$\n", + "U = e^{i(aX + bZ)},\n", + "$$\n", + "\n", + "ただし、使えるゲートは$R_x(\\theta) = e^{i \\frac{\\theta}{2} X}$ と $R_z(\\theta) = e^{i \\frac{\\theta}{2} Z}$のみです。 この問題を解決する最善の方法は、オイラー角を使用することです。 しかし、代わりに別の方法を考えてみましょう。\n", + "\n", + "$U$の指数関数のエルミート行列は、$R_x(\\theta)$回転と $R_z(\\theta)$回転のエルミート行列の和です。これは、問題を解決するための素朴なアプローチを示しています:たぶん、$R_z(2b) = e^{i bZ}$ に続いて $R_x(2a) = e^{i a X}$ を適用できるでしょう。しかし、残念ながら、可換でない行列を累乗に使っているため、このアプローチは使えません。\n", + "\n", + "$$\n", + "e^{i a X} e^{i b Z} \\neq e^{i(aX + bZ)}\n", + "$$\n", + "\n", + "ただし、次の変形バージョンを使用できます:\n", + "\n", + "$$\n", + "U = \\lim_{n\\rightarrow\\infty} ~ \\left(e^{iaX/n}e^{ibZ/n}\\right)^n.\n", + "$$\n", + "\n", + "ここで、$U$を$n$個の小さなスライスに分割します。 各スライスについて、次のように言うのは良い近似です。\n", + "\n", + "$$\n", + "e^{iaX/n}e^{ibZ/n} = e^{i(aX + bZ)/n}\n", + "$$\n", + "\n", + "この近似の誤差は、$1/n^2$としてスケーリングされます。 $n$個のスライスを組み合わせると、エラーが$1/n$にスケールする目標とするユニタリー演算の近似値が得られます。したがって、スライスの数を増やすだけで、必要なだけ$U$に近づけることができます。更に正確なユニタリー演算を得るために、シーケンスを作成する方法もあります。\n", + "\n", + "この方法の利点は、1量子ビットだけでなく、複雑なケースでも使用できることです。 たとえば、以下のユニタリー演算を考えます。\n", + "\n", + "$$\n", + "U = e^{i(aX\\otimes X\\otimes X + bZ\\otimes Z\\otimes Z)}.\n", + "$$\n", + "\n", + "私たちは、1量子ビット$R_x(\\theta)$と2つの制御NOTからユニタリー行列$e^{i\\frac{\\theta}{2} X\\otimes X\\otimes X}$を作成する方法を知っています。\n", + "\n", + "```python\n", + "qc.cx(0,2)\n", + "qc.cx(0,1)\n", + "qc.rx(theta,0)\n", + "qc.cx(0,1)\n", + "qc.cx(0,2)\n", + "```\n", + "\n", + "いくつかのアダマールがあれば、$e^{i\\frac{\\theta}{2} Z\\otimes Z\\otimes Z}$にも同じことができます。\n", + "\n", + "```python\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.h(2)\n", + "qc.cx(0,2)\n", + "qc.cx(0,1)\n", + "qc.rx(theta,0)\n", + "qc.cx(0,1)\n", + "qc.cx(0,2)\n", + "qc.h(2)\n", + "qc.h(1)\n", + "qc.h(0)\n", + "```\n", + "\n", + "これにより、新しい3量子ビットの$U$の小さなスライスを再現できます:\n", + "\n", + "$$\n", + "e^{iaX\\otimes X\\otimes X/n}e^{ibZ\\otimes Z\\otimes Z/n} = e^{i(aX\\otimes X\\otimes X + bZ\\otimes Z\\otimes Z)/n}.\n", + "$$\n", + "\n", + "前にやったのと同じ方法で、スライスを結合して、$U$の任意の正確な近似を取得できます。\n", + "\n", + "この方法は、量子ビットの数、およびシミュレーションが必要な項の数を増やしても機能し続けます。近似が正確であることを保証するために注意が必要ですが、それは妥当なリソースで行うことができます。シミュレーションに追加の項を追加したり、必要な精度を高めたりするには、メソッドの複雑さを多項式で増やすだけで済みます。\n", + "\n", + "この形式の方法は、$H$がパウリ行列のテンソル積の和として表現される任意のユニタリー演算子$U = e^{iH}$を再現できます。すべての行列をこのように表現できることを以前に示したので、これはすべてのユニタリー演算子を再現できることを示すのに十分です。実際には他の方法の方が良いかもしれませんが、この章から学ぶ主な概念は、Qiskitにある基本的な操作のみを使用してすべての複数量子ビットユニタリー演算子を再現する方法が確かにあるということです。これで量子普遍性を実現できます!\n", + "\n", + "普遍性を実現できるのは、このゲートセットだけではありません。例えば、アダマールとトフォリだけで十分であることを示すことができます。他の複数のゲートセットでも、普遍性のあることが証明されており、フォールトトレラントなゲートセット実現のために様々な方法が期待されています。\n", + "\n", + "このテキストブックで説明した計算はすべて、回路モデルに従います。しかし、回路モデルは量子計算の唯一の普遍的な形式ではありません。断熱量子コンピューティングや測定ベースの量子コンピューターなど、他の量子コンピューティングの形式が存在します。それらが普遍的であるという事実は、回路モデルからこれらの計算形式への多項式の時間とリソースのマッピングが証明されていることを意味します。この他の形式は、計算を実行するために、他の量子力学的特性を利用することがよくあります。また、その利点はハードウェアに依存していることに注意してください。量子計算の普遍的モデルは任意の量子アルゴリズムを実行できるために、私たちは、回路モデルのみに着目する必要があり、他の形式を無視できます。\n", + "\n", + "普遍的ではありませんが、特定のアプリケーションに適用可能な別の量子計算の形式があります。たとえば、量子アニーリングは最適化とサンプリングの問題に非常に役立ちます。アニーリング(焼きなまし)は、金属を高温に加熱してからゆっくりと冷却するプロセスです。これにより、溶融金属が金属片の表面上を流れ、再配置します。このプロセスは、問題の金属の多くの特性を変更します。量子アニーリングは、ある意味でこれに類似していて、問題をある種のエネルギー地形にエンコードしてから、量子状態にランドスケープを探索させることが含まれます。通常の波は周囲よりも低いトラフ(ローカルな極小値)に閉じ込められる可能性がありますが、量子効果により、量子状態がランドスケープの真の最低点(グローバルな極小値)を見つける速度が向上します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/quantum-gates.ipynb b/translations/ja/ch-gates/quantum-gates.ipynb new file mode 100644 index 0000000..9d1b23f --- /dev/null +++ b/translations/ja/ch-gates/quantum-gates.ipynb @@ -0,0 +1,317 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Gates" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To manipulate an input state we need to apply the basic operations of quantum computing. These are known as quantum gates. Here we'll give an introduction to some of the most fundamental gates in quantum computing. Most of those we'll be looking at act only on a single qubit. This means that their actions can be understood in terms of the Bloch sphere.\n", + "\n", + "\n", + "### The Pauli operators\n", + "\n", + "The simplest quantum gates are the Paulis: $X$, $Y$ and $Z$. Their action is to perform a half rotation of the Bloch sphere around the x, y and z axes. They therefore have effects similar to the classical NOT gate or bit-flip. Specifically, the action of the $X$ gate on the states $|0\\rangle$ and $|1\\rangle$ is\n", + "\n", + "$$\n", + "X |0\\rangle = |1\\rangle,\\\\\\\\ X |1\\rangle = |0\\rangle.\n", + "$$\n", + "\n", + "The $Z$ gate has a similar effect on the states $|+\\rangle$ and $|-\\rangle$:\n", + "\n", + "$$\n", + "Z |+\\rangle = |-\\rangle, \\\\\\\\ Z |-\\rangle = |+\\rangle.\n", + "$$\n", + "\n", + "These gates are implemented in Qiskit as follows (assuming a circuit named `qc`).\n", + "\n", + "```python\n", + "qc.x(0) # x on qubit 0\n", + "qc.y(0) # y on qubit 0\n", + "qc.z(0) # z on qubit 0\n", + "```\n", + "\n", + "The matrix representations of these gates have already been shown in a previous section.\n", + "\n", + "$$\n", + "X= \\begin{pmatrix} 0&1 \\\\\\\\ 1&0 \\end{pmatrix}\\\\\\\\\n", + "Y= \\begin{pmatrix} 0&-i \\\\\\\\ i&0 \\end{pmatrix}\\\\\\\\\n", + "Z= \\begin{pmatrix} 1&0 \\\\\\\\ 0&-1 \\end{pmatrix}\n", + "$$\n", + "\n", + "There, their job was to help us make calculations regarding measurements. But since these matrices are unitary, and therefore define a reversible quantum operation, this additional interpretation of them as gates is also possible.\n", + "\n", + "Note that here we referred to these gates as $X$, $Y$ and $Z$ and `x`, `y` and `z`, depending on whether we were talking about their matrix representation or the way they are written in Qiskit. Typically we will use the style of $X$, $Y$ and $Z$ when referring to gates in text or equations, and `x`, `y` and `z` when writing Qiskit code." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hadamard and S\n", + "\n", + "The Hadamard gate is one that we've already used. It's a key component in performing an x measurement:\n", + "\n", + "```python\n", + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0);\n", + "measure_x.measure(0,0);\n", + "```\n", + "\n", + "Like the Paulis, the Hadamard is also a half rotation of the Bloch sphere. The difference is that it rotates around an axis located halfway between x and z. This gives it the effect of rotating states that point along the z axis to those pointing along x, and vice versa.\n", + "\n", + "$$\n", + "H |0\\rangle = |+\\rangle, \\, \\, \\, \\, H |1\\rangle = |-\\rangle,\\\\\\\\\n", + "H |+\\rangle = |0\\rangle, \\, \\, \\, \\, H |-\\rangle = |1\\rangle.\n", + "$$\n", + "\n", + "This effect makes it an essential part of making x measurements, since the hardware behind quantum computing typically only allows the z measurement to be performed directly. By moving x basis information to the z basis, it allows an indirect measurement of x.\n", + "\n", + "The property that $H |0\\rangle = |+\\rangle $ also makes the Hadamard our primary means of generating superposition states. Its matrix form is\n", + "\n", + "$$\n", + "H = \\frac{1}{\\sqrt{2}} \\begin{pmatrix} 1&1 \\\\\\\\ 1&-1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "The $S$ and $S^\\dagger$ gates have a similar role to play in quantum computation.\n", + "\n", + "```python\n", + "qc.s(0) # s gate on qubit 0\n", + "qc.sdg(0) # s† on qubit 0\n", + "```\n", + "\n", + "They are quarter turns of the Bloch sphere around the z axis, and so can be regarded as the two possible square roots of the $Z$ gate,\n", + "\n", + "$$\n", + "S = \\begin{pmatrix} 1&0 \\\\\\\\ 0&i \\end{pmatrix}, \\, \\, \\, \\, S^\\dagger = \\begin{pmatrix} 1&0 \\\\\\\\ 0&-i \\end{pmatrix}.\n", + "$$\n", + "\n", + "The effect of these gates is to rotate between the states of the x and y bases.\n", + "\n", + "$$\n", + "S |+\\rangle = |\\circlearrowright\\rangle, \\, \\, \\, \\, S |-\\rangle = |\\circlearrowleft\\rangle,\\\\\\\\\n", + "S^\\dagger |\\circlearrowright\\rangle = |+\\rangle, \\, \\, \\, \\, S^\\dagger |\\circlearrowleft\\rangle = |-\\rangle.\n", + "$$\n", + "\n", + "They are therefore used as part of y measurements.\n", + "\n", + "```python\n", + "measure_y = QuantumCircuit(1,1)\n", + "measure_y.sdg(0)\n", + "measure_y.h(0)\n", + "measure_y.measure(0,0);\n", + "```\n", + "\n", + "The $H$, $S$ and $S^\\dagger$ gates, along with the Paulis, form the so-called 'Clifford group' for a single qubit, which will be discussed more in later sections. These gates are extremely useful for many tasks in making and manipulating superpositions, as well as facilitating different kinds of measurements. But to unlock the full potential of qubits, we need the next set of gates.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Other single-qubit gates\n", + "\n", + "We've already seen the $X$, $Y$ and $Z$ gates, which are rotations around the x , y and z axes by a specific angle. More generally we can extend this concept to rotations by an arbitrary angle $\\theta$. This gives us the gates $R_x(\\theta)$, $R_y(\\theta)$ and $R_z(\\theta)$. The angle is expressed in radians, so the Pauli gates correspond to $\\theta=\\pi$ . Their square roots require half this angle, $\\theta=\\pm \\pi/2$, and so on.\n", + "\n", + "In Qasm, these rotations can be implemented with `rx`, `ry`, and `rz` as follows.\n", + "\n", + "```python\n", + "qc.rx(theta,0) # rx rotation on qubit 0\n", + "qc.ry(theta,0) # ry rotation on qubit 0\n", + "qc.rz(theta,0) # rz rotation on qubit 0\n", + "```\n", + "\n", + "Two specific examples of $R_z(\\theta)$ have their own names: those for $\\theta=\\pm \\pi/4$. These are the square roots of $S$, and are known as $T$ and $T^\\dagger$.\n", + "\n", + "```python\n", + "qc.t(0) # t gate on qubit 0\n", + "qc.tdg(0) # t† on qubit 1\n", + "```\n", + "\n", + "Their matrix form is\n", + "\n", + "$$\n", + "T = \\begin{pmatrix} 1&0 \\\\\\\\ 0&e^{i\\pi/4}\\end{pmatrix}, \\, \\, \\, \\, T^\\dagger = \\begin{pmatrix} 1&0 \\\\\\\\ 0&e^{-i\\pi/4} \\end{pmatrix}.\n", + "$$\n", + "\n", + "\n", + "All single-qubit operations are compiled down to gates known as $U_1$ , $U_2$ and $U_3$ before running on real IBM quantum hardware. For that reason they are sometimes called the _physical gates_. Let's have a more detailed look at them. The most general is\n", + "\n", + "$$\n", + "U_3(\\theta,\\phi,\\lambda) = \\begin{pmatrix} \\cos(\\theta/2) & -e^{i\\lambda}\\sin(\\theta/2) \\\\\\\\ e^{i\\phi}\\sin(\\theta/2) \n", + "& e^{i\\lambda+i\\phi}\\cos(\\theta/2) \\end{pmatrix}.\n", + "$$\n", + "\n", + "This has the effect of rotating a qubit in the initial $|0\\rangle$ state to one with an arbitrary superposition and relative phase:\n", + "\n", + "$$\n", + "U_3|0\\rangle = \\cos(\\theta/2)|0\\rangle + \\sin(\\theta/2)e^{i\\phi}|1\\rangle.\n", + "$$\n", + "\n", + "The $U_1$ gate is known as the phase gate and is essentially the same as $R_z(\\lambda)$. Its relationship with $U_3$ and its matrix form are,\n", + "\n", + "$$\n", + "U_1(\\lambda) = U_3(0,0,\\lambda) = \\begin{pmatrix} 1 & 0 \\\\\\\\ 0 & e^{i\\lambda} \\end{pmatrix}.\n", + "$$\n", + "\n", + "In IBM Q hardware, this gate is implemented as a frame change and takes zero time.\n", + "\n", + "The second gate is $U_2$, and has the form\n", + "\n", + "$$\n", + "U_2(\\phi,\\lambda) = U_3(\\pi/2,\\phi,\\lambda) = \\frac{1}{\\sqrt{2}}\\begin{pmatrix} 1 & -e^{i\\lambda} \\\\\\\\ e^{i\\phi} & e^{i\\lambda+i\\phi} \\end{pmatrix}.\n", + "$$\n", + "\n", + "From this gate, the Hadamard is done by $H= U_2(0,\\pi)$. In IBM Q hardware, this is implemented by a pre- and post-frame change and an $X_{\\pi/2}$ pulse." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multiqubit gates\n", + "\n", + "To create quantum algorithms that beat their classical counterparts, we need more than isolated qubits. We need ways for them to interact. This is done by multiqubit gates.\n", + "\n", + "The most prominent multiqubit gates are the two-qubit CNOT and the three-qubit Toffoli. These have already been introduced in 'The atoms of computation'. They essentially perform reversible versions of the classical XOR and AND gates, respectively.\n", + "\n", + "```python\n", + "qc.cx(0,1) # CNOT controlled on qubit 0 with qubit 1 as target\n", + "qc.ccx(0,1,2) # Toffoli controlled on qubits 0 and 1 with qubit 2 as target\n", + "```\n", + "Note that the CNOT is referred to as ```cx``` in Qiskit.\n", + "\n", + "We can also interpret the CNOT as performing an $X$ on its target qubit, but only when its control qubit is in state $|1\\rangle$, and doing nothing when the control is in state $|0\\rangle$. With this interpretation in mind, we can similarly define gates that work in the same way, but instead peform a $Y$ or $Z$ on the target qubit depending on the $|0\\rangle$ and $|1\\rangle$ states of the control.\n", + "\n", + "```python\n", + "qc.cy(0,1) # controlled-Y, controlled on qubit 0 with qubit 1 as target\n", + "qc.cz(0,1) # controlled-Z, controlled on qubit 0 with qubit 1 as target\n", + "```\n", + "\n", + "The Toffoli gate can be interpreted in a similar manner, except that it has a pair of control qubits. Only if both are in state $|1\\rangle$ is the $X$ applied to the target." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Composite gates\n", + "\n", + "When we combine gates, we make new gates. If we want to see the matrix representation of these, we can use the 'unitary simulator' of Qiskit.\n", + "\n", + "For example, let's try something simple: a two qubit circuit with an `x` applied to one and a `z` to the other. Using tensor products, we can expect the result to be,\n", + "\n", + "$$\n", + "Z \\otimes X= \\begin{pmatrix} 1&0 \\\\\\\\ 0&-1 \\end{pmatrix} \\otimes \\begin{pmatrix} 0&1 \\\\\\\\ 1&0 \\end{pmatrix} = \\begin{pmatrix} 0&1&0&0 \\\\\\\\ 1&0&0&0\\\\\\\\0&0&0&-1\\\\\\\\0&0&-1&0 \\end{pmatrix}.\n", + "$$\n", + "\n", + "This is exactly what we find when we analyze the circuit with this tool." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "\\begin{pmatrix}0j&(1+0j)&0j&0j\\\\(1+0j)&0j&0j&0j\\\\0j&0j&0j&(-1+0j)\\\\0j&0j&(-1+0j)&0j\\end{pmatrix}" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# set up circuit (no measurements required)\n", + "qc = QuantumCircuit(2)\n", + "qc.x(0) # qubits numbered from the right, so qubit 0 is the qubit on the right\n", + "qc.z(1) # and qubit 1 is on the left\n", + "\n", + "# set up simulator that returns unitary matrix\n", + "backend = Aer.get_backend('aer_simulator')\n", + "\n", + "# run the circuit to get the matrix\n", + "qc.save_unitary()\n", + "gate = execute(qc,backend).result().get_unitary()\n", + "\n", + "# now we use some fanciness to display it in latex\n", + "from IPython.display import display, Markdown, Latex\n", + "gate_latex = '\\\\begin{pmatrix}'\n", + "for line in gate:\n", + " for element in line:\n", + " gate_latex += str(element) + '&'\n", + " gate_latex = gate_latex[0:-1]\n", + " gate_latex += '\\\\\\\\'\n", + "gate_latex = gate_latex[0:-2]\n", + "gate_latex += '\\end{pmatrix}'\n", + "display(Markdown(gate_latex))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-gates/standard-gate-set.ipynb b/translations/ja/ch-gates/standard-gate-set.ipynb new file mode 100644 index 0000000..239c0b0 --- /dev/null +++ b/translations/ja/ch-gates/standard-gate-set.ipynb @@ -0,0 +1,175 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Standard Gate Set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For every possible realization of fault-tolerant quantum computing, there is a set of quantum operations that are most straightforward to realize. Often these consist of multiple so-called Clifford gates, combined with a few single-qubit gates that do not belong to the Clifford group. In this section we'll introduce these concepts, in preparation for showing that they are universal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Clifford gates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some of the most important quantum operations are the so-called Clifford operations. A prominent example is the Hadamard gate:\n", + "\n", + "$$\n", + "H = |+\\rangle\\langle0|~+~ |-\\rangle\\langle1| = |0\\rangle\\langle+|~+~ |1\\rangle\\langle-|.\n", + "$$\n", + "\n", + "This gate is expressed above using outer products, as described in the last section. When expressed in this form, its famous effect becomes obvious: it takes $|0\\rangle$, and rotates it to $|+\\rangle$. More generally, we can say it rotates the basis states of the z measurement, $\\{ |0\\rangle,|1\\rangle \\}$, to the basis states of the x measurement, $\\{ |+\\rangle,|-\\rangle \\}$, and vice versa.\n", + "\n", + "This effect of the Hadamard is to move information around a qubit. It swaps any information that would previously be accessed by an x measurement with that accessed by a z measurement. Indeed, one of the most important jobs of the Hadamard is to do exactly this. We use it when wanting to make an x measurement, given that we can only physically make z measurements.\n", + "\n", + "```c\n", + "// x measurement of qubit 0\n", + "h q[0];\n", + "measure q[0] -> c[0];\n", + "```\n", + "\n", + "The Hadamard can be combined with other gates to perform different operations, for example:\n", + "\n", + "$$\n", + "H X H = Z,\\\\\\\\\n", + "H Z H = X.\n", + "$$\n", + "\n", + "\n", + "By doing a Hadamard before and after an $X$, we cause the action it previously applied to the z basis states to be transferred to the x basis states instead. The combined effect is then identical to that of a $Z$. Similarly, we can create an $X$ from Hadamards and a $Z$.\n", + "\n", + "Similar behavior can be seen for the $S$ gate and its Hermitian conjugate,\n", + "\n", + "$$\n", + "S X S^{\\dagger} = Y,\\\\\\\\\n", + "S Y S^{\\dagger} = -X,\\\\\\\\\n", + "S Z S^{\\dagger} = Z.\n", + "$$\n", + "\n", + "This has a similar effect to the Hadamard, except that it swaps $X$ and $Y$ instead of $X$ and $Z$. In combination with the Hadamard, we could then make a composite gate that shifts information between y and z. This therefore gives us full control over single-qubit Paulis.\n", + "\n", + "The property of transforming Paulis into other Paulis is the defining feature of Clifford gates. Stated explicitly for the single-qubit case: if $U$ is a Clifford and $P$ is a Pauli, $U P U^{\\dagger}$ will also be a Pauli. For Hermitian gates, like the Hadamard, we can simply use $U P U$.\n", + "\n", + "Further examples of single-qubit Clifford gates are the Paulis themselves. These do not transform the Pauli they act on. Instead, they simply assign a phase of $-1$ to the two that they anticommute with. For example,\n", + "\n", + "$$\n", + "Z X Z = -X,\\\\\\\\\n", + "Z Y Z = -Y,\\\\\\\\\n", + "Z Z Z= ~~~~Z.\n", + "$$\n", + "\n", + "You may have noticed that a similar phase also arose in the effect of the $S$ gate. By combining this with a Pauli, we could make a composite gate that would cancel this phase, and swap $X$ and $Y$ in a way more similar to the Hadamard's swap of $X$ and $Z$.\n", + "\n", + "For multiple-qubit Clifford gates, the defining property is that they transform tensor products of Paulis to other tensor products of Paulis. For example, the most prominent two-qubit Clifford gate is the CNOT. The property of this that we will make use of in this chapter is\n", + "\n", + "$$\n", + "{ CX}_{j,k}~ (X \\otimes 1)~{ CX}_{j,k} = X \\otimes X.\n", + "$$\n", + "\n", + "This effectively 'copies' an $X$ from the control qubit over to the target.\n", + "\n", + "The process of sandwiching a matrix between a unitary and its Hermitian conjugate is known as conjugation by that unitary. This process transforms the eigenstates of the matrix, but leaves the eigenvalues unchanged. The reason why conjugation by Cliffords can transform between Paulis is because all Paulis share the same set of eigenvalues." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Non-Clifford gates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Clifford gates are very important, but they are not powerful on their own. In order to do any quantum computation, we need gates that are not Cliffords. Three important examples are arbitrary rotations around the three axes of the qubit, $R_x(\\theta)$, $R_y(\\theta)$ and $R_z(\\theta)$.\n", + "\n", + "Let's focus on $R_x(\\theta)$. As we saw in the last section, any unitary can be expressed in an exponential form using a Hermitian matrix. For this gate, we find\n", + "\n", + "$$\n", + "R_x(\\theta) = e^{i \\frac{\\theta}{2} X}.\n", + "$$\n", + "\n", + "The last section also showed us that the unitary and its corresponding Hermitian matrix have the same eigenstates. In this section, we've seen that conjugation by a unitary transforms eigenstates and leaves eigenvalues unchanged. With this in mind, it can be shown that\n", + "\n", + "$$\n", + "U R_x(\\theta)U^\\dagger = e^{i \\frac{\\theta}{2} ~U X U^\\dagger}.\n", + "$$\n", + "\n", + "By conjugating this rotation by a Clifford, we can therefore transform it to the same rotation around another axis. So even if we didn't have a direct way to perform $R_y(\\theta)$ and $R_z(\\theta)$, we could do it with $R_x(\\theta)$ combined with Clifford gates. This technique of boosting the power of non-Clifford gates by combining them with Clifford gates is one that we make great use of in quantum computing.\n", + "\n", + "Certain examples of these rotations have specific names. Rotations by $\\theta = \\pi$ around the x, y and z axes are X, Y and Z, respectively. Rotations by $\\theta = \\pm \\pi/2$ around the z axis are $S$ and $S^†$, and rotations by $\\theta = \\pm \\pi/4$ around the z axis are $T$ and $T^†$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Composite gates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As another example of combining $R_x(\\theta)$ with Cliffords, let's conjugate it with a CNOT.\n", + "\n", + "$$\n", + "CX_{j,k} ~(R_x(\\theta) \\otimes 1)~ CX_{j,k} = CX_{j,k} ~ e^{i \\frac{\\theta}{2} ~ (X\\otimes 1)}~ CX_{j,k} = e^{i \\frac{\\theta}{2} ~CX_{j,k} ~ (X\\otimes 1)~ CX_{j,k}} = e^{i \\frac{\\theta}{2} ~ X\\otimes X}\n", + "$$\n", + "\n", + "This transforms our simple, single-qubit rotation into a much more powerful two-qubit gate. This is not just equivalent to performing the same rotation independently on both qubits. Instead, it is a gate capable of generating and manipulating entangled states.\n", + "\n", + "We needn't stop there. We can use the same trick to extend the operation to any number of qubits. All that's needed is more conjugates by the CNOT to keep copying the $X$ over to new qubits.\n", + "\n", + "Furthermore, we can use single-qubit Cliffords to transform the Pauli on different qubits. For example, in our two-qubit example we could conjugate by $S$ on the qubit on the left to turn the $X$ there into a $Y$:\n", + "\n", + "$$\n", + "S ~e^{i \\frac{\\theta}{2} ~ X\\otimes X}~S^\\dagger = e^{i \\frac{\\theta}{2} ~ X\\otimes Y}.\n", + "$$\n", + "\n", + "With these techniques, we can make complex entangling operations that act on any arbitrary number of qubits, of the form\n", + "\n", + "$$\n", + "U = e^{i\\frac{\\theta}{2} ~ P_{n-1}\\otimes P_{n-2}\\otimes...\\otimes P_0}, ~~~ P_j \\in \\{I,X,Y,Z\\}.\n", + "$$\n", + "\n", + "This all goes to show that combining the single and two-qubit Clifford gates with rotations around the x axis gives us a powerful set of possibilities. What's left to demonstrate is that we can use them to do anything." + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-labs/Lab01_QuantumCircuits.ipynb b/translations/ja/ch-labs/Lab01_QuantumCircuits.ipynb new file mode 100644 index 0000000..613fd1a --- /dev/null +++ b/translations/ja/ch-labs/Lab01_QuantumCircuits.ipynb @@ -0,0 +1,1172 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 実験 1 量子回路" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前提知識\n", + "- [Qiskitの基礎](https://qiskit.org/documentation/tutorials/circuits/1_getting_started_with_qiskit.html)\n", + "- [Ch.1.2 計算の原子](https://qiskit.org/textbook/ch-states/atoms-computation.html)\n", + "\n", + "そのほかの関連教材\n", + "- [IBM Quantum Systemへのアクセス](https://qiskit.org/documentation/install.html#access-ibm-quantum-systems)\n", + "- [IBM Quantum Systemの構成](https://quantum-computing.ibm.com/docs/manage/backends/configuration)\n", + "- [トランスパイル](https://qiskit.org/documentation/apidoc/transpiler.html)\n", + "- [IBM Quantumアカウント](https://quantum-computing.ibm.com/docs/manage/account/ibmq)\n", + "- [量子回路](https://qiskit.org/documentation/apidoc/circuit.html) " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.visualization import plot_histogram\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "パート 1: 量子回路による古典ロジックゲート\n", + "\n", + "\n", + "\n", + "### 目標\n", + "\n", + "XORゲート、ANDゲート、NANDゲート、ORゲートの機能を持つ量子回路をNOTゲート(Qiskitではxと表す)、CNOTゲート(Qiskitではcx)、Toffoliゲート(Qiskitではccx)で作ります。\n", + "\n", + "\n", + "\n", + "`NOT`ゲートの実装を例として示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def NOT(inp):\n", + " \"\"\" NOT ゲート\n", + " \n", + " パラメーター:\n", + " inp (str): Input, encoded in qubit 0.\n", + " \n", + " 戻り値:\n", + " QuantumCircuit: Output NOT circuit.\n", + " str: Output value measured from qubit 0.\n", + " \"\"\"\n", + "\n", + " qc = QuantumCircuit(1, 1) # 単一量子ビットと単一古典ビットによる量子回路\n", + " qc.reset(0)\n", + " \n", + " # '0'を量子状態|0⟩、'1'を量子状態|1⟩としてエンコードする\n", + " # 量子ビットは初期状態|0⟩なので、'0'の入力に関しては何もしなくて良い\n", + " # 入力'1'に関しては、xを適用して|0⟩から|1⟩へ回転させる\n", + " if inp=='1':\n", + " qc.x(0)\n", + " \n", + " # 入力状態とゲート操作の間にバリアをセットします\n", + " qc.barrier()\n", + " \n", + " # すでに入力をエンコードしているので、xを使ってNOTを実行できます\n", + " qc.x(0)\n", + " \n", + " # ゲート操作と測定の間にバリアをセットします\n", + " qc.barrier()\n", + " \n", + " # 最後に、量子ビットの|0⟩/|1⟩の出力を抽出し、ビットc[0]にエンコードします\n", + " qc.measure(0,0)\n", + " qc.draw('mpl')\n", + " \n", + " # シミュレーター上でプログラムを実行します\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 出力は決定論的なので、1回のショットで取得できます\n", + " job = execute(qc, backend, shots=1, memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return qc, output" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "入力 0 に対するNOTの出力は 1\n" + ] + }, + { + "data": { + "text/html": [ + "
               ░ ┌───┐ ░ ┌─┐\n",
    +       "q_0: ─|0>──░─┤ X ├─░─┤M├\n",
    +       "           ░ └───┘ ░ └╥┘\n",
    +       "c: 1/═════════════════╩═\n",
    +       "                      0 
    " + ], + "text/plain": [ + " ░ ┌───┐ ░ ┌─┐\n", + "q_0: ─|0>──░─┤ X ├─░─┤M├\n", + " ░ └───┘ ░ └╥┘\n", + "c: 1/═════════════════╩═\n", + " 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "入力 1 に対するNOTの出力は 0\n" + ] + }, + { + "data": { + "text/html": [ + "
              ┌───┐ ░ ┌───┐ ░ ┌─┐\n",
    +       "q_0: ─|0>─┤ X ├─░─┤ X ├─░─┤M├\n",
    +       "          └───┘ ░ └───┘ ░ └╥┘\n",
    +       "c: 1/══════════════════════╩═\n",
    +       "                           0 
    " + ], + "text/plain": [ + " ┌───┐ ░ ┌───┐ ░ ┌─┐\n", + "q_0: ─|0>─┤ X ├─░─┤ X ├─░─┤M├\n", + " └───┘ ░ └───┘ ░ └╥┘\n", + "c: 1/══════════════════════╩═\n", + " 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n" + ] + } + ], + "source": [ + "## 関数をテストします\n", + "for inp in ['0', '1']:\n", + " qc, out = NOT(inp)\n", + " print('入力',inp,'に対するNOTの出力は',out)\n", + " display(qc.draw())\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 XOR ゲート\n", + "\n", + "2つのバイナリー文字列を入力として受け取り、出力を1つします。\n", + "\n", + "入力が等しいとき、出力は'0'となり、入力が等しくない場合は、'1'になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "def XOR(inp1,inp2):\n", + " \"\"\"XORゲート\n", + " \n", + " パラメーター:\n", + " inpt1 (str): Input 1, encoded in qubit 0.\n", + " inpt2 (str): Input 2, encoded in qubit 1.\n", + " \n", + " 戻り値:\n", + " QuantumCircuit: Output XOR circuit.\n", + " str: Output value measured from qubit 1.\n", + " \"\"\"\n", + " \n", + " qc = QuantumCircuit(2, 1) \n", + " qc.reset(range(2))\n", + " \n", + " if inp1=='1':\n", + " qc.x(0)\n", + " if inp2=='1':\n", + " qc.x(1)\n", + " \n", + " # 入力状態とゲート操作の間にバリアをセットします\n", + " qc.barrier()\n", + " \n", + " # ここにプログラミングして量子回路でXORゲートを作ってください\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " # 入力状態とゲート操作の間にバリアをセットします\n", + " qc.barrier()\n", + " \n", + " qc.measure(1,0) # 量子ビット1の出力を測定\n", + " \n", + " # シミュレーター上でプログラムを実行します\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 出力は決定論的なので、1回のショットで取得できます\n", + " job = execute(qc, backend, shots=1, memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return qc, output" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "## 関数をテストします\n", + "for inp1 in ['0', '1']:\n", + " for inp2 in ['0', '1']:\n", + " qc, output = XOR(inp1, inp2)\n", + " print('入力',inp1,inp2,'に対するXORの出力は',output)\n", + " display(qc.draw())\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 ANDゲート\n", + "\n", + "2つのバイナリー文字列を入力として受け取り、出力を1つします。\n", + "\n", + "入力が両方とも`'1'`だったときのみ出力が`'1'`になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def AND(inp1,inp2):\n", + " \"\"\"ANDゲート\n", + " \n", + " パラメーター:\n", + " inpt1 (str): Input 1, encoded in qubit 0.\n", + " inpt2 (str): Input 2, encoded in qubit 1.\n", + " \n", + " 戻り値:\n", + " QuantumCircuit: Output XOR circuit.\n", + " str: Output value measured from qubit 2.\n", + " \"\"\"\n", + " qc = QuantumCircuit(3, 1) \n", + " qc.reset(range(2))\n", + " \n", + " if inp1=='1':\n", + " qc.x(0)\n", + " if inp2=='1':\n", + " qc.x(1)\n", + " \n", + " qc.barrier()\n", + "\n", + " # ここにプログラミングして量子回路でANDゲートを作ってください\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " qc.barrier()\n", + " qc.measure(2, 0) # 量子ビット2からの出力を測定します\n", + " \n", + " # シミュレーター上でプログラムを実行します\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 出力は決定論的なので、1回のショットで取得できます\n", + " job = execute(qc, backend, shots=1, memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return qc, output" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "## 関数をテストします\n", + "for inp1 in ['0', '1']:\n", + " for inp2 in ['0', '1']:\n", + " qc, output = AND(inp1, inp2)\n", + " print('入力',inp1,inp2,'に対するANDの出力は',output)\n", + " display(qc.draw())\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 NANDゲート\n", + "\n", + "2つのバイナリー文字列を入力として受け取り、出力を1つします。\n", + "\n", + "両方の入力が`'1'`の場合のみ、出力は`'0'` になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def NAND(inp1,inp2):\n", + " \"\"\"NANDゲート\n", + " \n", + " パラメーター:\n", + " inpt1 (str): Input 1, encoded in qubit 0.\n", + " inpt2 (str): Input 2, encoded in qubit 1.\n", + " \n", + " 戻り値:\n", + " QuantumCircuit: Output NAND circuit.\n", + " str: Output value measured from qubit 2.\n", + " \"\"\"\n", + " qc = QuantumCircuit(3, 1) \n", + " qc.reset(range(3))\n", + " \n", + " if inp1=='1':\n", + " qc.x(0)\n", + " if inp2=='1':\n", + " qc.x(1)\n", + " \n", + " qc.barrier()\n", + " \n", + " # ここにプログラミングして量子回路でNANDゲートを作ってください\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " qc.barrier()\n", + " qc.measure(2, 0) # 量子ビット2からの出力を測定します\n", + " \n", + " # シミュレーター上でプログラムを実行します\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 出力は決定論的なので、1回のショットで取得できます\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return qc, output" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "## 関数をテストします\n", + "for inp1 in ['0', '1']:\n", + " for inp2 in ['0', '1']:\n", + " qc, output = NAND(inp1, inp2)\n", + " print('入力',inp1,inp2,'に対するNANDの出力は',output)\n", + " display(qc.draw())\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 ORゲート\n", + "\n", + "2つのバイナリー文字列を入力として受け取り、出力を1つします。\n", + "\n", + "入力のうちどちらかが`'1'`のとき、`'1'` が出力されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def OR(inp1,inp2):\n", + " \"\"\"ORゲート\n", + " \n", + " パラメーター:\n", + " inpt1 (str): Input 1, encoded in qubit 0.\n", + " inpt2 (str): Input 2, encoded in qubit 1.\n", + " \n", + " 戻り値:\n", + " QuantumCircuit: Output XOR circuit.\n", + " str: Output value measured from qubit 2.\n", + " \"\"\"\n", + "\n", + " qc = QuantumCircuit(3, 1) \n", + " qc.reset(range(3))\n", + " \n", + " if inp1=='1':\n", + " qc.x(0)\n", + " if inp2=='1':\n", + " qc.x(1)\n", + " \n", + " qc.barrier()\n", + " \n", + " # ここにプログラミングして量子回路でORゲートを作ってください\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " qc.barrier()\n", + " qc.measure(2, 0) # 量子ビット2からの出力を測定します\n", + " \n", + " # シミュレーター上でプログラムを実行します\n", + " backend = Aer.get_backend('qasm_simulator')\n", + " # 出力は決定論的なので、1回のショットで取得できます\n", + " job = execute(qc,backend,shots=1,memory=True)\n", + " output = job.result().get_memory()[0]\n", + " \n", + " return qc, output" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "## 関数をテストします\n", + "for inp1 in ['0', '1']:\n", + " for inp2 in ['0', '1']:\n", + " qc, output = OR(inp1, inp2)\n", + " print('入力',inp1,inp2,'に対するORの出力は',output)\n", + " display(qc.draw())\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パート2: 量子コンピューター上のANDゲート\n", + "\n", + "\n", + "\n", + "### 目標\n", + "\n", + "ANDゲートを2つの量子システム上で実行し、異なる回路特性が結果に与える影響を学びます。\n", + "\n", + "\n", + "\n", + "パート1では、量子ゲートで`AND`ゲートを作り、シミュレーター上で実行しました。パート2では、再び`AND`ゲートを作りますが、実際の量子コンピューターで実行します。実際の量子システムを使う際には、今日の量子コンピューターがフォールトトレラントではなく、ノイズがあるということを認識しておかなければいけません。\n", + "\n", + "量子システムにおける「ノイズ」は、起きてはならないが起こってしまうもの、すべての影響の集合です。ノイズが発生すると、出力が必ずしも期待どおりの結果になるとは限りません。量子回路のすべてのプロセス(初期状態の準備、ゲートの適用、出力の測定)に関連してノイズが発生します。ゲートのノイズは、ゲートの種類や量子ビットの違いによって異なります。`cx`ゲートは通常、単一の量子ビットゲートよりもノイズが多くなります。\n", + "\n", + "ここでは、IBM Quantum Experienceから量子システムを使います。アクセス権がない方は、[こちら](https://qiskit.org/documentation/install.html#access-ibm-quantum-systems)からアクセス権を得ることができます。\n", + "\n", + "実際の量子コンピューターを使う準備ができたので、始めましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ1. デバイスの選択" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルを実行してディスクに保存されている資格情報からアカウントをロードします:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "IBMQ.load_account()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "あなたのアカウントが読み込まれた後、以下のセルを実行することであなたがアクセス可能なプロバイダーのリストを見ることができます。各プロバイダーでは、利用できるシステムが異なります。オープン・ユーザーの場合は、一般的には`ibm-q/open/main`という名のプロバイダーが1つ表示されます:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "IBMQ.providers()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`get_provider`を使ってプロバイダーを取得してみましょう。`provider.backends( )`というコマンドは、選択したプロバイダーから利用可能なバックエンドのリストを表示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "provider = IBMQ.get_provider('ibm-q')\n", + "provider.backends()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらのオプションの中から、回路を実行するシステムを1つ選択します。`ibmq_qasm_simulator`以外は、全て、あなたが使用することのできる実際の量子コンピューターです。システム間の違いは、量子ビット数、接続性、エラー率です。\n", + "\n", + "次のセルを実行すると、選択したバックエンドに関する全ての情報を表示するウィジェットが表示されます。タブをクリックすると必要な情報を得ることができます。例えば、`configuration` タブでは、バックエンドの現在の状況、量子ビット数、接続性が表示され、`Error Map`タブでは、そのシステムの最新のノイズ情報が表示されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import qiskit.tools.jupyter\n", + "\n", + "backend_ex = provider.get_backend('ibmq_16_melbourne')\n", + "backend_ex" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ANDゲートの回路のためには、3量子ビット以上のバックエンドが必要となり、`ibmq_armonk`以外の全ての実システムが該当します。以下はバックエンドをフィルタリングする例です。ここでは、量子ビット数でフィルタリングし、シミュレーターを取り除いています:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "backends = provider.backends(filters = lambda x:x.configuration().n_qubits >= 2 and not x.configuration().simulator\n", + " and x.status().operational==True)\n", + "backends" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "システムを選択する便利な方法の一つは、`least_busy`関数を使ってキュー内のジョブ数の最も少ないバックエンドを選ぶことです。この方法の欠点は実行結果の精度が比較的悪くなる可能性があることです。当然のことながら、エラー率の最も少ないシステムが最も人気があるからです。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.providers.ibmq import least_busy\n", + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 2 and \n", + " not x.configuration().simulator and x.status().operational==True))\n", + "backend" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "実際の量子コンピューターは定期的に再較正する必要があり、特定の量子ビットやゲートの忠実度は時間と共に変化します。よって、どのシステムが、よりエラーの少ない結果を出力するかは変化します。`ibmq_athens`は比較的低いエラー率を示す傾向があります。\n", + "\n", + "この演習では、2つのシステムを選択します:`ibmq_athens`を低いエラー率のものとして選択します。また、`ibmqx2`を特別な接続性、特に三角形の接続性があるために選択します。この接続性はトフォリゲートの回路において役立ちます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# run this cell\n", + "backend1 = provider.get_backend('ibmqx2')\n", + "backend2 = provider.get_backend('ibmq_athens')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ2. 実デバイスのためのAND関数の定義\n", + "\n", + "次にAND関数を定義します。ショット数としてオープンなIBMシステムの最大ショット数である8192を選択して、最終結果のばらつきを減らします。関連情報は[ここ](https://quantum-computing.ibm.com/docs/manage/backends/configuration)でよく説明されています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Qiskitトランスパイラー" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "実際の量子コンピューターで回路が実行される時、通常、選択したバックエンド用に回路をトランスパイルする必要があることを知っておくことが重要です。つまり、量子コンピューターが実際に実行できるゲートのみが回路に含まれるようにします。主に、スワップゲートが追加され、回路内の2量子ビットゲートがデバイス上の量子ビットペアにマップされて、実際にそのゲートが実行できるようにします。次のセルでは、トフォリゲートで表されたANDゲートが、IBMハードウェアで実行可能な種類のみの単一量子ゲートと2量子ビットゲートに分解されます。CNOTゲートが、3量子ビットの全てで、つまり三角トポロジー間で実行可能な場合、他のゲートは必要ありません。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AND gate\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Transpiled AND gate with all the reqiured connectiviy\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_and = QuantumCircuit(3)\n", + "qc_and.ccx(0,1,2)\n", + "print('AND gate')\n", + "display(qc_and.draw())\n", + "print('\\n\\n全ての接続性を満たすようにトランスパイルされたANDゲート')\n", + "qc_and.decompose().draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "さらに、全体のゲート数、つまり、入力回路のトータルの長さを削減するためにトランスパイラーが最適化を実行します。「デバイスのトポロジーに合わせてSWAPを追加すること」と「回路の長さを削減するための最適化」は、互いに相反していることに注意してください。以下では、計算に使われるデバイス上の量子ビット数を選択できる`initial_layout`と、回路SWAPマッピングと最適化メソッドを実行するために内部デフォルトで選択する引数`optimization_level`を使用します。\n", + "\n", + "回路の深さについてのトランスパイル関数は[ここ](https://qiskit.org/documentation/apidoc/transpiler.html)でより詳しく学ぶことができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "トランスパイルのステップが含まれた実際のシステム用に、パート1のAND関数を適切に変更してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.tools.monitor import job_monitor" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# セルを実行して、実際の量子システムのANDゲートを定義します\n", + "\n", + "def AND(inp1, inp2, backend, layout):\n", + " \n", + " qc = QuantumCircuit(3, 1) \n", + " qc.reset(range(3))\n", + " \n", + " if inp1=='1':\n", + " qc.x(0)\n", + " if inp2=='1':\n", + " qc.x(1)\n", + " \n", + " qc.barrier()\n", + " qc.ccx(0, 1, 2) \n", + " qc.barrier()\n", + " qc.measure(2, 0) \n", + " \n", + " qc_trans = transpile(qc, backend, initial_layout=layout, optimization_level=3)\n", + " job = execute(qc_trans, backend, shots=8192)\n", + " print(job.job_id())\n", + " job_monitor(job)\n", + " \n", + " output = job.result().get_counts()\n", + " \n", + " return qc_trans, output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子システムにジョブを投げると、`job_monitor`が、ジョブ待ちラインのどこに送信されたジョブがいるかトラッキングを始めます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ケースA) 三角形の接続性を持ったibmqx2における3量子ビット\n", + "\n", + "最初に、先ほど紹介したウィジェットを使って`ibmqx2`を調べます。三角形の接続性を持った3量子ビットのグループを見つけ、最初のレイアウトを決定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "# このセルを実行してウィジェットを開始します\n", + "backend1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 以下のセルのリスト変数layout1に選択したレイアウトを割り当てます。

    " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# 選択したinitial_layoutを変数layout1にリストとして割り当てます\n", + "# 例) layout1 = [0,2,4]\n", + "layout1 = " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 初期レイアウトをどうしてそのように選択したか説明してください。

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " 以下のセルを実行して`ibmqx2`上で`AND`ゲートを実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "output1_all = []\n", + "qc_trans1_all = []\n", + "prob1_all = []\n", + "\n", + "worst = 1\n", + "best = 0\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " qc_trans1, output1 = AND(input1, input2, backend1, layout1)\n", + " \n", + " output1_all.append(output1)\n", + " qc_trans1_all.append(qc_trans1)\n", + " \n", + " prob = output1[str(int( input1=='1' and input2=='1' ))]/8192\n", + " prob1_all.append(prob)\n", + " \n", + " print('\\n入力',input1,input2,'に対する正解の確率は')\n", + " print( '{:.2f}'.format(prob) )\n", + " print('---------------------------------')\n", + " \n", + " worst = min(worst,prob)\n", + " best = max(best, prob)\n", + " \n", + "print('')\n", + "print('\\n確率の最高値は {:.2f}'.format(best))\n", + "print('確率の最低値は {:.2f}'.format(worst))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ジョブの実行が完了すると、以下のようにして結果に簡単にアクセス可能です:\n", + "\n", + "\n", + "```python\n", + "results = backend.retrieve_job('JOB_ID').result().\n", + "```\n", + "\n", + "\n", + "job_ids は上記で定義した`AND`関数によって出力されます。また、job_idsは、あなたの`IQX`アカウントの結果にも載っています。より詳しい情報は[ここ](https://quantum-computing.ibm.com/docs/manage/account/ibmq)で確認できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ケースB) 線形最近傍接続を持つibmq_athensにおける3量子ビット\n", + "\n", + "以下のセルを実行して、ウィジェットを使って`ibmq_athens`を調べます。" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [], + "source": [ + "backend2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 線形最近傍接続を持つ3量子ビットを探します。エラーマップを考慮して、初期レイアウトを決定し、それをリスト変数layout2に割り当てます。

    \n" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "layout2 = []" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 初期レイアウトをどうしてそのように選択したか説明してください。

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルを実行して`ibmq_athens`上で`AND`ゲートを実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "output2_all = []\n", + "qc_trans2_all = []\n", + "prob2_all = []\n", + "\n", + "worst = 1\n", + "best = 0\n", + "for input1 in ['0','1']:\n", + " for input2 in ['0','1']:\n", + " qc_trans2, output2 = AND(input1, input2, backend2, layout2)\n", + " \n", + " output2_all.append(output2)\n", + " qc_trans2_all.append(qc_trans2)\n", + " \n", + " prob = output2[str(int( input1=='1' and input2=='1' ))]/8192\n", + " prob2_all.append(prob)\n", + " \n", + " print('\\n入力',input1,input2,'に対する正解の確率は')\n", + " print('{:.2f}'.format(prob) )\n", + " print('---------------------------------')\n", + " \n", + " worst = min(worst,prob)\n", + " best = max(best, prob)\n", + " \n", + "print('')\n", + "print('\\n確率の最高値は {:.2f}'.format(best))\n", + "print('確率の最低値は {:.2f}'.format(worst))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ3. 結果の解釈" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路を区別するための量がいくつかあります。その中で最も重要なのは**回路の深さ**です。 回路の深さは[ここ](https://qiskit.org/documentation/apidoc/circuit.html) で詳細に定義されています(Supplementary Information(補足情報)を参照し、Quantum Circuit Properties(量子回路のプロパティ)のタブをクリックしてください)。回路の深さは、回路内のゲートの数に比例し、ハードウェア上の回路の実行時間におおよそ比例します。したがって、回路の深さは、実行された回路の忠実度の推定のために簡単に使えるメトリックです。\n", + "\n", + "2番目に重要な値は、回路内の**非ローカル(複数量子ビット)ゲート**の数です。IBM Quantumシステムで、物理的に実行できる非ローカル・ゲートはCNOTゲートのみです。CNOTゲートは実行するのに最も価値の高いゲートであるため、このゲートの総数は、最終的な出力の精度のベンチマークとしてもよく機能することを覚えておいてください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A) 回路の深さと結果の精度" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルを実行すると、`ibmq_athens`で実行された4つのトランスパイルされたANDゲートの回路図が、入力、正解の確率、回路の深さと共に表示されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 0 0 の場合のibmq_athensでのトランスパイルされたANDゲート回路')\n", + "print('\\n回路の深さ : {}'.format (qc_trans2_all[0].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans2_all[0].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob2_all[0]) )\n", + "qc_trans2_all[0].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 0 1 の場合のibmq_athensでのトランスパイルされたANDゲート回路')\n", + "print('\\n回路の深さ : {}'.format (qc_trans2_all[1].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans2_all[1].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob2_all[1]) )\n", + "qc_trans2_all[1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 1 0 の場合のibmq_athensでのトランスパイルされたANDゲート回路')\n", + "print('\\n回路の深さ : {}'.format (qc_trans2_all[2].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans2_all[2].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob2_all[2]) )\n", + "qc_trans2_all[2].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 1 1 の場合のibmq_athensでのトランスパイルされたANDゲート回路')\n", + "print('\\n回路の深さ : {}'.format (qc_trans2_all[3].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans2_all[3].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob2_all[3]) )\n", + "qc_trans2_all[3].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 回路が似ていない理由を説明してください。回路の特性と結果の精度との関係を説明してください。

    \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### B) 量子ビットの接続性と回路の深さ" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルを実行して、`ibmqx2`のトランスパイルされた回路を調べます。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 0 0 の場合のibmqx2でのトランスパイルされたANDゲート回路')\n", + "print('\\nT回路の深さ : {}'.format (qc_trans1_all[0].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans1_all[0].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob1_all[0]) )\n", + "qc_trans1_all[0].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 0 1 の場合のibmqx2でのトランスパイルされたANDゲート回路')\n", + "print('\\n回路の深さ : {}'.format (qc_trans1_all[1].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans1_all[1].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob1_all[1]) )\n", + "qc_trans1_all[1].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 1 0 の場合のibmqx2でのトランスパイルされたANDゲート回路 1 0')\n", + "print('\\n回路の深さ : {}'.format (qc_trans1_all[2].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans1_all[2].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob1_all[2]) )\n", + "qc_trans1_all[2].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "print('入力 1 1 の場合のibmqx2でのトランスパイルされたANDゲート回路 1 1')\n", + "print('\\n回路の深さ : {}'.format (qc_trans1_all[3].depth()))\n", + "print('非ローカル・ゲートの数 : {}'.format (qc_trans1_all[3].num_nonlocal_gates()))\n", + "print('正解の確率 : {:.2f}'.format(prob1_all[3]) )\n", + "qc_trans1_all[3].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 回路が似ている理由を説明してください。回路の特性と結果の精度との関係を説明してください。

    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### C) エラー率と結果の精度" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 これまで、実際のデバイスでの回路性能の指標として、回路の深さと非ローカル・ゲート数を使ってきました。しかし、上記の結果には興味深いものがあります。ibmq_athensのANDゲートは、回路ごとに~8-15のcxゲートがありますが、6個のcxゲートのみのibmqx2と同等またはそれ以上の成功率です。これはどうしてでしょうか?

    \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-labs/Lab02_QuantumMeasurement.ipynb b/translations/ja/ch-labs/Lab02_QuantumMeasurement.ipynb new file mode 100644 index 0000000..36e834b --- /dev/null +++ b/translations/ja/ch-labs/Lab02_QuantumMeasurement.ipynb @@ -0,0 +1,1070 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 実験 2 量子測定" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "前提知識\n", + "- [Ch.1.4 単一量子ビットゲート](https://qiskit.org/textbook/ch-states/single-qubit-gates.html)\n", + "- [Ch.2.2 複数量子ビットともつれ状態](https://qiskit.org/textbook/ch-gates/multiple-qubits-entangled-states.html)\n", + "- [実際の量子コンピューターでのノイズの軽減](https://www.youtube.com/watch?v=yuDxHJOKsVA&list=PLOFEBzvs-Vvp2xg9-POLJhQwtVktlYGbY&index=8)\n", + "\n", + "そのほかの関連教材\n", + "- [ファインマン・レクチャー Ch. III - 12](https://www.feynmanlectures.caltech.edu/III_12.html)\n", + "- [量子操作の概要](https://qiskit.org/documentation/tutorials/circuits/3_summary_of_quantum_operations.html)\n", + "- [インタラクティブ・ブロッホ球](https://nonhermitian.org/kaleido/stubs/kaleidoscope.interactive.bloch_sphere.html#kaleidoscope.interactive.bloch_sphere)\n", + "- [Ch.5.2 測定エラーの軽減](https://qiskit.org/textbook/ch-quantum-hardware/measurement-error-mitigation.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "import numpy as np\n", + "from numpy import linalg as la\n", + "from qiskit.tools.monitor import job_monitor\n", + "import qiskit.tools.jupyter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パート 1: 量子ビットの状態を測定する\n", + "\n", + "\n", + "\n", + "### Goal\n", + "\n", + "量子ビットのブロッホ成分を決定する\n", + "\n", + "\n", + "\n", + "量子コンピューターの操作の基本は、1つまたは複数の量子ビットのブロッホ成分を計算する機能です。これらの成分は、パウリ演算子$X, Y, Z$の期待値に対応し、量子化学や最適化などのアプリケーションにとって重要な量です。 残念ながら、これらの値を同時に計算することは不可能であるため、同じ回路を何度も実行する必要があります。さらに、測定は計算基底(Z基底)に制限されているため、xおよびy成分にアクセスするには、各パウリ演算子を標準基底に回転させる必要があります。 ここでは、ブロッホ球上のランダムベクトルの場合を考慮してメソッドを検証します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 1. 計算基底で任意の量子状態$|q\\rangle$に対するパウリ演算子の期待値を計算する。 \n", + "\n", + "\n", + "例として、パウリ$Z$ゲートの期待値の場合を示します。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "パウリ$Z$ゲートの対角表現(スペクトル形式または正規直交分解とも呼ばれます)とパウリゲート間の関係([ここ](https://qiskit.org/textbook/ch-states/single-qubit-gates.html)を参照)を使用すると、$ X, Y, Z $ ゲートの期待値は次のように記述できます。\n", + "\n", + "$$\n", + "\\begin{align}\n", + "\\langle Z \\rangle &=\\langle q | Z | q\\rangle =\\langle q|0\\rangle\\langle 0|q\\rangle - \\langle q|1\\rangle\\langle 1|q\\rangle\n", + "=|\\langle 0 |q\\rangle|^2 - |\\langle 1 | q\\rangle|^2\\\\\\\\\n", + "\\langle X \\rangle &= \\\\\\\\\n", + "\\langle Y \\rangle &=\n", + "\\end{align}\n", + "\\\\\n", + "$$\n", + "\n", + "\n", + "したがって、量子ビット状態のパウリ演算子の期待値$|q\\rangle$は、対応する軸の基底を回転させて、標準基底で測定を行うことによって取得できます。上記の式が示すように、2つの可能な結果0と1を取得する確率を使用して、目的の期待値を評価します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. qasmシミュレーターを使用して、量子ビットのブロッホ座標を測定し、ベクトルをブロッホ球にプロットします\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 📓ステップA. 回路メソッドを使用して量子ビット状態を作成し、パラメーターとして2つのランダムな複素数でinitializeします。\n", + "\n", + "\n", + "関数`initialize`の使用方法については、[こちら](https://qiskit.org/documentation/tutorials/circuits/3_summary_of_quantum_operations.html)を確認してください。 (`arbitrary initialization`に移動します。)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(1)\n", + "\n", + "#### ここにコードを記入します\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 📓 ステップB. 質問1の回答に基づいて、$X, Y, Z$ ゲートの期待値を測定する回路を構築します。以下のセルを実行して、qasmシミュレーターを使用してstep Aの量子ビットのブロッホ座標を推定します。\n", + "\n", + "例として$Z$ ゲート測定の回路を示します。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# 量子ビット0のz測定\n", + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0)\n", + "\n", + "# 量子ビット0のx測定\n", + "measure_x = QuantumCircuit(1,1)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# 量子ビット0のy測定\n", + "measure_y = QuantumCircuit(1,1)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "shots = 2**14 # 統計に使うサンプル数\n", + "sim = Aer.get_backend('qasm_simulator')\n", + "bloch_vector_measure = []\n", + "for measure_circuit in [measure_x, measure_y, measure_z]:\n", + " \n", + " # 選択した測定で回路を実行し、各ビット値を出力するサンプル数を求めます\n", + " counts = execute(qc+measure_circuit, sim, shots=shots).result().get_counts()\n", + "\n", + " # 各ビット値に対して確率を計算します\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " bloch_vector_measure.append( probs['0'] - probs['1'] )\n", + "\n", + "# ブロッホ球ベクトルの正規化\n", + "bloch_vector = bloch_vector_measure/la.norm(bloch_vector_measure)\n", + "\n", + "print('The bloch sphere coordinates are [{0:4.3f}, {1:4.3f}, {2:4.3f}]'\n", + " .format(*bloch_vector)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ C. ブロッホ球にベクトルをプロットします。\n", + " \n", + "\n", + " [IQX](https://quantum-computing.ibm.com/login)で作業しない限り、interactive bloch_sphereの次のセルは正しく実行されないことに注意してください。interactiveでない場合には`plot_bloch_vector`を使用するか、以下をターミナルで実行して `kaleidoscope`をインストールできます。\n", + "\n", + "```\n", + "pip install kaleidoscope\n", + "\n", + "```\n", + "また、インストール後にカーネルを再起動する必要があります。 interactive bloch_sphereの使用方法の詳細については、[こちら](https://nonhermitian.org/kaleido/stubs/kaleidoscope.interactive.bloch_sphere.html#kaleidoscope.interactive.bloch_sphere)をご覧ください。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from kaleidoscope.interactive import bloch_sphere\n", + "\n", + "bloch_sphere(bloch_vector, vectors_annotation=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.visualization import plot_bloch_vector\n", + "\n", + "plot_bloch_vector( bloch_vector )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パート 2: エネルギーの測定\n", + "\n", + "\n", + "\n", + "### Goal\n", + "\n", + "qasmシミュレータを使用して、水素の基底状態のエネルギーレベルを求めます。\n", + "\n", + "\n", + "\n", + "量子系のエネルギーは、パート1で習得した手順を通じて、エルミート演算子であるハミルトニアンの期待値を測定することで推定できます。\n", + "\n", + "\n", + "\n", + "水素の基底状態は、単一の固有の状態として定義されていませんが、実際には、電子と陽子のスピンのために4つの異なる状態が含まれています。この実験ラボのパート2では、パウリ演算子で表されたハミルトニアンで2つのスピンのシステムのエネルギー期待値を計算することにより、`hyperfine splitting`(超微細分割)によるこれら4つの状態間のエネルギー差を求めます。 `hyperfine structure`(超微細構造)の詳細については、[こちら](https://www.feynmanlectures.caltech.edu/III_12.html)をご覧ください" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "2つの量子ビット相互作用ハミルトニアン$H = A(XX+YY+ZZ)$のシステムを考えてみましょう。ここで、$A = 1.47e^{-6} eV$で、$X, Y, Z$はパウリゲートです。次に、システムのエネルギー期待値は、ハミルトニアンの各項の期待値を組み合わせることによって評価できます。 この場合、$E = \\langle H\\rangle = A( \\langle XX\\rangle + \\langle YY\\rangle + \\langle ZZ\\rangle )$です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 📓 1. 計算基底で、任意の2量子ビット状態 $|\\psi \\rangle$ に対するハミルトニアンの各項の期待値を表します。\n", + "\n", + "\n", + "例として、$\\langle ZZ\\rangle$ の場合を示します。\n", + "\n", + "$$\n", + "\\begin{align}\n", + "\\langle ZZ\\rangle &=\\langle \\psi | ZZ | \\psi\\rangle =\\langle \\psi|(|0\\rangle\\langle 0| - |1\\rangle\\langle 1|)\\otimes(|0\\rangle\\langle 0| - |1\\rangle\\langle 1|) |\\psi\\rangle\n", + "=|\\langle 00|\\psi\\rangle|^2 - |\\langle 01 | \\psi\\rangle|^2 - |\\langle 10 | \\psi\\rangle|^2 + |\\langle 11|\\psi\\rangle|^2\\\\\\\\\n", + "\\langle XX\\rangle &= \\\\\\\\\n", + "\\langle YY\\rangle &=\n", + "\\end{align}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. 2つの量子ビットがエンタングル状態のときに、qasmシミュレーターを使用してシステムのエネルギー期待値を測定します。ベル基底に関しては、4つの異なるエンタングル状態があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 📓ステップA. 4つの異なるベル状態を準備するための回路を構築します。\n", + "\n", + "各ベル状態に次のラベルを付けます。\n", + "$$\n", + "\\begin{align}\n", + "Tri1 &= \\frac{1}{\\sqrt2} (|00\\rangle + |11\\rangle)\\\\\n", + "Tri2 &= \\frac{1}{\\sqrt2} (|00\\rangle - |11\\rangle)\\\\\n", + "Tri3 &= \\frac{1}{\\sqrt2} (|01\\rangle + |10\\rangle)\\\\\n", + "Sing &= \\frac{1}{\\sqrt2} (|10\\rangle - |01\\rangle)\n", + "\\end{align}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# 状態Tri1の回路\n", + "Tri1 = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# 状態Tri2の回路\n", + "Tri2 = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# 状態Tri3の回路\n", + "Tri3 = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# 状態Singの回路\n", + "Sing = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 📓ステップB. 質問1への回答に基づいて、ハミルトニアンの各項の期待値を測定する回路を作成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "measure_ZZ = QuantumCircuit(2)\n", + "measure_ZZ.measure_all()\n", + "\n", + "# \n", + "measure_XX = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# \n", + "measure_YY = QuantumCircuit(2)\n", + "# ここにコードを記入します\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " #### ステップC. 以下のセルを実行して、qasmシミュレーターで回路を実行し、各状態のエネルギー期待値を求めます。\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": {}, + "outputs": [], + "source": [ + "shots = 2**14 # 統計に使うサンプル数\n", + "\n", + "A = 1.47e-6 #Aの単位はeV\n", + "E_sim = []\n", + "for state_init in [Tri1,Tri2,Tri3,Sing]:\n", + " Energy_meas = []\n", + " for measure_circuit in [measure_XX, measure_YY, measure_ZZ]:\n", + " \n", + " # 選択した測定値で回路を動作させ、各ビット値を出力するサンプル数を求めます\n", + " qc = state_init+measure_circuit\n", + " counts = execute(qc, sim, shots=shots).result().get_counts()\n", + "\n", + " # それぞれの計算基底での確率を計算\n", + " probs = {}\n", + " for output in ['00','01', '10', '11']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " Energy_meas.append( probs['00'] - probs['01'] - probs['10'] + probs['11'] )\n", + " \n", + " E_sim.append(A * np.sum(np.array(Energy_meas)))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# このセルを実行して結果を表示します\n", + "\n", + "print('状態Tri1のエネルギー期待値 : {:.3e} eV'.format(E_sim[0]))\n", + "print('状態Tri2のエネルギー期待値 : {:.3e} eV'.format(E_sim[1]))\n", + "print('状態Tri3のエネルギー期待値 : {:.3e} eV'.format(E_sim[2]))\n", + "print('状態Singのエネルギー期待値 : {:.3e} eV'.format(E_sim[3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " #### ステップD. 結果を理解する。\n", + "\n", + "\n", + "エネルギーの期待値が正常に見つかった場合、三重項状態($|Tri1\\rangle, |Tri2\\rangle, |Tri3\\rangle$)に対してまったく同じ値$A (= 1.47e^{-6} eV)$ が得られます。一重項状態$|Sing\\rangle$は$-3A (= -4.41e^{-6} eV)$ です。\n", + "\n", + "ここで行ったことは、水素の基底状態に対応する4つの異なるスピン状態のエネルギーを測定し、スピン-スピン結合によって引き起こされるエネルギーレベルで `hyperfine structure`(超微細構造)を観測したことです。 一重項状態と三重項状態の間のこの小さなエネルギーの違いが、銀河の構造をマッピングするために使用される有名な21cmの波長の放射の理由です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " 下のセルでは、三重項状態と一重項状態の間の遷移からの発光の波長を確認します。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# 換算プランク定数(eV)と光の速度(cgs単位)\n", + "hbar, c = 4.1357e-15, 3e10\n", + "\n", + "# 三重項状態と一重項状態の間のエネルギー差\n", + "E_del = abs(E_sim[0] - E_sim[3])\n", + "\n", + "# エネルギー差に伴う周波数\n", + "f = E_del/hbar\n", + "\n", + "# 周波数を波長(cm)に変換\n", + "wavelength = c/f\n", + "\n", + "print('超微細構造の遷移による放射の波長は : {:.1f} cm'.format(wavelength))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## パート3:量子コンピューターで回路を実行する\n", + "\n", + "\n", + "\n", + "### Goal\n", + "\n", + "IBM量子システムで回路を再実行します。結果に対して測定誤差の軽減を実行して、エネルギー推定の精度を向上させます。\n", + "\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップA. 次のセルを実行してアカウントを読み込み、バックエンドを選択します " + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": {}, + "outputs": [], + "source": [ + "provider = IBMQ.load_account()" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": {}, + "outputs": [], + "source": [ + "backend = provider.get_backend('ibmq_athens')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップB. 量子システム上で回路を実行する \n", + "\n", + "\n", + "実験1では、実際の量子システム上で複数の回路を実行する際に、各回路を別々のジョブとして投入し、複数のジョブIDを生成していました。今回は、すべての回路をリスト化し、そのリストを1つのジョブとして実行します。こうすることで、すべての回路を一度に実行することができ、キューでの待ち時間を短縮できる可能性があります。\n", + "\n", + "また、実行する回路はすべて1つまたは2つの量子ビットゲートで構成されているため、ここでは `transpile` は使用しません。 `execute` 関数を使って、initial_layoutとoptimization_levelを指定することは可能です。 `transpile` を使用しない場合、トランスパイルされた回路にはアクセスできませんが、今回の場合は問題ではありません。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 バックエンドの設定情報を確認し、ウィジェットを通してエラーマップを確認し、initial_layoutを決定します。.\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# このセルを実行すると、ウィジェットを通じてバックエンドの情報が得られます\n", + "backend" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 初期レイアウトの選択をリスト変数 `initial_layout` に代入\n", + "initial_layout = " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のセルを実行して、バックエンドのinitial_layoutを使った回路を実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "qc_all = [state_init+measure_circuit for state_init in [Tri1,Tri2,Tri3,Sing] \n", + " for measure_circuit in [measure_XX, measure_YY, measure_ZZ] ] \n", + "\n", + "shots = 8192\n", + "job = execute(qc_all, backend, initial_layout=initial_layout, optimization_level=3, shots=shots)\n", + "print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": {}, + "outputs": [], + "source": [ + "# ジョブの結果を得ます\n", + "results = job.result()" + ] + }, + { + "cell_type": "code", + "execution_count": 160, + "metadata": {}, + "outputs": [], + "source": [ + "## 完了したジョブの結果にアクセスするには\n", + "#results = backend.retrieve_job('job_id').result()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ C. 以下のセルを実行して、前のステップの結果から基底状態のエネルギーレベルを推定します。 " + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": {}, + "outputs": [], + "source": [ + "def Energy(results, shots):\n", + " \"\"\"水素の基底状態のエネルギー準位を計算します。\n", + " \n", + " Parameters:\n", + " results (obj): 結果, ハミルトニアンを測定する回路を実行した結果です。\n", + " shots (int): ショット数, 回路を実行するショット数です。\n", + " \n", + " Returns:\n", + " Energy (list): 4つの異なる水素の基底状態のエネルギーの値です。\n", + " \"\"\"\n", + " E = []\n", + " A = 1.47e-6\n", + "\n", + " for ind_state in range(4):\n", + " Energy_meas = []\n", + " for ind_comp in range(3):\n", + " counts = results.get_counts(ind_state*3+ind_comp)\n", + " \n", + " # 各計算基底における確率を計算します\n", + " probs = {}\n", + " for output in ['00','01', '10', '11']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " Energy_meas.append( probs['00'] - probs['01'] - probs['10'] + probs['11'] )\n", + "\n", + " E.append(A * np.sum(np.array(Energy_meas)))\n", + " \n", + " return E" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "E = Energy(results, shots)\n", + "\n", + "print('状態Tri1のエネルギー期待値 : {:.3e} eV'.format(E[0]))\n", + "print('状態Tri2のエネルギー期待値 : {:.3e} eV'.format(E[1]))\n", + "print('状態Tri3のエネルギー期待値 : {:.3e} eV'.format(E[2]))\n", + "print('状態Singのエネルギー期待値 : {:.3e} eV'.format(E[3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ D. 測定誤差の軽減 \n", + "\n", + "\n", + "量子システム上で回路を動作させて得られた結果は、エネルギー緩和、位相緩和、量子ビット間のクロストークなど、さまざまな原因によるノイズのため、正確なものではありません。このステップでは、測定誤差を軽減することで、ノイズの影響を軽減していきます。先に、こちらの[ビデオ](https://www.youtube.com/watch?v=yuDxHJOKsVA&list=PLOFEBzvs-Vvp2xg9-POLJhQwtVktlYGbY&index=8)をご覧ください。" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.ignis.mitigation.measurement import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓関数'complete_meas_cal'を使用して、すべての基底状態の測定誤差をプロファイリングする回路を構築します。測定フィルター・オブジェクト'meas_filter'を取得して、ノイズの多い結果に適用し、読み出し(測定)誤差を軽減します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このタスクを完了するためのさらに役立つ情報は、[こちら](https://qiskit.org/textbook/ch-quantum-hardware/measurement-error-mitigation.html)にあります。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# meas_calibsの回路を作成するコードをこちらに記入します\n", + "meas_calibs, state_labels = \n", + "\n", + "\n", + "\n", + "# 選択したバックエンドにおいてmeas_calibsを実行します\n", + "job = execute(meas_calibs, backend, shots = shots)\n", + "print(job.job_id())\n", + "job_monitor(job)\n", + "cal_results = job.result()\n", + "## 完了したジョブの結果にアクセスするには\n", + "#cal_results = backend.retrieve_job('job_id').result()\n", + "\n", + "\n", + "# 測定フィルター・オブジェクト'meas_filter'を得るためのコードをここに記入します\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [], + "source": [ + "results_new = meas_filter.apply(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "E_new = Energy(results_new, shots)\n", + "\n", + "print('状態Tri1のエネルギー期待値 : {:.3e} eV'.format(E_new[0]))\n", + "print('状態Tri2のエネルギー期待値 : {:.3e} eV'.format(E_new[1]))\n", + "print('状態Tri3のエネルギー期待値 : {:.3e} eV'.format(E_new[2]))\n", + "print('状態Singのエネルギー期待値 : {:.3e} eV'.format(E_new[3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### ステップ E. 結果を解釈する。 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 測定誤差を軽減した場合としない場合の、4つの状態すべてのエネルギー値の相対的な誤差(または小数の誤差)を計算します。" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [], + "source": [ + "# シミュレーションによるエネルギー推定の結果\n", + "# 量子システム上で誤差を軽減しないで実行した場合と\n", + "# 誤差を軽減した場合の numpy 配列形式での表示\n", + "Energy_exact, Energy_exp_orig, Energy_exp_new = np.array(E_sim), np.array(E), np.array(E_new)" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": {}, + "outputs": [], + "source": [ + "# エラー軽減なしでエネルギー値の相対エラーを計算し\n", + "# サイズ4のnumpy配列変数 `Err_rel_orig`に割り当てます \n", + "Err_rel_orig = " + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [], + "source": [ + "# エラー軽減ありでエネルギー値の相対エラーを計算し\n", + "# サイズ4のnumpy配列変数 Err_rel_new`に割り当てます \n", + "Err_rel_new = " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "np.set_printoptions(precision=3)\n", + "\n", + "print('測定誤差を軽減しない場合の4つのベル基底のエネルギー値の相対誤差 : {}'.format(Err_rel_orig))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "np.set_printoptions(precision=3)\n", + "\n", + "print('測定誤差を軽減した場合の4つのベル基底のエネルギー値の相対誤差 : {}'.format(Err_rel_new))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

    📓 測定エラーの軽減前後のエラーのサイズを比較し、選択したバックエンドのエラーマップ情報に関する読み出しエラーの影響について話し合います。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**あなたの回答は:**" + ] + } + ], + "metadata": { + "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.8.16" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "053a7a003d384dfebb97c58df06898e5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_98a58049fb764105bd20af4f5a26b992", + "style": "IPY_MODEL_8ce05649dbcc4a75a8fdd3b74147b7d3", + "value": "

    Backend
    " + } + }, + "1407ba5e1f6f4609bb0eaa98e583c5eb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "292078c1a0714234a771b6c726222f4f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "grid_area": "right", + "padding": "0px 0px 0px 0px", + "width": "70px" + } + }, + "2c620d67515e435c8f97c69ff12dac64": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_35c0cbc92bcd4d9abd21f1fbcb8de5e5", + "style": "IPY_MODEL_1407ba5e1f6f4609bb0eaa98e583c5eb", + "value": "
    Job ID
    " + } + }, + "30041a66acd34e1ba9ba9c5ecc341b02": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "button_style": "primary", + "description": "Clear", + "layout": "IPY_MODEL_292078c1a0714234a771b6c726222f4f", + "style": "IPY_MODEL_649905a5e6a34a1f9cfdb7216b254578" + } + }, + "35c0cbc92bcd4d9abd21f1fbcb8de5e5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "190px" + } + }, + "4c31796715eb4f19a97b4bd647f3aa15": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_2c620d67515e435c8f97c69ff12dac64", + "IPY_MODEL_053a7a003d384dfebb97c58df06898e5", + "IPY_MODEL_d4d9c546cd364c449692c73ccc217387", + "IPY_MODEL_da0721ffb6964a7dabf3ef390d3b1a24", + "IPY_MODEL_bda6cd9e1a39461cbb45c1782cd7bb8e" + ], + "layout": "IPY_MODEL_85de4a191ba24884a21b27f7097ea867" + } + }, + "5c968b5f5d8d422e8838e021f921fb64": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "649905a5e6a34a1f9cfdb7216b254578": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "7345eadaf8cb49019b7b818093cc220c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "95px" + } + }, + "85de4a191ba24884a21b27f7097ea867": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "margin": "0px 0px 0px 37px", + "width": "600px" + } + }, + "86d543d59d874dba87a6596166bfc26f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "885b4e893c1a4044a1e11a58b3488fb9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "8c0a0af9ecb54e6bb483f4a6857b0837": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "70px" + } + }, + "8ce05649dbcc4a75a8fdd3b74147b7d3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "98a58049fb764105bd20af4f5a26b992": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "145px" + } + }, + "b5a93c630bdc412f86c0b82a808b835c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_dc44bab9524c466dae14fc606971cc66", + "style": "IPY_MODEL_5c968b5f5d8d422e8838e021f921fb64", + "value": "

    Circuit Properties

    " + } + }, + "bda6cd9e1a39461cbb45c1782cd7bb8e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_885b4e893c1a4044a1e11a58b3488fb9", + "style": "IPY_MODEL_c0a7bfb516af4616a82e1a5498a16944", + "value": "
    Message
    " + } + }, + "c0a7bfb516af4616a82e1a5498a16944": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "d4d9c546cd364c449692c73ccc217387": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_7345eadaf8cb49019b7b818093cc220c", + "style": "IPY_MODEL_e0b7db9b0a194fdb8d39fda0871c98da", + "value": "
    Status
    " + } + }, + "da0721ffb6964a7dabf3ef390d3b1a24": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_8c0a0af9ecb54e6bb483f4a6857b0837", + "style": "IPY_MODEL_86d543d59d874dba87a6596166bfc26f", + "value": "
    Queue
    " + } + }, + "dc44bab9524c466dae14fc606971cc66": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "margin": "0px 0px 10px 0px" + } + }, + "dc6c351bd90e4b18b81eb926e7b9577c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "width": "100%" + } + }, + "e0b7db9b0a194fdb8d39fda0871c98da": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "e7a44e7bd5e047cf844561941c72dec0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "children": [ + "IPY_MODEL_30041a66acd34e1ba9ba9c5ecc341b02" + ], + "layout": "IPY_MODEL_dc6c351bd90e4b18b81eb926e7b9577c" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-labs/image/L3_QPE_final.png b/translations/ja/ch-labs/image/L3_QPE_final.png new file mode 100644 index 0000000..26d0662 Binary files /dev/null and b/translations/ja/ch-labs/image/L3_QPE_final.png differ diff --git a/translations/ja/ch-labs/image/L3_QPEresults.png b/translations/ja/ch-labs/image/L3_QPEresults.png new file mode 100644 index 0000000..c9d71cc Binary files /dev/null and b/translations/ja/ch-labs/image/L3_QPEresults.png differ diff --git a/translations/ja/ch-labs/image/L3_QPEresults_final.png b/translations/ja/ch-labs/image/L3_QPEresults_final.png new file mode 100644 index 0000000..49b575e Binary files /dev/null and b/translations/ja/ch-labs/image/L3_QPEresults_final.png differ diff --git a/translations/ja/ch-labs/image/L3_e_max.png b/translations/ja/ch-labs/image/L3_e_max.png new file mode 100644 index 0000000..cd095cc Binary files /dev/null and b/translations/ja/ch-labs/image/L3_e_max.png differ diff --git a/translations/ja/ch-labs/image/L3_prob_t.png b/translations/ja/ch-labs/image/L3_prob_t.png new file mode 100644 index 0000000..0b764c5 Binary files /dev/null and b/translations/ja/ch-labs/image/L3_prob_t.png differ diff --git a/translations/ja/ch-labs/image/L3_qc4_hist.png b/translations/ja/ch-labs/image/L3_qc4_hist.png new file mode 100644 index 0000000..a0cde88 Binary files /dev/null and b/translations/ja/ch-labs/image/L3_qc4_hist.png differ diff --git a/translations/ja/ch-labs/image/L4_QPEvsIPE.png b/translations/ja/ch-labs/image/L4_QPEvsIPE.png new file mode 100644 index 0000000..938f57d Binary files /dev/null and b/translations/ja/ch-labs/image/L4_QPEvsIPE.png differ diff --git a/translations/ja/ch-labs/image/L5_Circ_gen.svg b/translations/ja/ch-labs/image/L5_Circ_gen.svg new file mode 100644 index 0000000..19b9cc2 --- /dev/null +++ b/translations/ja/ch-labs/image/L5_Circ_gen.svg @@ -0,0 +1,2372 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-labs/image/L5_textbook_result.png b/translations/ja/ch-labs/image/L5_textbook_result.png new file mode 100644 index 0000000..be87976 Binary files /dev/null and b/translations/ja/ch-labs/image/L5_textbook_result.png differ diff --git a/translations/ja/ch-labs/image/L7_bloch_sphere.png b/translations/ja/ch-labs/image/L7_bloch_sphere.png new file mode 100644 index 0000000..4aed8c3 Binary files /dev/null and b/translations/ja/ch-labs/image/L7_bloch_sphere.png differ diff --git a/translations/ja/ch-labs/image/L7_circ.png b/translations/ja/ch-labs/image/L7_circ.png new file mode 100644 index 0000000..b6e92ca Binary files /dev/null and b/translations/ja/ch-labs/image/L7_circ.png differ diff --git a/translations/ja/ch-labs/image/L7_hist.png b/translations/ja/ch-labs/image/L7_hist.png new file mode 100644 index 0000000..c74e85e Binary files /dev/null and b/translations/ja/ch-labs/image/L7_hist.png differ diff --git a/translations/ja/ch-labs/index.md b/translations/ja/ch-labs/index.md new file mode 100644 index 0000000..51c160c --- /dev/null +++ b/translations/ja/ch-labs/index.md @@ -0,0 +1,12 @@ +この章では、IBM Quantum Experienceが提供する実際の量子システム上での実習を行います。学部の3、4年生から大学院初級者向けの量子計算のコース向けに作られています。基本的な量子回路の構築から、グローバー探索やショアのアルゴリズムなどのコアとなるアルゴリズムまで、7つの詳細な実験モジュールが用意されています。現在のノイズの多い量子システム上で量子回路のアルゴリズムやアプリケーションを実行する際のテクニックや実行上の制限を理解することに重点を置いています。 + +実験トピック: +1. 量子回路 +2. 量子測定 +3. 量子位相推定の精度 +4. 反復量子位相推定 +5. スケーラブルなショアのアルゴリズム +6. 解の数が不明なグローバー探索 +7. 探索アルゴリズムとしての量子シミュレーション + + diff --git a/translations/ja/ch-machine-learning/1qubitcirc.png b/translations/ja/ch-machine-learning/1qubitcirc.png new file mode 100644 index 0000000..75aee7e Binary files /dev/null and b/translations/ja/ch-machine-learning/1qubitcirc.png differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/processed/test.pt b/translations/ja/ch-machine-learning/data/MNIST/processed/test.pt new file mode 100644 index 0000000..0910a45 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/processed/test.pt differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/processed/training.pt b/translations/ja/ch-machine-learning/data/MNIST/processed/training.pt new file mode 100644 index 0000000..07610cc Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/processed/training.pt differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte new file mode 100644 index 0000000..1170b2c Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte.gz b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte.gz new file mode 100644 index 0000000..5ace8ea Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-images-idx3-ubyte.gz differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte new file mode 100644 index 0000000..d1c3a97 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte.gz b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte.gz new file mode 100644 index 0000000..a7e1415 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/t10k-labels-idx1-ubyte.gz differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte b/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte new file mode 100644 index 0000000..bbce276 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte.gz b/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte.gz new file mode 100644 index 0000000..b50e4b6 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/train-images-idx3-ubyte.gz differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte b/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte new file mode 100644 index 0000000..d6b4c5d Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte differ diff --git a/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte.gz b/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte.gz new file mode 100644 index 0000000..707a576 Binary files /dev/null and b/translations/ja/ch-machine-learning/data/MNIST/raw/train-labels-idx1-ubyte.gz differ diff --git a/translations/ja/ch-machine-learning/hybridnetwork.png b/translations/ja/ch-machine-learning/hybridnetwork.png new file mode 100644 index 0000000..686361b Binary files /dev/null and b/translations/ja/ch-machine-learning/hybridnetwork.png differ diff --git a/translations/ja/ch-machine-learning/machine-learning-qiskit-pytorch.ipynb b/translations/ja/ch-machine-learning/machine-learning-qiskit-pytorch.ipynb new file mode 100644 index 0000000..2141935 --- /dev/null +++ b/translations/ja/ch-machine-learning/machine-learning-qiskit-pytorch.ipynb @@ -0,0 +1,1694 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# PyTorchとQiskitを用いた量子古典ハイブリッド・ニューラル・ネットワーク" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "機械学習 (Machine learning、ML) は、データから一般化された情報を数学的に抽出しようとする学際的分野を自分自身で確立しました。量子コンピューターを利用することで、機械学習を補完するため量子力学の原理を利用したり、あるいはその逆を行う興味深い研究分野が増加しています。 難しい計算を量子コンピューターに任せることで古典MLアルゴリズムを拡張するにせよ、古典MLアルゴリズムを用いて量子アルゴリズムを最適化するにせよ、どちらも量子機械学習(quantum machine learning、QML)の多種多様な傘下にあるのです。\n", + "\n", + "この章では、古典的なニューラル・ネットワークを部分的に量子化して、ハイブリッド量子古典ニューラル・ネットワークを作成する方法を探ります。**Qiskit** と最先端のオープンソース・ソフトウェアである **[PyTorch](https://pytorch.org/)** を統合して、簡単な例をコード化します。この例の目的は、Qiskitと既存のMLツールとの統合が容易であることを示し、MLの専門家が量子コンピューティングで何が可能かを探求することを奨励することにあります\n", + "\n", + "## 目次\n", + "\n", + "1. [どのように動作するのか?](#how) \n", + " 1.1 [導入](#prelims) \n", + "2. [量子はどのように画像を入力するのか?](#quantumlayer)\n", + "3. [いざ、コーディング!](#code) \n", + " 3.1 [インポート](#imports) \n", + " 3.2 [Qiskitを用いた「量子クラス」の作成](#q-class) \n", + " 3.3 [PyTorchを用いた「量子古典クラス」の作成 ](#qc-class) \n", + " 3.4 [データのロードと前処理](#data-loading-preprocessing) \n", + " 3.5 [ハイブリッド・ニューラル・ネットワークの作成](#hybrid-nn) \n", + " 3.6 [ネットワークの学習](#training) \n", + " 3.7 [ネットワークのテスト](#testing)\n", + "4. [次は何?](#what-now)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. どのように動作するのか? \n", + "\n", + "\n", + "**図.1** は、本章で構築するフレームワークを描いたものです。最終的には、手書きの数字を分類しようとする、量子古典ハイブリッド・ニューラル・ネットワークを構築します。 この図に示されているエッジはすべて下方を向いていますが、方向性は視覚的に示されていないことに注意してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 導入 \n", + "ここで語られる古典ニューラル・ネットワークの背景には、関連する知識や共通の用語の確立も含まれますが、俄然とてもハイレベルなものです。__もし古典ニューラル・ネットワークに深く踏み込みたい場合は、YouTuberによるよくできたビデオシリーズ__ [3Blue1Brown](https://youtu.be/aircAruvnKk) __をご覧ください__。または、もし既に古典ネットワークに詳しい場合は [次のセクションにスキップ](#quantumlayer) できます。\n", + "\n", + "###### ニューロンと重み\n", + "ニューラル・ネットワークは、最終的には、ニューロンと呼ばれる小さなビルディング・ブロックを構成することで作られる精巧な機能です。***ニューロン*** は、通常シンプルで計算しやすい非線形の関数で、1つ以上の入力を1つの実数にマップします。ニューロンの一つの出力は、通常他のニューロンへの入力としてコピーされフィードされます。図示する場合、ニューロンをグラフ内のノードとして表し、あるニューロンの出力が他のニューロンへの入力としてどのように使用されるかを示すため、ノード間の有向エッジを描画します。また、グラフ内の各エッジは、しばしば[***重み***](https://en.wikipedia.org/wiki/Artificial_neural_network#Connections_and_weights)と呼ばれるスカラー値に関連付けられることに注意する必要があります。ここでの考え方は、ニューロンへの各入力はそれぞれ異なるスカラー値が乗じられた後、集められて1つの値に処理されるということです。ニューラル・ネットワークの学習の主たる目的は、特定の方法でネットワークが振る舞うよう重みを決めることです。\n", + "\n", + "###### フィードフォワード・ニューラル・ネットワーク\n", + "また、私たちが関心のあるタイプのニューラル・ネットワークは、**[フィードフォワード・ニューラル・ネットワーク (Feed-Forward Neural Network, FFNN)](https://en.wikipedia.org/wiki/Feedforward_neural_network)** と呼ばれることにも注目する必要があります。これは、ニューラル・ネットワークにデータが流れるとき、データは一度訪れているニューロンに戻ることがないことを意味します。言い換えるならば、このニューラル・ネットワークを記述するグラフは、**[有向非巡回グラフ (Directed Acyclic Graph, DAG)](https://en.wikipedia.org/wiki/Directed_acyclic_graph)** だということです。さらに、ニューラル・ネットワークの同じ層にあるニューロンは、それらの間にエッジがないことも条件となります。\n", + "\n", + "###### 層のIO構造\n", + "ニューラル・ネットワークへの入力は、古典的な(実数値の)ベクトルです。入力ベクトルの各成分は、ネットワークのグラフ構造に従って、異なる重みを乗じられ、ニューロンの層にフィードされます。 層内の各ニューロンが評価された後、結果は新しいベクトルに集められ、 i番目の成分はi番目のニューロンの出力を記録します。この新しいベクトルは、新しい層の入力として処理され、以下同様に処理されます。ネットワークの最初と最後以外の層は、***隠れ層*** という標準的用語を使って表現しましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 量子はどのように画像を入力するのか? \n", + "\n", + "量子古典ニューラル・ネットワークを構築するには、パラメータ化された量子回路を使用してニューラル・ネットワークの隠れ層を実装する方法があります。 ここで「パラメータ化された量子回路」とは、各ゲートの回転角が古典入力ベクトルの成分によって指定される量子回路を意味します。ニューラル・ネットワークの前の層からの出力が集められ、パラメーター化された回路の入力として使用されます。これらの量子回路の測定統計は集められ、続くの層の入力として使用することができます。以下に簡単な例を示します:\n", + "\n", + "\n", + "\n", + "ここで、$\\sigma$ は [非線形関数](https://en.wikipedia.org/wiki/Activation_function)、$h_i$ は各隠れ層におけるニューロン $i$ の値です。$R(h_i)$ は $h_i$ に等しい角の回転ゲートを表し、$y$はこのハイブリッド・ネットワークから生成される最終予測値になります。\n", + "\n", + "### 誤差逆伝播法はどうか?\n", + "古典MLに詳しいならば、 *量子回路が含まれる場合、どのように勾配を計算するのか* という疑問がすぐ浮かぶでしょう。これには、**[最急降下法](https://en.wikipedia.org/wiki/Gradient_descent)** といった、強力な最適化手法を列挙する必要があるでしょう。少し技術的になりますが、手短に言えば、量子回路をブラック・ボックスとみなすとき、パラメーターに対するこのブラック・ボックスの勾配は次のように計算できます: \n", + "\n", + "\n", + "\n", + "ここで、$\\theta$ は量子回路のパラメーターを、$s$ は巨視的シフトを表します。すると、勾配は回路を $\\theta+s$ と $\\theta - s$ で評価した時の差になります。このように、より大きな誤差伝播ルーチンの一部として、量子回路を体系的に区別することができます。量子回路パラメータの勾配を計算するこの閉形式ルールは、**[パラメーター・シフト・ルール](https://arxiv.org/pdf/1905.13311.pdf)** として知られています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. いざ、コーディング ! \n", + "\n", + "\n", + "### 3.1 インポート\n", + "最初に、QiskitやPyTorchを含め、必要で便利なパッケージをインポートします。" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import torch\n", + "from torch.autograd import Function\n", + "from torchvision import datasets, transforms\n", + "import torch.optim as optim\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "import qiskit\n", + "from qiskit.visualization import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 Qiskitを用いた「量子クラス」の作成 \n", + "Qiskitの量子関数をクラスに簡単に導入することができます。初めに、学習する量子パラメータの数と、量子回路で使用したいショットの数を指定します。 この例では、簡単にするため、1つの学習量子パラメーター $\\theta$を持つ1量子ビットの回路を使用します。単純化するため回路をハードコードし、角度 $\\theta$ の $RY-$ 回転を使用して、回路の出力を学習させます。回路は次のようになります:\n", + "\n", + "\n", + "\n", + "$z-$基底で出力を測定するため、期待値 $\\sigma_z$ を計算します。\n", + "$$\\sigma_\\mathbf{z} = \\sum_i z_i p(z_i)$$\n", + "これがハイブリッド・ニューラル・ネットワークとどのように結びついているかは、後ほどご紹介します。" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "class QuantumCircuit:\n", + " \"\"\" \n", + " This class provides a simple interface for interaction \n", + " with the quantum circuit \n", + " \"\"\"\n", + " \n", + " def __init__(self, n_qubits, backend, shots):\n", + " # --- Circuit definition ---\n", + " self._circuit = qiskit.QuantumCircuit(n_qubits)\n", + " \n", + " all_qubits = [i for i in range(n_qubits)]\n", + " self.theta = qiskit.circuit.Parameter('theta')\n", + " \n", + " self._circuit.h(all_qubits)\n", + " self._circuit.barrier()\n", + " self._circuit.ry(self.theta, all_qubits)\n", + " \n", + " self._circuit.measure_all()\n", + " # ---------------------------\n", + "\n", + " self.backend = backend\n", + " self.shots = shots\n", + " \n", + " def run(self, thetas):\n", + " job = qiskit.execute(self._circuit, \n", + " self.backend, \n", + " shots = self.shots,\n", + " parameter_binds = [{self.theta: theta} for theta in thetas])\n", + " result = job.result().get_counts(self._circuit)\n", + " \n", + " counts = np.array(list(result.values()))\n", + " states = np.array(list(result.keys())).astype(float)\n", + " \n", + " # Compute probabilities for each state\n", + " probabilities = counts / self.shots\n", + " # Get state expectation\n", + " expectation = np.sum(states * probabilities)\n", + " \n", + " return np.array([expectation])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この実装をテストしてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Expected value for rotation pi 0.46\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulator = qiskit.Aer.get_backend('qasm_simulator')\n", + "\n", + "circuit = QuantumCircuit(1, simulator, 100)\n", + "print('Expected value for rotation pi {}'.format(circuit.run([np.pi])[0]))\n", + "circuit._circuit.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 PyTorchを用いた「量子古典クラス」の作成 \n", + "量子回路を定義できましたので、 PyTorchを使って誤差逆伝播法に必要な関数を作成できます。[順伝播と逆伝播](http://www.ai.mit.edu/courses/6.034b/backprops.pdf) には、Qiskitクラスの要素が含まれています。 逆伝播は、上記で導入した有限差分公式を使用して、分析勾配を直接計算します。" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [], + "source": [ + "class HybridFunction(Function):\n", + " \"\"\" Hybrid quantum - classical function definition \"\"\"\n", + " \n", + " @staticmethod\n", + " def forward(ctx, input, quantum_circuit, shift):\n", + " \"\"\" Forward pass computation \"\"\"\n", + " ctx.shift = shift\n", + " ctx.quantum_circuit = quantum_circuit\n", + "\n", + " expectation_z = ctx.quantum_circuit.run(input[0].tolist())\n", + " result = torch.tensor([expectation_z])\n", + " ctx.save_for_backward(input, result)\n", + "\n", + " return result\n", + " \n", + " @staticmethod\n", + " def backward(ctx, grad_output):\n", + " \"\"\" Backward pass computation \"\"\"\n", + " input, expectation_z = ctx.saved_tensors\n", + " input_list = np.array(input.tolist())\n", + " \n", + " shift_right = input_list + np.ones(input_list.shape) * ctx.shift\n", + " shift_left = input_list - np.ones(input_list.shape) * ctx.shift\n", + " \n", + " gradients = []\n", + " for i in range(len(input_list)):\n", + " expectation_right = ctx.quantum_circuit.run(shift_right[i])\n", + " expectation_left = ctx.quantum_circuit.run(shift_left[i])\n", + " \n", + " gradient = torch.tensor([expectation_right]) - torch.tensor([expectation_left])\n", + " gradients.append(gradient)\n", + " gradients = np.array([gradients]).T\n", + " return torch.tensor([gradients]).float() * grad_output.float(), None, None\n", + "\n", + "class Hybrid(nn.Module):\n", + " \"\"\" Hybrid quantum - classical layer definition \"\"\"\n", + " \n", + " def __init__(self, backend, shots, shift):\n", + " super(Hybrid, self).__init__()\n", + " self.quantum_circuit = QuantumCircuit(1, backend, shots)\n", + " self.shift = shift\n", + " \n", + " def forward(self, input):\n", + " return HybridFunction.apply(input, self.quantum_circuit, self.shift)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.4 データのロードと前処理 \n", + "##### 以上をすべてをまとめる:\n", + "[MNIST データ・セット](http://yann.lecun.com/exdb/mnist/) の2種類の数字(0または1)のイメージを分類するための、簡単なハイブリッド・ニューラル・ネットワークを作成します。まずMNISTをロードし、0と1を含む画像をフィルタリングします。これらは、分類するニューラル・ネットワークの入力として扱われます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 学習データ" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "# Concentrating on the first 100 samples\n", + "n_samples = 100\n", + "\n", + "X_train = datasets.MNIST(root='./data', train=True, download=True,\n", + " transform=transforms.Compose([transforms.ToTensor()]))\n", + "\n", + "# Leaving only labels 0 and 1 \n", + "idx = np.append(np.where(X_train.targets == 0)[0][:n_samples], \n", + " np.where(X_train.targets == 1)[0][:n_samples])\n", + "\n", + "X_train.data = X_train.data[idx]\n", + "X_train.targets = X_train.targets[idx]\n", + "\n", + "train_loader = torch.utils.data.DataLoader(X_train, batch_size=1, shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n_samples_show = 6\n", + "\n", + "data_iter = iter(train_loader)\n", + "fig, axes = plt.subplots(nrows=1, ncols=n_samples_show, figsize=(10, 3))\n", + "\n", + "while n_samples_show > 0:\n", + " images, targets = data_iter.__next__()\n", + "\n", + " axes[n_samples_show - 1].imshow(images[0].numpy().squeeze(), cmap='gray')\n", + " axes[n_samples_show - 1].set_xticks([])\n", + " axes[n_samples_show - 1].set_yticks([])\n", + " axes[n_samples_show - 1].set_title(\"Labeled: {}\".format(targets.item()))\n", + " \n", + " n_samples_show -= 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### テスト・データ" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "n_samples = 50\n", + "\n", + "X_test = datasets.MNIST(root='./data', train=False, download=True,\n", + " transform=transforms.Compose([transforms.ToTensor()]))\n", + "\n", + "idx = np.append(np.where(X_test.targets == 0)[0][:n_samples], \n", + " np.where(X_test.targets == 1)[0][:n_samples])\n", + "\n", + "X_test.data = X_test.data[idx]\n", + "X_test.targets = X_test.targets[idx]\n", + "\n", + "test_loader = torch.utils.data.DataLoader(X_test, batch_size=1, shuffle=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここまでで、データをロードし、1つの学習パラメータを含む量子回路を作成するクラスをコーディングしました。この量子パラメータは、他の古典パラメータとともに古典ニューラル・ネットワークに入力され、ハイブリッド・ニューラル・ネットワークを形成します。また、逆伝播・順伝播関数を作ることにより、誤差逆伝播法を実現しニューラル・ネットワークを最適化することができました。最後に、PyTorchが提供する最適化技術を使って、パラメーターの学習を開始できるよう、ニューラル・ネットワーク・アーキテクチャーを指定する必要があります。\n", + "\n", + "\n", + "### 3.5 ハイブリッド・ニューラル・ネットワークの作成 \n", + "NEAT PyTorchパイプラインを使って、ニューラルネットワーク・アーキテクチャを構築できます。量子層(すなわち量子回路)を挿入する場合、ネットワークは次元に対して互換性が必要です。この例の量子回路はパラメータを1つ含んでいるので、ネットワークがニューロンをサイズ1まで縮小するようにしなければなりません。最終的に、2層の全結合層からなる典型的な畳み込みニューラル・ネットワークを作成します。全結合層の最後のニューロンの値は、$\\theta$パラメーターとして量子回路に与えられます。回路測定は、$\\sigma_z$の測定によってもたらされる0または1の最終予測値として与えられます。" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "class Net(nn.Module):\n", + " def __init__(self):\n", + " super(Net, self).__init__()\n", + " self.conv1 = nn.Conv2d(1, 6, kernel_size=5)\n", + " self.conv2 = nn.Conv2d(6, 16, kernel_size=5)\n", + " self.dropout = nn.Dropout2d()\n", + " self.fc1 = nn.Linear(256, 64)\n", + " self.fc2 = nn.Linear(64, 1)\n", + " self.hybrid = Hybrid(qiskit.Aer.get_backend('qasm_simulator'), 100, np.pi / 2)\n", + "\n", + " def forward(self, x):\n", + " x = F.relu(self.conv1(x))\n", + " x = F.max_pool2d(x, 2)\n", + " x = F.relu(self.conv2(x))\n", + " x = F.max_pool2d(x, 2)\n", + " x = self.dropout(x)\n", + " x = x.view(1, -1)\n", + " x = F.relu(self.fc1(x))\n", + " x = self.fc2(x)\n", + " x = self.hybrid(x)\n", + " return torch.cat((x, 1 - x), -1)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.6 ネットワークの学習 \n", + "ハイブリッド・ネットワークを学習させる全ての材料が揃いました!複数のエポックに渡り学習させるため、[PyTorchの最適化法](https://pytorch.org/docs/stable/optim.html)や[学習率](https://en.wikipedia.org/wiki/Learning_rate) 、 [損失関数/目的関数](https://en.wikipedia.org/wiki/Loss_function) などを指定することができます。この例では、[Adam最適化ツール](https://arxiv.org/abs/1412.6980) 、学習率0.001、[負の対数尤度損失関数](https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html) を使用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training [5%]\tLoss: -0.7380\n", + "Training [10%]\tLoss: -0.9153\n", + "Training [15%]\tLoss: -0.9282\n", + "Training [20%]\tLoss: -0.9393\n", + "Training [25%]\tLoss: -0.9463\n", + "Training [30%]\tLoss: -0.9515\n", + "Training [35%]\tLoss: -0.9585\n", + "Training [40%]\tLoss: -0.9637\n", + "Training [45%]\tLoss: -0.9713\n", + "Training [50%]\tLoss: -0.9657\n", + "Training [55%]\tLoss: -0.9710\n", + "Training [60%]\tLoss: -0.9758\n", + "Training [65%]\tLoss: -0.9765\n", + "Training [70%]\tLoss: -0.9804\n", + "Training [75%]\tLoss: -0.9873\n", + "Training [80%]\tLoss: -0.9887\n", + "Training [85%]\tLoss: -0.9894\n", + "Training [90%]\tLoss: -0.9873\n", + "Training [95%]\tLoss: -0.9904\n", + "Training [100%]\tLoss: -0.9870\n" + ] + } + ], + "source": [ + "model = Net()\n", + "optimizer = optim.Adam(model.parameters(), lr=0.001)\n", + "loss_func = nn.NLLLoss()\n", + "\n", + "epochs = 20\n", + "loss_list = []\n", + "\n", + "model.train()\n", + "for epoch in range(epochs):\n", + " total_loss = []\n", + " for batch_idx, (data, target) in enumerate(train_loader):\n", + " optimizer.zero_grad()\n", + " # Forward pass\n", + " output = model(data)\n", + " # Calculating loss\n", + " loss = loss_func(output, target)\n", + " # Backward pass\n", + " loss.backward()\n", + " # Optimize the weights\n", + " optimizer.step()\n", + " \n", + " total_loss.append(loss.item())\n", + " loss_list.append(sum(total_loss)/len(total_loss))\n", + " print('Training [{:.0f}%]\\tLoss: {:.4f}'.format(\n", + " 100. * (epoch + 1) / epochs, loss_list[-1]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "学習グラフをプロットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Neg Log Likelihood Loss')" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(loss_list)\n", + "plt.title('Hybrid NN Training Convergence')\n", + "plt.xlabel('Training Iterations')\n", + "plt.ylabel('Neg Log Likelihood Loss')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.7 ネットワークのテスト " + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Performance on test data:\n", + "\tLoss: -0.9847\n", + "\tAccuracy: 100.0%\n" + ] + } + ], + "source": [ + "model.eval()\n", + "with torch.no_grad():\n", + " \n", + " correct = 0\n", + " for batch_idx, (data, target) in enumerate(test_loader):\n", + " output = model(data)\n", + " \n", + " pred = output.argmax(dim=1, keepdim=True) \n", + " correct += pred.eq(target.view_as(pred)).sum().item()\n", + " \n", + " loss = loss_func(output, target)\n", + " total_loss.append(loss.item())\n", + " \n", + " print('Performance on test data:\\n\\tLoss: {:.4f}\\n\\tAccuracy: {:.1f}%'.format(\n", + " sum(total_loss) / len(total_loss),\n", + " correct / len(test_loader) * 100)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n_samples_show = 6\n", + "count = 0\n", + "fig, axes = plt.subplots(nrows=1, ncols=n_samples_show, figsize=(10, 3))\n", + "\n", + "model.eval()\n", + "with torch.no_grad():\n", + " for batch_idx, (data, target) in enumerate(test_loader):\n", + " if count == n_samples_show:\n", + " break\n", + " output = model(data)\n", + " \n", + " pred = output.argmax(dim=1, keepdim=True) \n", + "\n", + " axes[count].imshow(data[0].numpy().squeeze(), cmap='gray')\n", + "\n", + " axes[count].set_xticks([])\n", + " axes[count].set_yticks([])\n", + " axes[count].set_title('Predicted {}'.format(pred.item()))\n", + " \n", + " count += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. 次は何?\n", + "\n", + "#### ハイブリッド・ニューラルネットワークを作成することは確かに可能ですが、実際に何らかの恩恵があったでしょうか?\n", + "\n", + "事実、このネットワークの古典的な層は、量子層がなくとも完全に良く(実際には、より良く)学習されます。さらに、ここで学習された量子層は、**エンタングルメントを全く生成しない**ことに気が付いたかもしれません。つまり、この特定のアーキテクチャーを拡張する際は、古典的にシミュレーション可能であるということです。これは、ハイブリッド・ニューラル・ネットワークを使用して量子優位性を実現したい場合は、このコードを拡張し、より洗練された量子層を組み込むことから始める必要があることを意味します。 \n", + "\n", + "\n", + "この演習のポイントは、興味のある要素が実際にあるかを調べるため、MLと量子コンピューティングの技術の統合を考えることでした。PyTorchとQiskitのおかげで、これは少し楽になっています。 " + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "0355c3330b494ba390966297de2ca4f9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_289d9b7c622f4b84844ea840a36a7a64", + "placeholder": "​", + "style": "IPY_MODEL_c82e4023efe14a69bc6529ae8eb66410", + "value": " 9920512/? [00:03<00:00, 3209475.75it/s]" + } + }, + "1b868cf1f4b546479d7e16464e7a70c4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_87dda23ad837493c8a59135ea3ac3d17", + "IPY_MODEL_66837ec01d28421ab0bcdb294183496a" + ], + "layout": "IPY_MODEL_4868665a791e4d998e4d3009837ce678" + } + }, + "1b9242988d0a46479b24915166b6696c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1d73e157ec0b490482679f10d3239ffc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "initial" + } + }, + "1f601570cc45424281c9eae624033a65": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "227f494873914770b42e235e7aa88682": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "289d9b7c622f4b84844ea840a36a7a64": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2c5c1f7fa3e24917b9e23cfb56131367": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dd3b5624b8e541fa9f8999b6b288457c", + "placeholder": "​", + "style": "IPY_MODEL_d7f616abe63d4b90b464e0faf435200e", + "value": " 1654784/? [00:01<00:00, 1563328.11it/s]" + } + }, + "31c7c803687946fcaa97971385d733e5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "initial" + } + }, + "4868665a791e4d998e4d3009837ce678": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "526270363c484a02a773fbd134fcc98b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_77e50f2deec34d5fb10267de8bcfb868", + "IPY_MODEL_0355c3330b494ba390966297de2ca4f9" + ], + "layout": "IPY_MODEL_a40c004e1a8a4452831b5b97c28f181e" + } + }, + "5fec84e5966b4d8fbcdb729821a960e6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "66837ec01d28421ab0bcdb294183496a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bee8382a857b4991adade433ddf477ad", + "placeholder": "​", + "style": "IPY_MODEL_cfa759f3a2774de5847235b84f713a95", + "value": " 32768/? [00:01<00:00, 23755.27it/s]" + } + }, + "77e50f2deec34d5fb10267de8bcfb868": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1b9242988d0a46479b24915166b6696c", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_803e94bdbedf46bea9a2b3a204f01747", + "value": 1 + } + }, + "803e94bdbedf46bea9a2b3a204f01747": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "initial" + } + }, + "87dda23ad837493c8a59135ea3ac3d17": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c12b362a1aac4b32be9bb0537b48d16d", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_31c7c803687946fcaa97971385d733e5", + "value": 1 + } + }, + "936023428c3f408f9c457937d8a940d0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a40c004e1a8a4452831b5b97c28f181e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a488170b86b148cebfeeb5830bff52fe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "initial" + } + }, + "b0a46bb3629242b8a8a741a0b2639591": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d8422fcd610341c78e8984ba230a6d8a", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_a488170b86b148cebfeeb5830bff52fe", + "value": 1 + } + }, + "b2e30c7a3278427f95a8e743286cc546": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b0a46bb3629242b8a8a741a0b2639591", + "IPY_MODEL_2c5c1f7fa3e24917b9e23cfb56131367" + ], + "layout": "IPY_MODEL_b4d7e3c0b96e4c2eb0386c2a85e7d21a" + } + }, + "b4d7e3c0b96e4c2eb0386c2a85e7d21a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bee8382a857b4991adade433ddf477ad": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c12b362a1aac4b32be9bb0537b48d16d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c82e4023efe14a69bc6529ae8eb66410": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ce1a46ba47754b418e520922913e19c3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_936023428c3f408f9c457937d8a940d0", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_1d73e157ec0b490482679f10d3239ffc", + "value": 1 + } + }, + "cfa759f3a2774de5847235b84f713a95": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d3786647122f4e0fa7953adb1105ad49": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ce1a46ba47754b418e520922913e19c3", + "IPY_MODEL_db155a72ceba44d8a124154aa0e03e5d" + ], + "layout": "IPY_MODEL_1f601570cc45424281c9eae624033a65" + } + }, + "d7f616abe63d4b90b464e0faf435200e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d8422fcd610341c78e8984ba230a6d8a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "db155a72ceba44d8a124154aa0e03e5d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5fec84e5966b4d8fbcdb729821a960e6", + "placeholder": "​", + "style": "IPY_MODEL_227f494873914770b42e235e7aa88682", + "value": " 8192/? [00:00<00:00, 27043.71it/s]" + } + }, + "dd3b5624b8e541fa9f8999b6b288457c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-machine-learning/neuralnetworkQC.png b/translations/ja/ch-machine-learning/neuralnetworkQC.png new file mode 100644 index 0000000..d119139 Binary files /dev/null and b/translations/ja/ch-machine-learning/neuralnetworkQC.png differ diff --git a/translations/ja/ch-machine-learning/quantumgradient.png b/translations/ja/ch-machine-learning/quantumgradient.png new file mode 100644 index 0000000..44940e8 Binary files /dev/null and b/translations/ja/ch-machine-learning/quantumgradient.png differ diff --git a/translations/ja/ch-paper-implementations/images/bro.png b/translations/ja/ch-paper-implementations/images/bro.png new file mode 100644 index 0000000..56b26cf Binary files /dev/null and b/translations/ja/ch-paper-implementations/images/bro.png differ diff --git a/translations/ja/ch-paper-implementations/images/h.png b/translations/ja/ch-paper-implementations/images/h.png new file mode 100644 index 0000000..1642de8 Binary files /dev/null and b/translations/ja/ch-paper-implementations/images/h.png differ diff --git a/translations/ja/ch-paper-implementations/vqls.ipynb b/translations/ja/ch-paper-implementations/vqls.ipynb new file mode 100644 index 0000000..997444a --- /dev/null +++ b/translations/ja/ch-paper-implementations/vqls.ipynb @@ -0,0 +1,1485 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子変分線型ソルバー(Valiational Quantum Linear Solver)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import qiskit\n", + "from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister\n", + "from qiskit import Aer, transpile, assemble\n", + "import math\n", + "import random\n", + "import numpy as np\n", + "from scipy.optimize import minimize" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに\n", + "\n", + "線型変分量子ソルバー(Variational Quantum Linear Solver:VQLS)は、古典コンピューターよりも効率的に連立一次方程式を解くためにVQEを活用する変分量子アルゴリズムです。特に、 既知のベクトル$|\\textbf{b}\\rangle$ に対して、$\\textbf{A} |\\textbf{x}\\rangle = |\\textbf{b}\\rangle$を満たす行列$\\textbf{A}$が与えられたときに、VQLSアルゴリズムは理論的に、上記の関係式を満たすような$|\\textbf{x}\\rangle$に比例する規格化された$|x\\rangle$を発見することができます。\n", + " \n", + "このアルゴリズムの出力は、HHLアルゴリズムのものと同一で、HHLはVQLSよりもはるかにスピードアップが見込まれますが、VQLSはNISQ量子コンピューター上での稼働を可能にしている一方、HHLは多くの量子ビットを搭載していて、十分なエラー耐性が実現している量子ハードウェアを必要とします。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. アルゴリズム\n", + "\n", + "最初に、このアルゴリズムの入力は、複素係数で線型結合されたユニタリ行列に分解できる行列$\\textbf{A}$とします。\n", + "\n", + "$$A \\ = \\ \\displaystyle\\sum_{n} c_n \\ A_n$$\n", + "\n", + "各$A_n$はユニタリとして、状態$|0\\rangle$から状態$|\\textbf{b}\\rangle$に遷移するユニタリ行列を$U$とします。ここで、変分量子アルゴリズムの一般的な構造を思い出してください。低深度のパラメーター化された量子回路で評価し、古典的オプティマイザーに出力するような、量子コスト関数を構成しなければいけません。これにより、$|\\psi(\\alpha)\\rangle \\ = \\ \\frac{|\\textbf{x}\\rangle}{|| \\textbf{x} ||}$であるような、パラメーターセット$\\alpha$をパラメーター空間から探すことができるようになります。ここで、 $|\\psi(k)\\rangle$ は、あるパラメーターセット$k$における量子回路の出力になります。 \n", + "\n", + "実際のコスト関数を構成する前に、原論文に記載されている画像を元に、このアルゴリズムにおけるサブルーチンの俯瞰した概要を見てみましょう。\n", + "\n", + "![alt text](images/bro.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "各量子ビットが$|0\\rangle$に初期化されている量子ビットレジスタから始めます。このアルゴリズムは、入力値を取り入れて、コスト関数を準備し、評価し、いくつかの補助量子ビット状態を生成します。計算したコストが、あるパラメーター$\\gamma$よりも大きい場合、このアルゴリズムは、パラメーターを更新して再度実行します。そうでない場合は、アルゴリズムは処理を停止し、補助量子ビット状態は最適なパラメーターによって計算されます。これにより、コスト関数を最小化する状態ベクトルが得られ、$|\\textbf{x}\\rangle$の規格化したベクトルを得ることができます。
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Qiskitでの実装\n", + "\n", + "### 固定ハードウェア補助量子ビット状態(Fixed Hardware Ansatz)\n", + "任意の状態$|\\psi(k)\\rangle$を用意する、補助量子ビット状態$V(\\alpha)$を考えることから始めてみましょう。これによって、パラメーター$k$を変動させることによって状態空間を“探索”することができるようになります。では、今回の実装に使う補助量子ビット状態を次のように与えてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def apply_fixed_ansatz(qubits, parameters):\n", + "\n", + " for iz in range (0, len(qubits)):\n", + " circ.ry(parameters[0][iz], qubits[iz])\n", + "\n", + " circ.cz(qubits[0], qubits[1])\n", + " circ.cz(qubits[2], qubits[0])\n", + "\n", + " for iz in range (0, len(qubits)):\n", + " circ.ry(parameters[1][iz], qubits[iz])\n", + "\n", + " circ.cz(qubits[1], qubits[2])\n", + " circ.cz(qubits[2], qubits[0])\n", + "\n", + " for iz in range (0, len(qubits)):\n", + " circ.ry(parameters[2][iz], qubits[iz])\n", + "\n", + "circ = QuantumCircuit(3)\n", + "apply_fixed_ansatz([0, 1, 2], [[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n", + "circ.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは固定ハードウェア補助量子ビット状態(**fixed hardware ansatz**)と呼ばれます、量子ゲートの構成は、各実行において回路は同じであり、パラメーターが置き換わります。QAOAにおけるanstazとは異なり、トロッター化されたハミルトニアンでは構成されていません。$CZ$が異なる量子ビット間での\\\"干渉\\\"を起こす限り、$Ry$ゲートの応用によって、状態空間を探索できるようになります。\n", + "\n", + "ここで、実際の**コスト関数**について考えてみましょう。このアルゴリズムの目的は、コストを最小化することです。つまり、$|\\Phi\\rangle = \\textbf{A} |\\psi(k)\\rangle$が $|\\textbf{b}\\rangle$に非常に近い時にはコスト関数の出力をとても小さくし、逆に直交するようなベクトルであった場合にはコスト関数を大きくするようにします。そこで、射影ハミルトニアンを導入します。\n", + "\n", + "$$H_P \\ = \\ \\mathbb{I} \\ - \\ |b\\rangle \\langle b|$$\n", + " \n", + "これは次のような性質を持ちます。\n", + "\n", + "$$C_P \\ = \\ \\langle \\Phi | H_P | \\Phi \\rangle \\ = \\ \\langle \\Phi | (\\mathbb{I} \\ - \\ |b\\rangle \\langle b|) |\\Phi \\rangle \\ = \\ \\langle \\Phi | \\Phi \\rangle \\ - \\ \\langle \\Phi |b\\rangle \\langle b | \\Phi \\rangle$$\n", + " \n", + "第2項目から、$|b\\rangle$に沿った $|\\Phi\\rangle$の\\\"適合度\\\"がわかります。次に、これを別の数値から差し引いて、$|\\Phi\\rangle$と$|b\\rangle$ の内積が大きい場合(より一致する場合)、望ましい低い数を取得します。これだけでもとても良く見えます。しかし、このアルゴリズムの正確性をさらに向上させることができる方法がもう一つあります。これは、$|\\Phi\\rangle$が小さいノルムを持つと、$|\\textbf{b}\\rangle$に一致していなくても、コスト関数が小さい値になってしまうという事実です。それゆえ、$|\\Phi\\rangle$を$\\frac{|\\Phi\\rangle}{\\sqrt{\\langle \\Phi | \\Phi \\rangle}}$に置き換えると次のようになります。\n", + "\n", + "$$\\hat{C}_P \\ = \\ \\frac{\\langle \\Phi | \\Phi \\rangle}{\\langle \\Phi | \\Phi \\rangle} - \\frac{\\langle \\Phi |b\\rangle \\langle b | \\Phi \\rangle}{\\langle \\Phi | \\Phi \\rangle} \\ = \\ 1 \\ - \\ \\frac{\\langle \\Phi |b\\rangle \\langle b | \\Phi \\rangle}{\\langle \\Phi | \\Phi \\rangle} \\ = \\ 1 \\ - \\ \\frac{|\\langle b | \\Phi \\rangle|^2}{\\langle \\Phi | \\Phi \\rangle}$$\n", + "\n", + "これで、補助ビットによって$|\\psi(k)\\rangle$ を準備できました。ここから、コスト関数を計算するために、2つの値$|\\langle b | \\Phi \\rangle|^2$と$\\langle \\Phi | \\Phi \\rangle$を求めていきます。幸運なことに、これらを計算するための量子サブルーチンとして、アダマールテストを使って計算することができます。本質的に、もし何らかのユニタリ演算子$U$と状態$|\\phi\\rangle$を持っていて、その状態に対する$U$の期待値 $\\langle \\phi | U | \\phi \\rangle$を求めたいとすると、その時、次の回路で見積ることができます。\n", + "\n", + "

    \n", + "\n", + "![image1](images/h.png)\n", + "\n", + "

    \n", + "\n", + "このとき、最初の量子ビットが$0$と測定される確率は$\\frac{1}{2} (1 \\ + \\ \\text{Re}\\langle U \\rangle)$であり、$1$と測定される確率は$\\frac{1}{2} (1 \\ - \\ \\text{Re}\\langle U \\rangle)$となり、この2つの確率の差を取ることで$\\text{Re} \\langle U \\rangle$を得ます。幸運なことに、このテストで扱おうとしているこの行列は、この特定の実装において、全要素が実数の行列、つまり$\\text{Re} \\langle U \\rangle \\ = \\ \\langle U \\rangle$です。これは、アダマールテストがどのように動くかを示したものです。回路図によると、一般の状態ベクトルは次のようになります。\n", + "\n", + "
    \n", + "\n", + "\n", + "$$\\frac{|0\\rangle \\ + \\ |1\\rangle}{\\sqrt{2}} \\ \\otimes \\ |\\psi\\rangle \\ = \\ \\frac{|0\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ |\\psi\\rangle}{\\sqrt{2}}$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "制御ユニタリゲートを作用させると、次のようになります:\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\frac{|0\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ |\\psi\\rangle}{\\sqrt{2}} \\ \\rightarrow \\ \\frac{|0\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ U|\\psi\\rangle}{\\sqrt{2}}$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "最初の量子ビットにアダマールテストを作用させます:\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\frac{|0\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ U|\\psi\\rangle}{\\sqrt{2}} \\ \\rightarrow \\ \\frac{1}{2} \\ \\big[ |0\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ |\\psi\\rangle \\ + \\ |0\\rangle \\ \\otimes \\ U|\\psi\\rangle \\ - \\ |1\\rangle \\ \\otimes \\ U|\\psi\\rangle \\big]$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\Rightarrow \\ |0\\rangle \\ \\otimes \\ (\\mathbb{I} \\ + \\ U)|\\psi\\rangle \\ + \\ |1\\rangle \\ \\otimes \\ (\\mathbb{I} \\ - \\ U)|\\psi\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "最初の量子ビットに測定を行うと、これが$0$を測定する確率を見つけることを思い出すと、その状態と$|0\\rangle$の内積を計算しなければならず、その時にそれの複素共役(複素共役に慣れていない場合は、量子力学の章を確認してください。)をかけることになります。同じことを$1$の測定についても行います。それによって、次の式を得ます。 \n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$P(0) \\ = \\ \\frac{1}{4} \\ \\langle \\psi | (\\mathbb{I} \\ + \\ U) (\\mathbb{I} \\ + \\ U^{\\dagger}) |\\psi\\rangle \\ = \\ \\frac{1}{4} \\ \\langle \\psi | (\\mathbb{I}^2 \\ + U \\ + \\ U^{\\dagger} \\ + \\ U^{\\dagger} U) |\\psi\\rangle \\ = \\ \\frac{1}{4} \\ \\langle \\psi | (2\\mathbb{I} \\ + U \\ + \\ U^{\\dagger}) |\\psi\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\Rightarrow \\ \\frac{1}{4} \\Big[ 2 \\ + \\ \\langle \\psi | U^{\\dagger} | \\psi \\rangle \\ + \\ \\langle \\psi | U | \\psi \\rangle \\Big] \\ = \\ \\frac{1}{4} \\Big[ 2 \\ + \\ (\\langle \\psi | U | \\psi \\rangle)^{*} \\ + \\ \\langle \\psi | U | \\psi \\rangle \\Big] \\ = \\ \\frac{1}{2} (1 \\ + \\ \\text{Re} \\ \\langle \\psi | U | \\psi \\rangle)$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "同様の手順で、次の式を得ます:\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$P(1) \\ = \\ \\frac{1}{2} \\ (1 \\ - \\ \\text{Re} \\ \\langle \\psi | U | \\psi \\rangle)$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "それから、差分を取ります:\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$P(0) \\ - \\ P(1) \\ = \\ \\text{Re} \\ \\langle \\psi | U | \\psi \\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "素晴らしい!今、我々は計算しなければならない2つの値についてこれを実装できました。$\\langle \\Phi | \\Phi \\rangle$から始めて、我々は次の式を得ます。\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\langle \\Phi | \\Phi \\rangle \\ = \\ \\langle \\psi(k) | A^{\\dagger} A |\\psi(k) \\rangle \\ = \\ \\langle 0 | V(k)^{\\dagger} A^{\\dagger} A V(k) |0\\rangle \\ = \\ \\langle 0 | V(k)^{\\dagger} \\Big( \\displaystyle\\sum_{n} c_n \\ A_n \\Big)^{\\dagger} \\Big( \\displaystyle\\sum_{n} c_n \\ A_n \\Big) V(k) |0\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\Rightarrow \\ \\langle \\Phi | \\Phi \\rangle \\ = \\ \\displaystyle\\sum_{m} \\displaystyle\\sum_{n} c_m^{*} c_n \\langle 0 | V(k)^{\\dagger} A_m^{\\dagger} A_n V(k) |0\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "\n", + "そして、アダマールテストを使うことで、いかなる項$\\langle 0 | V(k)^{\\dagger} A_m^{\\dagger} A_n V(k) |0\\rangle$を計算することができるようになりました。これによって、我々は状態$V(k) |0\\rangle$を用意して、ユニタリ行列$A_m^{\\dagger}$と$A_n$に対していくつかの制御補助量子ビットと共に制御演算を行います。これをコードで実装します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#アダマールテストを構成する\n", + "\n", + "def had_test(gate_type, qubits, auxiliary_index, parameters):\n", + "\n", + " circ.h(auxiliary_index)\n", + "\n", + " apply_fixed_ansatz(qubits, parameters)\n", + "\n", + " for ie in range (0, len(gate_type[0])):\n", + " if (gate_type[0][ie] == 1):\n", + " circ.cz(auxiliary_index, qubits[ie])\n", + "\n", + " for ie in range (0, len(gate_type[1])):\n", + " if (gate_type[1][ie] == 1):\n", + " circ.cz(auxiliary_index, qubits[ie])\n", + " \n", + " circ.h(auxiliary_index)\n", + " \n", + "circ = QuantumCircuit(4)\n", + "had_test([[0, 0, 0], [0, 0, 1]], [1, 2, 3], 0, [[1, 1, 1], [1, 1, 1], [1, 1, 1]])\n", + "circ.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我々が2つの異なるゲートタイプを適用しようとする理由は、これが$\\langle \\Phi | \\Phi \\rangle$の拡張形式の中に見れるゲートのペアを表現しているからです。\n", + " \n", + "この実装の目的に注意しておくことも重要です。(実際に解く連立方程式は、ゲート$Z$と$\\mathbb{I}$にだけ関心があり、したがってこれらのゲートのサポートのみを含みます。(そのコードでは、$0$に対する$\\mathbb{I}$と$1$に対する$Z$)という異なるゲートの応用を意味する数字”識別子”を含みます。))\n", + " \n", + "今、我々は計算すべき2つ目の値$|\\langle b | \\Phi \\rangle|^2$に移ることができます。次の式を得ます。\n", + " \n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$|\\langle b | \\Phi \\rangle|^2 \\ = \\ |\\langle b | A V(k) | 0 \\rangle|^2 \\ = \\ |\\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle|^2 \\ = \\ \\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle \\langle 0 | V(k)^{\\dagger} A^{\\dagger} U |0\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "今しなければならないことは、積$\\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle \\langle 0 | V(k)^{\\dagger} A^{\\dagger} U |0\\rangle$に対して以前と同じ拡張です。\n", + " \n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle^2 \\ = \\ \\displaystyle\\sum_{m} \\displaystyle\\sum_{n} c_m^{*} c_n \\langle 0 | U^{\\dagger} A_n V(k) | 0 \\rangle \\langle 0 | V(k)^{\\dagger} A_m^{\\dagger} U |0\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "今再び、このデモの目的として、我々が実装した全ての出力/期待値が実数になることを見ることになります。つまり、次の式を得ます。\n", + " \n", + "
    \n", + "\n", + "\n", + "\n", + "$$\\Rightarrow \\ \\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle \\ = \\ (\\langle 0 | U^{\\dagger} A V(k) | 0 \\rangle)^{*} \\ = \\ \\langle 0 | V(k)^{\\dagger} A^{\\dagger} U |0\\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "故に、この特定の実装では\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$|\\langle b | \\Phi \\rangle|^2 \\ = \\ \\displaystyle\\sum_{m} \\displaystyle\\sum_{n} c_m c_n \\langle 0 | U^{\\dagger} A_n V(k) | 0 \\rangle \\langle 0 | U^{\\dagger} A_m V(k) | 0 \\rangle$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "新しく提案されたアダマールオーバーラップテスト(別紙参照)と呼ばれる方法を使って、この値を得るための洗練された方法がありますが、このチュートリアルではそれぞの行列を操作する標準的なアダマールテストのみを使っていきます。不幸なことに、これは補助量子ビットの使用が必要となります。我々は本質的に、補助量子ビット 事前準備したユニタリ$|b\\rangle$とユニタリ $A_n$に関連する各ゲートに制御を配置します。\n", + "これで制御補助ビットに対してこれになるようなものを得られます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#アダマールテストで ||^2 を計算するための補助回路を構成する\n", + "\n", + "def control_fixed_ansatz(qubits, parameters, auxiliary, reg):\n", + "\n", + " for i in range (0, len(qubits)):\n", + " circ.cry(parameters[0][i], qiskit.circuit.Qubit(reg, auxiliary), qiskit.circuit.Qubit(reg, qubits[i]))\n", + "\n", + " circ.ccx(auxiliary, qubits[1], 4)\n", + " circ.cz(qubits[0], 4)\n", + " circ.ccx(auxiliary, qubits[1], 4)\n", + "\n", + " circ.ccx(auxiliary, qubits[0], 4)\n", + " circ.cz(qubits[2], 4)\n", + " circ.ccx(auxiliary, qubits[0], 4)\n", + "\n", + " for i in range (0, len(qubits)):\n", + " circ.cry(parameters[1][i], qiskit.circuit.Qubit(reg, auxiliary), qiskit.circuit.Qubit(reg, qubits[i]))\n", + "\n", + " circ.ccx(auxiliary, qubits[2], 4)\n", + " circ.cz(qubits[1], 4)\n", + " circ.ccx(auxiliary, qubits[2], 4)\n", + "\n", + " circ.ccx(auxiliary, qubits[0], 4)\n", + " circ.cz(qubits[2], 4)\n", + " circ.ccx(auxiliary, qubits[0], 4)\n", + "\n", + " for i in range (0, len(qubits)):\n", + " circ.cry(parameters[2][i], qiskit.circuit.Qubit(reg, auxiliary), qiskit.circuit.Qubit(reg, qubits[i]))\n", + "\n", + "q_reg = QuantumRegister(5)\n", + "circ = QuantumCircuit(q_reg)\n", + "control_fixed_ansatz([1, 2, 3], [[1, 1, 1], [1, 1, 1], [1, 1, 1]], 0, q_reg)\n", + "circ.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "外部量子ビット`q0_4`に注目してください。これは補助量子ビットであり、この回路にあるように$CCZ$ゲートを作れるようになます。今、我々も$U$も回路で作る必要があります。我々の実装では、$U$を次のように構成します。 \n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$U \\ = \\ H_1 H_2 H_3$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "故に、我々は次の関数を作れます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def control_b(auxiliary, qubits):\n", + "\n", + " for ia in qubits:\n", + " circ.ch(auxiliary, ia)\n", + "\n", + "circ = QuantumCircuit(4)\n", + "control_b(0, [1, 2, 3])\n", + "circ.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最終的に、我々は新しいアダマールテストを構成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# を計算する制御アダマールテストを構成する\n", + "\n", + "def special_had_test(gate_type, qubits, auxiliary_index, parameters, reg):\n", + "\n", + " circ.h(auxiliary_index)\n", + "\n", + " control_fixed_ansatz(qubits, parameters, auxiliary_index, reg)\n", + "\n", + " for ty in range (0, len(gate_type)):\n", + " if (gate_type[ty] == 1):\n", + " circ.cz(auxiliary_index, qubits[ty])\n", + "\n", + "\n", + " control_b(auxiliary_index, qubits)\n", + " \n", + " circ.h(auxiliary_index)\n", + "\n", + "q_reg = QuantumRegister(5)\n", + "circ = QuantumCircuit(q_reg)\n", + "special_had_test([[0, 0, 0], [0, 0, 1]], [1, 2, 3], 0, [[1, 1, 1], [1, 1, 1], [1, 1, 1]], q_reg)\n", + "circ.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、我々のパラメーターの全てが$1$に設定されたときの特別な実装であり、ゲート$A_n$の集合は単に`[0, 0, 0]`が全ての量子ビット上での恒等行列を作用させることに相当し、`[0, 0, 1]`が第3量子ビットに$Z$行列を作用させるものになります。(我々の\"コード表記法\"に従う)\n", + "\n", + "さて、最終的なコスト関数を計算する準備ができました。これは単純に、異なる回路からの期待出力のすべての組み合わせの積を取り、それぞれの係数を掛け合わせて、前に説明したコスト関数に配置することを意味します!" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#全体のコスト関数を実装する\n", + "\n", + "def calculate_cost_function(parameters):\n", + " \n", + " global opt\n", + "\n", + " overall_sum_1 = 0\n", + " \n", + " parameters = [parameters[0:3], parameters[3:6], parameters[6:9]]\n", + "\n", + " for i in range(0, len(gate_set)):\n", + " for j in range(0, len(gate_set)):\n", + "\n", + " global circ\n", + "\n", + " qctl = QuantumRegister(5)\n", + " qc = ClassicalRegister(5)\n", + " circ = QuantumCircuit(qctl, qc)\n", + "\n", + " backend = Aer.get_backend('aer_simulator')\n", + " \n", + " multiply = coefficient_set[i]*coefficient_set[j]\n", + "\n", + " had_test([gate_set[i], gate_set[j]], [1, 2, 3], 0, parameters)\n", + "\n", + " circ.save_statevector()\n", + " t_circ = transpile(circ, backend)\n", + " qobj = assemble(t_circ)\n", + " job = backend.run(qobj)\n", + "\n", + " result = job.result()\n", + " outputstate = np.real(result.get_statevector(circ, decimals=100))\n", + " o = outputstate\n", + "\n", + " m_sum = 0\n", + " for l in range (0, len(o)):\n", + " if (l%2 == 1):\n", + " n = o[l]**2\n", + " m_sum+=n\n", + "\n", + " overall_sum_1+=multiply*(1-(2*m_sum))\n", + "\n", + " overall_sum_2 = 0\n", + "\n", + " for i in range(0, len(gate_set)):\n", + " for j in range(0, len(gate_set)):\n", + "\n", + " multiply = coefficient_set[i]*coefficient_set[j]\n", + " mult = 1\n", + "\n", + " for extra in range(0, 2):\n", + "\n", + " qctl = QuantumRegister(5)\n", + " qc = ClassicalRegister(5)\n", + " circ = QuantumCircuit(qctl, qc)\n", + "\n", + " backend = Aer.get_backend('aer_simulator')\n", + "\n", + " if (extra == 0):\n", + " special_had_test(gate_set[i], [1, 2, 3], 0, parameters, qctl)\n", + " if (extra == 1):\n", + " special_had_test(gate_set[j], [1, 2, 3], 0, parameters, qctl)\n", + "\n", + " circ.save_statevector() \n", + " t_circ = transpile(circ, backend)\n", + " qobj = assemble(t_circ)\n", + " job = backend.run(qobj)\n", + "\n", + " result = job.result()\n", + " outputstate = np.real(result.get_statevector(circ, decimals=100))\n", + " o = outputstate\n", + "\n", + " m_sum = 0\n", + " for l in range (0, len(o)):\n", + " if (l%2 == 1):\n", + " n = o[l]**2\n", + " m_sum+=n\n", + " mult = mult*(1-(2*m_sum))\n", + "\n", + " overall_sum_2+=multiply*mult\n", + " \n", + " print(1-float(overall_sum_2/overall_sum_1))\n", + "\n", + " return 1-float(overall_sum_2/overall_sum_1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このコードは長くて大変そうに見えますが、そんなことはありません!この状況では、数値的なアプローチを取っており、ここで、$1$状態にある補助量子ビットアダマール用量子ビットの測定に一致する各々の状態の振幅の2乗を計算し、この情報を元に$P(0) \\ - \\ P(1) \\ = \\ 1 \\ - \\ 2P(1)$を計算します。これは非常に正確ですが、(後でサンプリングについて議論しますが)現実の量子デバイスではこれらの確率を生成するために何度も回路のサンプリングを行わないといけないので、現実的ではありません。加えて、このコードは最適化されていません(必要以上に回路の評価を完成させています)。しかしこれが実装可能な最も簡単な方法であり、近い将来このチュートリアルを更新して最適化する予定です。\n", + " \n", + "最後のステップは、実際にある一次方程式を解くことをこのコードを使って実施してみることです。まずは1つ例を見ていきましょう。\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$A \\ = \\ 0.45 Z_3 \\ + \\ 0.55 \\mathbb{I}$$\n", + "\n", + "\n", + "\n", + "
    \n", + "\n", + "コスト関数を最小化するために、COBYLA最適化手法を繰り返し使用していきます。パラメーターに対する我々の探査空間は初期ではランダムに選択される$\\frac{k}{1000} (\\ k \\ \\in \\ \\{0, \\ 3000\\} )$で決定されます。最適化された状態ベクトルを獲得するために、オプティマイザーを200ステップ実行し、そこで停止して最適なパラメーターに対して補助ビットを適用します。さらに、このアルゴリズムが実際に機能するかを確認するために、いくつかの後処理を計算します!これをするために、最適なベクトル$|\\psi\\rangle_o$に$A$を適用し、それを正規化し、このベクトルと回答ベクトル $|b\\rangle$との内積の2乗を計算します。これを全てコードに書き下すと以下のようになります。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true, + "tags": [ + "output_scroll" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9525017762138146\n", + "0.9002309465052063\n", + "0.9988574465803983\n", + "0.8778546310899228\n", + "0.8521126645434376\n", + "0.7342613845729289\n", + "0.6992005098597478\n", + "0.8295512555275171\n", + "0.5383628551123725\n", + "0.5007402137107508\n", + "0.5303950779698489\n", + "0.48177662648062214\n", + "0.4668996272039816\n", + "0.5013393397068604\n", + "0.5875973530650762\n", + "0.4785598265522013\n", + "0.4564250518864408\n", + "0.5503144073290213\n", + "0.46522479966820396\n", + "0.44269218409937117\n", + "0.5203601994917957\n", + "0.4252389143259184\n", + "0.413774957713845\n", + "0.36491569912467536\n", + "0.417339648407528\n", + "0.3120194255855976\n", + "0.5046536616814559\n", + "0.30955446630759065\n", + "0.35602998901906757\n", + "0.38684673564326166\n", + "0.3686438203699881\n", + "0.3457315622901741\n", + "0.3266148284975623\n", + "0.2703767919694027\n", + "0.29408728867713896\n", + "0.25996900211358853\n", + "0.2582392620218944\n", + "0.2712592138413491\n", + "0.28653361757841933\n", + "0.2274645635024397\n", + "0.2781695310503891\n", + "0.2248501902082809\n", + "0.39162863215802757\n", + "0.22963862983759464\n", + "0.34240025731602386\n", + "0.21704976640581475\n", + "0.18208728685878306\n", + "0.18317967069649455\n", + "0.18330484782868162\n", + "0.11914293523651331\n", + "0.1146550011592431\n", + "0.09912187126416483\n", + "0.2618158267960786\n", + "0.13560151245320007\n", + "0.08602787872263595\n", + "0.09237702917232138\n", + "0.16976771498923582\n", + "0.13082657811854226\n", + "0.1534762225000772\n", + "0.13617749777022092\n", + "0.02733548351695403\n", + "0.035045844509208\n", + "0.03528579369298945\n", + "0.07994865380183691\n", + "0.024803271564973195\n", + "0.019288859722827456\n", + "0.027387438838968436\n", + "0.03659190145873581\n", + "0.04809170104349969\n", + "0.0182307529797906\n", + "0.061215931125207845\n", + "0.026759703591151096\n", + "0.04479861343194225\n", + "0.016676988958924\n", + "0.02326989723008177\n", + "0.01642596482128378\n", + "0.02491121692305287\n", + "0.028551374625383596\n", + "0.016975245355367652\n", + "0.028567845039816242\n", + "0.017577214549694964\n", + "0.01468534842842062\n", + "0.018515647641306865\n", + "0.01486031535108645\n", + "0.019278537723328548\n", + "0.018034912053147223\n", + "0.012645892231433975\n", + "0.014799027892663963\n", + "0.012349569836515695\n", + "0.012333645305507845\n", + "0.012465499289001758\n", + "0.012788689937648812\n", + "0.013215792230083512\n", + "0.01225410471585564\n", + "0.014175536518938547\n", + "0.011860676315311736\n", + "0.010419601334794693\n", + "0.009815056239741993\n", + "0.010816695295567946\n", + "0.009994399563271972\n", + "0.009578912846214815\n", + "0.00986564586502725\n", + "0.008758268272744285\n", + "0.008722385170190639\n", + "0.008798168278659646\n", + "0.009032696916640881\n", + "0.009180540540623783\n", + "0.00870927376643893\n", + "0.009203531451416724\n", + "0.009435040640544456\n", + "0.008830719178542501\n", + "0.007649298026381035\n", + "0.007466635557861423\n", + "0.007762692552826134\n", + "0.008709582617938305\n", + "0.0071147299140962295\n", + "0.006682294181756476\n", + "0.00704775398098334\n", + "0.006639663000590601\n", + "0.00686956749834533\n", + "0.006542404356123188\n", + "0.00796221719699497\n", + "0.006186819685728984\n", + "0.005974178133434482\n", + "0.006375854478076537\n", + "0.005932420073006206\n", + "0.005759420473233523\n", + "0.006325795194847661\n", + "0.005717000576312747\n", + "0.0054893457068935225\n", + "0.005478833343296685\n", + "0.005505408134591772\n", + "0.005657552895030116\n", + "0.005269724032037071\n", + "0.005394810516112236\n", + "0.005308047004518812\n", + "0.0050000755348480475\n", + "0.0053676809754023\n", + "0.004981422981245043\n", + "0.004897732246027409\n", + "0.005014672933869813\n", + "0.004636424987571552\n", + "0.004491796573880769\n", + "0.004501372045642049\n", + "0.0046509688017956075\n", + "0.004605657736083013\n", + "0.004274450597908874\n", + "0.004459878461460343\n", + "0.004268270565132015\n", + "0.004132316607775577\n", + "0.004324398164819998\n", + "0.00431238925897548\n", + "0.004019801121272759\n", + "0.004042810265402097\n", + "0.003998802217320407\n", + "0.0037760617103779204\n", + "0.004310975284628871\n", + "0.003763394265757669\n", + "0.0035500516142270566\n", + "0.003541962850512337\n", + "0.003606878711735928\n", + "0.003645005290622172\n", + "0.00359959679209898\n", + "0.0038279984075928475\n", + "0.0035261102876754657\n", + "0.0032884660511118824\n", + "0.003262918179773533\n", + "0.0032810845091831853\n", + "0.0032478298802767203\n", + "0.0033724933838973348\n", + "0.003008526217961327\n", + "0.002960232014792452\n", + "0.002853026036098383\n", + "0.0026395616522832954\n", + "0.0025228258696835537\n", + "0.0025124812743519964\n", + "0.0025954866147569478\n", + "0.0022725960122972344\n", + "0.002242783285350991\n", + "0.00224856489418368\n", + "0.0024085908834451386\n", + "0.002303182249534297\n", + "0.002347803901872614\n", + "0.002187898626190732\n", + "0.0022377291623361106\n", + "0.002178724515379038\n", + "0.0021465509529114968\n", + "0.0020668454304390016\n", + "0.002206466093325754\n", + "0.0020621412585736243\n", + "0.00203981190467184\n", + "0.001975569893114759\n", + "0.0019665517094247242\n", + "0.001969886877324689\n", + "0.0020018825237514415\n", + "0.0019478951248518284\n", + "0.0018089749889600437\n", + "0.0017300497641302703\n", + "0.0018218664861999745\n", + "0.0017136719460107974\n", + " fun: 0.0017136719460107974\n", + " maxcv: 0.0\n", + " message: 'Maximum number of function evaluations has been exceeded.'\n", + " nfev: 200\n", + " status: 2\n", + " success: False\n", + " x: array([3.12960969, 3.25355402, 1.64878693, 2.02209032, 2.15355337,\n", + " 1.6535498 , 2.64233591, 2.76727927, 2.93611543])\n", + "(0.9982863280442702-0j)\n" + ] + } + ], + "source": [ + "coefficient_set = [0.55, 0.45]\n", + "gate_set = [[0, 0, 0], [0, 0, 1]]\n", + "\n", + "out = minimize(calculate_cost_function, x0=[float(random.randint(0,3000))/1000 for i in range(0, 9)], method=\"COBYLA\", options={'maxiter':200})\n", + "print(out)\n", + "\n", + "out_f = [out['x'][0:3], out['x'][3:6], out['x'][6:9]]\n", + "\n", + "circ = QuantumCircuit(3, 3)\n", + "apply_fixed_ansatz([0, 1, 2], out_f)\n", + "circ.save_statevector()\n", + "\n", + "backend = Aer.get_backend('aer_simulator')\n", + "t_circ = transpile(circ, backend)\n", + "qobj = assemble(t_circ)\n", + "job = backend.run(qobj)\n", + "\n", + "result = job.result()\n", + "o = result.get_statevector(circ, decimals=10)\n", + "\n", + "a1 = coefficient_set[1]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,-1,0,0,0], [0,0,0,0,0,-1,0,0], [0,0,0,0,0,0,-1,0], [0,0,0,0,0,0,0,-1]])\n", + "a2 = coefficient_set[0]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,1]])\n", + "a3 = np.add(a1, a2)\n", + "\n", + "b = np.array([float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8))])\n", + "\n", + "print((b.dot(a3.dot(o)/(np.linalg.norm(a3.dot(o)))))**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "見て取れるように、コスト関数は非常に小さい値`0.03273673575407443`を達成しています。そして古典的コスト関数計算すると、我々が測定したものと完全に一致するように `0.96776862579723`を得ます。ベクトル$|\\psi\\rangle_o$と$|b\\rangle$はとても似ています。\n", + " \n", + "別のテストやってみましょう。このとき、$|b\\rangle$を同じにしておきますが、次のようにします。\n", + "\n", + "
    \n", + "\n", + "\n", + "\n", + "$$A \\ = \\ 0.55 \\mathbb{I} \\ + \\ 0.225 Z_2 \\ + \\ 0.225 Z_3$$\n", + "\n", + "\n", + "\n", + "再び、最適化コードを実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true, + "tags": [ + "output_scroll" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9482467948093024\n", + "0.931662655030201\n", + "0.9919608169398847\n", + "0.7692175259201359\n", + "0.6554089518705122\n", + "0.9463789376935694\n", + "0.9226117896559509\n", + "0.7481466612528249\n", + "0.9504745377642584\n", + "0.7368907850330892\n", + "0.5566412602596771\n", + "0.5722304978103673\n", + "0.6820241981820887\n", + "0.6677450397760101\n", + "0.6114560463120735\n", + "0.4758351081268597\n", + "0.5322022004930328\n", + "0.6310459788960516\n", + "0.5576849675851256\n", + "0.45876037124621927\n", + "0.3010515008286023\n", + "0.30770225127728346\n", + "0.25624719885891367\n", + "0.23739221505700392\n", + "0.23881129552073566\n", + "0.17709826113713978\n", + "0.1503624461428794\n", + "0.08573865697495042\n", + "0.3309183854869837\n", + "0.22069059174712446\n", + "0.4289667012142423\n", + "0.17612102559714327\n", + "0.17426913064422977\n", + "0.18827940642589114\n", + "0.3071508208605317\n", + "0.12186988817985767\n", + "0.14282084533365857\n", + "0.17559057581986925\n", + "0.13416400973333253\n", + "0.11767192322610298\n", + "0.10894086121578817\n", + "0.1104167326208585\n", + "0.09215529100204278\n", + "0.0867950880015913\n", + "0.09411074924323715\n", + "0.06564067235443471\n", + "0.0585295495225191\n", + "0.05361180453219572\n", + "0.049290628923793434\n", + "0.04844826373988975\n", + "0.05144335253753263\n", + "0.04775353478383615\n", + "0.06244316859884369\n", + "0.05517966364111537\n", + "0.04556100388725892\n", + "0.041487260803014125\n", + "0.04057488033593715\n", + "0.039209631554256164\n", + "0.040099653714381955\n", + "0.03984324079212043\n", + "0.03453129532913812\n", + "0.02628531741902318\n", + "0.021677097430520265\n", + "0.02039831224528954\n", + "0.020498568326687283\n", + "0.01861910748177331\n", + "0.019221973407692605\n", + "0.01936375783610811\n", + "0.018752409947775384\n", + "0.01986686326309428\n", + "0.017717172137388548\n", + "0.015743611564692284\n", + "0.018405872229232623\n", + "0.01634359410775932\n", + "0.016301186007972368\n", + "0.015110786021057199\n", + "0.015528313233251323\n", + "0.015013627383346995\n", + "0.014257350823621673\n", + "0.01331372161386346\n", + "0.013315905121097704\n", + "0.012797153856079935\n", + "0.012409467358591053\n", + "0.011877100089457082\n", + "0.011988899210079174\n", + "0.012734753993660863\n", + "0.011724412241540083\n", + "0.011381564697935831\n", + "0.011334413938200338\n", + "0.011264043262180334\n", + "0.011364457436255693\n", + "0.0124131548679417\n", + "0.01180886052972241\n", + "0.010100781365553813\n", + "0.010523118146161692\n", + "0.009867962003804798\n", + "0.009840997672983853\n", + "0.009760801656205409\n", + "0.00977314990660838\n", + "0.009917502839799752\n", + "0.009792431661601708\n", + "0.009500166750300298\n", + "0.00999703526594209\n", + "0.009546955849069838\n", + "0.009330091056638845\n", + "0.00952473959523048\n", + "0.009236667854473635\n", + "0.009053767098998855\n", + "0.009214979089214648\n", + "0.008974746650986076\n", + "0.009186768072579898\n", + "0.008565961354241147\n", + "0.008329261805884891\n", + "0.00830025465330686\n", + "0.00816627300446926\n", + "0.007934004080220158\n", + "0.007844730116906673\n", + "0.007940980173269163\n", + "0.00744670878906406\n", + "0.007132249775914312\n", + "0.006851170945639917\n", + "0.006566969568968517\n", + "0.006471422077345079\n", + "0.006292061027906692\n", + "0.006242034445950395\n", + "0.006179805551255857\n", + "0.006247039737641291\n", + "0.006093354605628765\n", + "0.005720177173617613\n", + "0.005541003709052084\n", + "0.0054991171971308095\n", + "0.005442617087976331\n", + "0.005340450710846434\n", + "0.005581175790501769\n", + "0.005209418415258571\n", + "0.005061637371051364\n", + "0.004983873064219879\n", + "0.004917550038327834\n", + "0.004909412210204023\n", + "0.005160821129076454\n", + "0.004869684164712562\n", + "0.004601343192941254\n", + "0.004770055497514636\n", + "0.004608363745618349\n", + "0.004685209472129026\n", + "0.004744944257626393\n", + "0.004585882330917723\n", + "0.004515721779958626\n", + "0.004386820977768546\n", + "0.004345668730224905\n", + "0.004324674674784923\n", + "0.004287182622070729\n", + "0.00421443689405554\n", + "0.004211482306439196\n", + "0.004169713643080164\n", + "0.004040580062757204\n", + "0.0041498406255207065\n", + "0.00400415792601716\n", + "0.0038941771117719792\n", + "0.003841443815422396\n", + "0.003892070628190636\n", + "0.0038145177856729884\n", + "0.003909899061724786\n", + "0.003809582253239241\n", + "0.003830910589180281\n", + "0.003834919916089863\n", + "0.003693390223998616\n", + "0.003644622231573913\n", + "0.0037491376999954085\n", + "0.0036808180473598684\n", + "0.003580951118900777\n", + "0.0035179755116026\n", + "0.003542549707515108\n", + "0.0035087591921498795\n", + "0.0035144188989066905\n", + "0.003507898777295959\n", + "0.003601642699124885\n", + "0.003382404365563474\n", + "0.003394422494400029\n", + "0.003379412953810834\n", + "0.003319431280546792\n", + "0.0034363533585103356\n", + "0.0033382751379966713\n", + "0.0032183474842744086\n", + "0.0032270167137248285\n", + "0.0032445556065626713\n", + "0.0032252855998723406\n", + "0.0032213597359889157\n", + "0.0031648281593097405\n", + "0.0031417453336860524\n", + "0.003139816603956236\n", + "0.003131918716242965\n", + "0.0031145146586657457\n", + "0.003065151662158705\n", + "0.003034476421412191\n", + "0.003032361972254316\n", + "0.0030559366360439766\n", + "0.0029990052306406723\n", + "0.0029564776231327805\n", + "0.002908980739327327\n", + " fun: 0.002908980739327327\n", + " maxcv: 0.0\n", + " message: 'Maximum number of function evaluations has been exceeded.'\n", + " nfev: 200\n", + " status: 2\n", + " success: False\n", + " x: array([3.10826981, 1.46209082, 0.62663923, 2.95395745, 1.91693021,\n", + " 0.34911488, 1.60850267, 2.32093243, 3.00529306])\n", + "(0.9970910192620044-0j)\n" + ] + } + ], + "source": [ + "coefficient_set = [0.55, 0.225, 0.225]\n", + "gate_set = [[0, 0, 0], [0, 1, 0], [0, 0, 1]]\n", + "\n", + "out = minimize(calculate_cost_function, x0=[float(random.randint(0,3000))/1000 for i in range(0, 9)], method=\"COBYLA\", options={'maxiter':200})\n", + "print(out)\n", + "\n", + "out_f = [out['x'][0:3], out['x'][3:6], out['x'][6:9]]\n", + "\n", + "circ = QuantumCircuit(3, 3)\n", + "apply_fixed_ansatz([0, 1, 2], out_f)\n", + "circ.save_statevector()\n", + "\n", + "backend = Aer.get_backend('aer_simulator')\n", + "\n", + "t_circ = transpile(circ, backend)\n", + "qobj = assemble(t_circ)\n", + "job = backend.run(qobj)\n", + "\n", + "result = job.result()\n", + "o = result.get_statevector(circ, decimals=10)\n", + "\n", + "a1 = coefficient_set[2]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,-1,0,0,0], [0,0,0,0,0,-1,0,0], [0,0,0,0,0,0,-1,0], [0,0,0,0,0,0,0,-1]])\n", + "a0 = coefficient_set[1]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,-1,0,0,0,0,0], [0,0,0,-1,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0], [0,0,0,0,0,0,-1,0], [0,0,0,0,0,0,0,-1]])\n", + "a2 = coefficient_set[0]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,1]])\n", + "\n", + "a3 = np.add(np.add(a2, a0), a1)\n", + "\n", + "b = np.array([float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8))])\n", + "\n", + "print((b.dot(a3.dot(o)/(np.linalg.norm(a3.dot(o)))))**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "再び、`0.00014718223342624626`という非常に小さいエラーとなっており、古典的コスト関数は`0.9998563418983931`になっています。正常に動いています!\n", + " \n", + "今、このアルゴリズムが**理論通り**動いていることがわかりました。数値的に確率を計算する代わりに回路をサンプリングしてある回路のシミュレーションをいくつか実行してみました。そこで、実際の量子コンピューターが動いているように、量子回路を**取り出して**みましょう!いくつかの理由により、このシミュレーションだけは、とんでもないショット(結果の確率分布を計算するために回路を実行する)数に対して、ほんの少し良く収束するでしょう。これは、量子回路をサンプリングする際のノイズ性(同じパラメータで測定しても、必ずしも同じ結果が得られるとは限らない)から、古典的なオプティマイザ(COBYLA)の限界に起因していることがほとんどだと考えられます。幸運なことに、SPSAのようなノイズのある関数に対して構築した他のオプティマイザーがあります。しかしこのチュートリアルではそこまで踏み込みません。$A$の2番目の値と同じ行列$U$のサンプリングをしてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "#Implements the entire cost function on the quantum circuit (sampling, 100000 shots)\n", + "\n", + "def calculate_cost_function(parameters):\n", + "\n", + " global opt\n", + "\n", + " overall_sum_1 = 0\n", + " \n", + " parameters = [parameters[0:3], parameters[3:6], parameters[6:9]]\n", + "\n", + " for i in range(0, len(gate_set)):\n", + " for j in range(0, len(gate_set)):\n", + "\n", + " global circ\n", + "\n", + " qctl = QuantumRegister(5)\n", + " qc = ClassicalRegister(1)\n", + " circ = QuantumCircuit(qctl, qc)\n", + "\n", + " backend = Aer.get_backend('aer_simulator')\n", + " \n", + " multiply = coefficient_set[i]*coefficient_set[j]\n", + "\n", + " had_test([gate_set[i], gate_set[j]], [1, 2, 3], 0, parameters)\n", + "\n", + " circ.measure(0, 0)\n", + "\n", + " t_circ = transpile(circ, backend)\n", + " qobj = assemble(t_circ, shots=10000)\n", + " job = backend.run(qobj)\n", + "\n", + " result = job.result()\n", + " outputstate = result.get_counts(circ)\n", + "\n", + " if ('1' in outputstate.keys()):\n", + " m_sum = float(outputstate[\"1\"])/100000\n", + " else:\n", + " m_sum = 0\n", + "\n", + " overall_sum_1+=multiply*(1-2*m_sum)\n", + "\n", + " overall_sum_2 = 0\n", + "\n", + " for i in range(0, len(gate_set)):\n", + " for j in range(0, len(gate_set)):\n", + "\n", + " multiply = coefficient_set[i]*coefficient_set[j]\n", + " mult = 1\n", + "\n", + " for extra in range(0, 2):\n", + "\n", + " qctl = QuantumRegister(5)\n", + " qc = ClassicalRegister(1)\n", + " \n", + " circ = QuantumCircuit(qctl, qc)\n", + "\n", + " backend = Aer.get_backend('aer_simulator')\n", + "\n", + " if (extra == 0):\n", + " special_had_test(gate_set[i], [1, 2, 3], 0, parameters, qctl)\n", + " if (extra == 1):\n", + " special_had_test(gate_set[j], [1, 2, 3], 0, parameters, qctl)\n", + "\n", + " circ.measure(0, 0)\n", + "\n", + " t_circ = transpile(circ, backend)\n", + " qobj = assemble(t_circ, shots=10000)\n", + " job = backend.run(qobj)\n", + "\n", + " result = job.result()\n", + " outputstate = result.get_counts(circ)\n", + "\n", + " if ('1' in outputstate.keys()):\n", + " m_sum = float(outputstate[\"1\"])/100000\n", + " else:\n", + " m_sum = 0\n", + "\n", + " mult = mult*(1-2*m_sum)\n", + " \n", + " overall_sum_2+=multiply*mult\n", + " \n", + " print(1-float(overall_sum_2/overall_sum_1))\n", + "\n", + " return 1-float(overall_sum_2/overall_sum_1)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true, + "tags": [ + "output_scroll" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9514881256868424\n", + "0.9766254808002898\n", + "0.9849065022786203\n", + "0.9090483367060972\n", + "0.9935904637319564\n", + "0.8066815420560158\n", + "0.8557895142936941\n", + "0.975499199287233\n", + "0.8566190425582184\n", + "0.6630291044758974\n", + "0.7057849489667776\n", + "0.7766728975912867\n", + "0.7535717666281818\n", + "0.8454745001520697\n", + "0.6751125419970294\n", + "0.5685648065754553\n", + "0.48151004726056\n", + "0.27763085090977946\n", + "0.3218710656620408\n", + "0.2880017400357686\n", + "0.3047179907701498\n", + "0.2776975694790661\n", + "0.2588265798193674\n", + "0.2693031066723719\n", + "0.4405940346501014\n", + "0.25331076506719763\n", + "0.313613807713899\n", + "0.25875488934871305\n", + "0.26428160645312715\n", + "0.2512394256779028\n", + "0.223406832959258\n", + "0.22466529288002135\n", + "0.24275334363216927\n", + "0.229671217858612\n", + "0.2317579951097024\n", + "0.24926946114023807\n", + "0.23342087536524447\n", + "0.21839860348999252\n", + "0.22655420232480483\n", + "0.20634498281132663\n", + "0.20298312824190912\n", + "0.21484451514352976\n", + "0.20788496898369002\n", + "0.20362143592877624\n", + "0.2154262579422067\n", + "0.2147662884924697\n", + "0.2117111685060976\n", + "0.2098764963417985\n", + "0.21945140819975673\n", + "0.20556269749621603\n", + "0.20520800555336027\n", + "0.21468097224978266\n", + "0.21025668799328234\n", + "0.209257645552953\n", + "0.2133230506876096\n", + "0.21219345911277887\n", + "0.21307728103300883\n", + "0.21150915341802634\n", + "0.2089115932053477\n", + "0.21588004813845085\n", + "0.2151627117277266\n", + "0.21218909506534933\n", + "0.21517151506979137\n", + "0.21147737202443395\n", + "0.21633470763371832\n", + "0.21032599538339747\n", + "0.21529089006906876\n", + "0.20707161517155048\n", + "0.21366754758494733\n", + "0.2135020444569844\n", + "0.20754357054932215\n", + "0.21278923344096712\n", + "0.2093391042077981\n", + "0.2141577452125386\n", + "0.21088761474096207\n", + "0.20893021693909797\n", + "0.21233066230608444\n", + "0.20976960010789747\n", + "0.21007888741610004\n", + "0.21094734834582962\n", + "0.2163216450740224\n", + "0.2159005519495889\n", + "0.21707003883568277\n", + "0.21715928887777047\n", + "0.21515093408246633\n", + "0.21090793883104686\n", + "0.20736655893265388\n", + "0.21739410040245055\n", + "0.21157551275819442\n", + "0.21445892598073268\n", + "0.2060523946249576\n", + "0.2139899222278312\n", + " fun: 0.2139899222278312\n", + " maxcv: 0.0\n", + " message: 'Optimization terminated successfully.'\n", + " nfev: 92\n", + " status: 1\n", + " success: True\n", + " x: array([0.73273877, 2.2931889 , 3.0873678 , 0.17167063, 2.89176878,\n", + " 2.49081023, 1.23099965, 2.55246703, 1.9982882 ])\n", + "(0.7874538692918659+0j)\n" + ] + } + ], + "source": [ + "coefficient_set = [0.55, 0.225, 0.225]\n", + "gate_set = [[0, 0, 0], [0, 1, 0], [0, 0, 1]]\n", + "\n", + "out = minimize(calculate_cost_function, x0=[float(random.randint(0,3000))/1000 for i in range(0, 9)], method=\"COBYLA\", options={'maxiter':200})\n", + "print(out)\n", + "\n", + "out_f = [out['x'][0:3], out['x'][3:6], out['x'][6:9]]\n", + "\n", + "circ = QuantumCircuit(3, 3)\n", + "apply_fixed_ansatz([0, 1, 2], out_f)\n", + "circ.save_statevector()\n", + "\n", + "backend = Aer.get_backend('aer_simulator')\n", + "\n", + "t_circ = transpile(circ, backend)\n", + "qobj = assemble(t_circ)\n", + "job = backend.run(qobj)\n", + "\n", + "result = job.result()\n", + "o = result.get_statevector(circ, decimals=10)\n", + "\n", + "a1 = coefficient_set[2]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,-1,0,0,0], [0,0,0,0,0,-1,0,0], [0,0,0,0,0,0,-1,0], [0,0,0,0,0,0,0,-1]])\n", + "a0 = coefficient_set[1]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,-1,0,0,0,0,0], [0,0,0,-1,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0], [0,0,0,0,0,0,-1,0], [0,0,0,0,0,0,0,-1]])\n", + "a2 = coefficient_set[0]*np.array([[1,0,0,0,0,0,0,0], [0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,0,1,0,0,0], [0,0,0,0,0,1,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,1]])\n", + "\n", + "a3 = np.add(np.add(a2, a0), a1)\n", + "\n", + "b = np.array([float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8)),float(1/np.sqrt(8))])\n", + "\n", + "print((b.dot(a3.dot(o)/(np.linalg.norm(a3.dot(o)))))**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "見てきたように、驚くことなく、この解法はまだかなりのマージンで外れています。($3.677\\%$エラーは酷くはありませんが、しかし理想的には、**より**0に近づけていこうとしています。)さらに、これは実際の量子回路が原因であったわけではなく、オプティマイザー自身のせいだと考えれます。この問題(先ほど述べたように、ノイズありオプティマイザーの導入のように)を正す方法を理解してから、このノートブックを更新していきます。\n", + " \n", + "\n", + "## 4. 謝辞\n", + "\n", + "この実装は、[研究論文\\\"Variational Quantum Linear Solver: A Hybrid Algorithm for Linear Systems\\\", written by Carlos Bravo-Prieto, Ryan LaRose, M. Cerezo, Yiğit Subaşı, Lukasz Cincio, and Patrick J. Coles](https://arxiv.org/abs/1909.05820) で述べられる内容を元にしています。\n", + " \n", + "\n", + "論文に関する私の質問に答えてくれたカルロス・ブラボ=プリエト氏に特別な感謝の意を表したいと思います。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "celltoolbar": "Tags", + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-prerequisites/images/qiskit-textbook.jpg b/translations/ja/ch-prerequisites/images/qiskit-textbook.jpg new file mode 100644 index 0000000..98be6aa Binary files /dev/null and b/translations/ja/ch-prerequisites/images/qiskit-textbook.jpg differ diff --git a/translations/ja/ch-prerequisites/python-and-jupyter-notebooks.ipynb b/translations/ja/ch-prerequisites/python-and-jupyter-notebooks.ipynb new file mode 100644 index 0000000..08fc3d8 --- /dev/null +++ b/translations/ja/ch-prerequisites/python-and-jupyter-notebooks.ipynb @@ -0,0 +1,784 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python 及び Jupyter notebook 入門" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pythonは、コンパイル不要なプログラミング言語です。 プログラムを行単位で実行することができます(これは、Notebookを使用する方法です)。ですので、もしプログラミングについて全く知らないのであれば、Pythonはスタート地点として素晴らしい場所になります。現在のバージョンは Python 3であり、本教科書で使用するものです。\n", + "\n", + "Pythonでコーディングする方法の一つは、Jupyter notebookを使用することです。 これはおそらく、プログラミング、文章、および画像を統合する最良の方法です。 Notebookでは、全てがセルにの中に配置されます。 テキスト・セルとコード・セルは最も一般的なものです。 Jupyter notebookとしてこのセクションを表示している場合、現在読んでいるこのテキストはテキスト・セルに配置されています。 コード・セルは、以下にあります。\n", + "\n", + "コード・セルの内容を実行するには、そのセルをクリックし、 Shift + Enter を押します。 または、左側に小さな矢印がある場合は、それをクリックすることもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 + 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "もしJupyter notebookとしてこのセクションを表示している場合は、読み進めると同時に各コード・セルを実行しましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.5" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = 1\n", + "b = 0.5\n", + "a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上のセルで、二つの変数`a` と `b`を定義し、値を与え、その後足し合わせています。このような単純な計算は、Pythonでとても完結に表記されます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pythonの変数は色々な形を取ります。以下にいくつかの例を示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "an_integer = 42 # Just an integer\n", + "a_float = 0.1 # A non-integer number, up to a fixed precision\n", + "a_boolean = True # A value that can be True or False\n", + "a_string = '''just enclose text between two 's, or two \"s, or do what we did for this string''' # Text\n", + "none_of_the_above = None # The absence of any actual value or variable type" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数のほかに、使用できるデータ構造として *list* があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "a_list = [0,1,2,3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pythonのlistは、様々なタイプを混在させることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "a_list = [ 42, 0.5, True, [0,1], None, 'Banana' ]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(Fortranのような言語と違い)Pythonで、listの添字は`0`から始まります。つまり、上のlistで最初にある`42`にアクセスするためには、次の様になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_list[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "同じ様なデータ構造として、 *tuple* があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "42" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_tuple = ( 42, 0.5, True, [0,1], None, 'Banana' )\n", + "a_tuple[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "listとtupleの主な違いは、listの要素は変更できることです。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[42, 0.5, True, [0, 1], None, 'apple']\n" + ] + } + ], + "source": [ + "a_list[5] = 'apple'\n", + "\n", + "print(a_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一方、tupleの要素は変更できません。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'tuple' object does not support item assignment", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma_tuple\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'apple'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" + ] + } + ], + "source": [ + "a_tuple[5] = 'apple'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "また、listの最後に要素を追加できますが、tupleはできません。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[42, 0.5, True, [0, 1], None, 'apple', 3.14]\n" + ] + } + ], + "source": [ + "a_list.append( 3.14 )\n", + "\n", + "print(a_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "他の便利なデータ構造として、*dictionary* があります。dictionaryは、それぞれユニークな *キー* でラベルされた *値* の集合を保存できます。\n", + "\n", + "値のデータタイプは任意です。キーは十分単純(integer, float, Boolean, string)であればよいです。dictionaryは、listにはなれませんが、tupleには _なりえ_ ます。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "a_dict = { 1:'This is the value, for the key 1', 'This is the key for a value 1':1, False:':)', (0,1):256 }" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "値はキーを使ってアクセスします:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_dict['This is the key for a value 1']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "新しいキーと値のペアは、新しいキーに対して新しい値を与えることで追加できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "a_dict['new key'] = 'new_value'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "数値の範囲をループする場合、構文は次の通りです:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "1\n", + "2\n", + "3\n", + "4\n" + ] + } + ], + "source": [ + "for j in range(5):\n", + " print(j)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "デフォルトで0から始まりますので、`range(n)`に対して、n-1で終わることに注意してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "'iterable'オブジェクトについてもループすることができます。listの場合は次の通りです:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "42\n", + "0.5\n", + "True\n", + "[0, 1]\n", + "None\n", + "apple\n", + "3.14\n" + ] + } + ], + "source": [ + "for j in a_list:\n", + " print(j)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "dictionaryの場合は以下の通りです:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "key = 1\n", + "value = This is the value, for the key 1\n", + "\n", + "key = This is the key for a value 1\n", + "value = 1\n", + "\n", + "key = False\n", + "value = :)\n", + "\n", + "key = (0, 1)\n", + "value = 256\n", + "\n", + "key = new key\n", + "value = new_value\n", + "\n" + ] + } + ], + "source": [ + "for key in a_dict:\n", + " value = a_dict[key]\n", + " print('key =',key)\n", + " print('value =',value)\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "条件文は`if`、`elif`、`else`を使うと以下の文法で記述できます: " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We have an apple!\n" + ] + } + ], + "source": [ + "if 'strawberry' in a_list:\n", + " print('We have a strawberry!')\n", + "elif a_list[5]=='apple':\n", + " print('We have an apple!')\n", + "else:\n", + " print('Not much fruit here!')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "パッケージは次のような行でインポートします:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "パッケージ `numpy` は数学的なコーディングに重要です。" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "numpy.sin( numpy.pi/2 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "numpyコマンドの前に、`numpy.`を記述する必要があります。それで、`numpy`に定義されているコマンドだと実行系が知ることができるのです。コーディングを節約するため、一般的に次の様に記述します:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "\n", + "np.sin( np.pi/2 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このようにすると、短縮名だけが必要となります。ほとんどの人が `np`を使用しますが、好きなものを使用して構いません。\n", + "\n", + "`numpy`の全てをそのままインポートする場合は、次の通りです:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from numpy import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この様にすると、コマンドを直接使うことができます。しかし、パッケージ同士で干渉することがあるので、注意して使用する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sin( pi/2 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "三角関数、線形代数などを実行したい場合は、 `numpy` を使用できます。 プロットする場合は、 `matplotlib` を使用してください。 グラフ理論の場合は、 `networkx` を使用します。 量子コンピューティングの場合は、 `qiskit` を使用します。 あなたが望むどのようなものに対しても、役立つパッケージがきっとあるでしょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "どの言語でも知っておくべきことは、関数の作り方です。\n", + "\n", + "`do_some_maths`という名前で、`Input1` と `Input2` という入力を持ち、`the_answer`という出力を持つ関数は、次の通りです:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def do_some_maths ( Input1, Input2 ):\n", + " the_answer = Input1 + Input2\n", + " return the_answer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは次の様に使います:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "73\n" + ] + } + ], + "source": [ + "x = do_some_maths(1,72)\n", + "print(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "関数にオブジェクトを指定し、関数がそのオブジェクトの状態を変更するメソッドを呼び出すと、その影響は持続します。 つまり、それがあなたのしたいことであれば、何も`返す`必要はありません。 例えば、listの `append` メソッドでこれを確かめてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "def add_sausages ( input_list ):\n", + " if 'sausages' not in input_list:\n", + " input_list.append('sausages')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "List before the function\n", + "[42, 0.5, True, [0, 1], None, 'apple', 3.14]\n", + "\n", + "List after the function\n", + "[42, 0.5, True, [0, 1], None, 'apple', 3.14, 'sausages']\n" + ] + } + ], + "source": [ + "print('List before the function')\n", + "print(a_list)\n", + "\n", + "add_sausages(a_list) # function called without an output\n", + "\n", + "print('\\nList after the function')\n", + "print(a_list)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "乱数は `random` パッケージを使用すると生成できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "* Results from sample 1\n", + "\n", + " Random number from 0 to 1: 0.24483110888696868\n", + "\n", + " Random choice from our list: [0, 1]\n", + "\n", + "\n", + "* Results from sample 2\n", + "\n", + " Random number from 0 to 1: 0.7426371646254912\n", + "\n", + " Random choice from our list: [0, 1]\n", + "\n", + "\n", + "* Results from sample 3\n", + "\n", + " Random number from 0 to 1: 0.7269519228900921\n", + "\n", + " Random choice from our list: 42\n", + "\n", + "\n", + "* Results from sample 4\n", + "\n", + " Random number from 0 to 1: 0.8707823815722878\n", + "\n", + " Random choice from our list: apple\n", + "\n", + "\n", + "* Results from sample 5\n", + "\n", + " Random number from 0 to 1: 0.2731676546693854\n", + "\n", + " Random choice from our list: True\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for j in range(5):\n", + " print('* Results from sample',j+1)\n", + " print('\\n Random number from 0 to 1:', random.random() )\n", + " print(\"\\n Random choice from our list:\", random.choice( a_list ) )\n", + " print('\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以上は基本です。いま、あなたに必要なのは検索エンジンであり、Stack Exchangeにおいて聞く価値のあるユーザーを知る知見です。 これで、あなたはPythonで何でも行うことができます。あなたのコードは最も「Pythonic」ではないかもしれませんが、それを気にしているのはPythonistasだけです。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-prerequisites/setting-the-environment.ipynb b/translations/ja/ch-prerequisites/setting-the-environment.ipynb new file mode 100644 index 0000000..a0e4005 --- /dev/null +++ b/translations/ja/ch-prerequisites/setting-the-environment.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "## Qiskitテキストブックで作業するための環境設定ガイド" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitテキストブックで作業するためのパソコン環境の設定方法をまとめました。webサイト上のテキストブックで見た通りの結果を再現するのに役立ちます。Qiskitテキストブックは[Jupyter notebook](https://jupyter.org/install)で書かれています。notebookと[webサイト](https://qiskit.org/textbook/preface.html) は、テキストブックが完全にサポートされている唯一のメディアです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## qiskit_textbook パッケージのインストール\n", + "\n", + "Qiskitテキストブックには、テキストブック専用のツールやウィジェットが用意されています。これはQiskitの一部ではなく、`qiskit_textbook`パッケージから入手できるものです。[Pip](http://pypi.org/project/pip/) と [Git](http://git-scm.com/)を用いて、最も早くインストールする方法は以下のコマンドです:\n", + "\n", + "```\n", + "pip install git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src\n", + "```\n", + "もしくは、Githubより[qiskit-textbook-src](https://github.com/qiskit-community/qiskit-textbook)フォルダーをダウンロードし、このフォルダーを含むディレクトリから以下を実行してください:\n", + "\n", + "```\n", + "pip install ./qiskit-textbook-src\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Qiskitテキストブックに記載されている描画出力を正確に再現する為のステップ (オプション)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. デフォルトの描画ツールをMatPlotLibに設定する\n", + "\n", + "`QuantumCircuit.draw()` や `qiskit.visualization.circuit_drawer()`のデフォルトのバックエンドはテキストです。しかし、ローカル環境に応じ、これらデフォルトをあなたのユースケースに適したものに変更したいと思うでしょう。これはユーザー構成ファイルで実現できます。デフォルトで、ユーザー構成ファイルは、`~/.qiskit/`の中にある`settings.conf`ファイルです。\n", + "\n", + "Qiskitテキストブックは、MatPlotLibをデフォルトの回路描画ツールとして使用しています。Qiskitテキストブック中に記載されている描画を再現するためには、以下の内容を含む`settings.conf` ファイル(通常は`~/.qiskit/`にあります)を作成してください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " [default]\n", + " circuit_drawer = mpl" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. デフォルトの画像タイプをSVGに設定する\n", + "\n", + "オプションで、以下のコードを`ipython_kernel_config.py`ファイル(通常は`~/.ipython/profile_default/`にあります)に追加して、デフォルトの画像フォーマットをPNGからより拡張性のあるSVGフォーマットに変更することができます:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " c.InlineBackend.figure_format = 'svg'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. テキストブック中で使用しているQiskitのバージョンと同期する\n", + "\n", + "ほとんどのチュートリアルの最後に、Qiskitパッケージのバージョン情報を含んだコード・スニペットがあります。構文や出力に矛盾がある場合は、同じバージョンを使用してみてください。\n", + "\n", + "あなたのコンピューターにインストールされているバージョンを確認するには、PythonシェルかJupyter notebookにて以下を実行してください:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " import qiskit\n", + " qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/accessing_higher_energy_states.ipynb b/translations/ja/ch-quantum-hardware/accessing_higher_energy_states.ipynb new file mode 100644 index 0000000..1999bad --- /dev/null +++ b/translations/ja/ch-quantum-hardware/accessing_higher_energy_states.ipynb @@ -0,0 +1,7363 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# Qiskit Pulseで高エネルギー状態へアクセスする" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ほとんどの量子アルゴリズム/アプリケーションでは、$|0\\rangle$と$|1\\rangle$によって張られた2次元空間で計算が実行されます。ただし、IBMのハードウェアでは、通常は使用されない、より高いエネルギー状態も存在します。このセクションでは、Qiskit Pulseを使ってこれらの状態を探索することにフォーカスを当てます。特に、$|2\\rangle$ 状態を励起し、$|0\\rangle$、$|1\\rangle$、$|2\\rangle$の状態を分類するための識別器を作成する方法を示します。\n", + "\n", + "このノートブックを読む前に、[前の章](./calibrating-qubits-openpulse.html)を読むことをお勧めします。また、Qiskit Pulseのスペック(Ref [1](#refs))も読むことをお勧めします。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 物理学的背景" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、IBMの量子ハードウェアの多くの基礎となっている、トランズモンキュービットの物理学的な背景を説明します。このシステムには、ジョセフソン接合とコンデンサーで構成される超伝導回路が含まれています。超伝導回路に不慣れな方は、[こちらのレビュー](https://arxiv.org/pdf/1904.06560.pdf) (Ref. [2](#refs))を参照してください。このシステムのハミルトニアンは以下で与えられます。\n", + "\n", + "$$\n", + "H = 4 E_C n^2 - E_J \\cos(\\phi),\n", + "$$\n", + "\n", + "ここで、$E_C, E_J$はコンデンサーのエネルギーとジョセフソンエネルギーを示し、$n$は減衰した電荷数演算子で、$\\phi$はジャンクションのために減衰した磁束です。$\\hbar=1$として扱います。\n", + "\n", + "トランズモンキュービットは$\\phi$が小さい領域で定義されるため、$E_J \\cos(\\phi)$をテイラー級数で展開できます(定数項を無視します)。\n", + "\n", + "$$\n", + "E_J \\cos(\\phi) \\approx \\frac{1}{2} E_J \\phi^2 - \\frac{1}{24} E_J \\phi^4 + \\mathcal{O}(\\phi^6).\n", + "$$\n", + "\n", + "$\\phi$の二次の項$\\phi^2$は、標準の調和振動子を定義します。その他の追加の項はそれぞれ非調和性をもたらします。\n", + "\n", + "$n \\sim (a-a^\\dagger), \\phi \\sim (a+a^\\dagger)$の関係を使うと($a^\\dagger,a$は生成消滅演算子)、システムは以下のハミルトニアンを持つダフィング(Duffing)振動子に似ていることを示せます。\n", + "\n", + "$$\n", + "H = \\omega a^\\dagger a + \\frac{\\alpha}{2} a^\\dagger a^\\dagger a a,\n", + "$$\n", + "\n", + "$\\omega$は、$0\\rightarrow1$の励起周波数($\\omega \\equiv \\omega^{0\\rightarrow1}$)を与え、$\\alpha$は$0\\rightarrow1$の周波数と$1\\rightarrow2$の周波数の間の非調和です。必要に応じて駆動の条件を追加できます。\n", + "\n", + "標準の2次元部分空間へ特化したい場合は、$|\\alpha|$ を十分に大きくとるか、高エネルギー状態を抑制する特別な制御テクニックを使います。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 目次\n", + "\n", + "0. [はじめに](#importing)\n", + "1. [0と1の状態の識別](#discrim01)\n", + " 1. [0->1の周波数スイープ](#freqsweep01)\n", + " 2. [0->1のラビ実験](#rabi01)\n", + " 3. [0,1の識別器を構築する](#builddiscrim01)\n", + "2. [0,1,2の状態の識別](#discrim012)\n", + " 1. [1->2の周波数の計算](#freq12)\n", + " 1. [サイドバンド法を使った1->2の周波数スイープ](#sideband12)\n", + " 2. [1->2のラビ実験](#rabi12)\n", + " 3. [0,1,2の識別器を構築する](#builddiscrim012)\n", + "4. [参考文献](#refs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 0. はじめに " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず、依存関係をインポートし、いくつかのデフォルトの変数を定義します。量子ビット0を実験に使います。公開されている単一量子ビットデバイスである`ibmq_armonk`で実験を行います。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from scipy.optimize import curve_fit\n", + "from scipy.signal import find_peaks\n", + "\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "import qiskit.pulse as pulse\n", + "import qiskit.pulse.library as pulse_lib\n", + "from qiskit.compiler import assemble\n", + "from qiskit.pulse.library import SamplePulse\n", + "\n", + "from qiskit.tools.monitor import job_monitor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Qubit 0 has an estimated frequency of 4.9744534273002605 GHz.\n" + ] + } + ], + "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "from qiskit.tools.jupyter import *\n", + "%matplotlib inline\n", + "\n", + "from qiskit import IBMQ\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "backend = provider.get_backend('ibmq_armonk')\n", + "\n", + "backend_config = backend.configuration()\n", + "assert backend_config.open_pulse, \"Backend doesn't support Pulse\"\n", + "\n", + "dt = backend_config.dt\n", + "\n", + "backend_defaults = backend.defaults()\n", + "\n", + "# 単位変換係数 -> すべてのバックエンドのプロパティーがSI単位系(Hz, sec, etc)で返される\n", + "GHz = 1.0e9 # Gigahertz\n", + "MHz = 1.0e6 # Megahertz\n", + "us = 1.0e-6 # Microseconds\n", + "ns = 1.0e-9 # Nanoseconds\n", + "\n", + "qubit = 0 # 分析に使う量子ビット\n", + "default_qubit_freq = backend_defaults.qubit_freq_est[qubit] # デフォルトの量子ビット周波数単位はHz \n", + "print(f\"Qubit {qubit} has an estimated frequency of {default_qubit_freq/ GHz} GHz.\")\n", + "\n", + "#(各デバイスに固有の)データをスケーリング\n", + "scale_factor = 1e-14\n", + "\n", + "# 実験のショット回数\n", + "NUM_SHOTS = 1024\n", + "\n", + "### 必要なチャネルを収集する\n", + "drive_chan = pulse.DriveChannel(qubit)\n", + "meas_chan = pulse.MeasureChannel(qubit)\n", + "acq_chan = pulse.AcquireChannel(qubit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "いくつか便利な関数を追加で定義します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def get_job_data(job, average):\n", + " \"\"\"すでに実行されているジョブからデータを取得します。\n", + " 引数:\n", + " job (Job): データが必要なジョブ\n", + " average (bool): Trueの場合、データが平均であると想定してデータを取得。\n", + " Falseの場合、シングルショット用と想定してデータを取得。\n", + " 返し値:\n", + " list: ジョブの結果データを含むリスト\n", + " \"\"\"\n", + " job_results = job.result(timeout=120) # タイムアウトパラメーターは120秒にセット\n", + " result_data = []\n", + " for i in range(len(job_results.results)):\n", + " if average: # 平均データを得る\n", + " result_data.append(job_results.get_memory(i)[qubit]*scale_factor) \n", + " else: # シングルデータを得る\n", + " result_data.append(job_results.get_memory(i)[:, qubit]*scale_factor) \n", + " return result_data\n", + "\n", + "def get_closest_multiple_of_16(num):\n", + " \"\"\"16の倍数に最も近いものを計算します。\n", + " パルスが使えるデバイスが16サンプルの倍数の期間が必要なためです。\n", + " \"\"\"\n", + " return (int(num) - (int(num)%16))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、駆動パルスと測定のためのいくつかのデフォルトパラメーターを含めます。命令スケジュールマップから(バックエンドデフォルトから)`measure`コマンドをプルして、新しいキャリブレーションでアップデートされるようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 駆動パルスのパラメーター (us = マイクロ秒)\n", + "drive_sigma_us = 0.075 # ガウシアンの実際の幅を決めます\n", + "drive_samples_us = drive_sigma_us*8 # 切り捨てパラメーター\n", + " # ガウシアンには自然な有限長がないためです。\n", + "\n", + "drive_sigma = get_closest_multiple_of_16(drive_sigma_us * us /dt) # ガウシアンの幅の単位はdt\n", + "drive_samples = get_closest_multiple_of_16(drive_samples_us * us /dt) # 切り捨てパラメーターの単位はdt" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# この量子ビットに必要な測定マップインデックスを見つける\n", + "meas_map_idx = None\n", + "for i, measure_group in enumerate(backend_config.meas_map):\n", + " if qubit in measure_group:\n", + " meas_map_idx = i\n", + " break\n", + "assert meas_map_idx is not None, f\"Couldn't find qubit {qubit} in the meas_map!\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 命令スケジュールマップからデフォルトの測定パルスを取得\n", + "inst_sched_map = backend_defaults.instruction_schedule_map\n", + "measure = inst_sched_map.get('measure', qubits=backend_config.meas_map[meas_map_idx])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. $|0\\rangle$ と $|1\\rangle$の状態の識別 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセクションでは、標準の$|0\\rangle$と$|1\\rangle$の状態の識別器を構築します。識別器のジョブは、`meas_level=1`の複素数データを取得し、標準の$|0\\rangle$の$|1\\rangle$の状態(`meas_level=2`)に分類することです。これは、前の[章](./calibrating-qubits-openpulse.html)の多くと同じ作業です。この結果は、このNotebookがフォーカスしている高エネルギー状態に励起するために必要です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1A. 0->1 周波数のスイープ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "識別器の構築の最初のステップは、前の章でやったのと同じように、我々の量子ビット周波数をキャリブレーションすることです。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def create_ground_freq_sweep_program(freqs, drive_power):\n", + " \"\"\"基底状態を励起して周波数掃引を行うプログラムを作成します。\n", + " ドライブパワーに応じて、これは0->1の周波数なのか、または0->2の周波数なのかを明らかにすることができます。\n", + " 引数:\n", + " freqs (np.ndarray(dtype=float)):スイープする周波数のNumpy配列。\n", + " drive_power (float):ドライブ振幅の値。\n", + " レイズ:\n", + " ValueError:75を超える頻度を使用すると発生します。\n", + "        現在、これを実行しようとすると、バックエンドでエラーが投げられます。\n", + " 戻り値:\n", + " Qobj:基底状態の周波数掃引実験のプログラム。\n", + " \"\"\"\n", + " if len(freqs) > 75:\n", + " raise ValueError(\"You can only run 75 schedules at a time.\")\n", + " \n", + " # スイープ情報を表示\n", + " print(f\"The frequency sweep will go from {freqs[0] / GHz} GHz to {freqs[-1]/ GHz} GHz \\\n", + "using {len(freqs)} frequencies. The drive power is {drive_power}.\")\n", + " \n", + " # 駆動パルスを定義\n", + " ground_sweep_drive_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " sigma=drive_sigma,\n", + " amp=drive_power,\n", + " name='ground_sweep_drive_pulse')\n", + " # スイープのための周波数を定義\n", + " schedule = pulse.Schedule(name='Frequency sweep starting from ground state.')\n", + " \n", + " schedule |= pulse.Play(ground_sweep_drive_pulse, drive_chan)\n", + " schedule |= measure << schedule.duration\n", + " \n", + " # define frequencies for the sweep\n", + " schedule_freqs = [{drive_chan: freq} for freq in freqs]\n", + "\n", + " # プログラムを組み立てる\n", + " # 注:それぞれが同じことを行うため、必要なスケジュールは1つだけです;\n", + " # スケジュールごとに、ドライブをミックスダウンするLO周波数が変化します\n", + " # これにより周波数掃引が可能になります\n", + " ground_freq_sweep_program = assemble(schedule,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=schedule_freqs)\n", + " \n", + " return ground_freq_sweep_program" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The frequency sweep will go from 4.954453427300261 GHz to 4.994453427300261 GHz using 75 frequencies. The drive power is 0.3.\n" + ] + } + ], + "source": [ + "# 75個の周波数で推定周波数の周りに40MHzを掃引します\n", + "num_freqs = 75\n", + "ground_sweep_freqs = default_qubit_freq + np.linspace(-20*MHz, 20*MHz, num_freqs)\n", + "ground_freq_sweep_program = create_ground_freq_sweep_program(ground_sweep_freqs, drive_power=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "ground_freq_sweep_job = backend.run(ground_freq_sweep_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f9683d461672700130444cd\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(ground_freq_sweep_job.job_id())\n", + "job_monitor(ground_freq_sweep_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ジョブのデータ(平均)を取得する\n", + "ground_freq_sweep_data = get_job_data(ground_freq_sweep_job, average=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "データをローレンツ曲線に適合させ、キャリブレーションされた周波数を抽出します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def fit_function(x_values, y_values, function, init_params):\n", + " \"\"\"Fit a function using scipy curve_fit.\"\"\"\n", + " fitparams, conv = curve_fit(function, x_values, y_values, init_params)\n", + " y_fit = function(x_values, *fitparams)\n", + " \n", + " return fitparams, y_fit" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# Hz単位でのフィッティングをします\n", + "(ground_sweep_fit_params, \n", + " ground_sweep_y_fit) = fit_function(ground_sweep_freqs,\n", + " ground_freq_sweep_data, \n", + " lambda x, A, q_freq, B, C: (A / np.pi) * (B / ((x - q_freq)**2 + B**2)) + C,\n", + " [7, 4.975*GHz, 1*GHz, 3*GHz] # フィッティングのための初期パラメーター\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 注:シグナルの実数部のみをプロットしています\n", + "plt.scatter(ground_sweep_freqs/GHz, ground_freq_sweep_data, color='black')\n", + "plt.plot(ground_sweep_freqs/GHz, ground_sweep_y_fit, color='red')\n", + "plt.xlim([min(ground_sweep_freqs/GHz), max(ground_sweep_freqs/GHz)])\n", + "plt.xlabel(\"Frequency [GHz]\", fontsize=15)\n", + "plt.ylabel(\"Measured Signal [a.u.]\", fontsize=15)\n", + "plt.title(\"0->1 Frequency Sweep\", fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We've updated our qubit frequency estimate from 4.9744534 GHz to 4.974489 GHz.\n" + ] + } + ], + "source": [ + "_, cal_qubit_freq, _, _ = ground_sweep_fit_params\n", + "print(f\"We've updated our qubit frequency estimate from \"\n", + " f\"{round(default_qubit_freq/GHz, 7)} GHz to {round(cal_qubit_freq/GHz, 7)} GHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1B. 0->1 のラビ実験 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、$0\\rightarrow1 ~ \\pi$パルスの振幅を計算するラビ実験を実行します。$\\pi$パルスは、$|0\\rangle$から$|1\\rangle$の状態へ移動させるパルス(ブロッホ球上での$\\pi$回転)だということを思い出してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実験の構成\n", + "num_rabi_points = 50 # 実験の数(つまり、掃引の振幅)\n", + "\n", + "# 反復する駆動パルスの振幅値:0から0.75まで等間隔に配置された50の振幅\n", + "drive_amp_min = 0\n", + "drive_amp_max = 0.75\n", + "drive_amps = np.linspace(drive_amp_min, drive_amp_max, num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# スケジュールを作成\n", + "rabi_01_schedules = []\n", + "# 駆動振幅すべてにわたってループ\n", + "for ii, drive_amp in enumerate(drive_amps):\n", + " # 駆動パルス\n", + " rabi_01_pulse = pulse_lib.gaussian(duration=drive_samples, \n", + " amp=drive_amp, \n", + " sigma=drive_sigma, \n", + " name='rabi_01_pulse_%d' % ii)\n", + " \n", + " # スケジュールにコマンドを追加\n", + " schedule = pulse.Schedule(name='Rabi Experiment at drive amp = %s' % drive_amp)\n", + " schedule |= pulse.Play(rabi_01_pulse, drive_chan)\n", + " schedule |= measure << schedule.duration # 測定をドライブパルスの後にシフト\n", + " rabi_01_schedules.append(schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# プログラムにスケジュールを組み込む\n", + "# 注:較正された周波数で駆動します。\n", + "rabi_01_expt_program = assemble(rabi_01_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=[{drive_chan: cal_qubit_freq}]\n", + " * num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "rabi_01_job = backend.run(rabi_01_expt_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f96870a834560001306fd69\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(rabi_01_job.job_id())\n", + "job_monitor(rabi_01_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ジョブのデータ(平均)を取得する\n", + "rabi_01_data = get_job_data(rabi_01_job, average=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def baseline_remove(values):\n", + " \"\"\"Center data around 0.\"\"\"\n", + " return np.array(values) - np.mean(values)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 注:データの実数部のみがプロットされます\n", + "rabi_01_data = np.real(baseline_remove(rabi_01_data))\n", + "(rabi_01_fit_params, \n", + " rabi_01_y_fit) = fit_function(drive_amps,\n", + " rabi_01_data, \n", + " lambda x, A, B, drive_01_period, phi: (A*np.cos(2*np.pi*x/drive_01_period - phi) + B),\n", + " [4, -4, 0.5, 0])\n", + "\n", + "plt.scatter(drive_amps, rabi_01_data, color='black')\n", + "plt.plot(drive_amps, rabi_01_y_fit, color='red')\n", + "\n", + "drive_01_period = rabi_01_fit_params[2] \n", + "# piの振幅計算でphiを計算\n", + "pi_amp_01 = (drive_01_period/2/np.pi) *(np.pi+rabi_01_fit_params[3])\n", + "\n", + "plt.axvline(pi_amp_01, color='red', linestyle='--')\n", + "plt.axvline(pi_amp_01+drive_01_period/2, color='red', linestyle='--')\n", + "plt.annotate(\"\", xy=(pi_amp_01+drive_01_period/2, 0), xytext=(pi_amp_01,0), arrowprops=dict(arrowstyle=\"<->\", color='red'))\n", + "plt.annotate(\"$\\pi$\", xy=(pi_amp_01-0.03, 0.1), color='red')\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\", fontsize=15)\n", + "plt.ylabel(\"Measured signal [a.u.]\", fontsize=15)\n", + "plt.title('0->1 Rabi Experiment', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pi Amplitude (0->1) = 0.22320005035637547\n" + ] + } + ], + "source": [ + "print(f\"Pi Amplitude (0->1) = {pi_amp_01}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この結果を使って、$0\\rightarrow1$ $\\pi$パルスを定義します。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "pi_pulse_01 = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=pi_amp_01, \n", + " sigma=drive_sigma,\n", + " name='pi_pulse_01')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1C. 0,1 の識別器を構築する " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、キャリブレーションされた周波数と$\\pi$パルスを得たので、$|0\\rangle$と$1\\rangle$の状態の識別器を構築できます。識別器は、IQ平面において`meas_level=1`のデータを取って、それを$|0\\rangle$または$1\\rangle$を判別することで機能します。\n", + "\n", + "$|0\\rangle$と$|1\\rangle$の状態は、IQ平面上で重心として知られているコヒーレントな円形の\"ブロブ\"を形成します。重心の中心は、各状態の正確なノイズのないIQポイントを定義します。周囲の雲は、様々なノイズ源から生成されたデータの分散を示します。\n", + "\n", + "$|0\\rangle$と$|1\\rangle$間を識別(判別)するために、機械学習のテクニック、線形判別分析を適用します。この方法は量子ビットの状態を判別する一般的なテクニックです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最初のステップは、重心データを得ることです。そのために、2つのスケジュールを定義します(システムが$|0\\rangle$の状態から始まることを思い出しましょう。):\n", + "\n", + "1. $|0\\rangle$の状態を直接測定します($|0\\rangle$の重心を得ます)。\n", + "2. $\\pi$パルスを適用して、測定します($|1\\rangle$の重心を得ます)。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 2つのスケジュールを作る\n", + "\n", + "# 基底状態のスケジュール\n", + "zero_schedule = pulse.Schedule(name=\"zero schedule\")\n", + "zero_schedule |= measure\n", + "\n", + "# 励起状態のスケジュール\n", + "one_schedule = pulse.Schedule(name=\"one schedule\")\n", + "one_schedule |= pulse.Play(pi_pulse_01, drive_chan) \n", + "one_schedule |= measure << one_schedule.duration" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# スケジュールをプログラムにアセンブルする\n", + "IQ_01_program = assemble([zero_schedule, one_schedule],\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='single',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=[{drive_chan: cal_qubit_freq}] * 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "IQ_01_job = backend.run(IQ_01_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f968a606167270013044513\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(IQ_01_job.job_id())\n", + "job_monitor(IQ_01_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# (単一の)ジョブデータを取得します;0と1に分割します\n", + "IQ_01_data = get_job_data(IQ_01_job, average=False)\n", + "zero_data = IQ_01_data[0]\n", + "one_data = IQ_01_data[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def IQ_01_plot(x_min, x_max, y_min, y_max):\n", + " \"\"\"Helper function for plotting IQ plane for |0>, |1>. Limits of plot given\n", + " as arguments.\"\"\"\n", + " # 0のデータは青でプロット\n", + " plt.scatter(np.real(zero_data), np.imag(zero_data), \n", + " s=5, cmap='viridis', c='blue', alpha=0.5, label=r'$|0\\rangle$')\n", + " # 1のデータは赤でプロット\n", + " plt.scatter(np.real(one_data), np.imag(one_data), \n", + " s=5, cmap='viridis', c='red', alpha=0.5, label=r'$|1\\rangle$')\n", + "\n", + " # 0状態と1状態の平均に大きなドットをプロットします。\n", + " mean_zero = np.mean(zero_data) # 実部と虚部両方の平均を取ります。\n", + " mean_one = np.mean(one_data)\n", + " plt.scatter(np.real(mean_zero), np.imag(mean_zero), \n", + " s=200, cmap='viridis', c='black',alpha=1.0)\n", + " plt.scatter(np.real(mean_one), np.imag(mean_one), \n", + " s=200, cmap='viridis', c='black',alpha=1.0)\n", + " \n", + " plt.xlim(x_min, x_max)\n", + " plt.ylim(y_min,y_max)\n", + " plt.legend()\n", + " plt.ylabel('I [a.u.]', fontsize=15)\n", + " plt.xlabel('Q [a.u.]', fontsize=15)\n", + " plt.title(\"0-1 discrimination\", fontsize=15)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のように、IQプロットを表示します。青の重心は$|0\\rangle$状態で、赤の重心は$|1\\rangle$状態です。(注:プロットが見えないときは、Notebookを再実行してください。)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAEdCAYAAADNU1r0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACHxElEQVR4nO2deXhU5dn/v/dkz0zYkwBCEnZQ3AgCmWhAxaW2Cra2LomCUDOIgLYu9X3btz+7vH0r2lZlkURRXBC1topdtIIKwUyIEFBZlC2QsCbsZGbIOs/vj++czGSYJJOQlTyf65prMmfOec5zTpL7Pvf6iFIKGo1Go9E0B1N7T0Cj0Wg0nRetRDQajUbTbLQS0Wg0Gk2z0UpEo9FoNM1GKxGNRqPRNButRDQajUbTbLQS0bQ4InKxiHwqIi4ROSQivxWRkCCOGyoiWSLyjYjUiMia85zHMRF5yufzGhF573zGDPK8SSKiROQHLTDWJM9Yo1tibn5jx4nIUyKS1Fbn1Fx4hLb3BDQXFiLSE8BqANsBTAEwBMCfwAeWXzVy+CUAbgGwHkBYK0xvNoCqVhjXn8MAUgB81wJjbfKMtacFxvInDsD/A7AGwL42OqfmAkMrEU1LMwtAFIAfKqXOAFglIt0APCUi8z3b6uMfSqmVAOCxGPq05MSUUttbcrxAiEikUqocVITnjed+tchYHfmcms6LdmdpWprvAfiPn7J4G1QsExs6UCnlbu5JRSRNRL4WkXIRKRARa4B96rizRGSAiLwrIqUiclZE9ojI7wKM+7mIOETktGeMKz3fTfe4fcZ5tp8F8Hggd5aI7BORZ0XkSRE57BnrT0JuEZFtIlImIh94rDnjuHNcS57PD4vIH0TkqGf+i0QkwmeffiLyiogUeq5tp4j8XkTCPd8nAdji2f1zz5iqgXNGi8gLInLEc483iMiNge6viNwjIrtF5IyIfCQiA5r229R0JrQlomlpRgL4zHeDUqpYRFye7/7R0icUkf4APgLwJYA7APQHsBxAdCOHvg4qt0wApwAM9szRGHcSgFUAPgcwDYATQCqAiwBs9hlnBYDFAH7jGac+7vLM8X4AyQB+Dz7IpQH4H89cFgL4P9Cia4hHwfucAeAyzzFFAOZ7vu8D4ASAnwM4CWA4gKcAxAKwgS63dPA+PQS6sBriJQC3AfhvALsBPADgXyJyrVLqC5/9xoP3/1HP9TwPIBt0U2ouRJRS+qVfLfYCYw6PBNh+AMAfmjDOewDWBLnvfADHAUT7bEsHoAA85bNtDYD3fD47ANzawLh5ADYCkHq+n+45x8N+25M823/gs20fKHxDfLZ9CaAawCC/aynx+TzJM9Zon20KQI7fOT8AsL6BawkFcA+AcgDhnm2jPWNN8tu3zjkBjALgBjDNZx8TgK2g1el7f08D6Omz7RHPWFHt/bepX63z0u4sTZsjIiEiEurzkvMcchyAVUopl8+294M47isA/+dxSyX4zdEMPlW/pjzSsAH+FeQ81yilanw+7wawTym1129brOF2aoBP/D5vB1DrNvK4yR4Rke0eN1sVaHVEAEhA07gKgAD4q7FB0fX4VwBX++27QSl10m9eAK03zQWIViKaluYkgO4Btvf0fAcAn4JCzXg1GCsJgr4ASn03eBSKo5Hj7gQtjb8AKBKRr0Tkep/5Cuj2aYySIOd5yu9zZT3bBEBjSiTQcZE+nx8B8CyoTKeAivYhz3eRaBr9ADj8lDTA6472jcXUM6/mnFPTSdAxEU1L8x184goAICIDwfiEkfJqAxDjs8uO8zznETBd1fec0QAsDR2klDoIYLqImEAh+xSADz1WyUnQhdMviPN3xPUUfgy67n5pbBCRi5s51mEAFhGJ9lMk8QBcSqmK85inppOjLRFNS/MRgJtExFdJ3AngLIC1AKCU2qGU2ujzKjvPc24AcINHcRjcHuzBSim3Umo9GBiPBpColHICyAdwXwu429qDKAD+wj3d73OwVsIGUFHeYWzw3JM7AHxR30GaroG2RDQtzRIA8wD8XUSeBjOengLwZ9VwjYhhPRhZPBcB6CYihuD6dwB3isFzoKvmnyLyZzA76L9AxVXfuboD+A+YobUTjBU8Clo133p2exIsnPxIRLLB7KwUABuVUv9s6Fo6AKsAzBORfLBoMB3AUL99isF7NE1ETgOoUkpt9B9IKfWtiKwAsNDzcLAHzM4aCeDBVrwGTSdAKxFNi6KUOumJKywE03lPgTGHp4I4PA4+wVsPxudBqFtV7XvOgyJyC4AXAPwNVAIZAFY2cK5ysE7iYQADAbjAArsblVJnPePmiMgNAH4H4E3wyX0zmAnV0fktmM77e8/nv4PKvTbFWilVLiIPgFXra8EuAfVZXQ8AeBrArwH0AO/dD1Td9F5NF0QaTzzRaDQajSYwOiai0Wg0mmbTLkrE046hVES2+mzrJSKrRGSX571nQ2NoNBqNpv1pL0tkGYCb/bY9CeBTpdQwsI7gybaelEaj0WiaRrvFRDwN4P6plBrt+bwDbL9wWET6gdW9I9plchqNRqMJio6UnRWvlDKqg4+AhUwBEZFMsGkezGZz8siRI+vbtWVxuwFT48abu8oNU5iJ+xcVARERQEUFkJjoPd7tBpQCTpwAHA7AbAbi4uoftKYGOHYMOOkp+u7RAzh6FAgLA6qqgJEj+bMxdlERUF0NlJdzXJMJOH6c3/fsCcR7bu/evTy/xQIMGsRtpaVASQnnHRYGDBgAHDjgHS8+3jvXo0c5rlLcX4RjxcZ6x4mMBEJDef0A53L0qPe8sbEtct81Gk3wFBQUHFNKNfLP1zgdSYnUopSqbUtdz/fZYGdQjB07Vm3ceE5qe0tPCMjKAux2wGoFbDYKy8b2u+ce4K236h4HePcZMwYoKKAQ3rEDyMgAHn647tjGmDk5QGEhcN99FPyLFwMPPMDjJ0wA3nzTK2iVAp57DnjhBSqX2Fjg6aeBn/8cOHUK2LkTSE8H7ryT2xISgMOHgRdf5PEPPghs3kxFdN11wIoVwMKFwMaNwNixwLx5PJfDAWRmAlu2cM6jRgF/+AOVkcvFcUpKgN27eUxEBK87ORmYOxc4e5bKs7FaPqUApzO4fTUaTVCISFFLjNORHu9KPG4seN5LG9m/7XA6KfwSE/nudNb9XikKVIeD3yckAMuWUWkoBSxaRGHrdHr3SUykArj0UiqQESP42Rjbf8zBg7l9507gmmso2CMjgVmzgNdfp9B2u7m/UvyuTx9aLlYrrYcJE3iuwYN5/JQpQH4+sHYtkJpKIW02U8ifPQukpHCchQuBTZuAq67yKhCA+6al8T0qitt/8xsgO5ufa2qAPXuoeO6/n9dx/DiwYAHHDFaBZGUBs2fzXaekazQdio5kiXwIrtnwR897Q4ViTSeYp9n69jGbKYgNi8JsrnuMr/WRkkKroaaGT+Q5ObRIXniBSsLYZ906CuAHHgDCw/mdIcjdbgraggLua4w5aBDPd+YMsHUrkJQEfPMN8Oc/0xqoqQFCQii0N24EbrqJQjw9ndczfTrPu3Ejx4mJoTupXz/O0bjmefP4c0EBraX8fGDIEK+SE/Heo8xMKiOlgCef9CraqVM5lx/9CCgu5r7JybwuX4VpabC91bkKPCOj8WM0Gk2b0S5KxNNCYRKAPiJyAKyY/SOAd0VkJri4zk9a7ITBuKMa2keEnzMyvMLTUDhK1RVyf/wjn+L37OHTflwc8NOfUmiOHAnk5lLIK8WXyUQXlqG8ACocQ9ja7cDo0Yx77N8P9OoFLFkCXHEFrRK3m/MePJhuox//mOdKTqb1MHEixzVcYgcOcB9D0R0/TlfWW295r9lkoiJxOIA33qD7bO9eutKWLuW4VisVSHZ2XQWal8ef4+L4/tprvKa33qILy1BO/so40O/M6QSio+tX4BqNpt3p9BXrQcVEHA66QxIT6edfvPjcp9mG9vG3UHwVzoQJQGUlBWNNDb/buxe4+mrg3XeBH/wA+PhjYOhQKpYHHgC+/ppP9sXF587F4WAs4fhx4LvvgEsuodUxciTjCydOcB4lJcBFF9GK6dGDMQyzGejbl66jBx5g8Do2lu9PPEE32+rVtGjS0mhBPProuXMxrtftpmIZPJhzv/JKKo0RI+gqmz+f4xr3bNEi73VYLLwW43hjfLPZ63IzgvBA/ffXUFYul46JaNqUqqoqHDhwAOXl5e09lfMiMjISAwYMQJiReONBRAqUUmPPd/yO5M5qPRpyRzW2TyALxXCxDBwIvPoqhfCYMXQtJSVRiXz+Ofd7910K7dhY4Prr6UIynuynTeOTtpGdZZxvwgTg00+Biy/mmBYLsGEDx77iCuCrrxikdru9GVBmM91We/fSNfXSS7R6KiqYGeVwcP/77gNuvJFzMploqeTm0nKJigLKyhikt9uZjVVYSAvn7rupqIYPB779ltaTYW343jNfyyQzk8rKbqeVYlhfb77ptVCmTaNiCHR/tQtL044cOHAAMTExSEpKQuds5MyVa48fP44DBw5gkJF92cJ0DSUSyB0V7D6BBJrZTKH4yivAvn1UEFu20E21aRNw112MPVRW0joZMgS4/HIK4b17gcmTKZzT04HsbCi7HRVjUhARIZDcLxj83rPHmxbscFBhXXstcOgQg+nvvUchHxcHTJrE4PjOnRTEDgfwxRfcd/16KhGXi1bN2bPAM89wPgsX0tVWUcE4yb33ei2pa64B/vpXKo1du3g/rrwSePttpggbgf/MTO89CXSvbDZe5/LlwEMPUVnl5XE+SgGffcY04iFD6t5f7cLStDPl5eWdWoEAgIigd+/eOHr0aKudo2soEaCu66Qp+wQSaCIUdjk5dOt89x0FuydtVUVFowIRiDh4kC1RJ0ygcjHiFnv28And6YTKzcWm40kofz4HsX0Ew1LjIR98wKwow6304IN0gf3tbxTCFgvnEBpKN9nhw16XU0EB8M47VGA7d3K+x4/TAvruO24zmYAPPwQ++QT43vdoDfXrR6Xx4x9TwX3+Oc+/aZNXeQwYQKunqgr4n/+hReGbllzfvTIsDSMjbfx4Kl+AKcS+lohxTGNKX6NpAzqzAjFo7WvoGjGR8yVQ1pbh5vriCz7JR0YCqalQmTZkZQvsuQppYxyYORMQi8fNs2wZj7vzTrqO8vJQWV6N/I0hODHCihMnBBmDvkDYnh20BmJiGOCeOZNP8SUltAp69qSSMJloXfz+98CvfkVr6MABpvOWl1OxbN7stYjMZqB3byobpRhPiY/n2H//O11jcXG0pHJzqaCWL+c1G5lWr77K8aqqGIuJigIeecSb0dXQvfJ1cxmpzIFiIhpNB+Dbb7/FqFGj2nsaLUKga9ExkbYkkIVipLfecAPw1FOMV9jtcE7NgD3XjGH9ncjZZMFdDwgsohjEXrOGbpu8vForImxfEfbY5uOzb2Jx3cRShD54D2COphIxLAQjPfb55xlgNyrPw8KAceN47rQ0WhAhIaxsHzAAqldv1CQORsh1EyE7dzIms3Ej4ymFhVRCViutqK++8rrZAGaCbdhAt9OVVzKt+OBBCvqyMp6nspLf+abrNnSvpk71Vs/HxNTdR8c8NJpOiVYi9dFYXYlStC5yc/mUX1QEWK0wx0ZjZk0WTO/ZkTbeCnNUJpDlCTabTMyOAmglFBVBUq2Y9tNY3HPPvQh7KR/y9TjGI15/nfvddRcwZw6D4r17U4EMGcLPbjcF+IIFzMiaMoVWwddfQ+3ahaNHFXD6DLp/9xLC+/WB3HILlU5ICF1F995bq6TUxImoXpuL0MuvgKxf742JjBlDxTJnDnDrrQzKJycDR47wnLt3B5eu6x9w19lWGs0FgVYigQimrsQIIicl0b8/fz4QHw9xOpEWakfVHYkIO2yHHJ3qjQfs3s0A+ciRVDrGMSUlCC/Ip0DPy+PYTifTeZ97jhbMV18Bw4bROlGK6borVtDl9NFHdDM98ADdWytXQoWFoceRHTjVPQHVVaEIjYxCyJo1tIASEoDt24Hu3QGTCcqtsNR1DyJ2nsUNeW8jXkoh+fm85jNnGOuZN4/XPWECiw9TUoBf/vLc1iWBlK/TSWXbvz/fy8u9tSb1tZDRaDQAgEmTJmHZsmVISkrCxx9/jIcffhg1NTX46U9/iieffBInT57EjBkz8P7777fL/DpS25PWx8goaiwO1FibE8AbRC4qYqV5XFxtcZxYrQg/XATxLborKmJA+frrWTORmsp4hAj3GT+e2VSxsYx9nDnDWMvQoYy7nDjBYPfmzTz/0qXcf+1afrdlC+Mi33wDmM2QkBBUR1lQJt1RHdMDJouZWVyAN7PLo5AqFmRh1AIbJh16C5WnzsIdEYma6hqoO+6gxTRzJufpcrH4MDe3bq8u3/u7ZAmV2ZIl3vscHU1r7b33vJlgge5tsL8fjaYLUlNTg4ceeggfffQRtm/fjhUrVmD79u3o2bMnTpw4geOGm7uN6TqWSGPWhe8TdDAppr4ZRNHR57prfDOLMjP59G1Uai9a5I0fABTGb77JOMhTT1HAGoWG33zjrSVxu/nk73BwvLAwxiUMTp+mQhk2DBIXh6ibv4f42+6GeekLkG+3U4C73XRLHTtGpQAgosCOyJFDUP5lIWK6hcNxtAwVFaFwv7cO8b+YDjEq3utrJJmSwutVivUfLhevxajvKC2lC+2OO6j4jGr6xupxtIWi6WS0Zq/QL7/8EkOHDsVgTx+9u+66CytXrsTFF1+M73//+/jHP/6B6dOnt+xJg6DrWCINWRf+Tf4ACrHFixsWZkYQ2emkRZCQwLFdrrpKwuWi0ExKorvKmI9vw0STiU/9qanAqlXAl19SIO/fz8aHFRXc79gxKo9evbwKxMiKCg+nRTJwIK0R5YZl9n2QZ+az6n3FCrqi3niD542M5H5WK8b0KcLAJ+6CedVKbIuZgO9G/xiFGAznDVMD3ztjW0IC52mzsW5GKVodvvf1iSe47dAhXt/cuXTlZWZ6515S0rj1p9F0YFq7V+jBgwcxcODA2s8DBgzAwYMHAQBTpkzBBx980LInDJKuo0R83U/+1kUgIWkoiGC6zC5fzuDzf/7DmEF0NDOYysr4ve+5U1K4/+zZfFJ/8MG6f3G33cb02VOn+ATvcvEV6jEaRVjroRQVicXCgHtoKFNuBw7kd4MHs/37v//Nz7t387qM7rqrV7OyvaYGuO02SHIyIrdthuXTD9EnFhix9W8YrHbD/P8eozKdMME7f6W8Pa2MdOEBA+imSkjgeQYOpJLMyeG20FAWOWZmQr30Eqp+/gRUdra399fjj9PFFuj3o9F0AoLxgrcWI0aMwI4dO9ruhD50HSViuJ8CWRf1KZj6fPS+242gcffutBIqKigUb7iBrxdf9FZ2L15MxWG3M4ie7wmm5+RQ4WRlcX2PEye8CszpZEZWv37ePllRUXx3OCic3W4G3cPD2U/rwAH263I6aW2cPctjSktZmFhWxiLJDRtYXJiSwgB+376QdTkYNkSh57TbEC9HIRs2AL/9LZXOH/7A65s9m00ijdhHQoI33gFwLhs38vs9e3ispx29crqwc5kd/9qSiJ3L7FBHSmjFJSbS5TV/vnZlaTolDT2ntgQXXXQR9u/fX/v5wIEDuOiiiwAARUVFrdbWpDG6TkwEqL9qPVCFtNvtbd+emuoVbEbwOCeHtRlGvCMvj4IwP5/HGo8hr77KwHhamjeWYMRbxo+nABVhoHzzZqbv7tzJTCarlZXqCQkMql96KVufhISwZcnEiVQmQ4eyVcrOnczkSkgALrvM23Bx8GC6i3r2pHvM7aaiufhi7m8owxUrgKuvhqSlITwvj2Nv2UJF9fHHwPe/z1qR2FgqToNNmziHoiIqkoMHWT+yaRMLFPfvr21H74QZdlhxhdhhVylIfPcDRPr2EjOSDTSaTkZrN1q46qqrsGvXLuzduxcXXXQR3n77bbz11lsAgJUrV2LKlCkte8Ig6VpKpCF8FYxSrL1YsIC9o9asoRCMieHTvxE83r2b7ieTie6ePXv4HhHBDKyaGm+sw7eRoPGX5nZTCSUkUFmNHcuW6UVFfFksPP699zivm25ioH3hQm7fsIHK47PPaHEcP04FY6yAOGsWFd7mzVQwO3Z44y9RUWzCuGsXlSDAGMuePcCf/gTcfjvws59xLJeLx1RU0NW2axetjfx8HjdiBJsyut28R2YzLZ3YWFo+Rjt6hwNmsxkV02xYnJOB8eMUIjY95C1yzMjQCkTTqQmmu1JzCQ0NxcKFC3HTTTehpqYGM2bMwCWXXAIA+Mc//oE33nijdU7c2Lza5aztRbCpE04nhfrw4XTLJCUxjmFYEgAFdkUF+0YVF1OAzpnjbf9hKIlXX6WwHT/eu6668ZdmrB3+t7/x++nTaTns2sWn/9xcNkq84w7v8rgTJ/LYGTOAW26hADaWqjXWAunTh+d58EHvfIcM4bbt26kI3G6vJVRdXbt+uiopQfXDjyL02jTIhAk85+HDVE5nz3L8oUP58/jxVJh5eVRYf/sbt/ftC/z5z1Bx8XAedcEcGw3xZK+J1QqbzQbnvRaYoxUk22OVpaXpqnWNphFuueUW3HLLLXW2nTx5EhUVFejbt2+7zKnrKJGmpJAazs21a6lAbryxriVx111sQXLJJVQ2Q4fySd+3uM5oi/7WW6zuttupiO6/nwLX4WCMwmTypr5mZXm3uVwc57PPgG3bGHi+917vuLm5FPwAxzJqTXbupIL73/+lVVBZyXlu2sTq8/BwurFOneJ4f/0rx4+KgrpoAEoc0Vj/7RBM2Pga4scMgPzwh3SpDRxIt9RllwHvv8+xIyIAmw0q4144VTTM3bpD1tHNp+L7enqImXHd6BJM25oL8bSGkYwMWCwWAH7tULQVotE0mZ49eyInJ6fdzt91lIjDwad5f9dSIAznZno66zeM1foMC8ao3t6wgVlKX3xBgfr229y+aROtmK1bWbtx8qQ34+qVV+g+WrCAAW4jGFZRwSD8qFHc99AhHte9O5XF1KkU3GVlVG7x8cAHH9AtBXCdkawsBrNdLrrSzp7lfDduBLp1Y2V9z550w40aRQWyfz+3VVXBfaYMzrPRGBL9HUwlR+Dedhoh+4sZ6zGspdmzGScZPBhYtw4qPQNZb8VQN6fYYMvKgFjMcDrZhPJHx7PQKysXVVeUI9xYrMsTcVRuhYoF2YgooIWiA+oazblMnz4dPXr0aO9p1EvXyM4yFkIqLPRmCjWWOiFCoT1r1rkZXcbysePGUXmYzRTEbjfX79i8mem1djsD2BUVtAgqKhjgzsmhQjGZuOrgY49xbpWVrA85epRWSHU1lZAIFdTp04zH2O2s9bBYOH6/fuyX5XCiEmFQx48zRpKYSCspIYEZX9XVjFPcdx/dW7m5dJuVlwNOJ0wX9UP/8kJUnHLBgjMwHTnM+VZXM0AeEsI5p6XxPhYWouKVN2HPVUxrzBM4hVllZjOQluxEr+/sGBh1HGFfbWJiwD338FfiVnjtmRJseD4Xm44lQunaEI0mIB1diXQNS8TppDUxeTIDx55MoaAw1snwj6W4XHRlDRvGJ/zERLYVOXaMtRlxcXRNDRjA/YuLqcxOnKAgNlJ0r7qKqxgWFbGIMCrKmyoMUEkNHsz02ldfpSI5c4aWxqlTVAYHD0KZzfhi7tswbXJjQJ8rkFC+G3L33VQmzz3H92PH+CoqoosuLIwKols3ICkJsmsXIqUSV4woR8jGCog7hHPcv59xkWnTeA+mTKE1NHgwIvJzkHZVOvI3mGBNM8NsltrbNnOeGRWVyYjIegEyYjitmQ0bgOuuQ0WlCUOy7IiJrkHZd/tQ8XAqInVtiEbT6egaSsS3jYkRmA6W+mIpvmNOn+5dvW/HDiqWU6foMhJhTMRkouDv3p3C+4svaE0UFDCVOCKC7qf+/fleUcFjqqtpnVRWUoEAVAguFxXU0KGA2w13RTVGfPICqmJ6w3KkCDVjRyP0m2/oIlu7FvjXv2gphYbSGqmupmVx//3MPktMBEwmSFwcQr79Fu6evWAyR0OOH2da8cGDtSsx4osv6HJbvRoigpkqE9OqgVBMhGAWAI8iMQkiH5sLhCtaaN99R6unqAgRQ4cieuRQlH23D0XTn8LVcwY13ZXVmj0mNBpNUHQ4d5aI/ExEtonIVhFZISKRLTBocG1MAlFfGaox5qJF3tTUvDxaDRdfzOr1Dz5gENpqpQvIbKaSmDSJT//btlHZHDniTY89fdqbUhsayvcrr+T3RhaVsaKhoWwOHoTpyEH0rCjBcdULUW4XQvLW0V1lVMwbsZeoKCrRlBTO6cABKpMRI4CQEKjjx1EqcdjniseZo+VQSUmcX1oarzE3l9bUxo2cyzXXQFavRth3WyGvvUbLxReTiRlsf/kLrTNPirGMH48xvYswfmwN0nc9BXkpu2l9Ilq7x4RGowmKDqVEROQiAPMAjFVKjQYQAuCuFho8uDYm/jRWhmqsHb58OQWz0dX317+m4P35zxn07tWLXXY//JDKx2JhI8I9e6gQwsOBXr2gqmvgDg2Dioig4O/Th0H0bt2812CxUHl061abpSXl5QgdmoTRlQUIqy6HWCzM0jp6lBlVlZVcIyQpiRbRO+9w/n/6E2Mkn34KiKCmBtgUdTV6qBPIjfshqoeNYhX5PfdQUCcn09oaNYoWlbECo1K0Mnz7ZhlNI51OXsP99zMucv/9wLx5kGfmIzwipDZrCyUlwSuD9uwxodFoaulQy+N6lMh6AJcDOAPgAwAvKKU+qe+YZi2P6+8GCWYBqkDfOxx8Ek5MpPJYtIjfl5UxCyk+numxffow9mG1MuiemsrU1rIyFgNu2QKMGQN1+jTK//gc3FVuhEoVwvvHQvr1Y0oxQPeXUSyYmspkgbNn+V3v3ixW3LTJuw76ZZcxBTcvDzVbtiHk5HGI2814jFK0SoYOZYLAl19CDRoE9/IVcDgUjiEW1UNGYvj9qRAoLu3rdjMuUl3N86SkULksXcolep1OKon164GXX/Yu2BUaGngxKl9XoeFe8+0O0NjvUHf91bQiennc4OhQlohS6iCAZwEUAzgM4HQgBSIimSKyUUQ2Hj16tKknqesGMRoA+rtFfPtj1WfF1GelxMayJuPAAR4zYADbljz/PAPba9bQvXP99UyzvfJKCvFnnkFYpQMRyoXSqCS4IRTU77zDgHRiojc4/+GHVBQREVQqISGch8PhrUi/6y6ovPX4qqQ/ju8+hUMhA6CcTgbmIyN5zJAhwKZNUOMnYNcne7G3rDcKr/wxBk4egeErn4FkpDObbP9+pga/9hoLHQ3X4IoV/N7p5HXv2MGCRrudrjujP1ig7saGS3D+fM7FsEiCsSrOx0Xp//eg1zDRaJpNh1IiItITwBQAgwD0B2AWkQz//ZRS2UqpsUqpsbGxscGfIFDL8dJSPjH368d3pzN4f7uvIMvMZNB59my6h0wmVozfeitrPrp1owto40YWBD7/POtItm2jYM7NhVRXwwSgRkLRLcwFU2wfKovSUiqfjz6ikDbalIwb5+2d1a0bXVwidI117w4UFKBi9Bg4dh1CuFSh71471NmztFpWrqRV4Vkgyzn9IRTUXIHwcEHM5jVwT7BC+sZT6I8fD1RVQUVFobpG8XaYzd57d/HF3O/UKa7aOGoUFeO+fZzj4cMNr8sSH08LpKmd65rrojTQcRWN5rzpUEoEwGQAe5VSR5VSVQD+DsDaIiMbAsO/5XhsrHfVvZoaFg825m8PZKW4XNy3b1+uB7JlCwX1kiXc/sQTrCVJSgKuu47HV1czVnHiBHDVVRAAIgph3c3o9sRsyMUXM522Vy9mcbndnGNFBbft3UthnZnJOZjNHL+6mvGQDRsQEepG0bRfo6paUB1uhlRXc87durEGZtEi4J57YF62ELfszwLOuhCLo4ioKPNe37x5UP/9S5SGXYS9xaHIsb0JtcSzTkh1NWtcfvtbuupWrfJW6u/ZwzjMwoXM7KqPplgVLWk56LiKphMwadIk7Nu3DwAwY8YMxMXFYfTo0bXfnzx5Erfffns7za7jKZFiABNEJFpEBMD1AL5tkZF910T3bTl+9ix99nfcwXfDZ5+SQvdNSkrdJ2NDGWVm1n16NVxb+/dTEYWEcLvJRCtn1iwK1xkzgHXrGIwOD+dx5eWMZ9x6KyQtDabu3SAR4VQY//gH30XoogoN5XjV1XRFffMNf/7JTygMq6upUDxuL3n+OaRbPkSP68cg3BIB6d+fy90aac6enmDy9tvoduUQDKgpQre4KEh2Fu/R6dOA0wnnT+7HXpWIw4NTEfnFJ6j+dA2LGAsLvTUt//oXr/OPf+S9O3SIrq5XX2XyQX3uQiA4q6KlLYfW7t2t0bQw06dPx8cff1xnm14e1welVL6IvAdgE4BqAJsBZLfI4L51Hb7rm0dHM35htHz3XUvEWE3QF4eDQWank0/aU6bQ+jCWwT171ttH6777vMLaqIDPyKBgvf56uqdOnKA7aPt2uo2ysvh5wwae+7bbmCqcnMw6C6VYs2GcPzWVdRtG8P/AAc7BqDsxmyF/+F+EWyy0CpYt4zxKSnjtdjuV0d69kF69INdeW7tOO555hpZUfDzMgwZh1Ol8RO7/EBIWhtB9owB3JcdxOOimCwlhrKW0lOevqqKlVFDgfdo3+mQ3Jyjubzk01LommBqS1u7drel6tHLtUlpaWq1V4oteHtcHpdT/U0qNVEqNVkrdq5SqaJGBA7lMlKJ1sGkTLQFjudayMgrQzz/nu7FCob8bpbSUKbwvvOBNZX3nHbqojE6+/n9IFgsLHg8cYJ+rn/2M2VtXX82xbDbGLCZO5Ov4cVpDcXF8Ao+NpbUUEcHxNm7kPDdsANatQ3VYGE5HRKCmRw+6rGJiGEg/e9Yb87n3Xm8W1BVX8En8vvso8EtLeS2HD9NSOnUKOHMGYrejW3g5wqQaYaEKYrRpAThHQ3EcOMBamV692M7lscfOfdpvihvJ974Hazk0xWI537iKRmPQjjG29lwet0NZIq2Of7N/X2FWUODNHnI6KbjCwvjucNDHn5PDp/l776Xv//BhunteeIF/MDNmeM9juLPKyvhuCCr/p19jHtHR/MPbtIkWycyZFJb33ENF4HLRnfXVVwzIl5dze1wcKo4cwV8rK/H02bPY5nIhDEDV6dO4JCoKvzCb8eOYGERUVTEmY7SA6d+f11BdTYVSXs7zV1ZC9eqFmh69EYIayOnTnOfFF0PWrIGEh3uVZHU1FWBpKYP7LhfbqURFMaV53jy684xmlga+VmEwysDXYgnGcmiKxaLRtBTt+HfXnsvjdi0l4k99wiw+nn221q/nIlNmc10X1l130W3Tvz/rQEaOpBKaOZMZT4ayWb6cmVcAt8+a5VUkvn9cZjOrwpcto8VQWMg4QmEhM53y8ihQjxxhdlZEBAV1fDy+rKjA98rKUHnmDIxacY99gK1nz+LBbdvwsMmEjydMwFU//jFjLEpxnJgYVqp/+SXjLsOGQW3ahJLTEXCWKfSvKEZkuBvSsyer7K+5hq6zPXt4j3btAubO5Xj5+bxXc+fWutFqhbxSrCXxXSXyfJRBY/+YwSopjaYlace/O708bntRn0/cZKICKC2l+6i01Jup5HZTYJ45w9X8rriCQi01le+zZtFSUYpjO508LieH2/0FoLEMb24u4wtmMwPSR45QyG/fDvzf/1H4Hz5M11FoKHDyJDacPYvrnE44GzCbHZ41Rybl5uLz0FCM27OHiiMign/o27YxDXf9emD3blRdMwnzq/4Xv/vUipByB9TZasi+fcDrr7OqfeZMFjna7cDNN1NpZGfzGo2aFd9r9F0lcsQIXmdrKwMd69C0B+34d6eXx21P6lvP0mTi07bhThk8mAIxLY3unAULaCUYAWjftcE9S8HimmtoTQA8LiqKyiE2lk/r0dFUIP/7v3SdRUSweeOhQwzqnzgBjB5NQV9czM+eWEhFdTVudjgQbFKqq6YGN3/2OQ7GxiEyNxfSuzfnkpBABbJ3L3DbbQg7fhyXjbKgZhUQiSq2UoyM5P3wbY9vLJBluMeGDuW7r6I06nI2bqQC2bGDSqctlEFrrlOq0dRHK//d3X333VizZg2OHTuGAQMG4De/+Q1mzpypl8dtVxrKpvB1pxQVMeU1Pt4bMDPcM74KxNePn5ICfPKJNwvs3nspsHv1otCdMIGfw8K8HXz/8AfghhtocYSHM85SU8P4hbHOeUQE/gqv2ypYKgG8fEbwU4QhMjoaUlZGAf/jH9O6WrkSkpKCabMtqHlvMEw7KyBGpte0aXUzzYyf67MWjPtgtD7p3p0KxFg+OFi0MtBoalmxYsU529p7edwOl53VpjSWTeGfDWQoC6Mz7YsvMqPLqHIH6iqevDzuGxPDRoj5+cyy2rqVsZS332YQfeBAKpUhQ6hADh3yphi/8gp/HjCAY/XqBbhceBqojYEEixMKWRUlKDN1g9vh4pz69KG1FBvLWpmaGojLidAf/xAA4B6YCGUKAW6/PbDwr69Q0Pc+7NnjbdGiXUsaTYvS3svjdm0l0liqaUOV1MaaIkarE0MJ+Sue6GhmaEVFMfZw5Aj3MbK3Zs7kKoEffsgndt85GCsJvv02hTAAdOuGGqWwrZmXvB0KoZGA6bJLuQ6Ksc7J4MGM2+TnA7ffDmWJQeGQG3D0GLArNgUqLt47iG+HXqP1u3+arHEfCgu5feRIKlVdFa7RNAm9smFHJpjAreFOMQSnr9vLXwkZKyZmZtKPHx3NYr2lSxkMnzaNrdc/+IBZTmlptFKMc1x3HYW4y0X3T1QUK9FXrqRCiY0FTCY4AISh6e4sgL9wU2IvyNFSoLTEuxRveDiVwqlTQGUlal55DSWnhmDPmOn4a/w8/MUlsFg892D58sY77za0Tr1Gowma9iggbApdW4kEG7j19e8nJ3vTWKOjvUooJYXKYtMmb01DWRnXWj90iOPn5LCo78EH+e5/ThHvwk1xcYyhzJ1LZbJ+PWs5cnJgEUFVMwuZqgHEDBvG9i979nBuhYW0SHr35jWVlyMkRKG/+TR65i/A5X3/AfMbM7hgYU4Og/BpaVzu9kc/4sqJ6elUiP731wjEZ5zTR1Oj0VwAdG0lAgQXuHU6qUCOH2c2ld3OjCVjjYz0dK6fsXAhs5CMmgank6/ISCqAyy/3urYCnWPdOm+rlePHObeXXmIAv7ycCqq6GiEmEy5xu7G1GZd7SVQUQvLzgc8+47xKSniePn1o6bjdXHlw0CAkbtgI1Tsc3aKdkM8/ozU1ZAjU3r2o3rsfoePGQdau5cBLl3qD5oFcXIb1otf+0HQilFKQTv632tprRnXtmEiwmM3eFf2GDqVQ910jQ4QC3khjTU7mMfHxDJT37g384AcMpqemMivrwQdp3ZSVUXArxZTgqCgqkuHDaX3k5LA3V04O4yI1NUBsLH4RHg5LE/+4LSYTnjRWSezVi/UvAN1SYWFUfCNHsv7DZILYMmEKD4McO0oFkpYGVVyMnEHTMDskG0uvyoIa5GlxsmABFeyLL/Kab7jBGyfS3XI1nZDIyEgcP3681YVwa6KUwvHjxxEZef6rjNeHtkSCwdMOHSJMie3T59w1MlJTaa3MncuXUZluFC263VQS8fHMzkpNZYX6mjXe9dRTUpjK+8ADVEqxsd79Kisp7CMjgblz8ePQUDz8y196A+5BEB4aijtmz6YbKjycrqszZxjX6NWL8ZfISG+VfUoKs8cSE3m9GRlw3n4vlj5uRmKSIGezQsaY8YjM8hQS5ufTzWcoiZwcr6tQV5BrOhkDBgzAgQMH0OSF7zoYkZGRGDBgQKuNr5VIsF03TSYqEqPPle8yr0D9sRWTiZaE202BvH49n/ZLSvh9QgLXMpkyhUL29ttpjfzoR2wrf/vtDML37Mnvk5OB7dsRsWgRPj58GNc+/zycbnejlxkpofjDpJ8h/OePcq5Ll7IKfccOBvFPnwYefZRzHDSodsVDpKTw3VORb7YIrKkefZAqiHhgHhDhUa41NYyxOByM6aSlee9HZiYwdSq3NxR7qi/bS6NpY8LCwtqtlUhnokOtsd4cmrXGukFj63S3dFtnt9vbSsXlYtZSbi4F+YkTFOBvvME4yLJlnMJ901BRCURszIWUl9e6lXDjjcBTT2FDYSFuzs9HZWgoHJXn5mtZLBZUVobj/jv/DpdKw+LFgMVxhALd6aQ77Yor2F7+xhsZZB8/nv200tJ4T/wU5jm3xahMf/xxb13In//sbZEfzHroxj6e667Ta0yj0bQ4F+Qa621OQ7761mjrbFglRgsRmw149llaJsaiWGfPMlA/aBDU9ZOx87U8PLZuKpaOWQx13fWcx6uvUuB/+y2uOnwYhyZPxpKrrsLoiy+GiCAsLAwigtGjR+PFF5fg2WcPwYWJ9CQtz2LL+dJS73wmTODPK1Yw8+rLLzlf32aRPsL8nE2+S9wWF3stEKOFe6D77N9a3+n0rtXucnl/1mg0HZqupUT8BVdD61O0VjDYVzllZ9O9k5paN8biWXOkurAYx0urMXPnE4hY8Qqq13lauH/3HYX2yZPA9OmI6NkT6ffcgy3r16OqshJHjx5FVVUVtmzZgoyMdMyZE8F6yQwnxFiEKi6Owfu772aTx0mTOL+UFCqRhARet9EKvzElaijFRYv4+cYbvcF1IxXatwDTX0GbzV7lEx3t/Vmj0XRouo47qz6XSn0uq2BcMM3B4aDwNPpxLV7sbWTo1z5dHSnBzqmP41tXEkZF7cPwH10K2fJNXffX1VczNdhYw8Rq9XbJ9b8+oO41pad7q+6NHlchIXwPDeU+SnkLBYO5Bw4HEwO2beOxl17K8aOjaf3ExdHS8L0HixZ5+4sZyrqhmEgrrx6n0XQFWsqd1XWUSCDh3Vh9SGvEREpKWLEejGBWCiorC9Vr7QiVaojJxBUYH3qIbqM+fZgJ1q8fg/M/+hHdQIMH80k+M5MC3FcRAnWvyTeYbTZTwBuJA0rxXE29Z0uWeDO8pk8/dx6+n1NSOI9glXVrKXeNpouhYyJNJdilVX1pyaVT3W5aCFdfTUG/cGHjAlAEYrMh7C/zISEhzJoqKKAw/81vGMOYMIEKZdw4vgNUInY7n/xzc6lkjKVxfa/JEPgPPMBiSaOti7EmiMUS/D1zu9kXTCkGxFet4ssIzBuuwdxcziszk9eRkdE0t6GuOdFoOhRdR4k01EyxtVGKAev16ynQv/zSW6Tou49vU0PDQjRaoSQnA7t3872gwCtEjaVq09L4dD99OoX+mDGs+aiuppVSU0MLwxeHg9lQ69YB//M/7N21ZEndcwdzzwwFmZrKd6XY7sToC2Yo8H37OI8nnuBcjfhPU5R7cx4GNBpNq9Hh3Fki0gPAywBGA1AAZiil8urb/7xSfNsC375b333HdiYTJjC912Q6dx/feIThfsrKYkaW200lERLirRnZuJF9sAx3k7HQ1YoVtS1MMHEirQR/d1RZGRXHzp0sWhw0CLjsMqYYB3Jb1efeO3KECqRfPyYI5OYy68v/2JISKhB/91hT3YY6JqLRnDcXsjvreQAfK6VGArgcwLftPJ+G8c/48sdwvyQlMZV31aq6CsR3n/79WfVttFRxOCh4166l5VJRwcLD9HQK4LlzKbx9n8pdLq+lU1FBRbJ/vzcryneuFgsXvRo+nNaOxcKqeqXOvZ6GUp7j4hjkP3yY73Fx594HIw04kBXRVLdhS7oZNRrNedGhLBER6Q7gKwCDVZATa1dLpClFdMHsk5tbu3IhUlO9mVHV1SzgE2ERnhFn8M1m8g2KZ2d7LZf77/cuZWsEs41OxCYTz1FW5o2HrFgReK6NZZUp5c2+EqnfUtBWhEbTIWgpS6SjtT0ZBOAogFdF5HIABQAeVkrViZ6KSCaATABISEho80nW4h/kNVJrfQmm3bzRFqS8nO6p5GTgnnuAOXO8QvuDDzi2f0qu0XPLN8PpgQc4Vn6+N0huzPXYMbq7lOLqjADw1lv8bswYtjgJdD3+/a+MWg9fhdO3b+NKUy93q9FcUHQ0d1YogDEAXlRKXQnACeBJ/52UUtlKqbFKqbGxsbFtPUcvwQZ5g3G/uFwU4IMG8V2k7th9+zJQbWQ6+bq+cnLo8jLcYEePcoyhQ70ZTL6diEeMYHDeaFVvKMKCAiqS3bupmHyvxz/I7ptx5ZslpbOnNJouRUdTIgcAHFBK5Xs+vwcqlY5JUzO+jDTYQA0T/RWSxRJ4bGO/Q4e8cYi0NH733nt0fcXGesdKSfHGL4wOw717011mNnvH27OH78Y66PVZTIYy9J2vcQ7f5YGN8XT2lEZzQdOhYiIAICLrAPxUKbVDRJ4CYFZKPV7f/h0+O8vASIPNz6fw9w+uA8HHC4z9oqJodURHsyiwf382Unz2WcYmnM5zF4MCzi02XLKE1sy4ccDmzcEXFxpJBb7nyMykO+uzz5j5pZsoajQdkgs5O2sugOUi8g2AKwD8oX2n00KUlnrdT/n53gWhfAk268iwBF56iSmzb71Va52omhpUzfkZVFYW9/V3Lfmfw+lk8N5YbGv06Lo9rnyzufwz0QyLxfccJSWsVv/uO74b1fAajeaCpMMpEaXUV554x2VKqalKqZPtPacWwTcNdtw4CujzsQIDBPXV0/NRkrcXhz/dhpL5r0G51bmND/3Tkf0LATdtYlzkgQcYwDdSet3uwCm+ZjPdWf5xFG19aDRdgg6nRC5YTCa6sL74gjGMOXO8y+PW96TfEAFiKE6xwOEEwsIUHA7A6fKJ2Rj9qvyVgBHXmT+fVfXbtgFvv01LyVdJ+X/2DZgbFolh5UybBlxyCd+bmonVlHug0WjaHa1E2hKTiRlWeXlstb5smTeGUN+Tfn0ECOqb4y04OHk69povxcHJ02GOt3gFe33ZVMZYhrCvr01+XFzgQLphEQ0Z4h03I4MKq6nxkNZYw0Wj0bQqWom0JME8RRvCubCQnw3h29CTfn0YsRGnE3C7IS4n0t7MxGV52UhbboOYfAS4v1Lwr0qPjgYGDuRYgwadmx1mMnnXCxFhIN9/rZCUFAbZH3qI701FpwdrNJ0OrURaimCfog0LIiuL7p7i4nOf9INNjfU9Z0YG8OCDkJeyYYk311UgvuddtMjb4t2Yp1LAggUMrA8bxgJGo0GkbxA+UCDd5fIqm6Z25PVHN1fUaDodWom0FE15ihahW8uIRWRm1n3ST09v2jmNjK/+/QMv82tYR4YSyMurO0+nkwpk5EjWd4wdW78ADyToDWXT1I68ge5Le3Va1mg0zaKjtT3pvPi3BWlMgCoVeMEo/7qOQILUVzEY5xw/ngWIRhGhsZ9/C5L65pmaylYqRkFifQK8oTYuwbR4aQzdFkWj6VR0uGLDptKhig2b0lwwUENDoPHVFw3FsGwZP993n7fBostV99xlZRTqgwfTbebfet1YwdBQJLoxokbTZbiQiw07L01pUR7ILdRYTMBYk2PtWgp8l8u7vrrRaNFnjXa8+SYD+KtXn9t63WjkaMRwgFZrr66zdjWaCxftzmov6nP91OcO8nVNidCKMFY0DOQ6MyrRJ09mnCM9ve54wXQgbgH0kugazYWNtkTagvoexQNZLvVZM75CPzSUreFXraq/FsOwaoqLubKhv4JobiZUE80KnbWr0VzYaEuktWmpR3H/gHjfvg2P01iQu77vG4rrNONamppvoNFoOhc6sN7aBAqgN9dt1Fjg/nxXDWxMSTTzWvRihhpNx0MH1jsLLVlA11Dg3r/Y0bcnV334u6Ya8z0181r0kugazYWLtkTagrZ4FDeshIQEZmMNGsRYSEO1Jv5WBxDcevDarNBoOj3aEulMtMWjeH09ueqLZAeyOoKpGNdmhUaj8UErkQuF+npyNaV9iTFOQy4zXfCh0Wh80O6sC5GmLrMbjGtKF3xoNBcU2p11IdJST/pNWWY3WNeULvjQaDQB0Eqko9DRF2TSbdo1Gk0AdLFhR8H/Sd9oU9JRsqBaokOvRqO54OiQloiIhIjIZhH5Z3vPpc3wf9J/882OZ5XozCyNRuNHh1QiAB4G8G17T6JN8U2vTU8/d+EojUaj6YB0OCUiIgMAfB/Ay+09lzanpVYI1Gg0mjaiI8ZEngPwBICY+nYQkUwAmQCQkJDQNrNqS3T8QaPRdBLqVSIiUtqM8RSAyUqpLc2ZjIj8AECpUqpARCbVexKlsgFkA6wTac65Ogz11Wr4LxOr241oNJoOSEOWSB8ASwEcCHKsEAC/BBB2HvNJBXCbiNwCIBJANxF5UymVcR5jdlzqK+DzVxitXOin3ArOUifMcWaISSsojUYTPI25s15SSn0ZzEAiEgLgV+czGaXUfwH4L894kwA8dsEqECDw6oJm87kKoxVXIVRuhZyMLJjy7XCPtyLtTZtWJBqNJmgaCqxfC2B7sAMppWo8x+w430l1GQIV8AWqDG+o0O88q9ydpU6Y8u2o7pcIU74dzlKdCabRaIKnXktEKbW2qYM155gGxloDYE1LjdchCRRAr28pwPR0vnzrNJri5qonpmKOM8M93opQjyVijusEmWA6PqTRdBh0A8aOiK+QBOpXFMGuNNiIsqmNicRGQ866OrZw1o0gNZoWocM0YBSRl0Rk6fmOo/HBtzK8ocaHwfazaqR5opgElngz5KXsjlcl749uBKnRdChaotjwWs9L0xo0pijS04FFixp+Ig9G2XQW4awbQWo0HQrtzuoMBIoBNNWt01gcoTO5iXRMRKM5b1rKndURK9Y1/vgXHgJNT/sNNIb/952lSr6xa9FoNG1GUEpERC5ubB+lVNDpwJoWoL4srvNBC2eNRtNEgrVEtoItTRoi5DzncuHRmm6XzmQ5aDSaC5ZglUigwHlPADd5XvNabEYXCm0RY2iK5aDjCBqNphUISok0UET4gYj8HsBPAHSdBaSCoRVblTSZzhQ012g0nYqWSPH9HMCUFhjnwqIlU1H9W5s0tdVJZ0nf1Wg0nY6WyM76PoBTLTDOhUVLxSz8rYjMTCA7u2lWRWsE4TUajQbBZ2e9G2BzOICRAIYB+O+WnNQFQ0tkO/lbEVOnNt1NdoEG4XWYR6Npf4J1Z8UGeEUAWAfgVqXU060zPc05brHYWCA5ueluMt9WKhcAhoHW0bu0aDQXOsEG1nVbk4Zo5VRelWmDc2oGGyS+lA1s3EhFkpkZ/PkusMf2jpS3oNF0ZVoisN61aeVHYqWArGzB7CcsWLrABWW3A0lJwKZNgMvVvnM8z7VMzgfdQkuj6Ri0RBffDBG5tyUm0ylp5cwn3+FzCsyoSG6G5Ax2jk1RCu3sTzLCPIsX64xljaY9aQlL5FUAy1pgnM5JKz8S1xk+VRAxt4mSUym+GptjU5VCB0gbvsDCPBpNp+S8u/iKSIJnnKKWmVLT6BBdfFs53tDs4X3Tg1NSvIGDQIMEu8BVoLF1AaNG0+noMItSKaWK20uBdBha+ZG42cP7Wgt5eRzgfNYc8SeYtUxam3aMy2g0Gt0K/sKmKUWGTaklCWSFtAfaGtJo2p2gLRERuVNEVotIsYiU+r9aYjIiMlBEPheR7SKyTUQebolxuyxNjT4Ha/J0gHhIh5qHRtOFCUqJiMg9AF4DsBvAAAAfgg0XTQDOAFjYQvOpBvCoUupiABMAPBTMWiYaL+d4d1rD1dZR8ms7yjw0mi5MUIF1EdkM4D0AfwRQBWCsUmqTiMQAWAXgPaXUsy0+OZGVABYqpVbVt0+HCKx3ENrUu9NRihc7yjw0mk5GWwfWhwHIVUrVAKgB0A0AlFJlAJ4GMOd8J+KPiCQBuBJAfoDvMkVko4hsPHr0aEufumPQjIBxW3l3lAIcToEyd4D8Wp3nq9G0K8EqkTNgrywAOAhglM93AqB3S05KRCwA/gbgEaXUGf/vlVLZSqmxSqmxsbGxLXnqjkEzC/nM0QppYxwo2qfO9e7Up5SaqKz8p+Z26+QojaYrE2x21gYAlwH4DxgP+bWIVAOoBPBrAOtbakIiEgYqkOVKqb+31LidiuY0hlIKkp2FmZvsyBhrRUSmDWI8ndfn52qG/8t3arm5QEUFUFCgk6M0mq5KsJbI/wEo9vz8awBfAngRrFY/BqBFcjyFUm8pgG+VUn9uiTE7Jc0JGHukuyQmIrLADnE5z/nuHD9XM/xfvlNLTqYC0clRGk3XJdguvuvhsTaUUqcATBGRCAARgdxN50EqgHsBbBGRrzzb/lsp9e8WPEfHpznrfzRUE1Lfd81YrMp3atHRddfH0slRGk3X47zbnrQ3OjvLh4Yyler77jyzm3RylEbTOWn17CwR+bOIDGzChMRzzEXnO6kLkYbi1y3WuaOhTKX6vjvP7CadHKXRdG0aiok8DKBvE8d6GED8ec3oAqShZKv26qiuW05pNJqWoKGYiABYJiI6XHqe+Gc0TZ0KxMfz6b09VujTLac0Gk1L0ZASea0Z420Ds7U0Phjx69xcoKYGeOIJr/BmbYcTOQVmWFOlweB0S8UfmqK4dMxDo9E0RL1KRCl1f1tO5ELGyGiaOpUKpFZ4pytYltdT2+FH0NZDAKnvvynYpCxtsWg0msbQa6y3ESJ0YdUp/0ADtR1+BFXSESDAEijmEmxzX90kV6PRNIZWIm3IOcLbEnxRYaD6QyM4Xtt6xHGu1K9PEQSTVaWb5Go0msbQdSLtTROCDm43UFoKxMVx16wsb5wlNBSwpijYJAvi439SkEZdUs0pL9FoNJ2blqoT0Uqko+OR4irajKxsqVUG6enAQw8B/foB770H3HEHcPgwsHiRgkUajon4D99ScY8mKxytoTSadqPDrLGuaUV8AhoVC7Jgz1W1bimAQv/QIWD8eCoQqxUwW871UzXkumqpuEeT613aq0BGo9G0KFqJdGR8JHxEgR1pyc7a+ITFQqvhxReBN98MfgVcfxqLeyi3guOIA8rdsJB3OhQK1jqQmKCCU0Y6aq/RXBDUm+IrIkcBBP14qJSKa5EZdUECenWU4islBcjLg1itmJlpxl2uuvsZ9R3NLVBsqNejcivkZGTBlG+He7wVaW/aIKYAWkopmJdn4bG9dtj3WnHRNBvM5ka0WTOaP2o0mo5HQ8WGi9AEJaJpHgFjEvDbuGgRYLFARIJSFk0NNRjuLn+cpU6Y8u2o7peI0Hw7nKUZsPQNtKMTYrdj+OREDC60IzQjA1xXrJGTNrVTsUaj6XA0VGz4VBvOo8sSsHocATYGmTYVbKBcuRWcpU6Y48yBrQsA5jgz3OOtCF1vhyQnwxwbHWAgj8VktULsdoSlWQFLkFZFfdpLo9F0GnRMpI3xb3wYHQ2MGQPs2+fj1Wk0UFF/UDqYUIPhptqcOhs5GVl14x0+ExSTIO2NTFw1awxSIzdCXsoO3D3yoYf486JFuqxdo+liaCXSXJSCKnPAUaZqH8brFP7V0/Ldf33y7Gxg0yZg7FggM9Ozai0EjnQb1KJ6ouUNaAp//WPMrc7hPm4qU74dzlJn4AkqBTnrQuTWTZCkpHO1ku888vI4T61ANJouhVYizUEpqKws7LxhNv56QxaWvKhqZW9GBvDgg4GzVv1lf2mp93NBAeBy+cjxhwRZyy1QCCCUG9AURqhh0SJueuihc+dS66Y6XAT3eCuiY831Vrw3aBXpknaNpsujlUhzcDpRnWPHt85EXOGyI/8zJ3JygL59+UDer19gV5K/zI2Lq/s5OhooKQlsZNRxgzWiKUQYnN+UEzjlVkyCtDdtuDJ3Ma55w4bsl4TGxxvRcI9JRtXuIihDKfj0alGZNjic4lVIDTXh0guWaDRdgqDWWNf4YTYjNM2KUYV22GHF+OvMgACveZrnr10LTJ9+7oN5oIQkm43V54YFsnYtt/v3yDo3WO5xHeXlndvTPYiUWzEJLH0tcDg8SitBIfy1bOyo2YiNkgznNZmwQSD1VMzX6oxAwXHd/lej6TJoJdJEKFMF5kwbhqdn4CKYYbYIHA5g3Tpg8mSgsDBwQhUQWOYuXw6sWQPk5wMxMUBUFPDBB7RsRICyMiAnBxg82G/9j/pqLRwOSE4Ohk8eHDDl1jexyxiiYK0Td7vt2FGRhNGyCYvXueC81wzLciqDimQr7BttSEyScxbWOofGFizR7U40mguGDufOEpGbRWSHiOwWkSfbez6+1Ik7Z1MbWGKkVjGkpQHFxXwPNnPVkLcJCfT+1FQrRLu9biClWJG+Zw/wn/+w9rDWwgnkTjIOKCyErF6NsDQruwUHuoYsbrPZgL9kmzFyhhWjzEX4KtqK5DRzbat634r5vXuB8nLg8ce9yQHneK0aipXodicazQVFh7JERCQELHK8AcABABtE5EOl1PZ2nZjnydmpzLDbJeADdnNr54wU3/XrgcnXK1y/JwvDj9nxz9usqJ5hQ8a9dCH16gV89x0FuMPh0wvL0GC+MYi8PJpEe/bAfXc6SksEcXGAyVS/kWCJEWCWDcMzvNaVwGvpiNWKGQ+YceJPlP0jRgBffAFUVDAp4BwXV2YmzRWj5bBBe6wHrNFoWo2OZomMA7BbKVWolKoE8DaAKe06I58n5+g3s5A8RtWbjBTMGh3+Q2dnAytW0NK4dpwT9yTZsasiEfG7c/HhyyVQboXkZGDnTmDkSOCddyis6zzEG3N88EFg6VKoCRNQVVgM9zUTkTHLglSrwsw7HXDXqIYTqkQgMV7ryt/ScZ0VbN1KBbJjB3DppVQg52QaGxf2xBN8r5MapjO6NJoLiY6mRC4CsN/n8wHPtjqISKaIbBSRjUePHm3dGXmenFVCIna9ZseW9U6MGeOt6WgqvgaD08lYh8vFJ/rPvzSjcqwVfSv3waRqMKf4CYS9moV5cxXmzQN69OAYRmzE4fBZjCo3Fzh+HGrBAuR+XonZ7kV4tsyG9esBm2Th1o9no+xPWRCo2sSu9HvOzaBSijGYM2f4ruDVjIb879MHmDcPePRRIDk5gD5oqOIx2GUVm3NDNRpNm9PRlEhQKKWylVJjlVJjY2NjW/dkHslZXViEXGVF7wRzbU1HAxMMKNj8wwHR0YyfmM2enycKuj1mw9HHn0G3XqHoOy4RkZvsMJ11Yt48PtRPn864y5gxwBtvUJllvWmGe0wyar7dgeohI+DeuAkDEwRbtgpSr3BiaKkdSEhEzBavQF/+psJ7N7LWRS1ZApSVQblZ7zJ5MnD55Xz3tXh85f/cucDLLwMbN+JcpdqYtdFUk62h+6zjKxpNu9KhYiIADgIY6PN5gGdb++GRnCH3ZGC1zYz8vwnGj6fQD5hl1EB6a6BwgM0G3HMPv4uPB0wmwbTH41ERaUVEAWMRMJshwsytzEzGRfLymM1lsQB79gjO/mQeevYQDNpZADus+PdaM6bfD/x0phkn/mhFn512mFI5lsMBrP/UiYdddnzrTsCQV15D6Lp1qBifhpz1NpSVCU6dYpZYTs65sR+LBbWpwUlJrLh3uXxCG23VXFHHVzSadqejWSIbAAwTkUEiEg7gLgAftuYJg/KGiMBlsiA0THDHHVyK1uVk1XpV5mwo36fgIFqS7NvHp/doTz/Dt94CfvELb/hATIKIuTY457PAT0Fq5+hyMQ5RWsqFqI4f5/K4y1eY8GzlPNxXthgn7rBh0GDBPfcALy8VPLbThleSvWO9+Sawda8ZH522YlTkHphMQOWAwQjfaMd1452IiaHrLCbGayn502hoo6WsjYbQ8RWNpt3pUJaIUqpaROYA+A+AEACvKKW2td75gq+J8y/JiFZO7FzGqvVRe+zoP4Vt0sVvRxVthtPhfSDPzPRmNGVns9DQ/2HabIansM+ClBRaHl9+CUycCPz0p9RLX37JjK2wMODWW4F//5vKx9TNgv0HgEmTeD67HUhMEqwtsOD7JbzmZcuAQ4cFfyq3IcaWjgOblyP8b1wzZMZcM+6c6VFm9egBwwDLzGznTu66nbxG0+506TXWHQ660xMT+TC7eLHXG1Kfp8rY5nQo/PWGLFzhsuM/ZVZ8M8GGtIniXQ+knipvp7PuOZ9+moWF69bxqT8zk61Pfv5zYMgQ1obs3UtlER8P3Hkn8NJL/FxeTovGYqE1ohTHMGSq08lCxtxcfr97N1BVRevl2DHu36cPEGJSGDPCCUu8GYsWewVxfQokK4turrS0litG1/WHGk3botdYbwHq84YoBSxZAjzwAN99A8uGYDWbgeqfpONPgxbh/VgbBg8Rr/fKs6PTJbWFhDk5VFq+56yuZhZsTg6FvMvF802dyrqRjz7idpOJQn/7dmDJiwo9wxw4dFDh8ss5n6Qkutj+8hcKdYBWjtGhff58FgUeOEBXWk0NEB4OdO/Ocw4fIfh6jwVjkgWvvw5cd51fUN3H5+dw0JLZsoXvDsf5/x50fFyj6bx0KHdWW1OfN8ThYB8sp5NP7+npQLduPgcqBWRnIe1dO6TGCvdQG4qKgNTUwE1uX32VQvy114Af/YjKacoU4Gc/Yy3eypXAsGHA888DvXsDlZU81u2mAqmq4s89u7tx19EFGGcqwP4EK/IibRg9WrBtGyvZa2o4Rn4+rZeJE70usgkTgE8/ZbA8LIxpwiYTMHQoFdAttwD33w9cfz2vOTIS+PxzYOoUhfiVWRDDnLrHBkCaZC00ZmXo+LhG03np0koEqH9xPaX49F9dDbzyCvDww143FZSq7eJ7pbJjvcrA75+x1OklZTy833orU2HLy4H/9/+AZ+YrXDvOiasmmZGfLygrA/r3Z4wkIgI4eZJB7ZAQvtLSOI/evRRu2/cCHpQFON57BCKO5GK5Yyr27o3HXXcLPv8c+OUvqYBSU+kSe/dd4KqrGMCfN4/z+uILWiRGj68lS6hMzGbWhRw/7q0/2bkT+NXPnHh8H5e+hd0OTMnAffdZat1vjQn7YOJOerl1jabz0uWVSCDMZmDgQGDbNrqiNm4ECvcoDFqVBcmzo2KMFeGpKeiVl4f3y6w4M8qM2FivcHS7gRdeAN5+m9bBsWNUEKdPKUwrz8K4f9hxcrcVUZE2lJcLTp6koO/Rg4J88GAqAhFWszscgMnlRDIKUNJjBPqf/A4HQ8bi8fInsK3Kik9X25Brl9r1SLZvp4XTuzfTbxcupBJ5+GFg5kzGSex2KoGYmLpC3e3m58hI4MQJoHeCGfZ9VgzcYceXoVa88oQZ1lS6y4JJvgrGytDxcY2m89KlYyL14XJRiKamAmfPAt9+C0yZ7MQX8+0oOJqIDQvseLEsA6+NW4wvr7RhY4FgwQLv2lAvvEC30v79PD42Fhg1Cujf3YmrquwojUzEqJN2OEqcOHMGuOQSrkEyZAiD5yNHAu+8rZD7HweqKhViY4HKMDO+Mqdiv6s3/hZrQ1SPCOypSsTwY3Z8k+dEWRndXiLexbH27OGY69dTERm1JoEKxg2XU1wcXV7l5cz+Kt4v+CTJhtlqMZ7ck4mh/Zyw56qgFzE0m+lq273br3mkH22REazRaFoerUQCYDZTgfTsyQrxkyeBHheZ8fEZKxzbi3BihBV5WyxIGm3B7j2CkSPpjnI6+SoooCKoqKBAvv9+Cu0nfmPGmUusuH5YEQr7WjFijBkREXQhTZ/OViR33QXs3qWQui0LP/x0Nq7dlQWLWaFnL8G7PWx4bviLyL/6ceztn4rR3Yqws48Vx86a4XYzWD5qFJXIjBnAlVdyLnl5bOwbKEEA8LqcHnuMc66upjUUFsbPhXsF/YeZcVtJNia+OxvTyrMQHRV89NtQOFpBaDQXHlqJ1IMh9GJigPHjgcNHBPtutGHnw4vxXi8b3Eqwcyd7R/Xq5Q2qG/79bt2Ypvv++xTSjz4KhIQK7llrw8hPF+PYD23YUygYN44us7NnGXR/+22g+rQTV561oxiJGFdtx9tLnbXxghtv5Djjl9pw+FeL8c/+NlRWUTpXVlL4L19OJZKfT3daZSUzwDzhnDrFlUoxfvLFF3S7FRZyPhUVdG0NHcp9vviPE5c77TgalYjwAjteWeAMKovKcGcNGRJ4tUeNRtO50TGRADg9/QxPn6Z1MGcO8Oc/A/HxAhELbithaq5R6zF/vneBJkOwFhayIPD994GjR6mM9u4F0tMF2W9ZsGkzazyKi2mJFBbSAqipAT7facaAcCvGVtpxerQVgy81Q0RhlikLpvfsCK2x4na7DcljLVj+FjOvHA4G4mtqmA1Wdkah/JgTkd3MqKrytmrxDXJnZjK2YbdTaezaRQXicrGoceNG4L33qChDTGaU97HClGfHUasVOQVm3OVsPLCug+YazYVNl1EiTSlmM5spOBcsYNvzzZuZlmvy2G3x8XUFo29WltGZ9+xZusEiIyngjRYnRvqwy8XU2qQk7rthg1fAllcIVlgysSVuKt7/LA6mEAEcDqSF2nHye4k4+podlrgMfPyxBWPGADffDPz971QgxcXAieMKtx7OQoqyY2+YFZaf2zBvHgPvvkHuqVO9n/fto1L5298417/9Ddi5Q2HkQCciI8xIHitYWWBDyM0ZqI4wIzVVglIILRE014WIGk3HpUsokaYu+S3iTYnNz2dAODraWyzYkGA0m5n1VFjImIrFQkUUEcFWJMZ8jh9TCK1w4qL+ZuzYIbjqKsY0QkKA7dsUbtyXjR+a7Yh52wrMsrEJo9WKHrl2HBthReF3ZgxMoIL7/e95bfHxtHr6xjiRcsiOIpWIy512jP0Bl8eNjqZyNBaRiovzKsPUVCq2Y8dojRRsVHg4KguX7LGj1ygrUu+3YeZMQVSUBUVFVH4B76FSUA4nnMbCVlJ/GnVr/O40Gk3b0iViIg0tb1EfRpqrIbCys+tWVNeXTSQCzJoFrF5NAZ+UBHzzDeMLbjcbLSYMVJhWkYUXamZjtD0Ll12qcPw4cOQIlc/JA05cF2nHyZhE1KzjwiHK4YTjnkzI4sWYsd6GyTcISktpwaxaRQXy3XfMBBswwgw7rEiUIqxypOCuOxWWvMg2776t200mb6ZWejrnazZTyVzUw4nLHHYci05E9Fd2/NzmxBtvAPfdx7jMvffyeuqg2JRy5w2z8dcbspC1RHFNkvOoQG/O706j0bQdXUKJNKfZq8MBrF3LQHVODl91BFk97X9ralhTEu12oPyswqZNLCbcuJHCPjER6GZy4O7+OdhVnoArz9pxbJ8Dw/s7kHaNwv79gFjMWFdtxYioIoRcbcXZl9/Ezsmz8e4N2Zi/yIySUkFkJNOCoyIV1q92YMhghZkzOX54hGD1YBsedC+CKUTw6N6HYHo5C5+uVkhM9LZuB7zK0GKhleJw0PK6LMWMk6OsSB1YhFUOrqPy2WfM9OrXjxZaaanfTXM6a4swr3DZ8c4rTq53ch6tTHSjXo2mY9Ml3FlN9csrxQynvXv5uvde1mBs2uQRZNGBfSw1NcCE8QrWrVm4wWzHtb+0Yvw4G/K/FPTpw7jDoYMKf0h8EyMjCqFCCvF+t2n4/qk3MeVgHr7Yb4XFbIMlRpAz0Ib/eT8DS5YrjF7yEHZVJKK3047Hfp2BRYstmDABOHNa4Y4TWZhy1o6qsVb87xfpcJksSEgUVFYJBg0SXFVkx04kYlSRHUclAwcOWjBtWl1hbOjD8HBaMmfOALffLpDrbViyNgOnR5kRcUhw3XXcJz+fCuec9cDMZoSmWTGq0I51NVacNZlrs7KmTq0bO2qt351Go2lbuoQlAjStmM3hoOUxeTLdUQ4HLYnRoxlgF1dgH8u+fcD+75y42mTH1ycT8eVzdky6yomPPuJT+759wOHdToR8mYev+0xGxKhBODRuKn7YNw8jb0xEirIjobeTtSUzBK/+1YI/ZVnwVbQVsWeLsNplhRNmHDpUjS++OI3q02cwwW3H5uMJGPjZMjy+JxP/1TsL4WEKPXoAhSVm5IdYMTS8CJ+XWzH+OjMGDaJANzBiDpmZwOuvAzfdxHTce+8FMm2CS1MsiIxizGbWLO9qiuHh7CZcx8IQgdhsGL5qMe781IZp0wXFxcw6e/zxIC2SABaeLkTUaDouF6wScbsZY6jjtw9iBSqlWJhXWMi4RnU1hd/mzXx/4QXgTI0ZZ8dYofx8LElJwMCRZqyrsWJIWBFOX2LFF5vNMJmoZ0JDgcNnzPis3IojG4oRd8dEPPt6PIZNt+Lb/xRh2Q4rdh/mWFOn0vIZNlzwX3tteND9F7wZbUZl1WWoqQnH4cNxOFzWEw+Wf4pdjk9xyunGNtcQhH5px+hBrIS/+BLBS2LDb+MX4++xNhTvp7X0xBO8lrIy7wqFQ4bw2nfu9PbEMhbASkpC7ZLAZ88CW7cCF13ENOhzYhQikBgLYroJZs1iq3ulgoxptGY7X70Wu0bTKlyQSsTtpvsjNZXvbjcaFVCGjHE46PefPJn9s0JC2GG3uJiCdsUK4PrJgrQ3bXj5Sq4WaDwih4QAeesFM9bbUPLrxXinuw3WVEFSosLNVzsQFakQESl45rQN95UtxuR3bXhjuQmFk234w0WL8XKIDceOC44d88YCSkqAyqoNOOIYjjNlswFsBaAAVAJQOIFDeBFbMbFyG8KjN+HraCs27TCjRw9mal16mWBEsgWPPyG44gpaVMeOsY37Aw8AS5eyzqSoiPGfkBDvvYiOPjceER3NuM9771HBut11Cxf95fQHH9AluHp1EDGN1oqi617zGk2rcUEqkdJS+u3rBIAbEFC+MsYQqsXFbIs+aRJ9/zffzIJBY12OXbsFi1+3oMwhdcZ5+WW6fbKyWLxXXaWw9p4s2L6ZjecuzsKokVQk5aFcb+Tpp4HJNwj+tdaCM2WCkBBvI8YpU4DY2A2oqbkObvcJKBV48Q4FByrgwiOn1uL/To7BiZOCfftYNT99OjPLbr+da4AMG8ZeYOXlVDLPPcdCw//3/2gpDRnCOhajEDEzs26fLZeLiubWW2mtZWZyjNOn2RHYV047nV6FPGgQM8AadEm1VhRdp3hpNK3GBRlYj4tjq5L8fL7HxQGQ+kunDRlz7BgLDOfOZaW6UduQkcFYwNq1fAo/epRCcscOKp1HHqFwdDqBnLUKNxdnYcRxO76rtOKNF9PxRDFrNuKL7QgblYFhwywoKaEwdjppARw4QKV35AjHvewyIDGxAtu33wylghV6Ljid38OaNYcQExOBmhq2M6mqojtq507OvWdPXuvWrbzGv/yFTRpDQnhupbxtSvy77kZH0wIx2rn06ME6lddeYy3MDTfQzTV1at06lIkTg6gVaa0oui6b12hajQvSEjGZGNfIzeW7yQSvgPJvXwtvhfqOHSwMLCio2zRQhEI2KYnt0Xv04HHdurG1idGTSilwrZAqOw6Y2GF3717gazMD49u6W3H4jBk/+AGPP3yY5zbaopw86V1H5ORJYOvWv6K6urKJV1+J8PD3YDKx+eP48bye/v059+9/n2NHRdHyKC/nPI4cYaddpajU6jMGnE52B66spIW3bh2zuXbs4Bi7dqE27hLIkmmU1oiiN/C712g058cFqUQAKo6+fb2tSgDUK6BEaH3Mncs1OOpbofDgQY9VAy4tO3AgMG4cBXJWFpejrY4ww/qYFVfFs8NuWE8LXouwYdHFi/GWxYbLrxB8+SUFrxF/uOMOjjdhAq2RykrOqbr6abjdTV1/1oGKij/isce4YuLcuYA1ReHIbgeuvEKhpIQK69gxWhUmkyeWk0clMGgQlcszz1ABOJ2ActcNdijFAHuPHszSCvXYs7160SoJDfV6jlwun1vensFtneKl0bQKojpIkFFEngFwKxgx3gPgfqXUqcaOGzt2rNq4cWOLzKGhHk1KUcj+7GdsC1JUxMrvbdtoxWzcSEulqAhYtFDhnVeceHmFGQqCu+5iE8c//Ql48UWuM6KUQjeTEzF9zejXn3UkO3Yw2F1eDjz9dA0qKsLAIHpTETz7bBU2bgzB+HEKl+dnoew/duQqK7JhQ5lDEBXlbV2ycyePioykYhgzBnjnHbrq7LkKM2uykBZqh1itUJk2LMkSvPIKFVBSEi2Yo0epAKdP51h5eX5tSnT/Eo2mQyEiBUqpsec9TgdSIjcC+EwpVS0iTwOAUuoXjR3XkkqkPowH6DfeYC0FwHU/Nm3ydvIdc6XC1nwnRo83Y97D7Bnl8BgRFgsD5WlpDG673Qo2ZMEKO3b0tuL1SBvGXiUIDaUgT04Gli49ja1b40Cd2jREwjBw4FFUVXVHaLkDTztmY3dVIhJQhDlYDJeJwYmYGMYqPvnEmwo9YACV5Y03ct7D+zsw6b3ZGH9HIsIPFwGLF0OZLSgr8y5iVVrKtvdDhjAhYdEi6oc6ytjhYNTduGGLF9e/LnGQ3RZ1Y0aNpvm0lBLpMO4spdQnSqlqz8f1AAa07vka96woReG/ZAkfnF9/nRlbgwZxoankZE/sIEVhXkQWHt0zG93ezsILzysot4IFDggUlGJh3s6dHNMMJ6xg3GTUSTucpU7s2kUBPHAg4wxTplgAVDXz2qpx9KgFLhdXRMyptiIBRbDDCgeiESMOmEQhKornjIjwpuoWFlKRFRSwuHLXITMqk60IPcQgiYo2w+FgRf8vfsHrio+nMiouppFhtFGpI9gbybxSCnCUsfdWMKm4OmtXo+kYdBhLxBcR+QeAd5RSb9bzfSaATABISEhILioqanA8/yfWYDwrxj5r19Jdc8MN7H01ZAjTft1uVrWPHw88PNOBmlmz8c9vEhFzsgg/C1uEv1y1HP322pEfYsXpO2149k+Cw4c5bp/eCr/um4WkQ3asdlmxqMqGqGiBxcJ4wpEjXFXQ7b4UFRVbm3z/IiJGIz5+C3r14jhVlQr7tjlxqjoas0OycaPFjq+irXi3hw2hYYIDB3j9ZWXeAH/37sDvfsf4zKYChYljnfjJ/Wa8tUKQk0NlM3kyFcfixby3TidbwoirAZ9gANPBuNcFax14bO9sDJ+cCCluwFpB8IaNRqMJTKe0RERktYhsDfCa4rPPLwFUA1he3zhKqWyl1Fil1NjYcxo41bUyAj2xBlM2YOxz6hSL5ZYvZwxgwgTg7ruZ0rp1K1cidII9o0ZEFWFNhRVDhwLln9nx6a5EDCxmI8IjR4zrAy4aIAh5kCsTfj7MBjFxrQ+jk291NeMi1dW/QFhY0yRjRIQFV1zxJB5+GFizBvj0U+DLDYLZT1gwsKcLE8OYbpxcYUf1aSdCQxnjiYnhWu/R0UCfPrQu1qxh9llikuClFRbcN03w6qu0xKqqmIk1ZgyPEQEsZgVkZ6EqczYtCv8HFBEoswUOp9T5yrjXfYew+3B1YeN1Iroxo0bTMWhTJaKUmqyUGh3gtRIARGQ6gB8ASFfNNJH8lYbR1sNXYQQjgIy03507gSuu4LhpaYyDOBwU9sXFrCgvcwiQyWVv+/zShpDuFmyJsSIRRfjP8WQUH4tGTAzHiIwE7rwTsM0SVEVYICZBWBgtBpPJ236eS/P+GEqFN+n6zeZw3HrrHdiwAXjrLW8B5O7dwLhrzTg+nC1ZdsdaceCkGWVlTP2dMYNpzGOTFdxnHCjaR5fctVc5sGe3QmkpU3tLSpg2vW8f701BAVN5lQKUw4mdy+z415ZE7Fxmh3LU1c71uaBqfx/FgoppNoRmNZ6Kq7N2NZqOQYcpNhSRmwE8AWCiUsrV3HH8rYz09HPrzIKpaTPSft1uWhshIYxVTJsGvPsurYbqarqAHn0UmDhR8MADFkCA0DDgy8szceqTcowzbURIeTb+k8jeVePGAdu3UwllZ1ORGQrEYmFacmUlXUrx8RGIjv4YOTmTAARzS8wYNepj/PnPEYiIoFL45BMqvm7dgLIygftKG6IHZcD+tRkx3QSFhaxi37mTC2WN3ZSFO6rtyDelwPy54OpiO378IytuLrTB6RJ07865DRvGzLRJk7xFiUqxb9gYsItvf2WGxceD5f+7MQoZBQq2dCcy0o2FrIKzvpq82JWOxGs0LU6HUSIAFgKIALBK+A++Xik1q6mD+BcnWyyBFYa/AAokX0wmYOZMb+uOvXvZiuThh+n+MdxgAwfyfKdP8wk7Ohpwn3HhJzWbsKs6CZdW2RFxfQa6X2TBV18BV17JmpJvv/XWafTsyTqLH/2IGVzduwP/+heQlHQV+pj/jXLnjXCHKLhqzg22i1igVDiioj7Gpk1XMQ5SxVqO48dpPVRUUOkNGSooLrZg+v1ci334cLrOxowBnKVOXO6047uwRKSU5yAuXLCzfAiGfm1Hxu0ZeOVdC8LCmJFVUkJFcuwY62q4frtgmdjgOJOBmGgzqpbzRhrpvpmZTEIoyHHCmmaG2ewNUIndDosRoEIrCHidYqzRtAodKTtrqFJqoFLqCs+ryQoECOzmaKzOrD43i7GuSHExYwvXXMOGgsXFtBZCQ1ndffgwXV9btgBDh9LVE5tkxpehXF3wC7cVTy80Iy+PrrE33gA++ojWAcAnc7ebVsl777FA7913WXuRkwOcdF2DlyOm4i+RPTAorDsEgjAxQQAkmHqgR+RziIg4hMrKqxATQ6VkjJ2fTwUVFUWrISeH87NYuARwcjJrWNauBa6/zYzVLiv6Vhbhq25p2JeQhpHRRVhXbcVr75lRXExFN3w4MON+hSuHOXDpaIUHHuCc8/KAiZMELpMFaRMF69bVXczL5VSwSRYWy2zYJAuCIANULYHun6XRtAodyRJpMZrq5qjPzWI0ELz+erp7pkwBnnyS6aylpfx8/Diru+Pi6J5at45P6EXFgjPDbXh3bwYOnTEjOkyQn08LobKSabVnzvC4YcPY4yoqiuMePkxFUOUxOiKVC1WVEQi1TMffq9fiW0lCTN8auE5GwI5rsLhqBsLCqSFPnWJgvE8fKpJTp1hV/uCDVKqzZnHbokV01y1cyALBf/4TCAsTPFduw9C+GagMM+PT5cB//p6BZ180o7KKqynu2AHMsinEvp+FlAN2rPnUigXhNsx7WGC1stVMSgrddWlpVMSGJWKGE2K3I2yIz41uq75Wun+WRtMqXJBKpKlER/OJvKCgrnwx5M6yZRSGb79NAWm38/34ceDSS9nl11ivfMoUNh+MjgZMIYKZD1vw7LN0GYlwvyNH+HN0NM/x9dcs8jt5kjEWQ8EYOGHGjj5WXFmWg/IKwcGIYRh0uhgvJs3HoZp4YJ+gooI9q8xmKo/QUJ5rwABmk82bR2th3DgqjhEjGCu59VaePyaGygUQ7D5iwRVXALFxwPqtFowc5a3IT08H5kx34ru/2vG5MxGTzHa8nZ8Bl8tS6zaMjua5jPt4770eNyHOFeQKAme6Deb0DIilFWMVeolEjaZV6DDurPZCKVoQGzcyLpCZWTdukp5O4dmrF5/eKyroKnv9dSqGJUsolwyhb7jNTp/mU/v779PCGDOGls2mTRzjzBnus2sXLYWDB7lfZSWVQXg4xwoLAwDBH0/YML08CyvCp6FfdTG297TCYY5HZJTAZOIxJhPjHqWlvK6hQxljmTuXRYEPPcTsr7lzaalYrbS+evfmnEwmKp+ICMZ5RBjv6N2bx6xaRWX08gq66i7tXoTiAVaMnWiulcsWizdJ4BxXop+vUUHoRnxIkLXcAtUasRBfdP8sjabF6dJKRCkGiO12KopNm/gE7fs9wILCnTu9T+8iDChv2sR+UatWMWvLCKpPnUpBGhND4R4dTeujWzcKbV93fHg4zxkVxZ+VooUTEcHvI8JZ+V5dA5QhBi9UzsJc02L871FmS504wXNFR3sX0MrIYNru6dNUkP/3f6z5SEiga2nmTG/M6OxZHj9wIIP5MTF8UC8pYYrwT39KBbNsGWNGDgdgzxMUTrZh2VWL8b33bbDNklq53GgnAB9BrsMUGk3np8sqEbcbeP554LHH+PTuXzNiBNttNgp036d3s9m7ZsnBg9x31y5mO73wAq0Pk4lWhLGIU+/etEYSEpjGC/Cp32wGxo6lMjLqRHr2pBJIGKgwOzQLCzEbmcgCmzEKqiMphIuKgJEjvRZMdDQwahSPHZuscHCHA5ERCs8/TyH98ccsljSKMA1EeI3DhgGffcbq/MmTqXi2bfO2ks/Pp6BPSQFWfyr47oAFKz88t/I82FYkumBQo+n8dMi2J02hOQ0YlaICef55CuFevYDf/paV2Ebr+LIyClMj7feTT/idIeicTgrvvXuBe+7xfk5KYh2ICN1JRpfc06epNJKTud+ZM1QYo0fz+4suojCtqGCQGwCGxDuwUM3GpmOJ6FdVhJ9HLEZIdwuOH+e4F18MjBqp8LXdiQMnWfdxzTXAc39R6P5OFva8YceKIiteDWNVfGgoFdnhwxz/hz9kjctLL1F5XHstrZjly2l5lJZSWbrdrCGZONaJpW+b4XQJbDZmphltTywWTyuSBxWG9Xdi1yEzFr8ojSY46NINjaZ96JRtTzoKDgfXSq+sBDZs4PtvfuOtvPYlUF2J8bT90ktUPEOG0OIYOpSKoriYabTGwlAlJQyaDxniDaL36AFcdRUryXfuZEpvSAhXVoyJoYLZc8SMVU4rBriLsLWbFdGx5lqrpndv4PRJN6adfgHPuJgye9alMG4c8M93nNj4gh0V8YlIH2THkL5OVFRwzNWrqax27GBvrLvv5jUbxZRz5jDWM3AgBbvLBQwdorB+RhayQmejYkEWlFvh6qs57wkTqGTOnAHcNWwbP+m92ZhZk4XoKNVok0sdptBoOjddUokAFFq9e9O95LuIUkkJhZ7FwjjHJZfw3VAg/n78o0fptvrJTzimbwFhQQGFdVwc03V37qTiOHyYLqxvvuEcCgvpTtq5k+dJTKTwrnEL3ozmglY7J9lgCpHazsIV5Qq/ML+AK794Ad0rj+EKpx0W4RKLr7+m8Hm5FSUbijDojmT86N5oREV560PKyxkLiY+nEv38c54zP5/z2biR13LkCBXuteOcOPFPO15fk4h//8qOW69zYulSVsQvXUqL7dJLgduud6LvHjvG/SgR14TY8coCp+6yq9Fc4HRJJWIxK8y804FLLlb46U9Zz7B7NwX9I48w4wpgTcVLL/HdeFL29eOnpDAOYbVSMVRXo7YjbkUFA/EA9+3enSm0V1zBLK85c/gEv3IlBeyJE1QmS5bQoomNpeVQUSn40TQLnnlWEBvLsaOigJuudmJ0eQEcF41Awtkd2B6VjLKaaLiey8JD3z4El1Ph26grgY0bcfaFbJSdUbXB+4kTqUBOnwYmjFeYmOzAgf0KvXsDH35Iyyw8nK6tceOAa39gxt+PWGE+XoTPK6w4dNqMrVupULds4b07fBjYccCMdW4rTAeKUDnWipwCc6NB8/Zc7FCj0Zw/XU+JKAXJzsJPN8/GqylZmGWj9KqsZObS9u3s0OtwBHa1GFmqxsJLDz3Ep/o//pHWxLhxdFV973t8qr//fgasT5+mm2rbNh539iwtoDvuoDI5doxKZvFizqW6mork0UepNH73O8ZbIiIY0A/rYcZlD6Zi8FW98fllc/FS5Fz06+7CmHI73AMSYa1Zh+/3+RKmQUkYccyO8ConqqvZaDEqik0gJ01UmFaRhcuzZ+O+8iyMHKFwxx1UXpWVVCiFhcCv/kfwktjwP70WY1m4DWaL1BZjut101YlQ4TnuYQPFiLk2WFOlwaC5XhNEo+n8dD0l4vFHSWIiIgvscB11Ii+P8Qqnkym5wLlPx75PzIZSWbOGwn/hQsY0kpOpOB55hCsDut1UBpdeSmsnKopuLLO5rkVjFCEqBRw6xOr1MWOYDbZ+PfDKK8DAAQrdQxx4cJZCnz6s3+g2Kx2mFxfjvg0P45utJuR9Y0bktVYMVEWw3JKGET9Nw57PuRiVKcaMkSOpyPLyOOahXU6cXc3FsaK/siPlMmetqy0iArjtNrrrEhKAuHjBpSkW/O73grVrgV/9CoiLVUjs7YA5WiEkhNczZ65AYtiduLEuuzrFV6Pp/HS9inW/9hfmOHNtu47Jk727PfEEBbXNRuG+YIG3oj0zkxlMe/YwzjB2LKvZk5Io/KdPpxI5e5ZK4oc/5Jg33UQ3liFQbTYGtu+/n720jIK/mhrvKoglJcDpUwo/PJqFx/vaMWyiFa4FD8D86kLInAIoqxWudBvi44HsbEFuhA0TbBl48DEzXC7gL+vuRZ7LDGexYOBA1n4Ya5tsLzKjeKAVA/fbceY6KzJ/ZsZ9FUYzRW+l/tq1TCCoqaFy6dYNeHiewqX2LJz91I5VVVYsC7dh/XrBwoVsUOlbaBjkr0Kn+Go0nZAumeLrn1dqfIyOZlrr449TIRQV0W21dCmVyIgRtA7mz6eSGTiQqb9JScD+/azv2LEDuPxyZjqFh6M2rTY0lJZIaiqr4H0zvXJzmS77/vu0bKqqWJeyciXjDXHRDrwUPhspdyYi4kgRo/3Z2VAjRmDn8T54dvBiXDLeUmfN9/nzGdBfsICpzEOH0s22axddajXVCv26OTHhumgc3uPC4TNmjJ/ACvKYGAbvr7/eW+cSHu6tRVm1CrDAgZ2TZ+Ob04lAcRF+Fr4Y7mgLJk5kHKlWeTSSw6tTfDWa9kGn+J4PfsEO33Yd8fEU9IYvH6AFMmIEFURyMoWz1UrFkZ7ORZ/uuovWw5AhwObNDKCXl9MdtH49XV/9+vHpPjPz3AWzPv6Ygrp/f+C//gv47/9mt9zQUKAq3IzqcVaEHS6qbResho9A1dYdyK9ORt8hZhQUUFnt3k0X2uOPM2V5zhy2KomPZx3IvfcysWBOeBaePTsb6a5sHDxlRly8YNUqVqhnZfG6TSbGaQ4e5HW43d5b6IQZdrFiaHgRdsdZETfIjIEDGbSvtSiCCHroFF+NpnPTNZVIA/i3krdY6vaPmjuXwjUzk0J740ZWqs+Zw9eZM97eWdHRHPPUKf68dy8/DxlC5VFWxrVFdu/mMTffTMXxwANUQKGhDIT3iRW8bLLhleTFUHPmwp16NdZ92xt/cMzFC2ouvtshuOQSj8KpopstIYFuKJeL7qUXX+T1REUBIwY4McFtR81FiQjbYEfNGSc2b6aMHzaMcxOhYgwPZ1py374sbpw+nffEbOEqhIsvWYyoh234fI1g9Wq/+IdP0EPZ7XCUOHXwXKO5wOh6MZFGCOReCdT81eWihXLiBF1GIuxJtWEDYyvbtzOG4HYz1vHII/z+1Vd5XHU1cPvtXmE9cSID3mlp3lUArVa6xUJDgaHDBDmbLLjrLFA2xYb7/icDDjHD9Z3gSCkrzmNiWD1fXMwYS1iowoqXnLj1LjPi+3Id99xcYG+pGWurrEjbb8fmeCt69DDDXM3j9+7lHCwWKh+TiYrypps4/5gY7z3ItAmeL7dgfT4QEVk3FRpAbdBD2e3IqbZi6eNmWFP1elAazYWEtkR8COR9qc9nb6zBvmMHXV0FBfw+LY0LWB06xDhHv34MSkdEsEq+oIDZWm43A+9OJ4v8pk5l/CUzk26ohx7ieEuWsNixuNgbfDZbmAFVVe0tPgwJ4fu2bXSJnTyhkO7MQu9fz8aCS7OQkc46kWHDgKPHaNk86F6Mv/a0weHksrczZnj7hRmB8fvv53Vu3sygvC9OJxMKtm6lm87h8LuhHrPOOX8xlobYkJgkOgtLo7nA0ErEB/+UU4ejYZf+jBl1GzNaLIyRDBrEflwFBTzmppuYtpuTwyD81q1sF2KsJ6IU8LOfAW++6Z1DQgKtC6VoBS1a5BXuMTFsHDloEM8tQssmMZHZYjk5QI8wJy7aZ0dhNavHv8p14sgRryVR4xY4YMENNwqSkxnUnzXL+71vA8q33+Z8/BWAUkxEOHDA237+HERgjrc0WjOi0Wg6J1qJ+ODfVRYIXMdgCNg5c1iY5yvgLRYqiJ07+dQfGsqCvbQ0voyxH36YWU5//ztdSNu3MwvszBkev3w5lcj111OJvfKKV0iLULGcPMn9KysZ6zh6lEHwU6eAr3ebsb2nFVfFF+Hfp6woOmbGvHnAl19S8VgstJJycjinlSvr3gtDmQ0Zws+FhecqABEG7AcM4Ht9LqpASxZrNJoLAx0T8cF/8TsgcB2D08nYQv/+fM/IqNuocc4cWh4FBawu/9OfKGSdTq58GB/vXW/E4NgxKoSpU7mQlLGo1NatrMv44gu6wB55hOdwufgKC6PF1L8/FZGxHkpoqGBpiA01P87AK4uZfbVhA5MBqqtpKc2dC7zzDt1qr73G6zDm5FvDMW2ad8lgf5feXXfRHWfEURq6t01Zslij0XQOOpwlIiKPiogSkT7tc/66q/IFeoKOjmbQ/L33vItOGShFiyAyki1NCgvZuiQjA7juOgbTfV1jFgsLDkNDqSzOngW++ooZUaWltGa++YbWxttve+MO8fEM4JvNtCiOHqVi6N3buzTulWMEuw5bkJgkOHTIWxE/YwYVxN13cyxTgL8C32ufZVOIEQcEXn+VsSKkoSi1haHRdE06lBIRkYEAbgRQ3FrnqK/hX33bA9UxuFwU1IbF4GTzXJSVMRD++ONULvv387iBA4H//IcuruJipt4a3YKNV2ws02nNZmDSJCqM3FzgH/9gHKVnT+8clOIcXn+dQe+QEDZ47NuXx196KVvb//WvwDXXsPhx9GjWiJhMjGFMnEgXlsnEoL9vp+I6125WQHYWqjJnQ/loP8PdZawI6XQ27b5qNJoLg47mzvoLgCcArGxsx+ZgxDIM95Tx9Fzf9vowXD3LlvHzG29QGOfk0PKYPNlbNb5yJQsNRVjDcfo03x9/nGNUVLD31vDhtDr+8hfvyocrV3JOw4dzjkYhnzHX0aOZNRUfT1fWuHG0SH7yE1bUm0y8lvR0Bu3z8qgs0tMp9H/xC7Zx37Onrkuuzj1zOLFzmR3fOhMxqtCO4ekZkBhLHXdXSgpjOP73z+2u2y5GWysazYVHh7FERGQKgINKqa+D2DdTRDaKyMajR48GfQ6Hg1aAf6ZRUxsBinizsCZPZi1HTg5TegEK5dRUKgObjYph6FDuP3QoFUJCAlOB169nirCxwJPZzHn6VrOHhnIMm40WiLF9yxZaKNu3833PHi6Pu22bNzZiZHPNmuV1y731FpVMdTUto4kT649XOJQZ62qsSBQ2cnTCXDuu4e7KyDj3/inFpYJfeIHxHp3aq9FcmLSpJSIiqwH0DfDVLwH8N+jKahSlVDaAbIC9s4I7hk/Le/fyNW2aN1AeTCNA/3oRi4XC125nUFmEP0+f7u2NZTx19+3L7a+8QkuhoIAuoD59aH0Y1fBhYWzcqBQD1hMmMKCelkZrw5hHSgqtirFj+TktjZ+rqlj8eOONdeM0gHfOhnJKSmI68NNPc3ugehilgOVvCZaZbFgekYGf3GeG2SLnjKnUuffP6azbLuamm3Rqr0ZzIdIhGjCKyKUAPgXgeX7GAACHAIxTSh1p6NhADRgDCUSHg6myCQl0ORmNBgMeAwV3mROlTmY1ifi5uzIVxOWEiuZ6475ZW4EaCSrFzrlz5wLffcfPhw97YxgrV3IumZm0Io4fp0K54goG6CdO5FN/drZ3DunpPDY7m9bV3r1MB/7kE1o7xjFGLUdsLIP20dHecVJSvMqvupqxFaNzsUjj96yhe264CHNzGbeZNy9wAF+j0bQPF1QDRqXUFqVUnFIqSSmVBOAAgDGNKZDAYwUuEDSsjeLiwOmotQF0KLiXZOGLy2djoafSu6zMx12Tq1CxgCeQ7CxYzKpO23MjFnDkCN+N+TzxBBWDxcKajm7dGB/Zu5dptmYz5xURwThJVBTXQz950rtsr68rzliDxFAu06dzrJCQur25MjJ43RMmAA8+yH0zM+u6ofr1o1utTx8KfcPtFB3NlOCiooZTeAMpbcPd9eKL3vYpzUEH5jWajk2HUCItSX3xjaAL3pxOlH9ux9cnE5FqsmPLemdtH6uiIiAt2YmIgrpNBd1ur6BzuymcU1P5XlbmrSkJCWGA+9NPKViN5oabNjGGYbMBH3xAi6W8nNewezcF+QcfUEmsXk0LwrB+jJiHzUZl5dsixeGgmysujhZQnz68Jy4XFYLFwv0OHaJLbeVKZpVFRXHe2dmc29ixVDwBA+8NNOptaodef4WhVz7UaDo+HS07CwDgsUaaRUPxjaAK3sxcHfDyDXZ8UmbFpRPMiI/3KUKMNkOy6zYVrKxiPOL661kHkp/vfbovKaGr6L33WMfx1FPA1VfTvSPCuEFqqnchqNdeo7AcO5YB9fHj2b/qwQcZxC8sDJxJVatMMhV+eKMTvRPMWLCQvbV272Zs4uhRjmvESwzFOnUqs8X696dCWbCA17B3L8+Zn8/aEsOV5Wt5+CttoyixqQTKkGupsTUaTevRIWIi50OwMZEmoerGRM5xxSgFR4kTsx9nd9zFiynwe/ZkoeDs2VQgvXvTtbRvH91JH34I/PjHjIcsXuwVwsb7Aw8wJqIU3VpJSSxQFKFyAei28rekahfVilJYd28WTPl2fNvDij+esGHESK6H/tJLHMM/3dZ4+jdSdJOT2bU3MZFWT00NLahp05jhBdQV9kbDyGDTo+vDiL8Yi2oZ96cpqdcajSZ4LqiYSEvTnIWO6rhSRGDqZkHffgEUiOcERlPBwkJaGhUVTGV1ueiyWrUKGDmSQe6aGsZIxo+ngDTcUb7zNGIi0dEMpptMTBnOyWEK8fXXs0fVPffUzZ4yChxnzwZefNYJU74dFXGJ6L3DjtGDnNi5k5ZOSAiVQ79+3rhHTQ3wzDM8Vin2AJs7l/sXFzNDbMgQWiN5eTzGt0FkTg4/t0RfLP++ZYYFmZ5etzeZRqPpWFyQSqSpNMf3briCFiygGygighlQxgqJgwdTGK9ezc/jx7N63FBK/sFiET7pr1rFY4YMAf72N26/+mrGUQ4coMVQVsbYi9Fl97XXKNTXbzGjcowVFbuKUBBhxaHTZsydS9eZ2Vy3VUtkJJXE737HuId/sH7RIrqwJk70a0PvEfarV9O19uabnH99SjvYwLh/zArg9T30EK9Zo9F0TLQSQdOLDQGvC6lvX2Ze3Xgjg+VGsSDgLUi84QYuVrVuHZXLa695A+H+iiQmhlZDWBh7b4WFMc4yeDAtgtdeowtpwQLv2uwACw2tqYJRz9nw7sTF2DTWhuMnGBMxGjaGhnLM0FA+8RcUMOheXMzqd6MFC0DBbbivfC0B/0JLw0Kp7x41RTn7WmbN+Z1oNJq2p0sqEf+n4/pcKfUdZ1gBs2d7U2ZTU+kuuvder9A0m71P8kYr+D17ONbgwfULR2M+hw/zPT6exxYW8vshQ6gAkpM59vTpPJ8I8OR/Cc6GWLBzl2DUKG9fK/8xk5IYp1GKy/JaLHzqz8qipbNsGSvijViMr5VhFFr6WiiBOB9FEOzvRKPRtC8XZGC9IRrqn9VQMN73uDFjKJyNIPD8+bRG+vWju+iOO7zB8+hoFvvFxXkL+AL1mQp0Pv/iPYfD2wPLCGq7XN5zPP64txJ99Gi2kfctHvQf0+3mcdHRbF9vXM/TT9P6McZetercIsNgkhea2pOssXug0WhajpYKrHc5JRIoCyiYtFHf4/btY6qskelkZCjl5jLeEBracOaSr3AEmiYo66sM9686NxRMMOP6C/vMTH7OyaEFdM7a6U1AKwKNpmOilYiHlrJEmnqcv5CuTbON9m53OhtWWOf7pA6cqxTnz294lcGGrs9fOTVV+GuFodF0HlpKiXTIYsPWxH/1wmCFXaDjfBWC72fjvbHGji1RTOd/juYoEP/5B/rcGC2hEDUaTeej01siIlIGYEd7z6NhQkxATS8Ax879Lr6Pt79uSYDvm3QOd/OPr6UPAs4zmPMnJXANxvBwYF9xC82nPpo5zzalM8wR0PNsaTrLPEcopeppqRo8F4IlsqMlTLLWRkQ26nm2HJ1hnp1hjoCeZ0vTmebZEuN0yRRfjUaj0bQMWoloNBqNptlcCEoku70nECR6ni1LZ5hnZ5gjoOfZ0nSpeXb6wLpGo9Fo2o8LwRLRaDQaTTuhlYhGo9Fomk2nUyIi8pSIHBSRrzyvW+rZ72YR2SEiu0XkyXaY5zMi8p2IfCMi74tIj3r22yciWzzX0iIpd0HMrcF7IyIRIvKO5/t8EUlqi3n5zWGgiHwuIttFZJuIPBxgn0kictrnb+HXbT1Pzzwa/B0KecFzP78RkTHtMMcRPvfpKxE5IyKP+O3TLvdTRF4RkVIR2eqzrZeIrBKRXZ73nvUcO82zzy4RmdYO8+xw/+f1zLP15KZSqlO9ADwF4LFG9gkBsAfAYADhAL4GcHEbz/NGAKGen58G8HQ9++0D0KcN59XovQEwG8ASz893AXinHX7P/QCM8fwcA2BngHlOAvDPtp5bU3+HAG4B8BEAATABQH47zzcEwBEAiR3hfgJIAzAGwFafbfMBPOn5+clA/z8AegEo9Lz39Pzcs43n2eH+z+uZZ6vJzU5niQTJOAC7lVKFSqlKAG8DmNKWE1BKfaKUqvZ8XA9gQFuevwGCuTdTAHiawOM9ANeLtG0TE6XUYaXUJs/PZQC+BXBRW86hBZkC4HVF1gPoISL92nE+1wPYo5Qqasc51KKUygFwwm+z79/gawCmBjj0JgCrlFInlFInAawCcHNbzrMj/p/Xcz+DoVlys7MqkTke8/GVeszciwDs9/l8AO0rgGaAT6KBUAA+EZECEclsg7kEc29q9/H8g5wG0LsN5hYQjzvtSgD5Ab5OEZGvReQjEbmkbWdWS2O/w47293gXgBX1fNcR7icAxCulDnt+PgIgPsA+He2+dqT/80C0itzskEpERFaLyNYArykAXgQwBMAVAA4D+FMHnaexzy8BVAOob5HXq5VSYwB8D8BDIpLWBlPvNIiIBcDfADyilDrj9/Um0CVzOYAFAD5o4+kZdJrfoYiEA7gNwF8DfN1R7mcdFH0tHboWoRP8n7ea3OyQvbOUUpOD2U9EXgLwzwBfHQQw0OfzAM+2FqWxeYrIdAA/AHC95x8h0BgHPe+lIvI+aFLmtPBUfQnm3hj7HBCRUADdARxvxTkFRETCQAWyXCn1d//vfZWKUurfIrJYRPoopdq0+V0Qv8M2+XsMku8B2KSUKvH/oqPcTw8lItJPKXXY4/orDbDPQTCOYzAAwJo2mFsdOuj/uf/5a3/fLS03O6Ql0hB+vuTbAWwNsNsGAMNEZJDnyesuAB+2xfwMRORmAE8AuE0p5apnH7OIxBg/g0G6QNfTkgRzbz4EYGS63AHgs/r+OVoLTwxmKYBvlVJ/rmefvkasRkTGgX/PbarsgvwdfgjgPiETAJz2cdW0NXejHldWR7ifPvj+DU4DsDLAPv8BcKOI9PS4Z270bGszOvD/uf8cWk9utkW2QAtnHrwBYAuAbzwX2M+zvT+Af/vsdwuY0bMHwC/bYZ67Qf/iV57XEv95glkQX3te29pqnoHuDYDfgv8IABAJujt2A/gSwOB2uH9Xgy6Mb3zu4S0AZgGY5dlnjue+fQ0GNa3tMM+Av0O/eQqARZ77vQXA2Laep2ceZlApdPfZ1u73E1RqhwFUgX74mWAM7lMAuwCsBtDLs+9YAC/7HDvD83e6G8D97TDPDvd/Xs88W01u6rYnGo1Go2k2nc6dpdFoNJqOg1YiGo1Go2k2WoloNBqNptloJaLRaDSaZqOViEaj0WiajVYimi6Hp15jurBDsUPY0fZzEfl+EMcmiYjyefVogynXN5c1PvOY017z0HRttBLRdEUWA3gZ7MV1O4A7ARQD+KeI/CzIMR4DkAKgrFVmGByzPXPQaNqNDtn2RKNpLURkKlhg96BSaonPVx+JyBEAz4jIp0qpbxoZaodiR952Qym1HQDauMGyRlMHbYlouhoPg1XGLwX47g8AHGDldpMRkT8KFx5yiMgBEVkuIn0bOWaSxx012m/7GhF5rznz0GjaEq1ENF0GTzPJFAD/UErV+H+vlDoN4HMAE5t5ijhQEX0fwCNgu4vPRET/n2kuWLQ7S9OV6AMgAkBDizEVgQ3ymoxSaobxs4iEAMgDexddjTbs2KrRtCX6CUmjOZdmNZQTke+JiF1EToNrSxzwfDW8xWam0XQwtBLRdCWOAagAkNjAPolgB9QmISJXgd1RDwC4F3SbTfB8HdnU8TSazoJWIpoug+JSv3YA3w8UpxCRbuAiR/ZmDH87gKMA7lRKfejJ3DoSxHHlnvdwv+2Bli/VaDocWolouhovgO6lnwb47kkAPQC82oxxowBUqbprK6QHcZzh8hplbBCRgQBGNmMOGk2bowPrmi6FUuoDEVkCYJGIXAwuExoKFhxOB7BQKbWmGUOvAvCIiDwH4B8ArAAy/HcSkaUAJiqlhnrmc0BENgL4nYi4wAe7/wZwwu+4+wC8AmCIUqqhxACNpk3RSkTTFZkNVqs/COABANGe7U8CmN+cARXXJP8FgLmeMfPAdbd3+u0agnP/7+4GK+jfBC2TJwD4V86bPMfqykJNh0KvbKjp8ojIRQA2AtgM4NZANSQ++yYB2AtgCrisaHWbTDLwXAylUgVgrlJqYXvNRdN10TERTZdHKXUQDIxfB8ZMgmElgKr2bMAIrkFe1Y7n12i0JaLRNAURCQdwmc+mzQ1ZLq08lxEAYjwfi5RSR9tjHpqujVYiGo1Go2k22p2l0Wg0mmajlYhGo9Fomo1WIhqNRqNpNlqJaDQajabZaCWi0Wg0mmbz/wGi6jsfiRo15gAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x_min = -5\n", + "x_max = 15\n", + "y_min = -5\n", + "y_max = 10\n", + "IQ_01_plot(x_min, x_max, y_min, y_max)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "さて、実際に識別器を構築する時が来ました。先に述べたように、線形判別分析(Linear Discriminant Analysis, LDA)と呼ばれる機械学習のテクニックを使います。LDAは、任意のデータセットをカテゴリーのセット(ここでは$|0\\rangle$と$|1\\rangle$)に分類するために、各カテゴリーの平均の間の距離を最大化し、各カテゴリーの分散を最小化します。より詳しくは、[こちら](https://scikit-learn.org/stable/modules/lda_qda.html#id4) (Ref. [3](#refs))をご覧ください。\n", + "\n", + "LDAは、セパラトリックス(separatrix)と呼ばれるラインを生成します。与えられたデータポイントがどちら側のセパラトリックスにあるかに応じて、それがどのカテゴリーに属しているかを判別できます。我々の場合、セパラトリックスの片側が$|0\\rangle$状態で、もう一方の側が$|1\\rangle$の状態です。\n", + "\n", + "我々は、最初の半分のデータを学習用に使い、残りの半分をテスト用に使います。LDAの実装のために`scikit.learn`を使います:将来のリリースでは、この機能は、Qiskit-Ignisに直接実装されてリリースされる予定です([ここ](https://github.com/Qiskit/qiskit-ignis/tree/master/qiskit/ignis/measurement/discriminator)を参照)。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果データを判別に適したフォーマットになるように再形成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def reshape_complex_vec(vec):\n", + " \"\"\"\n", + " 複素数ベクトルvecを取り込んで、実際のimagエントリーを含む2d配列を返します。\n", + " これは学習に必要なデータです。\n", + " Args:\n", + " vec (list):データの複素数ベクトル\n", + " 戻り値:\n", + " list:(real(vec], imag(vec))で指定されたエントリー付きのベクトル\n", + " \"\"\"\n", + " length = len(vec)\n", + " vec_reshaped = np.zeros((length, 2))\n", + " for i in range(len(vec)):\n", + " vec_reshaped[i]=[np.real(vec[i]), np.imag(vec[i])]\n", + " return vec_reshaped" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2048, 2)\n" + ] + } + ], + "source": [ + "# IQベクトルを作成します(実部と虚部で構成されています)\n", + "zero_data_reshaped = reshape_complex_vec(zero_data)\n", + "one_data_reshaped = reshape_complex_vec(one_data) \n", + "\n", + "IQ_01_data = np.concatenate((zero_data_reshaped, one_data_reshaped))\n", + "print(IQ_01_data.shape) # IQデータの形を確認します" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、学習用データとテスト用データを分割します。期待される結果(基底状態のスケジュールは`0`の配列、励起状態のスケジュールは`1`の配列)を含む状態ベクトルを使ってテストします。" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2048\n" + ] + } + ], + "source": [ + "#(テスト用に)0と1でベクトルを構築する\n", + "state_01 = np.zeros(NUM_SHOTS) # shotsは実験の回数\n", + "state_01 = np.concatenate((state_01, np.ones(NUM_SHOTS)))\n", + "print(len(state_01))\n", + "\n", + "# データをシャッフルしてトレーニングセットとテストセットに分割します\n", + "IQ_01_train, IQ_01_test, state_01_train, state_01_test = train_test_split(IQ_01_data, state_01, test_size=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、モデルを設定して、学習します。学習精度が表示されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearDiscriminantAnalysis()" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# LDAをセットアップします\n", + "LDA_01 = LinearDiscriminantAnalysis()\n", + "LDA_01.fit(IQ_01_train, state_01_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 0.]\n" + ] + } + ], + "source": [ + "# シンプルなデータでテストします\n", + "print(LDA_01.predict([[0,0], [10, 0]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.939453125\n" + ] + } + ], + "source": [ + "# 精度を計算します\n", + "score_01 = LDA_01.score(IQ_01_test, state_01_test)\n", + "print(score_01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後のステップは、セパラトリックスをプロットすることです。" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# セパラトリックスを表示データの上にプロットします\n", + "def separatrixPlot(lda, x_min, x_max, y_min, y_max, shots):\n", + " nx, ny = shots, shots\n", + "\n", + " xx, yy = np.meshgrid(np.linspace(x_min, x_max, nx),\n", + " np.linspace(y_min, y_max, ny))\n", + " Z = lda.predict_proba(np.c_[xx.ravel(), yy.ravel()])\n", + " Z = Z[:, 1].reshape(xx.shape)\n", + "\n", + " plt.contour(xx, yy, Z, [0.5], linewidths=2., colors='black')\n", + "\n", + "IQ_01_plot(x_min, x_max, y_min, y_max)\n", + "separatrixPlot(LDA_01, x_min, x_max, y_min, y_max, NUM_SHOTS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "セラパトリックスのどちらのサイドがどの重心(つまり状態)に対応しているか確認します。IQ平面上の点が与えられると、このモデルはセラパトリックスのどちらの側にそれが置かれているかチェックし、対応する状態を返します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. $|0\\rangle$, $|1\\rangle$, $|2\\rangle$ の状態の識別 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$0, 1$の識別器をキャリブレーションしたので、高エネルギー状態の励起に移ります。特に、$|2\\rangle$の状態の励起にフォーカスし、$|0\\rangle$と$|1\\rangle$と$|2\\rangle$の状態をそれぞれのIQデータポイントから判別する識別器を構築することに焦点を当てます。さらに高い状態($|3\\rangle$、$|4\\rangle$など)の手順も同様ですが、明示的にテストはしていません。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "高い状態の識別器を構築する手順は以下の通りです:\n", + "\n", + "1. $1\\rightarrow2$周波数を計算します。\n", + "2. $1\\rightarrow2$のための$\\pi$パルスの振幅を得るためにラビ実験を行います。そのためには、まず、$0\\rightarrow1$ $\\pi$パルスを適用して、$|0\\rangle$から$|1\\rangle$の状態にします。次に、上記で得た$1\\rightarrow2$周波数において、駆動振幅のスイープを行います。\n", + "3. 3つのスケジュールを構成します:\\\n", + " a. 0スケジュール:基底状態を測定するだけです。\\\n", + " b. 1スケジュール:$0\\rightarrow1$ $\\pi$パルスを適用し、測定します。\\\n", + " c. 2スケジュール:$0\\rightarrow1$ $\\pi$パルスを適用し、次に$1\\rightarrow2$ $\\pi$パルスを適用し測定します。\n", + "4. 各スケジュールのデータを学習用データとテスト用データのセットに分け、判別用のLDAモデルを構築します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2A. 1->2 周波数の計算 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "キャリブレーションの最初のステップは、$1\\rightarrow2$ の状態に移行するために必要な周波数を計算することです。これを行うには2つの方法があります:\n", + "\n", + "1. 基底状態から周波数をスイープし、非常に高い電力をかけます。印加電力が十分に高い場合には、2つのピークが観測されます。1つはセクション [1](#discrim01)で見つかった $0\\rightarrow1$周波数で、もう一つは、$0\\rightarrow2$周波数です。$1\\rightarrow2$周波数は2つの差を取ることで得られます。残念ながら、`ibmq_armonk`では、最大駆動電力$1.0$はこの遷移を起こすのに十分ではありません。代わりに、2番目の方法を使います。\n", + "\n", + "2. $0\\rightarrow1$ $\\pi$パルスを適用して、$|1\\rangle$状態を励起します。その後、$|1\\rangle$状態のさらに上の励起に対して、周波数スイープを実行します。$0\\rightarrow1$周波数より低いところで、$1\\rightarrow2$周波数に対応した単一ピークが観測されるはずです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### サイドバンド法を使用した1->2 の周波数スイープ " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の2番目の方法に従いましょう。$0\\rightarrow 1$ $\\pi$パルスを駆動するために、ローカル共振(local oscilattor, LO)周波数が必要です。これは、キャリブレーションされた$0\\rightarrow1$周波数`cal_qubit_freq`(セクション[1](#discrim01)のラビ$\\pi$パルスの構築を参照)によって与えられます。ただし、$1\\rightarrow2$周波数の範囲をスイープするために、LO周波数を変化させる必要があります。残念ながら、Pulseのスペックでは、各スケジュールごとに、一つのLO周波数が必要です。\n", + "\n", + "これを解決するには、LO周波数を`cal_qubit_freq`にセットし、を`freq-cal_qubit_freq`で$1\\rightarrow2$パルスの上にサイン関数を乗算します。ここで`freq`は目的のスキャン周波数です。知られているように、正弦波サイドバンドを適用すると、プログラムのアセンブル時に手動で設定せずにLO周波数を変更可能です。" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def apply_sideband(pulse, freq):\n", + " \"\"\"freq周波数でこのパルスに正弦波サイドバンドを適用します。\n", + " 引数:\n", + " pulse (SamplePulse):対象のパルス。\n", + " freq (float):スイープを適用するLO周波数。\n", + " 戻り値:\n", + " SamplePulse:サイドバンドが適用されたパルス(freqとcal_qubit_freqの差で振動します)。\n", + " \"\"\"\n", + " # 時間は0からdt*drive_samplesで、2*pi*f*tの形の正弦波引数になります\n", + " t_samples = np.linspace(0, dt*drive_samples, drive_samples)\n", + " sine_pulse = np.sin(2*np.pi*(freq-cal_qubit_freq)*t_samples) # no amp for the sine\n", + " \n", + " # サイドバンドが適用されたサンプルパルスを作成\n", + " # 注:sq_pulse.samplesを実数にし、要素ごとに乗算する必要があります\n", + " sideband_pulse = SamplePulse(np.multiply(np.real(pulse.samples), sine_pulse), name='sideband_pulse')\n", + " \n", + " return sideband_pulse " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "プログラムをアセンブルするためのロジックをメソッドにラップして、プログラムを実行します。" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def create_excited_freq_sweep_program(freqs, drive_power):\n", + " \"\"\"|1>状態を励起することにより、周波数掃引を行うプログラムを作成します。\n", + " これにより、1-> 2の周波数を取得できます。\n", + " 較正された量子ビット周波数を使用して、piパルスを介して|0>から|1>の状態になります。\n", + " |1>から|2>への周波数掃引を行うには、正弦係数を掃引駆動パルスに追加することにより、サイドバンド法を使用します。\n", + " 引数:\n", + " freqs (np.ndarray(dtype=float)):掃引周波数のNumpy配列。\n", + " drive_power (float):駆動振幅の値。\n", + " レイズ:\n", + " ValueError:75を超える頻度を使用するとスローされます; 現在、75個を超える周波数を試行すると、\n", + "        バックエンドでエラーがスローされます。\n", + " 戻り値:\n", + " Qobj:周波数掃引実験用のプログラム。\n", + " \"\"\"\n", + " if len(freqs) > 75:\n", + " raise ValueError(\"You can only run 75 schedules at a time.\")\n", + " \n", + " print(f\"The frequency sweep will go from {freqs[0] / GHz} GHz to {freqs[-1]/ GHz} GHz \\\n", + "using {len(freqs)} frequencies. The drive power is {drive_power}.\")\n", + "\n", + " base_12_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " sigma=drive_sigma,\n", + " amp=drive_power,\n", + " name='base_12_pulse')\n", + " schedules = []\n", + " for jj, freq in enumerate(freqs):\n", + " \n", + " # ガウシアンパルスにサイドバンドを追加\n", + " freq_sweep_12_pulse = apply_sideband(base_12_pulse, freq)\n", + " \n", + " # スケジュールのコマンドを追加\n", + " schedule = pulse.Schedule(name=\"Frequency = {}\".format(freq))\n", + "\n", + " # 0->1のパルス、掃引パルスの周波数、測定を追加\n", + " schedule |= pulse.Play(pi_pulse_01, drive_chan)\n", + " schedule |= pulse.Play(freq_sweep_12_pulse, drive_chan) << schedule.duration \n", + " schedule |= measure << schedule.duration # 駆動パルスの後に測定をシフト\n", + "\n", + " schedules.append(schedule)\n", + "\n", + " num_freqs = len(freqs)\n", + " \n", + " # スケジュールを表示します\n", + " display(schedules[-1].draw(channels=[drive_chan, meas_chan], label=True, scale=1.0))\n", + " \n", + " # 周波数掃引プログラムを組み込みます\n", + " # 注:LOは各スケジュールでのcal_qubit_freqです;サイドバンドによって組み込みます\n", + " excited_freq_sweep_program = assemble(schedules,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=[{drive_chan: cal_qubit_freq}]\n", + " * num_freqs)\n", + " \n", + " return excited_freq_sweep_program" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The frequency sweep will go from 4.574489007795566 GHz to 5.0044890077955655 GHz using 75 frequencies. The drive power is 0.3.\n" + ] + }, + { + "data": { + "image/png": "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hvXDH3y76vqosVAutrTc2smVmO0MMo868gjNnzfcvicEAAAAAKDHUJGJnhcEgV79qlfqggsu0MKFC/WsZz1L27dv189+9jP96le/0oW/vEjr1q2rus91112nN7/5TQmNuPsMZaX8SOXYmFKVZWSqvShn2quyXrfyuJQ7/f3jYaq1saXkXVqJCQAAAABAPyPI7FBf/spXNT42poMOOijpoXS9b59/vi644AIdeuga/erSX+mAA5ZKkn7+85/pVa98pc4++3XasOHmqr0t9j/gAJ19zjk65knH6Jhjj9GXvvhFffOb32zJ+A466CBt2HCzBgYHW/L47TCWm1zd2AnLtuNDSLlhhaeRXM1iLToAAAAAAOgoBJkNKBaL2rJliw444ICWN9dYsWJFSx+/n3z+8/8lSfroRz9aDjEl6fnPf4HOPPM5uuiiX+qXv7xQz3/+C8q3nXDCCTrhhBPKx8347x0EgR555JHycTSPUqmUHnfYYfv8+EmqV5EZr4acaQ/MmYzlzLT7YET7cdbufRktTZckN6zedIy6flONqeYSAAAAAKA9giBQsVic+UQ0FZ98G5DL5XXXnXfK9+t3bp5KfA/EPXv26N3vfpcOX3uY9l+yWOuOPUaf//znFcQ7o2jf9z8877xzy3s63nTTTXrBC56vFQcv1/KDDtTzz3qebrzxxkn3+e53vqP584Z13nnn1n3MRsd0w/XX62UvfamOPOJwLVm8SGsOfYxOOeVp+siHP6yRkZFJ599000169ateqceuOVSLF+2ntYc9Tm9+05t0//33N/bLx9x333266667NDAwoGc9e/IelM9/wQskSRdfdPGcn2M6t9++UWef/To94fFHaekB+2vdscfoWc88Xe98x9v14IMPSpp+j0zf9/Wf//EfOvaYJ2n/JYt1+NrD9O53v0t79uyZ9nkfeOABveMdb9cTnvB47b9ksVauXKEXvfCFuuH666e935YtW/SG179ehz7mEB2w/xI95cnr9b3vfa/uuddec43e8Y6366QTT9AJTzhIpxy7n9726sfre1/5gEb27tLoeCW5TKesbrnpSr3k6Rl94RNna2TPDn3qX9+qIw8/VEsWL9LfPHudLvr5tyY9R9TE54arLtQ5r3iaXvXshXrd8w/Upz/0Em2+72754f9toqXltVlpKvZVTXlfTNnyG198zt/95z/rla94uVatXKllSw/Q6c94hn71q19NGtNMe4q+4fWv1/x5w7rqqivr3l4rPkf2X7JYh6xepfUnn6T3vOfd2rJly6Tz77rzTr3hDa/XySedqCMOX6vjj1unv3vta3THHbfP6vkAAAAAAPvO933lcvmkh9F3CDLbKJfL63nPfY5+8P3v69hjj9XTn36q7r//fr3/fe/VP77xjS15zhtuuF5nPPtZeujBB/WM00/Xmsc+Vr/97W915hnP1uWXX96S55Skiy+6SM961jN10UW/1NKly/S8s87SE574RO3cuVOf/ey/a/v27VXnf/WrX9HpzzhNv/jFL7RixUo997nP1aJFi3T++d/S0576lCmb8szktj/9SZJ0+BFHKJVKTbr96KOfKEnauPG2OT3+dG655Rad8rSn6f/98IcaHh7WGWecqcMOO0zFoq9f/OIXuueee2Z8jLPPfp0++MEP6MEHH9Spp56mY445Rt//3vf0vOc+Z8o3zBtuuEEnn3ySvvqVryjleXrWs56lIw4/XJdffpme/exn6cc//lHd++3cuVOnnfp0XXbZr/WUpzxFJ518sjZu3Kg3vP4f6obbH/zgB/Xt889XdmBAJ5x8itad8HSNj+3Vz7//ab3pNafJCfaWz432spSk0ZFdevs5T9NVv7tQJ510sk488URtuvcuffIjb9Dlv/yGpEroWPSlr3/9a3rj2S/Wxj/epEMPW6fHH3ua/vrn3+t1L3uKHrz/r6UTp6j2jBcplhv9ONXXS9K9996rU099uv74xz/q1NNO1ZOe9CTdeOMNevGLXqjvfPvb9R+8CWrnyHOe8xwdd9zxKhQK+uIXvqC77/5z1fkXXnCBnvzk9frB97+v+fPn64QTTtDSpUv1s5/9TE8/5RRdc/XVLRsrAAAAAABJY2l5G91004066qijdMstt2rxkiWSpL/+9a8649nP0ve+910997nP1XOf97ymPuc3v/lNvfNd79KHPvRhmTDJ+drXvqq3v+1teuMbXq8//PFPGhgYaOpzStJ//ud/KAgCffs736lasi1JN998sxYtWlQ+vvHGG/Xud71Ly5Yt0/d/8EM96UlPKt92/re+pTe/+U164xvfqN/89rcNj+P+B0rVnMun2Gv0oIOWS5I2b5571edUvvTFL2piYkLnnnue3vLWt6pQKOjaa64pjev++7VmzZpp7//jH/9IP/7R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QRDoXe96p8Zi+4necsst+spXvixjTHk8krRmTWmfxvPPP1+FQkHFMCt/4N479N0vTx7bTM147BRLyF/6slcpk8nowp//UDde95vKWP2C/uOT79bYWKl6uLznZviOFh3P9nuBkZERvf9976tqtnPppZfqpz/5iQYGBvTKV76qfP3q1au1YsUKbdy4Ub+8MNaZfXRU//TWt2jPnj2ze1JNPUcuvfRSSdLygw8uX/fmt7xVAwMD+uAHP6AL6oSZuVxOP/vZTxuunAYAAAAAoFuwtLyNjjvueBUKeT3p6CfqqU99qgqFoq644ncaGxvTS176Up31/On3iJyL1772tfrsv/+7LvjFL3TkUUfpr3/9q35/881KpVL64pe+XNVIZnh4WG9561v1yU98Qs965ula/+QnyxijDRs26LDHHabjjz9BN954w6ye95Of+Lg++IH36/GPf7wOPfRQWWv1pz/dpnvuuVv77bdIb3nrP5XPPenkk/WZf/93vfMd79BzzjxTRxxxhNasWSMvldLmTZv1pz/9UblcTs8766y6S6xn8qpXv1qXXvorXXDBBTr22GN1ytOepu3bt+vqq6/WwMCAvvrVr9Xt7B5VwEnSpk33lX6vT31SX//61yVJTzz6ifrsZz835fN+4+tf19v++Z+1du1aHXbYYXIcR7feeqvuvfdepdNpvetd75p23C960Yt14QUX6Kc//amOP26dnva0U+R5rq688kqtXr1axx13vG666caq+yxcuFDf/8EP9ZIXv0j/9E9v1b/926d0+BFHaOHChXpk61b94Q9/0K5du/S9731fRxxRvVT72c8+Q7fd9ic98QmP1/r167V7zx5decUVKhQKete7361jjjmmfO4rXvlK/dd//acuvvgiHXvMk/T4JxyrLY/s1C0brtJxTz5L9/75Jm15qP5y7XrG86pqJR4FnytWrNa5552nd77jHXrb65+nw5/wZC1YtEz33HGDxkZ26W/+9iX66Y9/OGVQOtudCl78kpfoggt+oauvvkrHrlunrVu26JprrpG1Vp/61L9NCp3f+9736U1v+ke98pWv0Pr16zU0NKybb96gefPm6znPea5++csLp3imarVzxPU83f3nP+tPf/qTstms3vue95bPPfTQQ/WNb/yPXve6v9drX/NqHXjggVqxYoWy2awK5xX0xz/+UaOjo7r6mmtn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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 0->1周波数より下で1->2の周波数を見つけるために400 MHzを掃引します\n", + "num_freqs = 75\n", + "excited_sweep_freqs = cal_qubit_freq + np.linspace(-400*MHz, 30*MHz, num_freqs)\n", + "excited_freq_sweep_program = create_excited_freq_sweep_program(excited_sweep_freqs, drive_power=0.3)\n", + "\n", + "# 確認のためにスケジュールの一例をプロットします" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "excited_freq_sweep_job = backend.run(excited_freq_sweep_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f968da3183f64001367e5c7\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(excited_freq_sweep_job.job_id())\n", + "job_monitor(excited_freq_sweep_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# (平均の)ジョブデータを取得します\n", + "excited_freq_sweep_data = get_job_data(excited_freq_sweep_job, average=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 注:シグナルの実部だけをプロットします\n", + "plt.scatter(excited_sweep_freqs/GHz, excited_freq_sweep_data, color='black')\n", + "plt.xlim([min(excited_sweep_freqs/GHz)+0.01, max(excited_sweep_freqs/GHz)]) # ignore min point (is off)\n", + "plt.xlabel(\"Frequency [GHz]\", fontsize=15)\n", + "plt.ylabel(\"Measured Signal [a.u.]\", fontsize=15)\n", + "plt.title(\"1->2 Frequency Sweep (first pass)\", fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最小値が$4.64$ GHz近辺に見られます。いくつかの偽の最大値がありますが、それらは、$1\\rightarrow2$周波数には大きすぎます。最小値が$1\\rightarrow2$周波数に対応します。\n", + "\n", + "相対最小関数を使って、この点の値を正確に計算します。これで、$1\\rightarrow2$周波数の推定値が得られます。" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# output_dataに相対的最小周波数を表示します;高さは下限(絶対値)を示します\n", + "def rel_maxima(freqs, output_data, height): \n", + " \"\"\"output_dataに相対的な最小周波数を出力します(ピークを確認できます);\n", + " 高さは上限(絶対値)を示します。\n", + " 高さを正しく設定しないと、ピークが無視されます。\n", + " 引数:\n", + " freqs (list):周波数リスト\n", + " output_data (list):結果のシグナルのリスト\n", + " height (float):ピークの上限(絶対値)\n", + " 戻り値:\n", + " list:相対的な最小周波数を含むリスト\n", + " \"\"\"\n", + " peaks, _ = find_peaks(output_data, height)\n", + " print(\"Freq. dips: \", freqs[peaks])\n", + " return freqs[peaks]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Freq. dips: [4.62678631e+09]\n" + ] + } + ], + "source": [ + "maxima = rel_maxima(excited_sweep_freqs, np.real(excited_freq_sweep_data), 10)\n", + "approx_12_freq = maxima" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "source": [ + "上記で得られた推定値を使って、より正確な掃引を行います(つまり、大幅に狭い範囲で掃引を行います)。これによって、$1\\rightarrow2$周波数のより正確な値を得ることができます。上下$20$ MHzをスイープします。" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The frequency sweep will go from 4.6067863050928635 GHz to 4.6467863050928635 GHz using 75 frequencies. The drive power is 0.3.\n" + ] + }, + { + "data": { + "image/png": "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Ph111FE67vjj1dPTo8suq8yozJH6yK4LF+b0kfPP/7G6u7v131/+sg4++OCcYw974xt10skn65lnntFNN95YkbYCAAAAABA1gswq2mGHiTr00EOH3P7Wt75NUjglOH+tzO117LHH5YQzmed821slSXfduaKsz5e2JBVIfuiUU3T//fcP+3cFQaBbb/272tvb9cY3vrHgMcuWLZMk3X//yoq0tVKWLFkiSfrUmWfq9ttvK2oR4GQyqfvuu0+S9B//+Z9D7j/88MM1YYcdhtz+17+GywUce+yxBR93pNfyta99rXbZddcht7/1bWH/vPPOOzO3taUG/G184Vld+X8X6wfnfVrf/J8P6WtfOkXfPufjiscTemZd4anzuyzaU+MnTBpy+6w54QjVTRsH14VcvSrsn4cc8fYhx4+fMEl771+4zxSSDi3TNXFmTR7sk4ceeqh2KPB6vu2tQ//2ciqmj/z1lvS/7XEF7x/8t72/vI0EAAAAAKBGMLW8iubMKVyJfPz48ZowYYK2bNmizZs3a9KkoSFPqWYP85xz54Qj/J5/fmgxkXL47//+sh595BHdcMP1uuGG6zVhhx10wP4H6Oijj9Y73vlOtbaGCy2+/PLGTOGfSROHBknZ8tfVHIuOznB0YW9PT8H7u7vDEZudnV0F798en/jEJ3X3XXfp9ttv1zFHH62Ozk7tsmAX7bPPUh122MgB3KZNmzQwMKDJkyerfZjRpHNmz9aWzZtzbluXKsR0+OGjPH6B13L27MJ9Zc6cOZKkDRuez9w2eVygC378I53/3S/K85IjPle+KdNmFry9vSP8N0gm+yWF08Nffil8zmk7zil4zrQZcwvePpxYbDDQ7GobrFg+e3bhx5+TGgm74fnnC96/vfL7SGdnp/bZd18dccQRes97TtD4rKnl69atkyQt3HWXER+zlP9PAAAAAACoBwSZGLNiRovOmjVLt952u2699VbdeOMNWnHHHZlQ83vf+55uvuUWTZo0SUEQhkmdnZ3DjjRL223RbkW3efasMJx79rnnCt7/3HNh5fDhQubtMW7cOF173fW6+667dMMNN+i2227TqlUPaNWqB/S73/1Of/7LzVq0aFFZnzP9b3T88cervb1j2ON2LTDyshgPPnCvfvDN/1Jn13h9/Oxvac99DlLn+B3V2ZGQtdLxh+2sTRsLh3+OU5mB4I6k/B5qjCSbtZ9/XwUEduz/n+T3kdvvuF233Xqr/vbXv+o73/62brzpz5m1VNP/tu9+93sU2EAvvvBi5nGmTpsqJzV3funSpWX8awAAAAAAqB0EmVW0fn3hgjJbt27Vli1b1NbWpgkTJpT3OYcpYrNufTi6a8cdB9fgi6cKhKTXlcz37LPPFvXcsVhMhx12mA477LDwOdet08c++hHdeuut+t53v6uvfPWrmjRpklpbW+U4ji648MKctTzLYfFrXiNJeuzRR5VMJodULl+1Klx3c489Fpf1edOMMTpg2TIdsGyZksmkrr/uOl188cW67bZbdc5Xv6pfXXZZwfMmTpyoRCKhjRs3qre3t2BBpvXrnxly28yZM/XEE0/ojDM/NWS90dEM1z/Tt0+fvmPmtmuvuUaS9KHTv6yjjjtBUljsR7Lq7+vV5pfDkb7b+885cfJ0PbP2n3rh+XWaNW9okP3C8+sy20ZWTiqqNNnp5RisX7+u8O2pUZDTdxz82xPx1P8n3YWrsj/7zNB/l5Fk9xEpLOb0mc98Rr//3e/0lf/9H/3y0nB9zhkzZ+qpf/9b55x7rsaNG5cpHCVJy5YvH9K3AQAAAABoNKyRWUWbNm3S3/8+tPL2H37/e0nSvvvuK9d1y/qc11xztXzfL/Ccf5Ak7X/Assxt06dPkyQ9+eTQtQ2feOKJYYOusZozZ44+ecaZkqRHH3tUUhh2HnjQQdq6dav+/ve/b9fjFzJv3jwtXLhQvb29BYugXHXllZKko44+quzPXciECRP07ne/W5L02GOPDXtcPB7PjKz74x//OOT+W265RZs3bxpy+yGHhGuwXnPN1UW37aGHHir4b5/unwcccEDmti1bwint06bPzC8Irr/95Y+yNgwSc+4bIdQsdJcxVouXLJck3fqX3w+5f+srm3T/3TcPOUeS5BQOUdPVzKdMyB01+de//lVbtmwZcvzv/zD0b5+WKsBT6LXatGlTSUWpsk2ZMlWf/WxY7f3RRx/N3H5oqiBQOkQGAAAAAKDZEGRW2Rc+//mcNeyefvppnXfe1yVJp5zyobI/39q1a/W1r52bc9svfv5z3XvvPZo6daqOO25wOvdee+2t9vZ2/eUvf9YDDzyQuf3ljRt1+mkfK2pq+Y9+9CO98MILQ27/859vkiTNmjm4TuJZnz5LjuPoox85VbffftuQc7Zt26ZfXXqpent7x/z82U477XRJ0he/+EW99NLgdNyrr7pK119/nXaeP1/HHPPmkh57JD/72U/19NNPD7l95cqw0M7MmYXXikw76eSTJUlfO/ecnBD55Y0b9cUvfL7gOR/44Ac1ZcoUff9739Mvfv7zIf9mnufp5ptv1qOPPjLk3CAIdNZZn1ZP1nqiDzzwgH7yk4tkjMm0R5IWLAjXabzmj7+Un1oj03GsnvrXY7rwe1/IeVyT97sYR7zlvYonWnTLDb/RP+65JVNp3POS+vG3zlZfb+HRw6OZ1JU7YnPbtm363Gc/m1Ns589//rP+9Mc/qq2tTSeccGLm9nnz5mn27Nl65JFHdN21g5XZu7u79YmPn66tW7eOuR3D9ZE///nPkqSZs2Zlbjvt9I+rra1NX/jC53VNgTCzv79fV175p6JHTgMAAAAAUC+YWl5F++yzr5LJAe255HV6/etfr2TS0623/l09PT16xzvfqWOPG3mNyFK8//3v13e/8x1dc/XV2mPxYv373//WP+6/X/F4XBdceFFOIZnOzk6d/vGP67yvf11HvOlwLT/wQBljtHLlSi3cdaH23Xc/3XvvPWN63vO+/jV94fOf02te8xrNnz9f1lo9/PBqPfnkE9phh4k6/eOfyBx7wLJl+vZ3vqNPf+pTOuboo7X77rtrwYIFisXjWrd2nR5++CH19/frLcceW3CK9WhOfO979ec/36RrrrlGe++9tw5+wxv08ssv64477lBbW5suvvinBSu7p0fASdLatU+Hf9c3ztPPfvYzSdLrlrxO3/3u94Z93p//7Gc645Of1KJFi7Rw4UI5jqNVq1bpqaeeUiKR0FlnnTViu9/2trfr2muu0Z/+9Cftu89SveENBysWc3Xbbbdp3rx52meffXXffffmnDNhwgRd8Zvf6h1vf5s+8YmP65vf/IZ22313TZgwQS++8IIefPBBbdmyRZdffoV2332PnHOPPPIorV79sF732tdo+fLlemXrVt12661KJpM66+yztddee2WOfc8JJ+iHP/yB7vj7dXrXsa/Voj321itbNuvB+2/XQYe+RY8+vDIz7Xt7ppdPn7mTPnLG1/WD887Q5z/+Fr12rwO1w6RpevThe7Vt6xa98ah36uYbfjPq4+S3wc37Cuft73iHrrnmat1xx+3ae+lSvbBhg1asWCFrrb7xjW8OCZ3/678+q4997KM64YT3aPny5ero6NT9969UV9c4HXPMm3XddddqLPL7iBuL6Yl//lMPP/ywWltb9V+f+a/MsfPnz9fPf/4LnXTSB/X+971XO+64o2bPnq3W1lYlz03qoYceUnd3t+5YceeoITkAAAAAAPWIEZlFaGtr1d5LlxYMvcaipSWha669Tm9929t033336ZZbbtbMmTN1zjnn6sILLypza0P77be/rr/hRk2bNk033Xij/vn44zr44IN1/fU36PDDDx9y/Oc+93l99avnaMbMmbrt1lv12KOP6sQTTtRVV1+tRGLsa/B945vf0n++9a3q6enRX/7yF918882KxVyddtrpuuvuuzMFTNJOOulk3Xrb7Xr3u9+jbdu26cYbb9Rfb7lF3d3b9Pa3v0P/97vf51RwLobjOLr0V5fp3HO/ph2nT9eNN96oRx55RMcdd5xuve027bPPPgXPW7nyvszPSy+9JEl6+qmnMrc9vmbNiM/7hS98USee+F4ZY3TrrbfqpptuknEcvfvd79HNt/xVyw88cNS2/+znv9D//u9XtOOOM3TzzX/Rfffdp7e+7W265trr1NKSKHjOvvvuq7vvuVef/OQZ6urq0oo77tB1116rdevXa/nyA3XBhRfp4KyQNm3ixIm65a9/08GHHKLbbrtNd9x+uxYtWqQLLrhQX/zil3KOnTRpkv5+62067v+9XcnkgO74+3Xa+NJzOvm0L+lLX7901L+rGMe/41T977d/q113X6rHVt+nlXfdrJ13ea3Ov/RWzZg9f2wPYganlRey88476+abb9EeeyzWLbfcovvvv1/77LOvfvt/v9P73v/+Icef+N736oILLtTChQt199136/77V+qoo47WzbfcUlQ/ze8jN95wg3p7+/S+971fK1bcqf2zprRL0jFvfrPuvOtunXzyKWpra9NDDz2kf/zjH9q4caOOPOoo/fLSS8teQAoAAAAAMFQsFlNbW2vUzWg6Jr2WHUZmjHlk0aJFu99738qiz127dq1es3gPHXjggbr+hqHrNFbCueeeo69/7Wu64IIL9Z4TTqjKc6L5bOk2enajo8BKfhCOfLRWSnpGrmNljDTgGcXdcLsvadQSswoCyQuMYq6VtUZ+IMVcK5nw3Lgbvi8l/dztlphVYLO2A8mXUdwJt9OBZWpTrit5nhSLSW7qvgmdVjMnhVPuf33Z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CzV+/PjMfV1dXfrx+ecrkUjoZz/9afF/MAAAqEkEmUVobW3RHosXy3XdqJuCOuS6rvZYvDjzQz9CqehLAIAonHHGGero6NDPfvZTvfjiC8Met+qBB9Tb26vXLVmiXRcuHHL/O9/5LknS3XffXXDa96GHHTbktgULFkiSXtiwIXPb7bffrmQyqTe+8Y1qa2sbcs60adM0f/58PfLII+rt7R39DwQAoAiu66q1tSXqZjQdgswiuK6ryZMny3F42VA8x3E0efLkzA/9CKWiLwEAojB5yhSdcsqH1NPTo+985zvDHvf8huclSXPnzCl4/4QJEzR+/Hj19vZq8+bNQ+6fOXPmkNs6U0WA+vsHMretW7tOknTJJZdoXFdnwZ/HHntM1tqCzwMAwPZwHIdBJRGIRd0AAAAAAPXhE5/4hH7604v185/9TJ/85BklP44xZtj7xvoFXXo052tf+1otXvyaEY9tSSTG3jgAAFCzCDIBAAAAjMmkyZP14Q+fqm9/+1v69re/pR2n7zjkmPRt69avL/gYr7zyirZs2aK2tjbtsMMOJbdlRmrk5v4HHKBvfevbJT8OAACoH8xHBAAAADBmp51+urq6unTJL36h555/bsj9S/bcU21tbVr1wAN68sknh9z/29/+RpK0//77b9fyKK9//evluq5uuvFGJZPJkh8HAADUD4LMIvT392v16tXyfT/qpqAO+b6v1atXZ37oRygVfQkAEKVJkybpw6eeqv7+fv3q0kuH3N/R0aETTjxRQRDoU586U93d3Zn7nnjiCX3zG9+QJJ166ke2qx0zZszQiSeeqLVr1+qDH3h/wQJE//rXv3TVVVdu1/MAAFCI7/vq7++PuhlNh6nlRfA8Xy9v3KggCFjQFUULgkAvb9yYs08/QinoSwCAqJ1++sf1k4su0tatWwve/+Uv/49W3nef/vbXv+q1r1msAw88UN3dPbrttlvV19enUz/yER119NHb3Y7zvvFNrV23TldddZVuvvlmveY1r9Ws2bPU092jNY+v0b//9S8dc8ybddxxx2/3cwEAkC0IAnkeg0qqjSATAAAAQFF22GEHfeSjH9V5X/96wfu7urp0/Q036oc//IH++Ic/6Prrr1cikdCee+6pk085RW9729vL0o62tjb98Y9/0m9/+1tdcfmv9dBDD+v++1dq8uTJmj17jt75znfqP//z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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 狭い範囲での掃引\n", + "num_freqs = 75\n", + "refined_excited_sweep_freqs = approx_12_freq + np.linspace(-20*MHz, 20*MHz, num_freqs)\n", + "refined_excited_freq_sweep_program = create_excited_freq_sweep_program(refined_excited_sweep_freqs, drive_power=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "refined_excited_freq_sweep_job = backend.run(refined_excited_freq_sweep_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f9690fc7b787b00147e8cbe\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(refined_excited_freq_sweep_job.job_id())\n", + "job_monitor(refined_excited_freq_sweep_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# より正確な(平均)データを取得する\n", + "refined_excited_freq_sweep_data = get_job_data(refined_excited_freq_sweep_job, average=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "標準ローレンツ曲線を用いて、このより正確な信号をプロットしてフィットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# Hzの単位でフィッティングする \n", + "(refined_excited_sweep_fit_params, \n", + " refined_excited_sweep_y_fit) = fit_function(refined_excited_sweep_freqs,\n", + " refined_excited_freq_sweep_data, \n", + " lambda x, A, q_freq, B, C: (A / np.pi) * (B / ((x - q_freq)**2 + B**2)) + C,\n", + " [-12, 4.625*GHz, 0.05*GHz, 3*GHz] # フィッティングのための初期パラメーター\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 注:シグナルの実数部のみをプロットしています\n", + "plt.scatter(refined_excited_sweep_freqs/GHz, refined_excited_freq_sweep_data, color='black')\n", + "plt.plot(refined_excited_sweep_freqs/GHz, refined_excited_sweep_y_fit, color='red')\n", + "plt.xlim([min(refined_excited_sweep_freqs/GHz), max(refined_excited_sweep_freqs/GHz)])\n", + "plt.xlabel(\"Frequency [GHz]\", fontsize=15)\n", + "plt.ylabel(\"Measured Signal [a.u.]\", fontsize=15)\n", + "plt.title(\"1->2 Frequency Sweep (refined pass)\", fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our updated estimate for the 1->2 transition frequency is 4.6263002 GHz.\n" + ] + } + ], + "source": [ + "_, qubit_12_freq, _, _ = refined_excited_sweep_fit_params\n", + "print(f\"Our updated estimate for the 1->2 transition frequency is \"\n", + " f\"{round(qubit_12_freq/GHz, 7)} GHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2B. 1->2 ラビ実験 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、$1\\rightarrow2$周波数の良い推定が得られたので、$1\\rightarrow2$遷移のための$\\pi$パルス振幅を得るためのラビ実験を行います。そのために、$0\\rightarrow1$ $\\pi$ パルスを適用してから、$1\\rightarrow2$周波数において駆動振幅をスイープします(サイドバンド法を使います)。" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実験の構成\n", + "num_rabi_points = 75 # 実験数(つまり掃引する振幅)\n", + "\n", + "# 駆動振幅の繰り返し値:0から1.0の間で均等に配置された75個の振幅\n", + "drive_amp_min = 0\n", + "drive_amp_max = 1.0\n", + "drive_amps = np.linspace(drive_amp_min, drive_amp_max, num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# スケジュールの作成\n", + "rabi_12_schedules = []\n", + "\n", + "# すべての駆動振幅をループします\n", + "for ii, drive_amp in enumerate(drive_amps):\n", + " \n", + " base_12_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " sigma=drive_sigma,\n", + " amp=drive_amp,\n", + " name='base_12_pulse')\n", + " # 1->2の周波数においてサイドバンドを適用\n", + " rabi_12_pulse = apply_sideband(base_12_pulse, qubit_12_freq)\n", + " \n", + " # スケジュールにコマンドを追加\n", + " schedule = pulse.Schedule(name='Rabi Experiment at drive amp = %s' % drive_amp)\n", + " schedule |= pulse.Play(pi_pulse_01, drive_chan) # 0->1\n", + " schedule |= pulse.Play(rabi_12_pulse, drive_chan) << schedule.duration # 1->2のラビパルス\n", + " schedule |= measure << schedule.duration # 駆動パルスの後に測定をシフト\n", + " \n", + " rabi_12_schedules.append(schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# プログラムにスケジュールを組み込みます\n", + "# 注:LO周波数はcal_qubit_freqであり、0->1のpiパルスを作ります;\n", + "# サイドバンドを使って、1->2のパルス用に変更されます\n", + "rabi_12_expt_program = assemble(rabi_12_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=[{drive_chan: cal_qubit_freq}]\n", + " * num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "rabi_12_job = backend.run(rabi_12_expt_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f96940d00cb39001375c22e\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(rabi_12_job.job_id())\n", + "job_monitor(rabi_12_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ジョブデータ(平均)を取得します\n", + "rabi_12_data = get_job_data(rabi_12_job, average=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We plot and fit our data as before." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# 注:信号の実部のみプロットします。\n", + "rabi_12_data = np.real(baseline_remove(rabi_12_data))\n", + "(rabi_12_fit_params, \n", + " rabi_12_y_fit) = fit_function(drive_amps,\n", + " rabi_12_data, \n", + " lambda x, A, B, drive_12_period, phi: (A*np.cos(2*np.pi*x/drive_12_period - phi) + B),\n", + " [3, 0.5, 0.9, 0])\n", + "\n", + "plt.scatter(drive_amps, rabi_12_data, color='black')\n", + "plt.plot(drive_amps, rabi_12_y_fit, color='red')\n", + "\n", + "drive_12_period = rabi_12_fit_params[2]\n", + "# piパルス用の振幅のためにphiを考慮します\n", + "pi_amp_12 = (drive_12_period/2/np.pi) *(np.pi+rabi_12_fit_params[3])\n", + "\n", + "plt.axvline(pi_amp_12, color='red', linestyle='--')\n", + "plt.axvline(pi_amp_12+drive_12_period/2, color='red', linestyle='--')\n", + "plt.annotate(\"\", xy=(pi_amp_12+drive_12_period/2, 0), xytext=(pi_amp_12,0), arrowprops=dict(arrowstyle=\"<->\", color='red'))\n", + "plt.annotate(\"$\\pi$\", xy=(pi_amp_12-0.03, 0.1), color='red')\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\", fontsize=15)\n", + "plt.ylabel(\"Measured signal [a.u.]\", fontsize=15)\n", + "plt.title('Rabi Experiment (1->2)', fontsize=20)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our updated estimate for the 1->2 transition frequency is 4.6263002 GHz.\n", + "Pi Amplitude (1->2) = 0.37256049920143336\n" + ] + } + ], + "source": [ + "print(f\"Our updated estimate for the 1->2 transition frequency is \"\n", + " f\"{round(qubit_12_freq/GHz, 7)} GHz.\")\n", + "print(f\"Pi Amplitude (1->2) = {pi_amp_12}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この情報を使って、$1\\rightarrow2$ $\\pi$パルスを定義できます。(必ず、$1\\rightarrow2$周波数でサイドバンドを追加してください。)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "pi_pulse_12 = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=pi_amp_12, \n", + " sigma=drive_sigma,\n", + " name='pi_pulse_12')\n", + "# このパルスがサイドバンドであることを再確認してください\n", + "pi_pulse_12 = apply_sideband(pi_pulse_12, qubit_12_freq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2C. 0,1,2の識別器を構築する " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "とうとう、 $|0\\rangle$と$|1\\rangle$と$|2\\rangle$状態の識別器を構築できます。手順はセクション[1](#discrim01)と同様ですが、$|2\\rangle$状態のためにスケジュールを追加します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3つのスケジュールがあります。(再度、私たちのシステムが$|0\\rangle$から開始することを思い出してください):\n", + "\n", + "1. $|0\\rangle$状態を直接測定します。($|0\\rangle$の重心を得ます。)\n", + "2. $0\\rightarrow1$ $\\pi$パルスを適用し、測定します。($|1\\rangle$の重心を得ます。)\n", + "3. $0\\rightarrow1$ $\\pi$パルスを適用した後、$1\\rightarrow2$ $\\pi$パルスを適用しそして測定します。($|2\\rangle$の重心を得ます。)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 3つのスケジュールを作ります\n", + "\n", + "# 基底状態のスケジュール\n", + "zero_schedule = pulse.Schedule(name=\"zero schedule\")\n", + "zero_schedule |= measure\n", + "\n", + "# 励起状態のスケジュール\n", + "one_schedule = pulse.Schedule(name=\"one schedule\")\n", + "one_schedule |= pulse.Play(pi_pulse_01, drive_chan)\n", + "one_schedule |= measure << one_schedule.duration\n", + "\n", + "# 励起状態のスケジュール\n", + "two_schedule = pulse.Schedule(name=\"two schedule\")\n", + "two_schedule |= pulse.Play(pi_pulse_01, drive_chan)\n", + "two_schedule |= pulse.Play(pi_pulse_12, drive_chan) << two_schedule.duration\n", + "two_schedule |= measure << two_schedule.duration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "プログラムを構築し、IQ平面上に重心をプロットします。" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# プログラムにスケジュールを組み込みます\n", + "IQ_012_program = assemble([zero_schedule, one_schedule, two_schedule],\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='single',\n", + " shots=NUM_SHOTS,\n", + " schedule_los=[{drive_chan: cal_qubit_freq}] * 3)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "IQ_012_job = backend.run(IQ_012_program)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f969656d3b8890012128a9e\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(IQ_012_job.job_id())\n", + "job_monitor(IQ_012_job)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# (単一の)ジョブデータを取得します;0,1,2に分割します\n", + "IQ_012_data = get_job_data(IQ_012_job, average=False)\n", + "zero_data = IQ_012_data[0]\n", + "one_data = IQ_012_data[1]\n", + "two_data = IQ_012_data[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def IQ_012_plot(x_min, x_max, y_min, y_max):\n", + " \"\"\"0、1、2のIQ平面をプロットするための補助関数。引数としてプロットの制限を与えます。\n", + " \"\"\"\n", + " # 0のデータは青でプロット\n", + " plt.scatter(np.real(zero_data), np.imag(zero_data), \n", + " s=5, cmap='viridis', c='blue', alpha=0.5, label=r'$|0\\rangle$')\n", + " # 1のデータは赤でプロット\n", + " plt.scatter(np.real(one_data), np.imag(one_data), \n", + " s=5, cmap='viridis', c='red', alpha=0.5, label=r'$|1\\rangle$')\n", + " # 2のデータは緑でプロット\n", + " plt.scatter(np.real(two_data), np.imag(two_data), \n", + " s=5, cmap='viridis', c='green', alpha=0.5, label=r'$|2\\rangle$')\n", + "\n", + " # 0、1、2の状態の結果の平均を大きなドットでプロット\n", + " mean_zero = np.mean(zero_data) # 実部と虚部それぞれの平均をとる\n", + " mean_one = np.mean(one_data)\n", + " mean_two = np.mean(two_data)\n", + " plt.scatter(np.real(mean_zero), np.imag(mean_zero), \n", + " s=200, cmap='viridis', c='black',alpha=1.0)\n", + " plt.scatter(np.real(mean_one), np.imag(mean_one), \n", + " s=200, cmap='viridis', c='black',alpha=1.0)\n", + " plt.scatter(np.real(mean_two), np.imag(mean_two), \n", + " s=200, cmap='viridis', c='black',alpha=1.0)\n", + " \n", + " plt.xlim(x_min, x_max)\n", + " plt.ylim(y_min,y_max)\n", + " plt.legend()\n", + " plt.ylabel('I [a.u.]', fontsize=15)\n", + " plt.xlabel('Q [a.u.]', fontsize=15)\n", + " plt.title(\"0-1-2 discrimination\", fontsize=15)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x_min = -10\n", + "x_max = 20\n", + "y_min = -25\n", + "y_max = 10\n", + "IQ_012_plot(x_min, x_max, y_min, y_max)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "今回は、$|2\\rangle$状態に対応した3個目の重心が観測されます。(注:プロットが見えない場合は、Notebookを再実行してください。)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このデータで、識別器を構築します。再び`scikit.learn` を使って線形判別分析(LDA)を使います。\n", + "\n", + "LDAのためにデータを形成することから始めます。" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(3072, 2)\n" + ] + } + ], + "source": [ + "# IQベクトルを作成します(実部と虚部で構成されています)\n", + "zero_data_reshaped = reshape_complex_vec(zero_data)\n", + "one_data_reshaped = reshape_complex_vec(one_data) \n", + "two_data_reshaped = reshape_complex_vec(two_data) \n", + "\n", + "IQ_012_data = np.concatenate((zero_data_reshaped, one_data_reshaped, two_data_reshaped))\n", + "print(IQ_012_data.shape) # IQデータの形を確認します" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、学習用データとテスト用データを分割します(前回と同じように半分ずつです)。テスト用データは、0スケジュールの場合、`0`の配列が含まれたベクトルで、1スケジュールの場合、`1`の配列が含まれたベクトルで、2スケジュールの場合`2`の配列が含まれたベクトルです。" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3072\n" + ] + } + ], + "source": [ + "# (テスト用に)0と1と2の値が含まれたベクトルを構築します\n", + "state_012 = np.zeros(NUM_SHOTS) # 実験のショット数\n", + "state_012 = np.concatenate((state_012, np.ones(NUM_SHOTS)))\n", + "state_012 = np.concatenate((state_012, 2*np.ones(NUM_SHOTS)))\n", + "print(len(state_012))\n", + "\n", + "# データをシャッフルして学習用セットとテスト用セットに分割します\n", + "IQ_012_train, IQ_012_test, state_012_train, state_012_test = train_test_split(IQ_012_data, state_012, test_size=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、モデルを設定して学習します。学習の精度が出力されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearDiscriminantAnalysis()" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# LDAを設定します\n", + "LDA_012 = LinearDiscriminantAnalysis()\n", + "LDA_012.fit(IQ_012_train, state_012_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 1. 1.]\n" + ] + } + ], + "source": [ + "# シンプルなデータでテストします\n", + "print(LDA_012.predict([[0, 0], [-10, 0], [-15, -5]]))" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.826171875\n" + ] + } + ], + "source": [ + "# 精度を計算します\n", + "score_012 = LDA_012.score(IQ_012_test, state_012_test)\n", + "print(score_012)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後のステップは、セパラトリックスのプロットです。" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "IQ_012_plot(x_min, x_max, y_min, y_max)\n", + "separatrixPlot(LDA_012, x_min, x_max, y_min, y_max, NUM_SHOTS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3つの重心を得たので、セラパトリックスは線ではなく、2つの線の組み合わせを含む曲線になります。$|0\\rangle$、$|1\\rangle$と$|2\\rangle$の状態を区別するために、私たちのモデルは、IQ上の点がセラパトリックスのどの側にあるかどこにあるかチェックし、それに応じて分類します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 参考文献 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. D. C. McKay, T. Alexander, L. Bello, M. J. Biercuk, L. Bishop, J. Chen, J. M. Chow, A. D. C ́orcoles, D. Egger, S. Filipp, J. Gomez, M. Hush, A. Javadi-Abhari, D. Moreda, P. Nation, B. Paulovicks, E. Winston, C. J. Wood, J. Wootton, and J. M. Gambetta, “Qiskit backend specifications for OpenQASM and OpenPulse experiments,” 2018, https://arxiv.org/abs/1809.03452.\n", + "2. Krantz, P. et al. “A Quantum Engineer’s Guide to Superconducting Qubits.” Applied Physics Reviews 6.2 (2019): 021318, https://arxiv.org/abs/1904.06560.\n", + "3. Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825-2830, 2011, https://scikit-learn.org/stable/modules/lda_qda.html#id4." + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

    Version Information

    Qiskit SoftwareVersion
    Qiskit0.23.0
    Terra0.16.0
    Aer0.7.0
    Ignis0.5.0
    Aqua0.8.0
    IBM Q Provider0.11.0
    System information
    Python3.8.5 (default, Sep 5 2020, 10:50:12) \n", + "[GCC 10.2.0]
    OSLinux
    CPUs8
    Memory (Gb)14.933807373046875
    Mon Oct 26 10:36:22 2020 CET
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + }, + "name": "accessing_higher_energy_states.ipynb", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "0117fe2086864268b695345eb993b147": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "01bbab8e119246a88ee3b09e1229b2fa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "078797cd3ef242b6a569180e189aa384": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "085d21aff5d84e3ea3f3b1651926eec9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0a02520a5a594ad8b90dddfe4b1eb4aa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_b041bb19d51849868cde0561fbb11ba8", + "style": "IPY_MODEL_7254d845151a4e45be9ad9c3a875d414", + "tooltip": "" + } + }, + "0a9514b48edd432291b9b1007e6e4a22": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "0e40f086824e40aa98be271a140be68a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_8f7b51ea3d084ddca215291b6c0e150a", + "style": "IPY_MODEL_01bbab8e119246a88ee3b09e1229b2fa", + "tooltip": "" + } + }, + "117d169d3cc940ba895f2647b11e2e96": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "122ee1bbc6734e80bbeaf9d2e5b1cb2b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "1464682d9e1042d9bb630145635be7f0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cdad2a5f9cbe4256b84dcbf9256a5ab9", + "placeholder": "​", + "style": "IPY_MODEL_b59b68fb51894a61829a67ecf44a0145", + "value": "5e8d9cfaff553c0012179aa4" + } + }, + "187fcc84101c46d69b51f397bbd2253f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_724460a290f845c2938a09aa4686a19f", + "placeholder": "​", + "style": "IPY_MODEL_3f0cc2ae34f443ea8495b4482699106e", + "value": "ibmq_armonk" + } + }, + "1d48ebf335104a91a1f2a5150625ce18": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1e51bd598b0045e6a27864ba5b46708e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "20b99485cb984191b474f7fc9462553b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2152afc8e3f346b495b4ccdb0f7361ea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_845d55c2926e4d038b275fbd75e46967", + "placeholder": "​", + "style": "IPY_MODEL_7575cbaacb8b451f96185dcf4f8c1196", + "value": "job has successfully run" + } + }, + "253706212f2e40fbaa17b150e835925d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2704ade5834e4aaca19ef0fbbc5bf700": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "2769b37745f24aecb5d8070f8d278892": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2899c899eef7421ca767892609f42d0b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "291bd8db9b684c46aa456cc1f2acd171": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2952d8c88e4e4f51affae0162f9b79b7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_f68ba631954849a9b8f0e297d4a90b30", + "style": "IPY_MODEL_ed3724551499478c9f3a0831170409d4", + "tooltip": "" + } + }, + "2a2a361cfb2f458a924be6fb805cb9e9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cea1c2ec249f4665a256e32d21dd8d42", + "placeholder": "​", + "style": "IPY_MODEL_253706212f2e40fbaa17b150e835925d", + "value": "DONE" + } + }, + "2a712471670f49cb81b3196e57d1492b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2d1535198bb74ab4905d745fde8aec24": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "2e79d6bc6ac244239b3200ea39362443": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2fbbe9d33219472dbea900faaab21178": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2fef62680958464bb3580c4a36c0ba5c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "311f0b00dc4849d5bc219c7242056390": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_473d6917b0ff4f7585a7c3360e0f8f82", + "style": "IPY_MODEL_f0b105aafdca4477a6e6717088b87239", + "tooltip": "" + } + }, + "345062fef3534841aaccb5e3486a8229": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c2bfae467cad4e33b5a4835de5204016", + "placeholder": "​", + "style": "IPY_MODEL_f368a2bce95f43f4adfe79b9bf321f24", + "value": "ibmq_armonk" + } + }, + "34d5bcd3ea5b4e0b885a73c2777a9db2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7c8524fdcc9b41fd8b58d67d7f22d19c", + "placeholder": "​", + "style": "IPY_MODEL_2fbbe9d33219472dbea900faaab21178", + "value": "-" + } + }, + "38e3aa5f615a42919ed057c0cf054e6b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3ad58a01c95e4eadb939529306756123": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3b87278f5939466ba244b89a5c758f5b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fbe292bc6a314b8a87759b2848f27d16", + "placeholder": "​", + "style": "IPY_MODEL_2a712471670f49cb81b3196e57d1492b", + "value": "DONE" + } + }, + "3cb76a2b06c04880aa9a3d8183cd5d8c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "3f0cc2ae34f443ea8495b4482699106e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "44168bcb34ef474db10b7459652a1681": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_a43cb1e8bb5d409fbe94b5d4dab1aea6", + "style": "IPY_MODEL_078797cd3ef242b6a569180e189aa384", + "tooltip": "" + } + }, + "45a0fd51c91d415fab5d64edf2c8bdde": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b920fc3f8d304e04bdf2f75e58946c8a", + "placeholder": "​", + "style": "IPY_MODEL_1d48ebf335104a91a1f2a5150625ce18", + "value": "5e8da1283ab1aa0011fd1772" + } + }, + "45cbb0e20c4b403d9fbfec37e305f7fe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "473d6917b0ff4f7585a7c3360e0f8f82": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "49564482536a4405af8179f2f5e3e4ec": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_919054a0ee9241e69e6a1f8377bdb6ed", + "placeholder": "​", + "style": "IPY_MODEL_fd3967c24e0e49d3a8581ca644a12422", + "value": "-" + } + }, + "4b58e00a866147e981ac092a6465b019": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "4baaf50aaf48421c879b95dfc076c983": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4c6ebeea692d4ed5a9115fb556597a8a", + "placeholder": "​", + "style": "IPY_MODEL_20b99485cb984191b474f7fc9462553b", + "value": "-" + } + }, + "4c6ebeea692d4ed5a9115fb556597a8a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "4e097ccd3e7d48e89b182451affe7b67": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cd9bc9ba4b4e4cfba2b066fca20b89fc", + "placeholder": "​", + "style": "IPY_MODEL_291bd8db9b684c46aa456cc1f2acd171", + "value": "
    Message
    " + } + }, + "4fb0ae8f2a3345ffaa6036c1456e0f5e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0a9514b48edd432291b9b1007e6e4a22", + "placeholder": "​", + "style": "IPY_MODEL_f9e9ef0dda3941aa9e90618a7c592b71", + "value": "DONE" + } + }, + "54f174da2fd14de4b5ec9029e4a703b3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "54fed3bdbb1f49b0a0ad282161c3a4b9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cf2c8e2a7ffc4fcd86188ab1a5a7aabf", + "IPY_MODEL_f2b88716ce854060a23d45ae1e8a520f", + "IPY_MODEL_8e53d9afa8954579a631fdbedd6f84f1", + "IPY_MODEL_4fb0ae8f2a3345ffaa6036c1456e0f5e", + "IPY_MODEL_34d5bcd3ea5b4e0b885a73c2777a9db2", + "IPY_MODEL_5bbd2e48ac9c45ed91182fb8782d8d62" + ], + "layout": "IPY_MODEL_98dafdd74738493a858c43250cc70090" + } + }, + "5539d47fc409401593a61c9edeac3816": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "5647d4bf528944a1a9f3b20a2787f5e1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "5721ba225f9e44478428a440ce157580": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8d88c2b744044539bdecf60490969dc0", + "placeholder": "​", + "style": "IPY_MODEL_45cbb0e20c4b403d9fbfec37e305f7fe", + "value": "ibmq_armonk" + } + }, + "584b5aecb35b4396a41a8daeeaaa1031": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "5ba1d6a3203142bca4d3ab1b3e6c0898": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": "right", + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 0px", + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "5bbd2e48ac9c45ed91182fb8782d8d62": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b52abacc01a44eceb66bcfc7a8892aff", + "placeholder": "​", + "style": "IPY_MODEL_782cc45cc7e145879d7c30a4ec743dc1", + "value": "job has successfully run" + } + }, + "6087b416576e441d8390ea11815bd7aa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_820738cf9d634304a78144ed183635c6", + "placeholder": "​", + "style": "IPY_MODEL_2fef62680958464bb3580c4a36c0ba5c", + "value": "5e8da7dfecce7e0011fb14a5" + } + }, + "6294aaa8576a48e292cfb57a575aedc5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "62c5630fdb924ec7a800c4878f0e3939": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2952d8c88e4e4f51affae0162f9b79b7", + "IPY_MODEL_c2f13ba2a16a4f13b008beeeab72b44e", + "IPY_MODEL_187fcc84101c46d69b51f397bbd2253f", + "IPY_MODEL_3b87278f5939466ba244b89a5c758f5b", + "IPY_MODEL_ff1b4987a3e64d76883b6e9f87252108", + "IPY_MODEL_fcf24945e4ef4e59824b142268e82c39" + ], + "layout": "IPY_MODEL_676117a50c9a452f886507f8a9a065a9" + } + }, + "62f99db3fbea4c1c97c9ec36b660f7f0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1e51bd598b0045e6a27864ba5b46708e", + "placeholder": "​", + "style": "IPY_MODEL_edf53f2c5dc745028bc7495bdd3b2cf2", + "value": "DONE" + } + }, + "676117a50c9a452f886507f8a9a065a9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6768722ede364581b6cfeaaa335f6653": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e896947c916148218e7eb6b837686246", + "placeholder": "​", + "style": "IPY_MODEL_baa7d0751ee44418bf975c06ba695301", + "value": "
    Status
    " + } + }, + "68ed87e86bc1446d99d65868f39f533a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6c9e069c613e4927a9be9f6614287c31": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5539d47fc409401593a61c9edeac3816", + "placeholder": "​", + "style": "IPY_MODEL_085d21aff5d84e3ea3f3b1651926eec9", + "value": "-" + } + }, + "6fd00e6193864e0dba815eaf20cdf5e3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "724460a290f845c2938a09aa4686a19f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "7254d845151a4e45be9ad9c3a875d414": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "7575cbaacb8b451f96185dcf4f8c1196": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "760aacf8a61f4fb7a995a174f7f2975e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 0px 0px 37px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "600px" + } + }, + "782cc45cc7e145879d7c30a4ec743dc1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "786d07b2a3b24ef9b4046c8eadedc056": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f29ce5c138f54b2e8f190b3419bbfd2b", + "placeholder": "​", + "style": "IPY_MODEL_54f174da2fd14de4b5ec9029e4a703b3", + "value": "
    Queue
    " + } + }, + "7c1e24def9f6484dbf57b179f86f986c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7c8524fdcc9b41fd8b58d67d7f22d19c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "7c8dffb8c291488cbac9b5abab5d64fc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "7c9c2c306b3d49a2a2b9a2e77c3bdf6e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d5d1827c43a049b8b5b81c4951e1e13e", + "placeholder": "​", + "style": "IPY_MODEL_6294aaa8576a48e292cfb57a575aedc5", + "value": "5e8da3a1ff553c0012179ade" + } + }, + "7e05292d7d3743bca77bfa022ad4ccc2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_44168bcb34ef474db10b7459652a1681", + "IPY_MODEL_7c9c2c306b3d49a2a2b9a2e77c3bdf6e", + "IPY_MODEL_ab9b36eff5454aa18a45fc96e87c094f", + "IPY_MODEL_fad006490e7b4424bdc54044df54cfb4", + "IPY_MODEL_6c9e069c613e4927a9be9f6614287c31", + "IPY_MODEL_2152afc8e3f346b495b4ccdb0f7361ea" + ], + "layout": "IPY_MODEL_fc96630c08af43a0bf3f8d57f6eda761" + } + }, + "800c24ad4e244eedbf4c36d45e72535c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4b58e00a866147e981ac092a6465b019", + "placeholder": "​", + "style": "IPY_MODEL_e459fc2de3fc4e04af3e82263940fa2e", + "value": "ibmq_armonk" + } + }, + "820738cf9d634304a78144ed183635c6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "844c7ce9b71042a59b43f227c262a395": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "845d55c2926e4d038b275fbd75e46967": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "85f9d1577d004da2a0eda7c9eb64d53a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8c1bfeaa1add46f5bbe8ffcd6d1d7bba": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "8cd43dc505264da8a34cc30a92b06560": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9722a2ae81eb4909962cbb2a0229281e", + "placeholder": "​", + "style": "IPY_MODEL_a2a4ded78a4b4535bf6b1b2f5d25c4ec", + "value": "-" + } + }, + "8d88c2b744044539bdecf60490969dc0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "8e53d9afa8954579a631fdbedd6f84f1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2704ade5834e4aaca19ef0fbbc5bf700", + "placeholder": "​", + "style": "IPY_MODEL_b0fae57827cf4440bc3f423a42ae78bf", + "value": "ibmq_armonk" + } + }, + "8ef86525a1324c7eb2580d4f84c51c6d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fc4cf071d3514fc9b56472ff13ef740d", + "placeholder": "​", + "style": "IPY_MODEL_844c7ce9b71042a59b43f227c262a395", + "value": "5e8d9dffff553c0012179aae" + } + }, + "8f7b51ea3d084ddca215291b6c0e150a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "919054a0ee9241e69e6a1f8377bdb6ed": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "928151e9059b420786dc974767215c3a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "GridBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "GridBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a2696351ed514955aed8df2efbf40cc7" + ], + "layout": "IPY_MODEL_c482d8ea4f524c349bd9678100358c47" + } + }, + "929abc0d38e04868bb3fe97d4e849dcf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "9722a2ae81eb4909962cbb2a0229281e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "98dafdd74738493a858c43250cc70090": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9afd65dbdcb34d5f8f5a4c6ed0bb18cb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9bad6d411ab34b7a91fc96b101c5a0c4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e786e60a8ae54ba6b1ffa9b9f11c5a80", + "placeholder": "​", + "style": "IPY_MODEL_c2de5dd8dc9a4935b5069927a1127016", + "value": "ibmq_armonk" + } + }, + "9db1c9dcd7ac41a6889153ba1cb65705": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a2696351ed514955aed8df2efbf40cc7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "primary", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_5ba1d6a3203142bca4d3ab1b3e6c0898", + "style": "IPY_MODEL_929abc0d38e04868bb3fe97d4e849dcf", + "tooltip": "" + } + }, + "a2869700156c4a2286716d7b52c79627": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a2a4ded78a4b4535bf6b1b2f5d25c4ec": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a32f00cb29dc41028be78ca33b410689": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a39220a461b9416696b3dd9177551c64", + "placeholder": "​", + "style": "IPY_MODEL_df88dbc63d36413b81c2c89fc0a6c2be", + "value": "
    Job ID
    " + } + }, + "a367f25f97b2449b8d8a9dd60c245af9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a39220a461b9416696b3dd9177551c64": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "a43cb1e8bb5d409fbe94b5d4dab1aea6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "ab9b36eff5454aa18a45fc96e87c094f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3cb76a2b06c04880aa9a3d8183cd5d8c", + "placeholder": "​", + "style": "IPY_MODEL_f8d88cb51df045a9991fa9a02502813f", + "value": "ibmq_armonk" + } + }, + "acdb3423e2be44878853bdde7fb37d85": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e5035e663bc6499082573becf62123cd", + "placeholder": "​", + "style": "IPY_MODEL_38e3aa5f615a42919ed057c0cf054e6b", + "value": "-" + } + }, + "acf62332d5f3411b86f7c8b9e35ca4a6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b041bb19d51849868cde0561fbb11ba8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "b0fae57827cf4440bc3f423a42ae78bf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b41d6fc809694b4eba54251c2e9bc013": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9db1c9dcd7ac41a6889153ba1cb65705", + "placeholder": "​", + "style": "IPY_MODEL_d2ce96d653784947b7eeb5d84bc23ba7", + "value": "job has successfully run" + } + }, + "b52abacc01a44eceb66bcfc7a8892aff": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b59b68fb51894a61829a67ecf44a0145": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b920fc3f8d304e04bdf2f75e58946c8a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "baa7d0751ee44418bf975c06ba695301": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "bcda951747c6483188c1b9309201ade4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "bd5a4f6d9de6433b85b3a0c8b9aa6d32": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_f07e15e3aef446268077254da6afc80d", + "IPY_MODEL_45a0fd51c91d415fab5d64edf2c8bdde", + "IPY_MODEL_5721ba225f9e44478428a440ce157580", + "IPY_MODEL_62f99db3fbea4c1c97c9ec36b660f7f0", + "IPY_MODEL_8cd43dc505264da8a34cc30a92b06560", + "IPY_MODEL_d58d208721b643059147531b342891fb" + ], + "layout": "IPY_MODEL_9afd65dbdcb34d5f8f5a4c6ed0bb18cb" + } + }, + "c0309ca6f2e54be9b0f9ca7794396a7b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8c1bfeaa1add46f5bbe8ffcd6d1d7bba", + "placeholder": "​", + "style": "IPY_MODEL_7c1e24def9f6484dbf57b179f86f986c", + "value": "DONE" + } + }, + "c1e8c326357144e6a957dbd9acba7527": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c578fc249993474392c5ff09b763e877", + "placeholder": "​", + "style": "IPY_MODEL_6fd00e6193864e0dba815eaf20cdf5e3", + "value": "job has successfully run" + } + }, + "c2bfae467cad4e33b5a4835de5204016": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "c2de5dd8dc9a4935b5069927a1127016": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c2f13ba2a16a4f13b008beeeab72b44e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2d1535198bb74ab4905d745fde8aec24", + "placeholder": "​", + "style": "IPY_MODEL_0117fe2086864268b695345eb993b147", + "value": "5e8d9d8c76f61000120ff6ca" + } + }, + "c42d1658968a4866887cddf6bc274355": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0a02520a5a594ad8b90dddfe4b1eb4aa", + "IPY_MODEL_8ef86525a1324c7eb2580d4f84c51c6d", + "IPY_MODEL_9bad6d411ab34b7a91fc96b101c5a0c4", + "IPY_MODEL_2a2a361cfb2f458a924be6fb805cb9e9", + "IPY_MODEL_acdb3423e2be44878853bdde7fb37d85", + "IPY_MODEL_c1e8c326357144e6a957dbd9acba7527" + ], + "layout": "IPY_MODEL_68ed87e86bc1446d99d65868f39f533a" + } + }, + "c482d8ea4f524c349bd9678100358c47": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "c578fc249993474392c5ff09b763e877": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c9c1cf50c0134831bd648321ccb36a14": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2899c899eef7421ca767892609f42d0b", + "placeholder": "​", + "style": "IPY_MODEL_117d169d3cc940ba895f2647b11e2e96", + "value": "DONE" + } + }, + "cb9c918855ac4c8d881c8fd8317f5857": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cd9bc9ba4b4e4cfba2b066fca20b89fc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cdad2a5f9cbe4256b84dcbf9256a5ab9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "cea1c2ec249f4665a256e32d21dd8d42": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "cf2c8e2a7ffc4fcd86188ab1a5a7aabf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_7c8dffb8c291488cbac9b5abab5d64fc", + "style": "IPY_MODEL_584b5aecb35b4396a41a8daeeaaa1031", + "tooltip": "" + } + }, + "d2ce96d653784947b7eeb5d84bc23ba7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d58d208721b643059147531b342891fb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a367f25f97b2449b8d8a9dd60c245af9", + "placeholder": "​", + "style": "IPY_MODEL_2769b37745f24aecb5d8070f8d278892", + "value": "job has successfully run" + } + }, + "d5d1827c43a049b8b5b81c4951e1e13e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "d6694c134680438ea8d165e841697426": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d8bb78eb8a3f4ac480c392146fbf4288": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "db9645bb457e483399547702f87d27f1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_acf62332d5f3411b86f7c8b9e35ca4a6", + "placeholder": "​", + "style": "IPY_MODEL_a2869700156c4a2286716d7b52c79627", + "value": "job has successfully run" + } + }, + "df88dbc63d36413b81c2c89fc0a6c2be": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e459fc2de3fc4e04af3e82263940fa2e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e5035e663bc6499082573becf62123cd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "e786e60a8ae54ba6b1ffa9b9f11c5a80": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "e896947c916148218e7eb6b837686246": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "ed3724551499478c9f3a0831170409d4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "edf53f2c5dc745028bc7495bdd3b2cf2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f07e15e3aef446268077254da6afc80d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_5647d4bf528944a1a9f3b20a2787f5e1", + "style": "IPY_MODEL_f929a1bd83b748f3acd0da7c58391f60", + "tooltip": "" + } + }, + "f0b105aafdca4477a6e6717088b87239": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "f123518d9c944471bbb725bda76570f1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f29ce5c138f54b2e8f190b3419bbfd2b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "f2b88716ce854060a23d45ae1e8a520f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bcda951747c6483188c1b9309201ade4", + "placeholder": "​", + "style": "IPY_MODEL_cb9c918855ac4c8d881c8fd8317f5857", + "value": "5e8da0965c27d000137e9587" + } + }, + "f368a2bce95f43f4adfe79b9bf321f24": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f420edea486d4c9ba4bdfbac7718245b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "f68ba631954849a9b8f0e297d4a90b30": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "f6f115159db74007ac2a32ffd5ff85be": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_311f0b00dc4849d5bc219c7242056390", + "IPY_MODEL_6087b416576e441d8390ea11815bd7aa", + "IPY_MODEL_800c24ad4e244eedbf4c36d45e72535c", + "IPY_MODEL_c9c1cf50c0134831bd648321ccb36a14", + "IPY_MODEL_4baaf50aaf48421c879b95dfc076c983", + "IPY_MODEL_b41d6fc809694b4eba54251c2e9bc013" + ], + "layout": "IPY_MODEL_85f9d1577d004da2a0eda7c9eb64d53a" + } + }, + "f8d88cb51df045a9991fa9a02502813f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f929a1bd83b748f3acd0da7c58391f60": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "f94650f964d74fa5a03d0a155184aa0b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a32f00cb29dc41028be78ca33b410689", + "IPY_MODEL_fcfe7b9015c946f3b176e8a18e7f16cd", + "IPY_MODEL_6768722ede364581b6cfeaaa335f6653", + "IPY_MODEL_786d07b2a3b24ef9b4046c8eadedc056", + "IPY_MODEL_4e097ccd3e7d48e89b182451affe7b67" + ], + "layout": "IPY_MODEL_760aacf8a61f4fb7a995a174f7f2975e" + } + }, + "f9e9ef0dda3941aa9e90618a7c592b71": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fad006490e7b4424bdc54044df54cfb4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f420edea486d4c9ba4bdfbac7718245b", + "placeholder": "​", + "style": "IPY_MODEL_d8bb78eb8a3f4ac480c392146fbf4288", + "value": "DONE" + } + }, + "fb6f243f45494dc6a860f63501bbb225": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "fbe292bc6a314b8a87759b2848f27d16": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "fc4cf071d3514fc9b56472ff13ef740d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "fc96630c08af43a0bf3f8d57f6eda761": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fcf24945e4ef4e59824b142268e82c39": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3ad58a01c95e4eadb939529306756123", + "placeholder": "​", + "style": "IPY_MODEL_d6694c134680438ea8d165e841697426", + "value": "job has successfully run" + } + }, + "fcfe7b9015c946f3b176e8a18e7f16cd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_122ee1bbc6734e80bbeaf9d2e5b1cb2b", + "placeholder": "​", + "style": "IPY_MODEL_f123518d9c944471bbb725bda76570f1", + "value": "
    Backend
    " + } + }, + "fd3967c24e0e49d3a8581ca644a12422": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ff1b4987a3e64d76883b6e9f87252108": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fb6f243f45494dc6a860f63501bbb225", + "placeholder": "​", + "style": "IPY_MODEL_2e79d6bc6ac244239b3200ea39362443", + "value": "-" + } + }, + "ff77df9fe9ee49679010393563c78657": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": null, + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0e40f086824e40aa98be271a140be68a", + "IPY_MODEL_1464682d9e1042d9bb630145635be7f0", + "IPY_MODEL_345062fef3534841aaccb5e3486a8229", + "IPY_MODEL_c0309ca6f2e54be9b0f9ca7794396a7b", + "IPY_MODEL_49564482536a4405af8179f2f5e3e4ec", + "IPY_MODEL_db9645bb457e483399547702f87d27f1" + ], + "layout": "IPY_MODEL_ffdd93ede37048569629514466811ae7" + } + }, + "ffdd93ede37048569629514466811ae7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/cQED-JC-SW.ipynb b/translations/ja/ch-quantum-hardware/cQED-JC-SW.ipynb new file mode 100644 index 0000000..2617ca5 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/cQED-JC-SW.ipynb @@ -0,0 +1,636 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 回路量子電磁力学 (Circuit Quantum Electrodynamics)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## 目次\n", + "\n", + "1. [序論](#intro)\n", + "2. [Schrieffer-Wolff変換](#tswt)\n", + "3. [Jaynes-Cummingsハミルトニアンのブロック対角化](#bdotjch)\n", + "4. [多準位のトランズモンへの拡張](#full-transmon)\n", + "5. [量子ビットのドライブ](#qdwcqed)\n", + "6. [交差共鳴 (Cross Resonance) ゲート](#tcreg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 序論 \n", + "\n", + "共振器量子電磁力学(Cavity Quantum Electrodynamics、CQED)における原子と光共振器の相互作用とのアナロジーで、回路量子電磁力学(circuit QED、cQED)は量子ビットとマイクロ波共振器との相互作用を記述する単純なモデルです。このモデルは、共振器中の光子数、原子(量子ビット)の状態、原子(量子ビット)と共振器との電気双極子相互作用を含みます。前節で見たように、トランズモンは多準位系ですが、トランズモンの非調和性(Anharmonicity)により基底状態 $|0\\rangle = |g\\rangle$ と第一励起状態 $|1\\rangle = |e\\rangle$ に限定することができます。従って、トランズモンを、以下のパウリスピン行列で記述した量子ビットと考えることができます。\n", + "$$\n", + "\\sigma^x = \\begin{pmatrix} 0 & 1 \\\\ 1 & 0 \\end{pmatrix} \\qquad\n", + "\\sigma^y = \\begin{pmatrix} 0 & -i \\\\ i & 0 \\end{pmatrix} \\qquad\n", + "\\sigma^z = \\begin{pmatrix} 1 & 0 \\\\ 0 & -1 \\end{pmatrix} \\qquad\n", + "$$\n", + "これらはブロッホ球の各軸周りの回転を意味します。この相互作用を記述する最も単純なモデルは、回転波近似をしたJaynes-Cummingsハミルトニアン\n", + "$$\n", + "H_{\\rm JC}^{\\rm (RWA)}/\\hbar = \\omega_r a^\\dagger a - \\frac{1}{2} \\omega_q \\sigma^z + g(a^\\dagger \\sigma^- + a \\sigma^+)\n", + "$$\n", + "です。 $\\omega_r$ と $\\omega_q$ はそれぞれ共振器と\"量子ビット\"の共振周波数で、 $a$ ($a^\\dagger$) は共振器中の光子の消滅(生成)演算子、 $g$ は電気双極子の結合(真空ラビ分裂の半分)です。ここで、演算子のハットを省いています。この式で、第一項は共振器の中の光子数、第二項は量子ビットの状態、第三項は電気双極子相互作用に対応し、 $\\sigma^\\pm = (1/2)(\\sigma^x \\mp i\\sigma^y)$ は量子ビットの昇降演算子です。(前章で述べたように、スピンの昇降演算子と逆符号になっています。)\n", + "\n", + "このハミルトニアンは厳密に解くことができ、解は量子ビットと共振器の状態のハイブリッドになっていて、共振器中の光子と量子ビットが共振($\\omega_r = \\omega_q$)している時、それらの励起のスワップがレート $g$ で起こっています。例えば、第3項の $a^\\dagger \\sigma^-$ は、共振器内に光子を生成し、量子ビットを $|1\\rangle$ から $|0\\rangle$ に下げ、 $a\\sigma^+$ は逆に光子を消滅し、量子ビットを $|0\\rangle$ から $|1\\rangle$ に上げます。興味深い現象ですが、量子コンピューターにとって、扱いたいのは量子ビットであって、このようなハイブリッド状態ではありません。これは、共振器が量子ビットの摂動として振る舞う(逆も成り立つ)ようにしたいということで、従って互いの存在に \"dressed\" された状態になります。 Schrieffer-Wolff (S-W) 変換と呼ばれる摂動論を用いることにより、望ましい形で量子ビットと共振器の特性を計算できるようになります。ここでは、量子ビットにこの手法を適用していますが、同様の手法はトランズモンの全準位に適用できます。トランズモンの高準位では、無視できない効果が表れ、設計・シミュレーションの際に考慮しなければなりません。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Schrieffer-Wolff変換 \n", + "\n", + "
    \n", + " Schrödinger方程式(ここをクリック)\n", + "量子力学の問題は、多くの場合ハミルトニアンの固有値方程式を対角化することに帰結します。\n", + "$$\n", + "H\\psi_m = E_m \\psi_m \\qquad {\\rm for} \\quad 1 \\le m \\le n\n", + "$$\n", + "$\\psi_m$ は固有値 $E_m$ に対応した固有状態です。この時、 $H' = U H U^\\dagger$ が対角になるようなユニタリー行列 $U$ が存在し、固有値方程式は\n", + "$$\n", + "\\hat{H} \\psi_m = E_m \\psi_m \\Longrightarrow U H U^\\dagger U \\psi_m = E_m U \\psi_m \\Longrightarrow H' \\psi_m' = E_m \\psi_m'\n", + "$$\n", + "となり、 $\\psi_m' = U\\psi_m$ は変換した固有状態で、ハミルトニアンは\n", + "$$\n", + "H' = \\begin{pmatrix}\n", + "E_1 & 0 & \\cdots & 0 \\\\\n", + "0 & E_2 & \\cdots & 0 \\\\\n", + "\\vdots & \\vdots & \\ddots & 0 \\\\\n", + "0 & 0 & \\cdots & E_n \\end{pmatrix}\n", + "$$\n", + "と対角化されます。\n", + "
    \n", + "\n", + "S-W変換では、ハミルトニアンの対角化でなく、*ブロック対角化*ができます。ハミルトニアンが対角項と摂動項に分けられると仮定し、\n", + "$$\n", + "H \\quad = \\quad \\underbrace{\\begin{pmatrix}\n", + "\\Box & & & & & & \\\\\n", + " & \\Box & & & & & \\\\\n", + " & & \\Box & & & & \\\\\n", + " & & & \\Box & & & \\\\\n", + " & & & & \\Box & & \\\\\n", + " & & & & & \\Box & \\\\\n", + " & & & & & & \\Box \\end{pmatrix}}_\\text{対角項} \\quad + \\quad \n", + "\\underbrace{\\begin{pmatrix}\n", + "\\times & \\times & \\times & \\times & \\cdot & \\cdot & \\cdot \\\\\n", + "\\times & \\times & \\times & \\times & \\cdot & \\cdot & \\cdot \\\\\n", + "\\times & \\times & \\times & \\times & \\cdot & \\cdot & \\cdot \\\\\n", + "\\times & \\times & \\times & \\times & \\cdot & \\cdot & \\cdot \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & \\times & \\times & \\times \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & \\times & \\times & \\times \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & \\times & \\times & \\times \\end{pmatrix}}_\\text{摂動項}\n", + "$$\n", + "$H_0$ を対角項とし、摂動項をさらにブロック対角項 $H_1$ と非ブロック対角項 $H_2$ に分け、 $H = H_0 + H_1 + H_2$ とします。\n", + "$$\n", + "H \\quad = \\quad \\underbrace{\\begin{pmatrix}\n", + "\\Box & & & & & & \\\\\n", + " & \\Box & & & & & \\\\\n", + " & & \\Box & & & & \\\\\n", + " & & & \\Box & & & \\\\\n", + " & & & & \\Box & & \\\\\n", + " & & & & & \\Box & \\\\\n", + " & & & & & & \\Box \\end{pmatrix}}_\\text{対角項}\n", + "\\quad + \\quad\n", + "\\underbrace{\\begin{pmatrix}\n", + "\\times & \\times & \\times & \\times & & & \\\\\n", + "\\times & \\times & \\times & \\times & & & \\\\\n", + "\\times & \\times & \\times & \\times & & & \\\\\n", + "\\times & \\times & \\times & \\times & & & \\\\\n", + " & & & & \\times & \\times & \\times \\\\\n", + " & & & & \\times & \\times & \\times \\\\\n", + " & & & & \\times & \\times & \\times \\end{pmatrix}}_\\text{blockブロック対角項}\n", + "\\quad + \\quad\n", + "\\underbrace{\\begin{pmatrix}\n", + " & & & & \\cdot & \\cdot & \\cdot \\\\\n", + " & & & & \\cdot & \\cdot & \\cdot \\\\\n", + " & & & & \\cdot & \\cdot & \\cdot \\\\\n", + " & & & & \\cdot & \\cdot & \\cdot \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & & & \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & & & \\\\\n", + "\\cdot & \\cdot & \\cdot & \\cdot & & & \\end{pmatrix}}_\\text{非ブロック対角項}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下の有効ハミルトニアン $H_{\\rm eff}$ がブロック対角化されるように、演算子 $S$ を求めます。\n", + "\n", + "$$\n", + "H_{\\rm eff} = e^{-S} H e^{S} = \\sum_{m=0}^\\infty \\frac{1}{m!} [H, S]^{(m)} = \\sum_{m=0}^\\infty \\lambda^m H^{(m)}\n", + "$$\n", + "\n", + "$H^{(m)}$ は $H$ の逐次近似($H^{(0)} = H_0$)であり、交換関係の一般項は再帰的に\n", + "\n", + "$$\n", + "[H,S]^{(m)} = [[H,S]^{(m-1)},S] \\qquad {\\rm with} \\qquad [H,S]^{(0)} = H\n", + "$$\n", + "\n", + "と定義します。ここで、 $S$ を $\\lambda$ の次数を持ったテーラー級数で表し、\n", + "\n", + "$$ S = \\sum_{m=1}^\\infty \\lambda^m S^{(m)} $$\n", + "\n", + "有効ハミルトニアンを $H_1+H_2$ の $\\lambda$ 2次までの摂動で展開します。\n", + "\n", + "$$\n", + "H_{\\rm eff} = H_0 + \\lambda (H_1+H_2) + \\left[H_0 + \\lambda(H_1+H_2), \\lambda S^{(1)}\\right] \n", + " + \\frac{1}{2} \\left[ \\left[ H_0 + \\lambda(H_1+H_2), \\lambda S^{(1)}\\right], \\lambda S^{(1)}\\right]\n", + " + \\left[H_0 + \\lambda(H_1+H_2), \\lambda^2 S^{(2)}\\right] + \\ldots \\\\\n", + " \\approx H_0 + \\lambda \\left( H_1 + H_2 + \\left[H_0, S^{(1)}\\right] \\right) \n", + " + \\lambda^2 \\left( \\left[H_1+H_2, S^{(1)}\\right] + \\frac{1}{2} \\left[ \\left[H_0, S^{(1)},\\right] S^{(1)}\\right] + \\left[H_0, S^{(2)}\\right]\\right)\n", + "$$\n", + "\n", + "ここで、 $H_{\\rm eff}$ の非ブロック対角項を消すために、 $S$ は非ブロック対角で反エルミートでなければなりません。その結果、 $H_{\\rm eff}$ の非ブロック対角項は\n", + "\n", + "$$\n", + "H_{\\rm eff}^{\\rm off-diag} = \\sum_{m=0}^\\infty \\frac{1}{(2m+1)!} [\\underbrace{H_0 + \\lambda H_1}_\\text{ブロック対角}, S]^{(2m+1)} + \\sum_{m=0}^\\infty \\frac{1}{(2m)!} [\\underbrace{\\lambda H_2}_\\text{非ブロック対角}, S]^{(2m)} \\equiv 0\n", + "$$\n", + "\n", + "となります。ここで、1つ目の級数の交換関係 $[H_0 + \\lambda H_1, S]$ は非ブロック対角であり、2つ目の級数の交換関係 $[\\lambda H_2, S]$ はブロック対角です。これは、ブロック対角行列と非ブロック対角行列の交換関係は非ブロック対角であり、2つの非ブロック対角行列の交換関係はブロック対角になるからです。1つ目の項は、 $[H_0 + \\lambda H_1, S]^{(n)}$($n$ は奇数)、1つ目の項は、 $[\\lambda H_2, S]^{(n)}$($n$ は偶数)と表記することもでき、これらは全て非ブロック対角になります。ハミルトニアンの非対角項を2次の摂動まで展開すると、\n", + "\n", + "$$\n", + "H_{\\rm eff}^{\\rm off-diag} = \\left[ H_0 + \\lambda H_1, \\lambda S^{(1)} \\right]+\\lambda H_2 + \\left[H_0 + \\lambda H_1, \\lambda^2 S^{(2)}\\right]\n", + " + \\frac{1}{3!} \\left[ H_0+\\lambda H_1, \\lambda S^{(1)}\\right]^{(3)} + \\frac{1}{2!} \\left[ \\lambda H_2, \\lambda S^{(1)}\\right]^{(2)} \\\\\n", + " = \\lambda \\left( \\left[ H_0, S^{(1)} \\right] + H_2 \\right) + \\lambda^2 \\left( \\left[H_1, S^{(1)} \\right] + \\left[H_0, S^{(2)}\\right]\\right) + \\ldots.\n", + "$$\n", + "となります。 $\\lambda$ の各次数でゼロになるため、 $S^{(m)}$ を以下の式で決めることができます。\n", + "$$\n", + "[H_0, S^{(1)}] = -H_2 \\qquad\n", + "[H_0, S^{(2)}] = -[H_1, S^{(1)}] \\qquad\n", + "[H_0, S^{(3)}] = -[H_1, S^{(2)}] - \\frac{1}{3} [[H_2, S^{(1)}], S^{(1)}]\n", + "$$\n", + "これらの式を満たすアンザッツが一意に決まることはWinklerによって示されました。この結果、有効ハミルトニアンは\n", + "\n", + "$$\n", + "H_{\\rm eff} = H_0+H_1+[H_2,S^{(1)}] + \\frac{1}{2} [[H_0, S^{(1)}], S^{(1)}] + \\ldots = H_0+H_1+\\frac{1}{2}[H_2,S^{(1)}] + \\ldots\n", + "$$\n", + "\n", + "とブロック対角化されます。ここで、 $\\lambda \\to 1$ としました。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Jaynes-Cummingsハミルトニアンのブロック対角化 \n", + "\n", + "S-W変換を行う際に2つ問題があります:1) 正しいアンザッツを見つけることと、2) 計算を実行すること、です。多くの例では、非対角項 $H_2$ と似た形のアンザッツ($H_2$ を反エルミートにしたもの)を用い、帰納的に確かめます。最近、arXivに掲載された、[A Systematic Method for Schrieffer-Wolff Transformation and Its Generalizations](http://www.arxiv.org/abs/2004.06534) という論文では、システマチックにアンザッツを得る方法を示し、以下に示したJaynes-Cummingsハミルトニアンを含め多くの系に適用しています。\n", + "\n", + "この方法では、*ジェネレーター* $\\eta$ を $\\eta=[H_0, H_2]$ と計算し、その係数を未知とします。 $[H_0, \\eta]=-H_2$ を満たす $\\eta$ の係数を求め、 $S^{(1)}=\\eta$ とします。ここで、 $H_0$ と $H_2$ のエルミート性から、 $\\eta$ や $S^{(1)}$ が反エルミートであることが示せます。\n", + "\n", + "計算を簡単にするために、代数計算のためのPythonパッケージ [`sympy`](http://www.sympy.org) を用います。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# import SymPy and define symbols\n", + "import sympy as sp\n", + "sp.init_printing(use_unicode=True)\n", + "wr = sp.Symbol('\\omega_r') # resonator frequency\n", + "wq = sp.Symbol('\\omega_q') # qubit frequency\n", + "g = sp.Symbol('g', real=True) # vacuum Rabi coupling\n", + "Delta = sp.Symbol('Delta', real=True) # wr - wq; defined later" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# import operator relations and define them\n", + "from sympy.physics.quantum.boson import BosonOp\n", + "a = BosonOp('a') # resonator photon annihilation operator\n", + "from sympy.physics.quantum import pauli, Dagger, Commutator\n", + "from sympy.physics.quantum.operatorordering import normal_ordered_form\n", + "\n", + "# Pauli matrices\n", + "sx = pauli.SigmaX()\n", + "sy = pauli.SigmaY()\n", + "sz = pauli.SigmaZ()\n", + "\n", + "# qubit raising and lowering operators\n", + "splus = pauli.SigmaPlus()\n", + "sminus = pauli.SigmaMinus()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - 0.5 \\omega_q {\\sigma_z} + \\omega_r {{a}^\\dagger} {a} + g \\left({{a}^\\dagger} {\\sigma_-} + {a} {\\sigma_+}\\right)$" + ], + "text/plain": [ + " † ⎛ † ⎞\n", + "-0.5⋅\\omega_q⋅False + \\omegaᵣ⋅a ⋅a + g⋅⎝a ⋅False + a⋅False⎠" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# define J-C Hamiltonian in terms of diagonal and non-block diagonal terms\n", + "H0 = wr*Dagger(a)*a - (1/2)*wq*sz; \n", + "H2 = g*(Dagger(a)*sminus + a*splus); \n", + "HJC = H0 + H2; HJC # print" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - g \\left[{{a}^\\dagger} {\\sigma_-} + {a} {\\sigma_+},- 0.5 \\omega_q {\\sigma_z} + \\omega_r {{a}^\\dagger} {a}\\right]$" + ], + "text/plain": [ + " ⎡ † † ⎤\n", + "-g⋅⎣a ⋅False + a⋅False,-0.5⋅\\omega_q⋅False + \\omegaᵣ⋅a ⋅a⎦" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# using the above method for finding the ansatz\n", + "eta = Commutator(H0, H2); eta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`sympy`で`doit()`、`expand`、`normal_ordered_form`、`qsimplify_pauli`のメソッドを用いることで、交換関係の演算を行い、展開し、ボーズ粒子を正規順序(生成演算子、消滅演算子の順)にし、パウリ代数を簡単化できます。これを $\\eta$ に適用します。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle 1.0 \\omega_q g {{a}^\\dagger} {\\sigma_-} - 1.0 \\omega_q g {a} {\\sigma_+} + \\omega_r g {{a}^\\dagger} {\\sigma_-} - \\omega_r g {a} {\\sigma_+}$" + ], + "text/plain": [ + " † † \n", + "1.0⋅\\omega_q⋅g⋅a ⋅False - 1.0⋅\\omega_q⋅g⋅a⋅False + \\omegaᵣ⋅g⋅a ⋅False - \\omega\n", + "\n", + " \n", + "ᵣ⋅g⋅a⋅False" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pauli.qsimplify_pauli(normal_ordered_form(eta.doit().expand()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで $A$、$B$ をそれぞれ $a^\\dagger \\sigma_-$、$a\\sigma_+$ の係数とすると、交換関係 $[H_0, \\eta]$ は以下のようになり、" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbwAAAAZCAYAAABKFps2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJW0lEQVR4Ae2d7ZHUOBCGzdYEsHWXAWSwQARABnAXAZDBUfzjH8VlABsBBxkAEQCbwXERsLcZ7L2PRu2TPbLHM2N7JK+6SqNvqdWv2i3Jmplb19fXVaHdJPDq1asPqvFW/ufdapbSx5JAwexYki/9FgmkI4GTdFjJjpPL7DguDBfMyhwoErjBEigGbz/wf6garlA+EiiY5YNV4bRIYBIJ3CpHmsPlqmOxTyr9ixw7BR6gv8k9VfpH+YUSlEDBLEFQCktFAkeSQFIGTw+n25LDB/l3jySPQd2Kvzcq+Fr+1aAKCy5UMFswuGVoRQILk8AqHI8eXmeKcyHj7q4Pc5XHCEA/5e7IvVHarsd+9A0PqROGGXeROqMz8Fcwm0HI+3Qxlz6rn2fi74ncQ88nl7nCxSC6wqnIC5UtOuOFNKVXMIlLdyXBnCrrXI4JeU+OybkTqY3vqsCOxx3t+Ta/y38kN8joqdxjtZGDsUM2yOzGG7yCGVMhLRIms+uz+nwnKbyT/6/8b/IftaWiNBZGPBNYTBej1xbQyHHJuGASkemJBHMl90TuufLfR8r0Jqkeq7tT+fV7LIVZ3RF/21u5mYmSmMHc2eg2myoxk4CweOgxsqQx/YLZmNL0bR2CGbonN7s+q090FmPLe+4Y2bOA50yhDgkcgn27yYJJWyJVdbKZtHMKRxmxFdtXpfOwRQl6SWU4DsXZbnBrnd4Gp8/EoONyIGQ5ujwLZpNCPwlmAzneV5/D48xYVxhE6O+1Vz47JDAm9gWTlpDHMHgIlePQNl35BBN6O9/F/Srkp3yMHe//IFOOdSy9z9h40+NyIo4KZhMJNo1m99Vnd4ypuRFb/DIydnY8E+qTIBILTSqBgklLvKtWfKeoJjerkW3ENf4+4kW2HXPYDi9aR+W4wckKNErKw1BypMKRTpfi9dV9oUyUEsOLYj5WO3/Kj1Gv0VM9ZMOula8uxOTEOw8bd6z9lNMWh9nC8Ro0l7wMtpWN6qYqYSg3fnnIt8kdAXTggeKm44pWleJJ6LTnc2n6WjBxs+z/j4MMnpqxyY+RaJMZhNjD3pXVJAOQ8MzflIFbng1SWS61vG8kxiMYPdodbPA8H7xU54W640E+fHEki2Fqj494O01Ja1L5M4W+yP0lh4FGBij9NzmMaqUyg/mjfCokvheH2ZLx2nHe7KXPXn7M8UrhP4I+7yuMPvIzfBsLVaUlodPiY3H66sdUMAkmI8FDDV6ruWj012jqOtFerlsRMyIoSZu48dm7I1L+Dzl2ZGY4221sxFWeSYGxY9cS1iNMe8ZTWJf3EGbQw/TKt4exa3whXek8TFD8LA1dMMhFYXYD8AqgGyUY02cWQdBzyTPUoUpxjNq5fMLcHAzp6DotntD/JeprwSScaT58qMGLPvR927ZatPdyje410VgJ3pZvt7fItzpMwppUBvAwSg1S+ic5d04dZGCMdjEqHGPQH7uxkOgz+r5BfbYVN6xHexjKdt3GgyCsMEZY/SFHm+Rhk06myo8tFi6UvrHyDiuHYZVdImZHwQu5Sp6TYxbiNyC8rz6jg9wO3ZjjSvsox06PxR5fWXC6KT8VnT4Yf42FscX0q1Pk1FHmlPpaMIlgsupEZECGQGOSU7JhoHxVS4spgctT3baxqpTG3ze0d3hnSm+8S1P8TOU22lbaHeX1GSTPXu3xju2z6lxZisLwBw/hcatlb/P5mkZs8nfxu629QfniOdZnpXRW2CwsGvIb1GhQSPWXitlR8EK0kumkmAXwDQqKn730WY3z4G4v8MI+WYRClLPFaCo6PQb+7eeVG2zfxwzYF0wiAKwiabsm8aI6Brjt1jZeZKs8v8ISVXblYcSsroKONt7pKRVAGwZJbW7woTQe1Kzi+HI8YdpHsTFyxHGmhAo6wghWlFlHh32qvPUfq/e7WomlD2v8+KVmwUwyxECzEDJskWn9yz3KHw2zheO174xhjto8DtswnWzMYcmQhRxkeK1jzU9b2IZ6dnSdXir+c2Oi/kbT2akxOWnOy71iHDXei9Tk9zA5MrsK8xTHUGF8uojyPNRCYodiilX5MEbMFIk06sDLa6vo0+iLIwd2fSgrZdo7w69KC4ljPjt64aZm7AEQlrfwpQ+Y76KqD++04S6s+DLZeOJ/NswkFB6sYHQuZztT5leNv8LQGJgZTua7hnPHyw1i/w9kP1ifVZa5ATUM4TrJLRrBjQciz4KwTAo6bbib79heAP6zYiKhjamzhoX5o2Iy2OBpEpzKXcs1jJXiGJJL+UxqRwpjfNglPV2nrD+VzkOfa8h9R45uoL6sVb9Q4IvS2GWgkLxkxig9Iy7Hefg/chg2DKYRRpGdHPWN2N05g+fLklcbNKVxxEGcG5XQfSu/jnZ/+vZQaptwldLcmJXGZY+Qt+6GEsox/uVPjpnvC/khM7uAhDTqC0BehqNg5ttaFF4Iawhp7Afrs++Hk4tap8K+1Qd6gK6C14Mwz6cdVacXjP9smEiG6OpoOjs1JismoTrBiGCkbGXHb94xSb/Kd+9+5NukNkOg7JrYzb1UGQYP8ZKa79zQRiWftunDGQLFMZrk1wZAYQwmx5xmLDBkGCt2RezaWClyaYI23dcHfN5LxSF+y7P9UMZ41btAhWkbcEJCEblFRtvcQHsvRx2MK2nEdyEMMXVNFrTZ+WPcKse4MMzbaOMG3LYKh+SLr9kxU5+2EEH+NU5Kd/MoGM+YmC0Cr0A2leQ1qT7Tl++DOc78tThBI/Iu5erFimV4PxWd3hV/Ftem2zake5JH+0h328Le6o7mHwMT9TmFzk6GSVJ/DzQa8mpIQPDA5sdsucRioDApudl50AUOtZENaawsJOxoMAu+xTO4sSOujV4WjI/EZI6YjTT03mYklyR1WnzFbov3jqUrM1fsxXdSOtuFyUmX4HNP14DZPeIcKc5KNLbD8yUW6zXkkPoohROrZ47bbqSx8/hkhdlcc+qG6HR22Oeks6u5JuuR+mFrzBfKOULl2LVSuH08RvJiSePNzXBg8PquuC8WKxtYhpgZ63P4i9bpTLHPRmcXbfD85HEPfIV5n3ejjN0cT5+x+wgxG7vt0l7+EgjnR9HpNPAMMUmDo24uFnukGRly4yJEJL8kFQkUCeQlgVR02t0RyEt0i+c2isliL62EcGoFwi1IdnjcMOWIs+z0QgGVcJFAZhIoOp0ZYImw+x+JdV2zacXEwwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$\\displaystyle 1.0 A \\omega_q {{a}^\\dagger} {\\sigma_-} + A \\omega_r {{a}^\\dagger} {\\sigma_-} + 1.0 B \\omega_q {a} {\\sigma_+} + B \\omega_r {a} {\\sigma_+}$" + ], + "text/plain": [ + " † † \n", + "1.0⋅A⋅\\omega_q⋅a ⋅False + A⋅\\omegaᵣ⋅a ⋅False + 1.0⋅B⋅\\omega_q⋅a⋅False + B⋅\\ome\n", + "\n", + " \n", + "gaᵣ⋅a⋅False" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A = sp.Symbol('A')\n", + "B = sp.Symbol('B')\n", + "eta = A * Dagger(a) * sminus - B * a * splus;\n", + "pauli.qsimplify_pauli(normal_ordered_form(Commutator(H0, eta).doit().expand()))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これが $-H_2$ と等しくなるので、" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIoAAAAaCAYAAABo4cQnAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE1ElEQVRoBe2a/1XbMBDHA48BUtggIxSYoLAB0AmADeDxF/zXRzcITEBhA2CCAhtAJyjNBvT7kXV+jmLHNhGJE3zvXWSfpJPuh04nOUtvb2+dJsLZ2dm15tVXedfE+X22OS1/hMAy7o5wKwLv1wg8WhY1NCC7nec1j+4oOIkG2lY5aSR4ER+whelq4Eq2uw2HXIq59WiArga4V7keDlT13U9yVe2JJjjKnnBf9BuVLUxBA9L1gYbpqvxpw8V2FDzxWgNc2ADvLcWDEPhD5eC9PNp+79eA9P6s3uum/2hbjxj2xHhD5cRO4sWDH9jCbDTQ17CXNnQ0RxHDY2EsJ2F+bGOto6CJ2QC25FCCHToxHYV9bSQJYpBFBylzS4j8CwOShy3/SUiOGMdRxPQrzAQPSRHll4mC8wCsOnDRAHvuIlSsiMKdyYv3QvjGgPYOJYYWJ+NBQrsBi5WQj4zt7kFEpxHAsZTQOi7/2FSb0tUvHj21I5eh7V8hvNkH02OY3rNQ6CzqwwrmZERozFvNF2pzmGXW1Oc6epmy3Gw9HJO7QxFFBBR/ovJQiPEw5KPQhR+VRYChCo1KJ/Ej6sDrXM/Hnj+ZNe95hh6oDhwBtWer++MrmBtIWy75uMPhWDcvTlJZLzOQ22zaSyOKJkEkORJ+EToQje0EI5YlqVyQFd6ieh58u8FBsu14LtqyiGg2UT0m4Hnd623oEk505sC3IVbBXICXpZJeZiS3LdTV1FGkWc7Md5qQVXb0bEkqkWUc4EwjRs10IFLR5leGxiOrKZe3xi7a6uCFc4X9sg4I7+igMYmAzDkEnLSj+rwo9iR6UUSuo5eJ5Wb+BXMM5bH31KbOUdQZh8CQKCILKGWg+jIj4FxOWdnOmWfyiNAJGY+cpSxaZdi4R46heQZBhrJ5hrxqvRcpWXSicU9lUa5VNE4dvcSQG33XAbPpq+UoLrMVhzBsb4s20cc9KQ+HAEPeKKmj+sr81dYEzevzXezy6AzTOKijlxnKjd2AgYsoybMzWroivSBElLzVa12spJ8xNVpY/g4IhGPnPBqLFUmITscP2tqrhUIrHV39iCY40TdrOEdlqV4ki8lrpRNvCnKPRBSXO2hgW7FMhJwFCPOKhDr8i7AWlYZqxHMgwpMw5S0aYZT3ByGwKVqZk3Q8L6IGDuxANPiQEO76+qSi4b9+rpX0MkO50S2pRxJReBCyzXBUxehrQry36ESiqiFAYHfehtdQTfLCSr9UHacqeF8JbTxovFcFIhHzNMeDX/qVM2SidkQbEsEy4Eqg1FnLmNSsr6OXunKTb5qObFobkjHMCcd97eeqIdnO+T9KHp6enj4L+3l1eTS1/SfcyqtbdJrk3hEeNV1OzfG2zhzV/lF4QJ8Vv+JO5DncS7ho4Gl4Y3gKEqkQ2KImTn4LuTe7Ar3lRdJmz3rM7OQDXVUTjV3qQTKLk2T3fBqQn3A5xpZSFXAqLsK4ov9UID3NzWmrhmE4ld5INrcAlvWCgfGaPRHZy0G7YtdjNfBOxV0JJ5gW5l8DLPh00bP1sBpirYh98SKqhLemIrXQAA1UStblE5xKucVN20f9zyyKEHMiCv/Cr3L/QpcWGqQB2c3lpirJN1Ng64kKGoBocqsyzXuiDtAy+2gNsMBHvk39B4JWfdDELgqrAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$\\displaystyle g \\left({{a}^\\dagger} {\\sigma_-} + {a} {\\sigma_+}\\right)$" + ], + "text/plain": [ + " ⎛ † ⎞\n", + "g⋅⎝a ⋅False + a⋅False⎠" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-H2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$A = B = -g/\\Delta$ であることがわかります。ここで、 $\\Delta = \\omega_r - \\omega_q$ は共振器と量子ビットの周波数差です。従って、 $S^{(1)}$ は" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\frac{g \\left({{a}^\\dagger} {\\sigma_-} - {a} {\\sigma_+}\\right)}{\\Delta}$" + ], + "text/plain": [ + " ⎛ † ⎞\n", + "g⋅⎝a ⋅False - a⋅False⎠\n", + "──────────────────────\n", + " Δ " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "S1 = eta.subs(A, -g/Delta)\n", + "S1 = S1.subs(B, -g/Delta); S1.factor()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "と求まります。そして、 $H_0$ に2次の補正を加えた有効ハミルトニアンを以下のように計算することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle - 0.5 \\omega_q {\\sigma_z} + \\omega_r {{a}^\\dagger} {a} + \\frac{0.5 g^{2} \\left(1 + 2 {{a}^\\dagger} {a} {\\sigma_z} + {\\sigma_z}\\right)}{\\Delta}$" + ], + "text/plain": [ + " 2 ⎛ † ⎞\n", + " † 0.5⋅g ⋅⎝1 + 2⋅a ⋅a⋅False + False⎠\n", + "-0.5⋅\\omega_q⋅False + \\omegaᵣ⋅a ⋅a + ─────────────────────────────────\n", + " Δ " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Heff = H0 + 0.5*pauli.qsimplify_pauli(normal_ordered_form(Commutator(H2, S1).doit().expand())).simplify(); Heff" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは以下のように書き換えることができ、\n", + "$$\n", + "H_{\\rm eff} = \\left(\\omega_r + \\frac{g^2}{\\Delta}\\sigma_z\\right)a^\\dagger a - \\frac{1}{2}\\left(\\omega_q -\\frac{g^2}{\\Delta}\\right) \\sigma_z\n", + "$$\n", + "これは共振器周波数が*ac Starkシフト*と呼ばれる量子ビットの状態に依存した周波数シフト $\\chi \\equiv g^2/\\Delta$ を受けることを示し、同時に量子ビットの側では*Lambシフト*と呼ばれる量子的真空場のゆらぎによる周波数シフトを示しています。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 多準位のトランズモンへの拡張 \n", + "\n", + "実際は2準位の*量子ビット*でなく、多準位の*トランズモン*を用いているので、デバイスを設計・シミュレートする際には、高次のエネルギー項を考慮する必要があります。読み出し共振器と結合した、完全なトランズモンのハミルトニアンは以下のように書けます。\n", + "\n", + "$$\n", + "H^{\\rm tr} = \\omega_r a^\\dagger a + \\sum_j \\omega_j |j\\rangle\\langle j| + g\\left(a^\\dagger c + ac^\\dagger \\right)\n", + "$$\n", + "\n", + "ここで、 $c = \\sum_j \\sqrt{j+1}|j\\rangle\\langle j+1|$ はトランズモンの下降演算子、 $\\omega_j = \\left(\\omega - \\frac{\\delta}{2}\\right)j + \\frac{\\delta}{2} j^2$ は前節で定義したトランズモンの各準位の周波数、 $\\omega$ は量子ビット周波数、 $\\delta$ は非調和性(Anharmonicity)です。\n", + "\n", + "$$\n", + "S^{(1)} = \\sum_j \\alpha_j a^\\dagger \\sqrt{j+1}|j\\rangle\\langle j+1| - \\alpha_j^* a \\sqrt{j+1}|j+1\\rangle\\langle j|\n", + "$$\n", + "\n", + "S-W変換の条件式 $[H_0, S^{(1)}] = -H_2$ から $\\alpha = \\alpha^* = -\\frac{g}{\\omega_r - \\omega - \\delta j}$ と求まり、以下のように2次の有効ハミルトニアンが得られます。\n", + "\n", + "$$\n", + "H^{\\rm tr}_{\\rm eff} = \\left( \\omega_r + \\sum_j \\frac{g^2(\\omega_r-\\omega+\\delta)}{(\\omega_r-\\omega-\\delta j)(\\omega_r - \\omega - \\delta(j-1))} |j\\rangle\\langle j| \\right) a^\\dagger a + \\sum_j \n", + "\\left[\n", + "j\\omega + \\frac{\\delta}{2} (j-1)j + \\frac{jg^2}{\\omega-\\omega_r+(j-1)\\delta} \\right]|j\\rangle\\langle j|\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. cQEDでの量子ビットのドライブ \n", + "\n", + "[Blais *et al* (2004)](https://arxiv.org/abs/cond-mat/0402216) より、ドライブハミルトニアンを\n", + "$$\n", + "H^d(t) = \\xi(t)\\left( a^\\dagger e^{-i\\omega_d t} + ae^{i\\omega_d t}\\right)\n", + "$$\n", + "とし、これをJaynes-Cummingsハミルトニアンに加え、ドライブ周波数の回転座標系に変換します。\n", + "$$\n", + "H = \\Delta_r a^\\dagger a - \\frac{1}{2} \\Delta_q \\sigma^z + g(a^\\dagger \\sigma^- + a\\sigma^+) + \\xi(t)(a^\\dagger + a)\n", + "$$\n", + "ここで、 $\\Delta_r = \\omega_r - \\omega_d$ 、 $\\Delta_q = \\omega_q - \\omega_d$ です。[Lev Bishopの博士論文](https://arxiv.org/abs/1007.3520) に示されるように、以下のGlauber演算子を用いて、ドライブが量子ビットに直接作用するよう変形します。\n", + "$$\n", + "D(\\alpha) = e^{\\alpha(t) a^\\dagger - \\alpha^*(t) a}\n", + "$$\n", + "Hadamardの補題\n", + "$$\n", + "e^{A}Be^{-A} = B + [A,B] + \\frac{1}{2!} [A,[A,B]] + \\frac{1}{3!}[A,[A,[A,B]]] + \\ldots\n", + "$$\n", + "を用いて以下の計算をすると、 $D$ は $a^{(\\dagger)}$ を $\\alpha^{(*)}$ だけ変位させるように作用することがわかり、\n", + "$$\n", + "D^\\dagger a^{(\\dagger)} D = \\exp\\{-\\alpha(t) a^\\dagger + \\alpha^*(t) a\\} a^{(\\dagger)}\\exp\\{\\alpha(t) a^\\dagger - \\alpha^*(t) a\\} \n", + "= a^{(\\dagger)} + \\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, a^{(\\dagger)}\\right] + \\frac{1}{2!}\\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, \\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, a^{(\\dagger)}\\right]\\right] + \\ldots\n", + " = a^{(\\dagger)} + \\alpha^{(*)}\n", + "$$\n", + "\n", + "$$\n", + "D^\\dagger a^\\dagger a D = a^\\dagger a + \\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, a^\\dagger a\\right] + \\frac{1}{2!}\\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, \\left[-\\alpha(t) a^\\dagger + \\alpha^*(t) a, a^\\dagger a\\right]\\right] + \\ldots\n", + "= a^\\dagger a + \\alpha(t)a^\\dagger + \\alpha^*(t)a + |\\alpha(t)|^2\n", + "$$\n", + "\n", + "従ってハミルトニアンは以下のようになります。\n", + "\n", + "$$\n", + "\\tilde{H} = D^\\dagger H D - iD^\\dagger \\dot{D} = \\Delta_r\\left(a^\\dagger a + \\alpha(t)a^\\dagger + \\alpha^*(t)a + |\\alpha(t)|^2\\right) - \\frac{1}{2} \\Delta_q \\sigma^z \\\\ + g\\left((a^\\dagger + \\alpha^*(t))\\sigma^- + (a+\\alpha(t))\\sigma^+\\right) + \\xi(t)\\left(a^\\dagger + \\alpha^*(t) + a + \\alpha(t) \\right) - i\\left(\\dot{\\alpha}(t) a^\\dagger - \\dot{\\alpha}^*(t) a\\right) \\\\\n", + "= \\Delta_r a^\\dagger a - \\frac{1}{2}\\Delta_q \\sigma^z + g\\left((a^\\dagger + \\alpha^*(t))\\sigma^- + (a+\\alpha(t))\\sigma^+\\right) \\\\\n", + "+\\xi(t)\\left(a^\\dagger + a \\right) + \\Delta_r\\left(\\alpha(t)a^\\dagger + \\alpha^*(t)a\\right)- i\\left(\\dot{\\alpha}(t) a^\\dagger - \\dot{\\alpha}^*(t) a\\right)\n", + "$$\n", + "\n", + "ここで演算子を含まない項を落としました。以下の式を満たすように $\\alpha(t)$ を選ぶと、最後の行はゼロになります。\n", + "\n", + "$$\n", + "-i\\dot{\\alpha}(t) + \\Delta_r \\alpha(t) + \\xi(t) = 0\n", + "$$\n", + "\n", + "最後に、Rabi周波数 $\\Omega(t) = 2g\\alpha(t)$ を導入すると、ハミルトニアンは\n", + "\n", + "$$\n", + "\\tilde{H} = \\Delta_r a^\\dagger a - \\frac{1}{2}\\Delta_q \\sigma^z + g\\left(a^\\dagger\\sigma^- + a\\sigma^+\\right)\n", + "+\\frac{1}{2} \\left( \\Omega^*(t)\\sigma^- + \\Omega(t) \\sigma^+\\right)\n", + "$$\n", + "\n", + "となります。ハミルトニアンのドライブ項は非ブロック対角なので、Schrieffer-Wolff変換を適用します。ここでRabi周波数を実数とします($\\Omega^*(t) = \\Omega(t)$)。\n", + "\n", + "$$\n", + "[\\tilde{H}^d, S^{(1)}] = -\\frac{\\Omega(t)}{2} \\left[ (\\sigma^- + \\sigma^+),\\frac{g}{\\Delta}\\left( a^\\dagger \\sigma^- - a\\sigma^+\\right)\\right] = \\frac{g\\Omega(t)}{2\\Delta}(a + a^\\dagger)\\sigma^z\n", + "$$\n", + "\n", + "これを有効ハミルトニアンに加えると、以下の式が得られます。\n", + "\n", + "$$\n", + "\\tilde{H}_{\\rm eff} = \\left( \\Delta_r + \\frac{g^2}{\\Delta}\\sigma^z\\right) a^\\dagger a - \\frac{1}{2}\\left(\\Delta_q - \\frac{g^2}{\\Delta}\\right) \\sigma^z + \\frac{\\Omega(t)}{2}\\sigma^x\n", + "+ \\frac{g\\Omega(t)}{4\\Delta}(a + a^\\dagger)\\sigma^z\n", + "$$\n", + "\n", + "ここで、 $z$ 回転を除去するために、Lambシフトした量子ビットでドライブする必要があることがわかります($\\Delta_q = \\frac{g^2}{\\Delta}$)。もう1つの $\\sigma^z$ 項は、分散結合領域(dispersive regime)では $\\Delta \\gg g$ となるため無視できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 交差共鳴 (Cross Resonance) ゲート \n", + "\n", + "量子ビット1を量子ビット2の周波数でドライブするハミルトニアンは、以下のように書けます。\n", + "\n", + "$$\n", + "H^d(t) = \\frac{\\Omega(t)}{2} \\left( \\sigma_1^+ e^{-i\\tilde{\\omega}_2 t} + \\sigma_1^- e^{i\\tilde{\\omega}_2 t}\\right)\n", + "$$\n", + "\n", + "2つの量子ビットとその相互作用を表すハミルトニアンに対するS-W変換のアンザッツ $S^{(1)}=-\\frac{J}{\\Delta_{12}}(\\sigma_1^+ \\sigma_2^- - \\sigma_1^- \\sigma_2^+)$ を用いて、ドライブ項にS-W変換を適用します。\n", + "\n", + "$$\n", + "[\\tilde{H}^d, S^{(1)}] = -\\frac{J\\Omega(t)}{2\\Delta_{12}} \\left[ \\sigma_1^+ e^{-i\\tilde{\\omega}_2 t} + \\sigma_1^- e^{i\\tilde{\\omega}_2 t}, \\sigma_1^+ \\sigma_2^- - \\sigma_2^+ \\sigma_1^-\\right] \n", + "=-\\frac{J\\Omega(t)}{2\\Delta_{12}} \\left(\\sigma_1^z \\sigma_2^+ e^{-i\\tilde{\\omega}_2 t}\n", + "+\\sigma_1^z \\sigma_2^- e^{i\\tilde{\\omega}_2 t} \\right)\n", + "$$\n", + "\n", + "$\\tilde{\\omega}_2$ の回転座標系に移ると、有効交差共鳴ハミルトニアンを得ます。\n", + "\n", + "$$\n", + "\\tilde{H}_{\\rm eff}^{\\rm CR} = - \\frac{\\tilde{\\omega}_1-\\tilde{\\omega}_2}{2}\\sigma_1^z \n", + "+ \\frac{\\Omega(t)}{2} \\left(\\sigma_2^x - \\frac{J}{2\\Delta_{12}} \\sigma_1^z \\sigma_2^x \\right)\n", + "$$\n", + "\n", + "始めの2つの項はそれぞれ、量子ビット1へのStarkシフトによる $ZI$ 相互作用、量子ビット2の無条件 $IX$ 回転に関連し、最後の項はエンタングルメントを生じる $ZX$ 相互作用を示します。量子ビット1を $|0\\rangle$ と $|1\\rangle$ の等しい重ね合わせ状態にし、$x$軸周りの $\\pi/2$ 回転に相当する交差共鳴ゲートを適用すると、最大のエンタングル状態が得られます。[このチュートリアル](https://github.com/Qiskit/qiskit-tutorials/blob/9405254b38312771f8d5c2dd6f451cec35307995/tutorials/noise/1_hamiltonian_and_gate_characterization.ipynb)で、トランズモンの交差共鳴ハミルトニアンをQiskitで特性評価しています。他に交差共鳴ゲートについての参考文献として、 [Chow *et al* (2011)](https://arxiv.org/abs/1106.0553) や [Sheldon *et al* (2016)](https://arxiv.org/abs/1603.04821) もあります。\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-quantum-hardware/calibrating-qubits-openpulse.ipynb b/translations/ja/ch-quantum-hardware/calibrating-qubits-openpulse.ipynb new file mode 100644 index 0000000..2b3e662 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/calibrating-qubits-openpulse.ipynb @@ -0,0 +1,6861 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calibrating qubits using Qiskit and OpenPulse" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskit is an open-source framework for programming quantum computers (Ref. [1](#refs)). Using Qiskit, quantum circuits can be built, simulated and executed on quantum devices.\n", + "\n", + "OpenPulse provides a language for specifying pulse level control (i.e. control of the continuous time dynamics of input signals) of a general quantum device independent of the specific hardware implementation (Ref. [2](#refs)). \n", + "\n", + "In this tutorial, we show how to implement typical single-qubit calibration and characterization experiments using Qiskit and OpenPulse. These are typically the first round of experiments that would be done in the lab immediately after a device has been fabricated and installed into a system. The presentation is pedagogical, and allows students to explore two-level-system dynamics experimentally. All units are returned as standard SI (ie Hz, sec, etc).\n", + "\n", + "Each experiment gives us more information about the system, which is typically used in subsequent experiments. For this reason, this notebook has to be mostly executed in order." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Contents\n", + "\n", + "Part 0. [Getting started](#importing)
    \n", + "Part 1. [Finding the qubit frequency using a frequency sweep](#frequencysweep)
    \n", + "\n", + "Part 2. Calibrating and using a $\\pi$ pulse
    \n", + " A. [Calibrating $\\pi$ pulses using a Rabi experiment](#rabi)
    \n", + " B. [Determining 0 vs 1](#zerovone)
    \n", + " C. [Measuring $T_1$ using inversion recovery](#T1)\n", + "\n", + "Part 3. Determining qubit coherence
    \n", + " A. [Measuring the qubit frequency precisely using a Ramsey experiment](#ramsey)
    \n", + " B. [Measuring $T_2$ using Hahn echoes](#hahn)
    \n", + " \n", + "Part 4. [References](#refs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 0. Getting started \n", + "\n", + "We'll first get our basic dependencies set up and ready to go. Since we want to use real, noisy devices for our calibration experiments in this notebook, we need to load our IBMQ account and set the appropriate backend." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "from qiskit.tools.jupyter import *\n", + "\n", + "from qiskit import IBMQ\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "backend = provider.get_backend('ibmq_armonk')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We verify that the backend supports OpenPulse features by checking the backend configuration. The config provides us with general information about the structure of the backend setup." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "backend_config = backend.configuration()\n", + "assert backend_config.open_pulse, \"Backend doesn't support OpenPulse\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For instance, we can find the sampling time for the backend pulses within the backend configuration. This will be a very useful value to us as we build and execute our calibration routines." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling time: 0.2222222222222222 ns\n" + ] + } + ], + "source": [ + "dt = backend_config.dt\n", + "print(f\"Sampling time: {dt*1e9} ns\") # The configuration returns dt in seconds, so multiply by\n", + " # 1e9 to get nanoseconds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The backend defaults provide a starting point for how to use the backend. It contains estimates for qubit frequencies and default programs to enact basic quantum operators. We can access them with the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "backend_defaults = backend.defaults()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 1\n", + "## 1. Finding the qubit frequency using a frequency sweep \n", + "\n", + "We begin by searching for the qubit frequency. The qubit frequency is the difference in energy between the ground and excited states, which we label the $\\vert0\\rangle$ and $\\vert1\\rangle$ states, respectively. This frequency will be crucial for creating pulses which enact particular quantum operators on the qubit -- the final goal of our calibration!\n", + "\n", + "With superconducting qubits, higher energy levels are also available, but we fabricate the systems to be anharmonic so that we can control which transition we are exciting. That way, we are able to isolate two energy levels and treat each qubit as a basic two-level system, ignoring higher energy states.\n", + "\n", + "In a typical lab setting, the qubit frequency can be found by sweeping a range of frequencies and looking for signs of absorption using a tool known as a Network Analyzer. This measurement gives a rough estimate of the qubit frequency. Later on, we will see how to do a more precise measurement using a Ramsey pulse sequence." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we define the frequency range that will be swept in search of the qubit. Since this can be arbitrarily broad, we restrict ourselves to a window of 40 MHz around the estimated qubit frequency in `backend_defaults`. We step the frequency in units of 1 MHz." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Qubit 0 has an estimated frequency of 4.97429139400153 GHz.\n", + "The sweep will go from 4.95429139400153 GHz to 4.99429139400153 GHz in steps of 1.0 MHz.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# unit conversion factors -> all backend properties returned in SI (Hz, sec, etc)\n", + "GHz = 1.0e9 # Gigahertz\n", + "MHz = 1.0e6 # Megahertz\n", + "us = 1.0e-6 # Microseconds\n", + "ns = 1.0e-9 # Nanoseconds\n", + "\n", + "# We will find the qubit frequency for the following qubit.\n", + "qubit = 0\n", + "\n", + "# The sweep will be centered around the estimated qubit frequency.\n", + "center_frequency_Hz = backend_defaults.qubit_freq_est[qubit] # The default frequency is given in Hz\n", + " # warning: this will change in a future release\n", + "print(f\"Qubit {qubit} has an estimated frequency of {center_frequency_Hz / GHz} GHz.\")\n", + "\n", + "# scale factor to remove factors of 10 from the data\n", + "scale_factor = 1e-14\n", + "\n", + "# We will sweep 40 MHz around the estimated frequency\n", + "frequency_span_Hz = 40 * MHz\n", + "# in steps of 1 MHz.\n", + "frequency_step_Hz = 1 * MHz\n", + "\n", + "# We will sweep 20 MHz above and 20 MHz below the estimated frequency\n", + "frequency_min = center_frequency_Hz - frequency_span_Hz / 2\n", + "frequency_max = center_frequency_Hz + frequency_span_Hz / 2\n", + "# Construct an np array of the frequencies for our experiment\n", + "frequencies_GHz = np.arange(frequency_min / GHz, \n", + " frequency_max / GHz, \n", + " frequency_step_Hz / GHz)\n", + "\n", + "print(f\"The sweep will go from {frequency_min / GHz} GHz to {frequency_max / GHz} GHz \\\n", + "in steps of {frequency_step_Hz / MHz} MHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define the pulses we will use for our experiment. We will start with the drive pulse, which is a Gaussian pulse.\n", + "\n", + "Remember the value `dt` from earlier? All durations in pulse are given in terms of `dt`. In the next cell, we define the length of the drive pulse in terms of `dt`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# samples need to be multiples of 16\n", + "def get_closest_multiple_of_16(num):\n", + " return (int(num) - (int(num)%16))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import pulse # This is where we access all of our Pulse features!\n", + "from qiskit.pulse import pulse_lib # This Pulse module helps us build sampled pulses for common pulse shapes\n", + "\n", + "\n", + "# Drive pulse parameters (us = microseconds)\n", + "drive_sigma_us = 0.075 # This determines the actual width of the gaussian\n", + "drive_samples_us = drive_sigma_us*8 # This is a truncating parameter, because gaussians don't have \n", + " # a natural finite length\n", + "\n", + "drive_sigma = get_closest_multiple_of_16(drive_sigma_us * us /dt) # The width of the gaussian in units of dt\n", + "drive_samples = get_closest_multiple_of_16(drive_samples_us * us /dt) # The truncating parameter in units of dt\n", + "drive_amp = 0.3\n", + "# Drive pulse samples\n", + "drive_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " sigma=drive_sigma,\n", + " amp=drive_amp,\n", + " name='freq_sweep_excitation_pulse')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to properly measure our qubits, we need to check the measurement map. This is a hardware constraint. When acquisition is done for one qubit, it is also done on other qubits. We have to respect this constraint when building our program in OpenPulse. Let's check which group of qubits our qubit is in:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Find out which group of qubits need to be acquired with this qubit\n", + "meas_map_idx = None\n", + "for i, measure_group in enumerate(backend_config.meas_map):\n", + " if qubit in measure_group:\n", + " meas_map_idx = i\n", + " break\n", + "assert meas_map_idx is not None, f\"Couldn't find qubit {qubit} in the meas_map!\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can define our measurement pulse. Rather than hard coding the pulse, we can obtain a calibrated measurement pulse from the backend default instruction schedule map. Because it is frequently calibrated, it is more accurate than defining a measurement pulse ourselves. This measurement pulse also includes acquisition so we do not need to add that in manually." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "inst_sched_map = backend_defaults.instruction_schedule_map\n", + "measure = inst_sched_map.get('measure', qubits=backend_config.meas_map[meas_map_idx])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lastly, we specify the channels on which we will apply our pulses. Drive, measure, and acquire channels are indexed by qubit index." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "### Collect the necessary channels\n", + "drive_chan = pulse.DriveChannel(qubit)\n", + "meas_chan = pulse.MeasureChannel(qubit)\n", + "acq_chan = pulse.AcquireChannel(qubit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the pulse parameters have been defined, and we have created the pulse shapes for our experiments, we can proceed to creating the pulse schedules.\n", + "\n", + "\n", + "\n", + "At each frequency, we will send a drive pulse of that frequency to the qubit and measure immediately after the pulse. The pulse envelopes are independent of frequency, so we will build a reusable `schedule`, and we will specify the drive pulse frequency with a frequency configuration array." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Create the base schedule\n", + "# Start with drive pulse acting on the drive channel\n", + "schedule = pulse.Schedule(name='Frequency sweep')\n", + "schedule += drive_pulse(drive_chan)\n", + "# The left shift `<<` is special syntax meaning to shift the start time of the schedule by some duration\n", + "schedule += measure << schedule.duration\n", + "\n", + "# Create the frequency settings for the sweep (MUST BE IN HZ)\n", + "frequencies_Hz = frequencies_GHz*GHz\n", + "schedule_frequencies = [{drive_chan: freq} for freq in frequencies_Hz]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a sanity check, it's always a good idea to look at the pulse schedule. This is done using `schedule.draw()` as shown below. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAKrCAYAAAAki1MRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdeXxcdb3/8fd3JnvTdElbulhoSymFUKxgoRtlKSDLVUHx8fO6glcR9KpXuSr3Ieh1vYrLvbjBT1FQ8XpVFFmvCyBQVkv9RWqgLelCS9s0adIkzTJJZub7+2OS0JZkTpnOyfc7c17Px8NHkjknM5+26uf9+H7P+RxjrRUAAADCE3NdAAAAQLEjcAEAAISMwAUAABAyAhcAAEDICFwAAAAhK3FdwKGMMVdKulKSKisrT124cKHjigpTT0+PJKmqqspxJQAAFL+enh5t3Lhxr7V26kjHjc9jIRYuXGjXPrPOdRkFqb6+XpK0ePFix5UAAFD86uvrteqMleusta8f6bh3K1wHKi8vd11CwZo/f77rEgAAiIygvut14IrH465LKFjV1dWuSwAAIDKC+q7XF80nk0nXJRSstrY2tbW1uS4DAIBICOq5Xq9w9ff3uy6hYG3fvl2SNHnyZMeVAABQ/Ib67mi8XuECAAAoBgQuAACAkBG4AAAAQkbgAgAACJnXF82XV1S4LqFgLViwwHUJAABERlDf9TpwxWMswOWKR/oAADB2gvqu14mGOVy5a21tVWtrq+syAACIhKCe6/UKF3O4crdjxw5JUm1treNKAAAofkN9dzRer3ABAAAUAwIXAABAyAhcAAAAISNwAQAAhMzri+YrmMOVs4ULF7ouAQCAyAjqu14HrhhzuHJGWAUAYOwE9V2vE83AwIDrEgpWc3OzmpubXZcBAEAkBPVcr1e4CFy527VrlyRp2rRpjisBAKD4DfXd0Xi9wgUAAFAMCFwAAAAhI3ABAACEjMAFAAAQMq8vmq+orHRdQsGqq6tzXQIAAJER1He9DlwxY1yXULBKS0tdlwAAQGQE9V2vtxQZC5G7pqYmNTU1uS4DAIBICOq5BK4iReACAGDsFHTgAgAAKAYELgAAgJARuAAAAEJG4AIAAAiZ12MhKpnDlbNFixa5LgEAgMgI6rteBy7DHK6cxeNx1yUAABAZQX3X6y3F/v5+1yUUrJ07d2rnzp2uywAAIBKCeq7XgSuZTLouoWC1tLSopaXFdRkAAERCUM/1OnABAAAUAwIXAABAyAhcAAAAISNwAQAAhMzrsRBVVVWuSyhYixcvdl0CAACREdR3WeECAAAImdeBizlcuduxY4d27NjhugwAACIhqOd6HbiYw5W71tZWtba2ui4DAIBICOq5XgcuAACAYkDgAgAACBmBCwAAIGRej4WQjOsCClY8RpYGAGCsBPVdrwNXVVWl6xIK1qKTT3ZdAgAAkRHUd1kGAQAACJnXgauvr891CQXrxW3b9OK2ba7LAAAgEoJ6rtdbiqlUynUJBWtfe7sk6RjHdQAAEAVDfXc0Xq9wAQAAFAMCFwAAQMgIXAAAACHz+houY5jDlavS0lLXJQAAEBlBfdfrwFVZyRyuXNXV1bkuAQCAyAjqu2wpAgAAhMzrwMUcrtxt2bJFW7ZscV0GAACRENRzvd5SZA5X7jo7O12XAABAZAT1Xa9XuAAAAIoBgQsAACBkBC4AAICQeX0NF3O4cldeXua6BAAAIiOo73oduJjDlbsTTjjRdQkAAERGUN9lSxEAACBkXgeuRII5XLlqbGxUY2Oj6zIAAIiEoJ7r9ZZiOs0crlx1dXW5LgEAgMgI6rter3ABAAAUAwIXAABAyAhcAAAAIfP6Gq5YjDyYK0ZqAAAwdoL6rteBq6KiwnUJBev44493XQIAAJER1HdZQgIAAAiZ14ErkUi4LqFgbdy4URs3bnRdBgAAkRDUc73eUkyn065LKFi9vb2uSwAAIDKC+q7XK1wAAADFgMAFAAAQMgIXAABAyLy+hisWi7suoWBVV1e7LgEAgMgI6rteB66KinLXJRSs+fPnuy4BAIDICOq7bCkCAACEzOvAxWiD3D3//HN6/vnnXJcBAEAkBPVcr7cUrbWuSyhYfX39rksAACAygvqu1ytcAAAAxYDABQAAEDICFwAAQMi8voYrHmcOV65qampclwAAQGQE9V2vA1d5OXO4cjVv3jzXJQAAEBlBfZctRQAAgJB5HbiYw5W7hoYGNTQ0uC4DAIBICOq5Xm8pMocrdwMDA65LAAAgMoL6rtcrXAAAAMWAwAUAABAyAhcAAEDIvL6GizlcuZs0caLrEgAAiIygvut14GIOV+6OmTPHdQkAAERGUN9lSxEAACBkXgeunh7mcOVq/bPPav2zz7ouAwCASAjquV5vKUrM4cpVKp12XQIAAJER1He9XuECAAAoBgQuAACAkBG4AAAAQub1NVwlJV6X57Xa2lrXJQAAEBlBfdfrRFNWVua6hII1e/Zs1yUAABAZQX2XLUUAAICQeR24enp6XJdQsOrr61VfX++6DAAAIiGo53oduAAAAIoBgQsAACBkBC4AAICQEbgAAABC5vVYCOZw5W7q1KmuSwAAIDKC+q7XiYY5XLmbNWuW6xIAAIiMoL7r9ZaitdZ1CQUrlUoplUq5LgMAgEgI6rleB67e3l7XJRSs9evXa/369a7LAAAgEoJ6rteBCwAAoBgQuAAAAEJG4AIAAAgZgQsAACBkXo+FKC0tdV1CwZo+fbrrEgAAiIygvkvgKlIELgAAxk5Q3/V6SzHNHK6cDQwMaGBgwHUZAABEQlDP9TpwJZjDlbOGhgY1NDS4LgMAgEgI6rleBy4AAIBiQOACAAAIGYELAAAgZAQuAACAkDEWokjNnDnTdQkAAERGUN8lcBWpadOmqbu7W22tra5LAQCg6JWUZI9U3gUuY8yVkq6UpNe85jWOqylciURCTz31lDo7O1yXAgBA8bOSMaZ8tMPeBS5r7Q8k/UCSFi5cyOTTHG3YsEFbtmxWTU2Npk6d6rocAACK2rpnnpExxox23LvAhfyqqKhQRUWF6zIAAChqWbKWJO5SBAAACB2Bq5ixIQsAgBcIXEXKDj74O2iJEwAAhM/rwFVWVua6hII1e/Zs1dbWui4DAIBImDRpUtbjXgeuoJkWGN3kyZM1fvx412UAABAJ48aNy3rc68CVSqddl1Cwenp61NfX57oMAAAiob+/P+txrwNXXyLhuoSC9cKmTdq9e7frMgAAiITm5uasx70OXDgyltsUAQDwAoGrSA2FLe5SBADAPQIXAABAyAhcRcyyowgAgBe8DlzM4crd0bOP1pQpU1yXAQBAJEyePDnrca8DF3O4cjdp0iRVV1e7LgMAgEioqqrKetzrwJVKpVyXULD2d3Up0dvLRfMAAIyBoNmXXgcuBnfmbvPmzWpqanJdBgAAkdDS0pL1uNeBCwAAoBgQuAAAAEJG4CpSlpkQAAB4g8AFAAAQMq8DV1l5uesSCtacOXM0ddpU12UAABAJtbW1WY97HbhK4nHXJRSsmpoaVVVVMRYCAIAxUFlZmfW414EryRyunHV0dKinp8d1GQAAREJvb2/W414Hrn7mcOXsxW3b1Nzc7LoMAAAiobW1NetxrwMXjgR3KQIA4AsCFwAAQMgIXMXMiovmAQDwAIGrSLGhCACAP7wOXOXM4crZvHnH6qijjnJdBgAAkTB1avbZl14HrjhzuHJWXV2tiooK12UAABAJQYtEXgeuZDLpuoSC1dbWpq6uLtdlAAAQCUGzL70OXP39/a5LKFg7duwInAkCAADyo62tLetxrwMXjozl0nkAALxA4CpS1mbCFmMhAABwj8AFAAAQMgJXEbPsKAIA4AWvA1c5Yw1yNv/YYzV9+nTXZQAAEAnTpk3LetzrwBWPeV2e16qqqhgcCwDAGCkrK8t63OtEwxyu3LW1taprf6frMgAAiITu7u6sx70OXMzhyt1LL+1Ua2sbdykCADAG9u3bl/W414ELAACgGBC4AAAAQkbgKlJMmQcAwB8ELgAAgJB5HbgqmMOVswULFmjGjBlcNA8AwBg46qijsh73OnDFmMOVs7KycpWWlrouAwCASAjquV4nmoGBAdclFKy9LS3q7GQOFwAAY2H//v1ZjxO4itTupibta88+EwQAAORHR0dH1uNeBy4cgcEnV3MFFwAA7hG4AAAAQkbgKmaM4gIAwAsEriI1nLUYCwEAgHMlrgvIpqKy0nUJBWvhwoXa09TkugwAACJhxowZWY97vcIVY3UmZ6WlpYqXeJ2nAQAoGvF4POtxrwMXYyFy19TUpI6Odu5SBABgDATNviRwFanm5mZ1dDD4FACAsVDQgQtHyHKbIgAAPiBwFauhsMV1cAAAOEfgAgAACBmBq4hZJp8CAOAFr+cGVDKHK2cnnHCCmluaZdhSBAAgdDNnzsx63OsVLsJC7uLxuGIxr/95AQAoGkE91+uO3N/f77qEgrV7927ta9vnugwAACKhvb0963GvA1cymXRdQsHa27pX+/fvd10GAACR0NXVlfW414ELAACgGBC4AAAAQkbgKlLWZsZCcOMBAADuEbgAAABC5vUcrqqqKtclFKyTTjpJrXv3ui4DAIBIeM1rXpP1OCtcRcry4GoAALzhdeBiDlfudu7cqba2NtdlAAAQCfv2ZZ996XXgYg5X7vbt26euLuZwAQAwFrq7u7Me9zpw4QgMbilylyIAAO4RuAAAAEJG4AIAAAiZ54GL7bBcxeMxGeP5Py8AAEUiFsvecz2fw1XpuoSCtfCEE9Xc3OK6DAAAImHmzJlZj7MEUsSsmMUFAIAPvA5cfX19rksoWDu2b1drayt3KQIAMAaCZl96HbhSqZTrEgpWR2eHenp6XJcBAEAkBPVcrwMXjgxP9wEAwA8EriJF2AIAwB8ELgAAgJB5Hbi44Dt3JSUligfMBAEAAPkRj8ezHvd6DldlJXO4cnX88cdrT1MToRUAgDEwY8aMrMdZAilWXMQFAIA3vA5czOHK3YsvvqiWFibNAwAwFvbu3Zv1uNeBizlcudvf1aVEotd1GQAAREIikch63OvABQAAUAwIXEWMq7gAAPADgatI2cGL5rlLEQAA97wOXISF3JWVlamkxOupHwAAFI2gnut14GIOV+6OO+44TZ+efSYIAADIj+nTp2c97nXgAgAAKAZeB65Egjlcudq6dataWppdlwEAQCQEzb70OnCl08zhylVPd7f6CKwAAIyJoGHtXgcuHCnLjQcAAHiAwFW0mMIFAIAvCFwAAAAh8zpwxWJel+e18ooKlZaWui4DAIBICOq5XieaiooK1yUUrHnzjtVRRx3lugwAACIhqOd6HbhwZLiKCwAAP3gduBKJhOsSCtbmzZu1Z88e7lIEAGAM7NmzJ+txrwNXOp12XULBSiQSGhgYcF0GAACRENRzvQ5cAAAAxYDAVcQsF3EBAOAFAleRsqQtAAC84XXgisXirksoWOPGjVN5ebnrMgAAiISgnut14KqoIDDk6pijj9bUKVO4SxEAgDEwderUrMe9DlwAAADFwOvA1dvb67qEgtXY2Kimpt2uywAAIBKampqyHvc6cHHhd+76+/uVTCZdlwEAQCQE9VyvAxcAAEAxIHABAACEjMBVxNiQBQDAD14HrnicOVy5Glc9ThUVFYyFAABgDFRUVGQ97nXgYnBn7mbPPlpTpkxxXQYAAJEQ1HO9Dlw4MtaKFS4AADzgdeBiDlfuNm3apN27mcMFAMBYCOq5Xgcu5nDlLplMKsUcLgAAxkQqlcp63OvAhSNAWAUAwBvOApcx5j3GmP9njOk1xuwxxtxijMn+5Ee8Oly+BQCAF5wELmPMxyX9RFKHpI9J+r+S3i7pYWPMOBc1AQAAhKVkrD/QGDNF0pckrZW02lqbGnx9raS7lQlgX5GYw3UkampqVFVZ5boMAAAioaoqe8/N2wqXMWa8MeZLxpinjTF7jTF9xphGY8xXjTEHVnGJpCpJ3xkKW5Jkrb1H0hZJ7xp6jTlcuZs5a6Zqaye7LgMAgEiYPDl7z83nluIsSe+X9IykL0r6hKS/SvqUpDsPOG/J4NcnR3iPpyQtNMZU57EuAAAAp/K5pbhF0mxr7cABr33PGPNFSdcZY06z1v5F0szBYztHeI+dylzqPVPSpp4e5nDlauPGjdq5a5eOPuYY16UAAFD0du3alfV43la4rLX9Q2HLGFNijJk0eL3WA4OnnD74dWh7sW+Et0kcfA6jDXKVTqWVTqddlwEAQCQE9dy8XjRvjPmQpKsk1emVYW7S4Neewa/lkg5dwhp68uPPBq8BU814dhdzMXT9W1/fSLkWAADkU3l5ueLxeNlox/MWuIwxn5D0TUl/lPRtSbsk9StzbddtejmADa25zZLUeMjbzFJmWWuZtbZr1qxZ9stf/nK+SoyUHTt2SJJOrKtzXAkAAMXvxW0v6lOf+mT/aMfzucL1bknbJF1orR1eVzPGXHDIeWslXSlpmV4ZuE6XtNFa2yVJ48eP11sve1seS4yO+vp6SdLixYsdVwIAQPGrr69XKpVKjHY8n3cpppRZnRqeb26MKZF07SHn3aXMVuI/G2PiB5z7RknHSvr50GslJWM+Jqxo1NbWqra21nUZAABEQlDPzWeiuUPSf0j6X2PMbyXVSHqHpAPvWpS1tsUYc72kb0h6wBjzC2W2Eq+RtEHSfw2dW1Y26lYoAsyePdt1CQAAREZQ381n4Pq6Mqtb/yTpRklNkn4p6VZJzx14orX2m8aYVkkfV+Z6r05Jv5J07dB2IgAAQLHIW+AanBr/H4P/OdQrHqNsrb1NmYvpR9XT05PtMLLgGi4AAMbOUN8djZOHVwMAAEQJgQsAACBkBC4AAICQEbgAAABC5vWgK+Zw5W7q1KmuSwAAIDKC+q7XiYY5XLmbNWuW6xIAAIiMoL7r9ZaitdZ1CQUrlUoplUq5LgMAgEgI6rleB67e3l7XJRSs9evXa/369a7LAJBHf/rTn3TK616n1772ZH3rm990XQ6AAwT1XK8DFwAgI5VK6ZprPqHf/Pa3Wrv2Gd1xx6+1YcPzrssCcJgIXAAwBv7x7W/XqjNW6rQlr9etP/6xpMyK1RkrV2j5sqV64z9cLElqbW3Vm9/8Jq1csVwf++hHVHfiCWrdu1fPPPOM5s2bp7lz56qsrExvfetluu/e+1z+kQC8Cl5fNA8AxeJ73/++Jk+erN7eXp115ipd/A8X66Mf+Wf97+//oDlz5qitrU2S9NWv/oeWLVuma6/9N/3+97/XrbfeKknavXuXXjPrNcPvN3PWLD3zzFonfxYArx6BCwDGwM0336R777lHkrRz507deuutWr5ihebMmSNJmjx5siTpiccf1+0//29J0gUXXKCJkyZJGvkmImNe8ZhaAJ7yOnCVlpa6LqFgTZ8+3XUJAAatWfOoHv7zw3rgwYdUVVWliy68QItOWqQXXnhhxPNHClIzZ87SSztfGv55186dmjF9Rmg1A3h1gvqu19dwEbhyN336dEIX4InOjk5NnDhRVVVV2rRxo9auXau+/j49/thj2rZtmyQNbykuX7FCv/rVLyVJf/zjH9W+b58k6dRTT9WWzZu1bds29ff36ze/uUMXXXyRkz8PgFcK6rler3ClmcOVs4GBAUmEVsAH5553nn704x9p2dLTddxxx2nJkiWaMmWKbvz2d/Sud75D6XRaU6dO1V1336Nrr/03ve99V+iMlSu0YuVKzZ49W1LmyRtf/8Y3dekllyiVTund7363TjjhRMd/MgBDhvruaIzPw0UXLlxo1z6zznUZBam+vl6StHjxYseVADgSJ9WdqEceeVS1U6a4LgVAFvX19Vp1xsp11trXj3Tc6y1FAACAYuD1liIARN3fG55zXQKAPGCFCwAAIGQELgAAgJB5vaXIHXa5mzlzpusSAACIjKC+S+AqUtOmTXNdAgAAkRHUd73eUkyn065LKFiJREKJRMJ1GQAAREJQz/U6cBEYcrdhwwZt2LDBdRkAAERCUM/1OnABAAAUAwIXAABAyAhcAAAAISNwAQAAhMzrsRBlZWWuSyhYs2fPdl0CAACREdR3vQ5cJSVel+e12tpa1yUAABAZQX3X6y3FFHO4ctbT06Oenh7XZQAAEAlBPdfrwNXHHK6cbdq0SZs2bXJdBgAAkRDUc70OXAAAAMWAwAUAABAyAhcAAEDICFwAAAAh83ruAnO4cnf00Ue7LgEAgMgI6rteBy7mcOVu8uTJrksAACAygvqu11uKqVTKdQkFq6urS11dXa7LAAAgEoJ6rteBq6+vz3UJBauxsVGNjY2uywAAIBKCeq7XgQsAAKAYELgAAABCRuACAAAIGYELAAAgZF7PXSgrL3ddQsGaO3eu6xIAAIiMoL7rdeAqicddl1CwJkyY4LoEAAAiI6jver2lmGQOV846OjrU0dHhugwAACIhqOd6Hbj6mcOVs61bt2rr1q2uywAAIBKCeq7XgQsAAKAYELgAAABCRuACAAAIGYELAAAgZF6PhShnDlfO5s+f77oEAAAiI6jveh244szhyll1dbXrEgAAiIygvuv1lmIymXRdQsFqa2tTW1ub6zIAAIiEoJ7r9QpXf3+/6xIK1vbt2yVJkydPdlwJAADFb6jvjsbrFS4AAIBiQOACAAAIGYELAAAgZAQuAACAkHl90Xx5RYXrEgrWggULXJcAAEBkBPVdrwNXPMYCXK6qqqpclwAAQGQE9V2vEw1zuHLX2tqq1tZW12UAABAJQT3X6xUu5nDlbseOHZKk2tpax5UAAFD8hvruaLxe4QIAACgGBC4AAICQEbgAAABCRuACAAAImdcXzVcwhytnCxcudF0CAACREdR3vQ5cMeZw5YywCgDA2Anqu14nmoGBAdclFKzm5mY1Nze7LgMAgEgI6rler3ARuHK3a9cuSdK0adMcVwIAQPEb6ruj8XqFCwAAoBgQuAAAAEJG4AIAAAgZgQsAACBkXl80X1FZ6bqEglVXV+e6BAAAIiOo73oduGLGuC6hYJWWlrouAQCAyAjqu15vKTIWIndNTU1qampyXQYAAJEQ1HMJXEWKwAUAwNgp6MAFAABQDAhcAAAAISNwAQAAhIzABQAAEDKvx0JUejqHK52WOnuN+pNSeYk0vsoq5tkEi0WLFrkuAQCAyAjqu14HLuPhHK7ePmnrnpha98c0MBi4pkxMa860tMo9Gn0Vj8ddlwAAQGQE9V2vA1d/f7/rEg7S2ydt2hXX3s6YJlalVT5O6u2XXmqJqX/AaMGslDeha+fOnZKkWbNmOa4EAIDiN9R3R+P1NVzJZNJ1CcNS6czK1t6OmKaMT6uiTDJGqiqXasdbNXcYvdgcU9q6rjSjpaVFLS0trssAACASgnqu14HLJ7vbYtrTHtOk6rRKDlk1LC2RJlRaNe2LqaXDv21QAADgFoHrMHQnpJ2tMZWVaNQtw8ryzNeX9sbUx4B8AABwAALXYdjVFlNXr1FNVfb9wonjrNq7jJr28dcKAABeRjII0Nlj1NIRU3VlOnD0QzwmVZZJTe0x9faNTX0AAMB/Xt+lWFVV5boE7Wk36ukzmj7x8K6GH19p1dxptKc9pjlHpUOubnSLFy929tkAAERNUN9lhSuL/T1SS0dM4yvSOtyRYLGYVFUm7emIqdevqRYAAMARrwOX6zlcLZ0x9fYZjat4db9XXWHV1SO1drr7692xY4d27Njh7PMBAIiSoJ7rdeByOYertz+zulVVbg97dWtILJa5m3HPvszjf1xobW1Va2urmw8HACBignqu14HLpdbOmLoSmdWqXIyvtOrsNWrbz1wuAACijsA1goFk5mL5spLMalUuSuJSzEjNHTGl3V07DwAAPEDgGsG+LqP9vUbjK4/sOT3jK606uo06eljlAgAgyjwPXGMfVNJWauk0slYqzf7g70DlpZnVMheP+4nHYornujwHAABelaCe6/kcrsox/8z9PUbtXTGNz/HarUNVlVu17Y+pO5F+1Xc7HolFJ588dh8GAEDEBfVdlkAO0brfKDFgVFGWn/cbVy5190mt+/mrBgAgqrxOAX19Y/t8nOFREGWvfhTEaGIxqbxEam43GhjDEREvbtumF7dtG7sPBAAgwoJ6rteBK5VKjennte0/slEQoxlfabW/16ita+yu5drX3q597e1j9nkAAERZUM/1OnCNpWQqM6i0LJ77KIjRlMQzl/83t8eUzm+WAwAABYDANWhfl1Fnr1H1EY6CGM34Sqv2bqOObkZEAAAQNQQuZUZB7GmPyVqpLKT7NivKpP6k1NyRGTkBAACiw+vAZfJ15XqAjm6jfV1GNSGtbg0ZX2EzjwzqDfVjJEmlpaUqLS0N/4MAAEBgz/V6DldlZfhzuKx9+SHTk6vD/ayqcmlPu9TSGdP4qnCf91NXVxfq+wMAgJcF9V2vV7jGQkePUev+/A06zcaYTOhqbo+pOxH6xwEAAE94HbjCnsNlbeYh1YkBo6ryUD9qWHWlVXcic81YmLZs2aItW7aE+hkAACAjqOd6vaUY9hyujh6jvR0x1VSm8zboNEjsgFWuaRPTqg7pcT+dnZ3hvDEAAHiFoL7r9QpXmNJW2t1mlBiQKvP0GJ/DNX5wlaupLcYdiwAAREBkA1drp1FLR0wTqvL3GJ/DZUwmdO1pj6mduVwAABS9SAau/qT0UmtM6fTYr24NqSqX+gakl/bGlAr3hkUAAOCY14ErjDlc1ko7W2Nq2280qdrdfp4x0qRqq72dRrvb8v/PUF5epvJyR2kSAICICeq5oV80b4zZJmmbtfasV/u7Yczhat1vtKs1pnHlViXxvL/9q1JWIpWXSDv2xlRdaTVxXP4C4AknnJi39wIAANkF9V1nK1zGmNONMQ8YY/YbYzqNMb83xiwO8zO7E9K2PTENJKXx4c9UPSw1VVa9fZm6Ev2uqwEAAGFwEriMMUslPSJprqTPSvqcpOMkrTHGLBo6L5HI3xyuRL+0uSmuju6Yasf7c2ugMVLteKvW/UZbmmLqT+bnfRsbG9XY2JifNwMAAFkF9VxXc7i+Lalf0ipr7U5JMsb8StLzkr4p6XxJSqfzM4ert3Ok24oAACAASURBVE9q3B1XS7vRlJq0Yp5duVYSlyZXW+3elyns2BlplR/hYxC7urryUBkAADgcQX03b9HDGDPbGPMrY0zH4BbhPcaYY0c4b76kJZJ+PRS2JGnw+19LOtcYMz1fde3rMtrwUlzNHTHV1ri/bms0ZSXS5HFWu9ti2vhSXJ09jIsAAKBY5CVwGWMmSnpU0lsk/UzStZJ6JP1Z0rhDTl8y+PXJEd7qKUlG0qlHWlN3QtrSFNNzO+Jq7zaaWpNWqadha0hZqTSlxmrvfqPntsf1YjPXdQEAUAzytaX4KUlzJL3PWnvr4GvfN8b8l6SPHXLuzMGvO/VKQ6/NerUFpG1mrlVXr1F7t1FrZ+YB0eMqpKk1Yz/cNFclcWlajdX+XqPGXTE1tcc0pSatiVVW4yqsyktVMH8WAACQka/AdYmkPZJ+esjrX9MrA1fV4NeRrohPHHhOT8Lqtw/t1dAl7laZOVrWSmlrlB4cGJpOS8m0lEwZ9SelvqRUEpOqyiQZfy6Qf7Vs2qi3X0rZzPiIshKpJJ7ZFjVGkpHiRjImEyiNySwPStKenZm/3i1te53VDwBAVLQ09UkmPupeWr4C1zxJa621B13lbq3dbYxpP+TcnsGv5SO8z9CjnP/FGPMuSbr8zXPyVCIAAEB44uWTJ412LJ93KY62lHToBtiuwa8jbRsOvfZha+19i05+nf3lnQ9KkmKDKzpG8u4uQ9eGVv0OXAEEAABjJx6XFs6tHXVbKV+Ba4ukBcaY+IGrXMaYGZImHHLu2sGvyyTdcsixpcrkhnWSlEr2afZRIy2EIcjGjRslSccff7zjSgAAKH5DfXc0+VorukvSUZLec8jrnz70RGtto6RnJL3NGDN0Ab0Gv3+bpIestU2SlE7zVOdc9fb2qre313UZAABEQlDPzdcK1w2S3iHph8aYUyU1SDpLmVWskZbXPqbMyIg1xpjvDL72EWUC4DV5qgkAAMALeVnhstbuk3SGpN8ps8p1gzJ3Gp4tqXuE859QJpBtk/QlSV+U1KjM5Pm/5aMmAAAAX+Ttonlr7XZJl41waM4o5z8paXW+Ph8AAMBXrp6leFhiMc9Hw3usurradQkAAERGUN/1OnBVVHCHYq7mz5/vugQAACIjqO8y0QoAACBkXgcuxhrk7vnnn9Pzzz/nugwAACIhqOd6vaVoGZmes76+ftclAAAQGUF91+sVLgAAgGJA4AIAAAhZYOAyxnzUGPO8MebnY1FQsbj/vvv0rW9+U5J07z33aMOG5wN/59DzvvSlL+rPf/5zaDUejosuvEB//etfndYAAEChO5wVrg9Jusha+86hF4wxY3LtVzxeuHO4Lrr4Yn3imsxTiu69915t2LAh8HcOPe+6667X2WefndPn19TUqKamJqffBQAAr05Qz80auIwxN0uaJ+luY0yHMeYHxpg/SvqpMSZujPm6MWatMeZZY8wHB3/HGGO+a4x5zhhznzHmfmPMSBPohz7jq4PnPmuM+cbg+24xxph4PK4JNeP1+GOPSZLecP552rx5s7q7u/Whq6/WmWeu0soVy3XfvfdKklKplK77zGd05pmrtGzp6frxj38kSVqz5lFd8Ibz9Y5/fLuWvP5U/cvHPpr1wdgPPvigVp9zjs5YuULvefe71NXVpY6ODp3yutfphU2bJElXXHG5brv1VknSn/70J52xcoWWL1uqN/7DxZKkn99+u6655hN6+qmndP//3q/rr7tOK5Yv05YtW3TbrbfqzDNXafmypXrXO9+hnp6eEc+76oMf1O9+d6ck6eGH/6yVK5Zr6emn6UNXX62+vj5J0kl1J+rLX/6Szli5QktPP02bBp9WPm/ePM2bN++gP9dXvvJlfeAD79c/XHyRFi9+7XD9a9Y8qrdd9vI/0TXXfEI/v/32g343lUrpqg9+UKeftkRLTz9N3/3udyVJW7Zs0aWXXqJVZ6zUG84/b/jzAQCIkkN77qGyrlRZa68yxlygzDMR/1nSGyWttNb2GmOulNRhrV1ijCmX9PhgGHudpOMlLZJ0lKTnJP14pPc3xkyWdKmkhdZaa4yZaK1NGWM2STqxu7tbi1/3Oj3x5BN6/ZIl2rVrl4499lh9/t//XavOPFPfv+kmtbe36+yzztJZZ5+tX/3yl6qZUKNHHnlUfX19Ov+8c3XOOZmnB61bt05/WfuMjj76aL3l0kt099136ZJLLn1FTa179+rrN3xNd99zj8aNG6f//Na39N3vfkfXXvtv+sY3v6mrrrpKV3/oarW3t+vyK67Q3pYWffQj/6z//f0fNGfOHLW1tR30fqcvXaqLLrxIF1x4wfDnTZgwQZdfcYUk6Qtf+Lx++tOf6Kqrrn7FeUMSiYSuvuoq3X3PvTruuON05ZUf0C233KIPf/jDkqTa2lqteexx/fCHP9C3v/1tffd73xv137Th73/Xgw/9WT3d3Vq5coXecMEFo557oGeffVa7d+/S039ZK0lqb2+XJH3sox/Rf/7XjZo/f77Wrl2rT3zi47r3vvsP6z0BAIiKV7s1eLe1dmg41vmSTj5g9WqCpOMkrZL0C2ttStIuY8xDWd6vU1JC0i3GmPsk3Tv4+hpJq9rb2/WFL3xRt/3kNq1csVKnnHKKJOmhhx7U/fffp+98+0ZJUl9fQi/t2KGHHnpQf/97g+763e8yb97Zqc2bN6usrFSnnnqq5s6dK0m67LK36cknnxwxcP1l7Vpt2LBB5593riSpv79fp512uiTpnHPO0e/u/K2u+cQ1euLJJyVJa9eu1fIVKzRnzhxJ0uTJkwP/Ep9//jl98QtfUEdHh7q7u7V6dfZHSr7wwgs65phjdNxxx0mS3vGOd+iHP/jBcOB605veLElavPh1uufuuyVJDQ0NkqS6urqD3uuiiy9WZWWlKisrdcaqVVr3zDOaMHFCYM1z5szR1m3b9K//eo3e8IYLtHr1anV1denpp5/We9/z7uHzhlbeAACIkqG+O5pXG7i6D/jeSPqItfYPB55gjLlI0mEN0LLWJo0xpynzEOu3K7OKdo4ygeuq3t5enf+GN+jGG2/UmsfWaPmKFUO/p9tv/7mOW7Dg0PfT17/xDZ177rkHvb5mzaMyxhz02qE/H/AmOvucc3Trrbe94lA6ndbGjRtVWVmhffv2adasWbLWjv5eo7j6qqv037/4Hy1atEg/v/12rVmzJuv5QfPIysvKJGWueUsmk5KkgYGBEc8d6e+hJF6itH15i7Uv8crQNGnSJD3xxJN68MEH9MMf/EB3/va3+urXvqYJEybo8SeezFofAADFbrS+O+RIxkL8QdLVxphSSTLGLDDGjJP0qKS3D16LNUOZ7cgRGWOqJU2w1t4v6V8kLR489LSk5cYYVVRU6OSTF+nWH/9Yy5dnAtfq1efq5v9783AQ+dvf/jb8+o9uuWX4D/3CCy+ouzuTEdetW6dt27YpnU7rN7/9jZYtWzZiTUuWLNHTTz2lzZs3S5J6enr0wgsvSJK+993v6vjjj9ePf3yrPvyhqzUwMKDTTjtNjz/2mLZt2yZJr9hSlKTq8dXq2t81/PP+/fs1ffpRGhgY0K9+9ctRzxuyYMECbd++fbim//nF/2jFypWj/bVmdf999ymRSKi1tVWPrVmjU049VbOPPlobN2xQX1+fOjo69MgjD7/i91r37lU6ndab33yJrrv+ev3tb/WqqanRMcfM0Z13/lZSJhiuX78+p7oAAChmR3K34S2S5kj6q8ksm7RIukTSncqsUq2XtEnSI1neY7yku4wxFcqsmH1ckqy1fcaYHRUVFcdI0rLlK3THHXcMb4996tOf1rWf/pSWLT1d1lodffQx+vUdd+i9l1+u7du364yVK2St1ZQpU/Tfv/gfSdJpp52mf//cZ9XQ0KAVK1bojW9804gFTZk6VTfdfLPe974r1D+4PXb99Z+VJP3kJ7fpzw8/ovHjx2v58hW64Yav6TOfuU43fvs7etc736F0Oq2pU6fqrrvvOeg9L3vrZfrIR/5ZN998k376s9t13fXX65yzz9bs2bN1Yl3dcMg69LwhFRUV+v5NN+m973m3ksmkTjnlVP3TP73/cP6NXuHUU0/V2y57q3a89JI+9alPa8aMGZKkSy99i5YtXapjjz1WJ5988it+b9fu3frQ1VcN32zwuX//vCTplh/9SB//+L/o6zfcoIGBAb31ssu0aNGinGoDAKBYmbAfn2OMuU3SvdbaO17t7y5cuNCufWbdEdewZs2j+vaN39av73jVJRSs+vp6SdLixYuHX/vKV76s6nHV+ujHPuaqLAAAilJ9fb1WnbFynbX29SMd9/pZioU8h8u1SRMnui4BAIDICOq7oa9wDX+QMXdKmnvIy58+9KL7A51yyin2kUezX1B+JM4++6zhbcMhP/jhD1VXd1JonzkWbv/Zz3TTTd8/6LXTly7Vt771n44qAgCg+NWMrx51hWvMAlcuwg5cAAAA+ZItcHn98Oqent7gkzCi9c8+q/XPPuu6DAAAIiGo53p9DddhjvPCCFJZHl0EAADyK6jver3CBQAAUAwIXAAAACEjcAEAAITM62u4Skq8Ls9rtbW1rksAACAygvqu14mmbPChzHj1Zs+e7boEAAAiI6jvsqUIAAAQMq8DV09Pj+sSClZ9ff3w8xQBAEC4gnqu14ELAACgGBC4AAAAQkbgAgAACBmBCwAAIGRej4VgDlfupk6d6roEAAAiI6jvep1omMOVu1mzZrkuAQCAyAjqu15vKVprXZdQsFKplFKplOsyAACIhKCe63Xg6u3tdV1CwVq/fr3Wr1/vugwAACIhqOd6HbgAAACKAYELAAAgZAQuAACAkBG4AAAAQub1WIjS0lLXJRSs6dOnuy4BAIDICOq7BK4iReACAGDsBPVdr7cU08zhytnAwIAGBgZclwEAQCQE9VyvA1eCOVw5a2hoUENDg+syAACIhKCe6/WWIvLHJtMaaNgt29PvuhQAAIqCKYur9ORZMqXxwHMJXBGR2tmugb/vklJWJm5clwMAQEGzfUmZ8RUqmVMrUzsu8HwCV0TYrj4pmVbJ3FrXpQAAUPBsKq3Ujnalu/sVO4zA5fU1XMgfO8CDrAEAyBcTj0kpm1nQOAxer3AxFiJ3M2fOPOhnm0hKcfI1AAB5E89sLUqv7LuHInAVqWnTph30s00MZNI4AADIj1hsOHAd2ndfcepY1JOrdDrtuoSClUgklEgkXn6hLymVcLE8AAD5YuIxqT8zf+ugnjsCrwNXUPEY3YYNG7RhwwZJmZEQdiAtxbz+5wYAoLDEjGx/ZnFoqOeOeupY1APHkikplZIp4Z8bAIC8iRvZ/qTsYTwZhw4cAXYgLaUsF80DAJBHJpa5U1HJ4Eug6MBRkE7Lpq0U4xouAADyJm6kdJrAhUGptGStDIELAID8GZrFdRiBy+uxEGVlZa5LKFizZ88e/t6mbGbJk8AFAED+xMxgj00f1HdH4nXgKinxujyv1dYe8AifVFo2nSZwAQCQRyYek02nZZMp1U7J/ug8r7cUU8zhyllPT496enoyP6Rt5j8ELgAA8idmJJvpscM9d7RTx6iknPQxhytnmzZt0qZNmyRlHrCZCVxe/3MDAFBYjDI3paXtcM8dDR04ClKDK1wscAEAkD8x8/IuUtCpY1AOXEunJSMZQ+ICACBvTCZw2RRjISBlxkKwvAUAQH4dcA1X4KljUA4csymb+S8EAADIm+Gdo8MIXF7PXWAOV+6OPvrol39IpTPLngAAIM+MlEof3HdH4HXgYg5X7iZPnvzyD2lWuAAACIeVTduD++4IvN5STKVSrksoWF1dXerq6pKkzCMHvP6XBgCgUBkpZYd77mi8bsN9fX2uSyhYjY2NamxslDQYuNhSBAAgHOn0cM8djdeBC3mSTPHgagAAQsFdihjCChcAAOEwgztJAQhcEWBTPLgaAIBQGEPgwiBWuAAACIWJGSkZfJOf13MXysrLXZdQsObOnfvyD6xwAQAQDmOkgbTmnjg362leB66SeNx1CQVrwoQJkiRrB5/xRN4CACD/YkY2nR7uu6PxOnAlmcOVs46ODklSzbjxUlqscAEAEAZjpGR6uO+OxutruPqZw5WzrVu3auvWrZkJ89a+/LwnAACQP4PXcG3dujX7aWNUDlxJpaU013ABABAKI9m0lQ14hB6Bq8jZtJWsuEsRAIAwxEzm0p2A4acErmKXHpyAywoXAAB5Z4wZvnwnGwJXsRta5mSFCwCA/IsNBq6AFS6v71IsZw5XzubPn5/5ZiA9eJei03IAAChOxkhpq2Pnzst6mteBK84crpxVV1dLktJt3ZJN8/BqAADCYIyUTqu6clzW07wOXMlk0nUJBautrU2SNCFVllnhYksRAID8ixlZa7WvtS37aWNUTk76+/tdl1Cwtm/fru3bt3MNFwAAYYpJSkvbt78YeBqKWTrNXYoAAIQkc5dimrsUIy81eKsqgQsAgPyLGclmMlfW08amGrhih25VZUsRAID8MyYzZJzBpxE3uMLFXYoAAIRgcCxE0Jai13cplldUuC6hYC1YsCDzTVOP20IAAChmg4NPjztmbtbTvA5c8RgLcLmqqqqSJCXT3ZlnKQIAgPyLZVa4Kssrs57mdeBiDlfuWltbJUk1aSuxmwgAQDiMJGuH++5ovA5czOHK3Y4dOyRJdeUzROICACAcZvCmtJd2vZT1PPbsil06LfYUAQAIkVXmqS5ZELiKXdqStwAACJMZHMOUBYGryNlUmh1FAABCZTJjmLIgcBU5m0wz9BQAgLAFjJr3+qL5CuZw5WzhwoWZb/7WxGN9AAAIldXxRx+b9QyvA1eMOVw5Gwqrfcn08B0UAAAgHOWx0qzHvQ5cAwMDrksoWM3NzZKkCakUK1wAAIQpZtS8tyXrKQSuIrVr1y5JUs1AJYELAIAwGaPdzU1ZT2HPrtgl0wQuAABCZGJGSmW/aJ7AVcRs2mbGQhC4AAAIT8xk+m22U8aoFLiQTktpy0XzAACEyRgpyRyu6LLKTJpnhQsAgPDEjJRKZT3F64vmKyorXZdQsOrq6mR7+5XauZnABQBAmGJGC2fMy37KGJWSkxhbYTkrLS1VSayEFS4AAEJmYkalsbhMlofpeb3CxViI3DU1NSndmdBEazN3TwAAgHDEjPbsa5HJ8iw9AleRampqkt2f0MR0Oc9SBAAgTLGY9uzbO/ryljzfUsSRsWmbuUuRFS4AAMITM5kb1bKscBC4ilnaZkIXgQsAgPDETGaBI8s1XASuYja4wkXgAgAgPCZuJGvZUoysVFqyBC4AAEJlTGZHKcukca8vmq9kDlfOFi1apOSLbUru3kLgAgAgTHGjE6fPLdwtRR5Jk7t4PK64zfz98fcIAECIYjHFrSncsRD9/f2uSyhYO3fuVHJ3q6a4LgQAgCJnYka797UU7gpXMpl0XULBamlpUcvelsHbVAEAQJj29rRnPe4scBljjjfG/M4Ys88Y022MWWOMOcdVPUUpRdoCAMAHTgKXMeZYSU9IWibpBkmflFQt6Q/GmHNd1FSM7ECKC+YBAPCAq2u4/kPSREmnWmvrJckY81NJDZK+Z4xZaK1leeZI9acys0EAAIBTr3qFyxhzuTHGGmNWG2M+a4x50RjTa4x52hizdPCcM40xjw1uFe42xlx/wO+Pk/QmSQ8PhS1JstZ2SbpF0gJJS474TwbZVEqKeX2ZHgAAkXAk3firki6RdKOkz0uap8yW4CWSfitpjaR/lbRB0heMMe8a/L2TJZVLenKE93xq8OsSSaqqqjqC8qJt8eLFOnnWfIkVLgAAQrdo5vysx49kSzEuaam1tl+SjDHPSbpL0h2Slllr1w6+/iNJL0r6sKTbJc0c/P2dI7zn0GuzjqAuSLJ9SdlEUqY07roUAAAi70hWuG4aCluD1gx+fWoobEnS4Dl/kXTc4EtDy1Z9I7xn4sBzmMOVu+0bN2vH7p1SRanrUgAAKHovtTdnPX4kK1xbDvzBWrtvcKL51hHO3SepdvD7nsGv5SOcVzH49f8YY1ZKUs346iMoEQAAYGyMMyUjZRtJRxa4Uq/y9SG7Br+OtG049NqXrLXfmzttpv3F1Z/Lqbio29SS2Z1duGCB40oAACh+m3Zv1xU3XNc72nEXYyHWK7OduGyEY0sHvz4jSeWTa1T3yXeNcBqCDNRnbgA9YfFix5UAAFD8+urrlbzBjnot1JjPDBgc/3CPpLOMMa8det0YUy3p/ZJeUOaaLwAAgKLgavDpv0laLemPxpj/lNQp6QPKbCle/PLQU0Ya5CrO/C0AAMZMUN91EristY3GmBXKzPK6VlKZpL9KusBa+8DQeVVVlS7KKwqLTj7ZdQkAAERGUN81Pj9B55RTTrGPPLom+EQAAADHasZXr7PWvn6kY17vO/X1jTSqC4fjxW3b9OK2ba7LAAAgEoJ6rqtruA5LKhU0YQKj2dfeLkk6xnEdAABEwVDfHY3XK1wAAADFgMAFAAAQMgIXAABAyLy+hmvw2YzIQWkpD60GAGCsBPVdrwNXZSVzuHJVV1fnugQAACIjqO+ypQgAABAyrwMXc7hyt2XLFm3ZssV1GUBRqBlfrQ984P3DPyeTSc2dc4zedtllR/ze27Zt09lnn6XFi1+ry9/7HvX3j/rsW/389ts1d84xWrF8mVYsX6af3HZb1vdOJBI666wztXzZUp225PX68pe/dMT1AhhZUM/1OnAxhyt3nZ2d6uzsdF0GUBTGjRun5597Tr29vZKkhx56SDNnzszLe3/us9frwx/+sOrr/6aJEyfqpz/9Sdbz3/LWt+rxJ57U4088qfdefnnWc8vLy3XvvffpiSef0uNPPKkHHnhAf/nLX/JSN4CDBfVcrwMXAPjivPPO1x/+8HtJ0h13/FqXXfa2rOd/5Stf1gevvFJvfvObdFLdibr7rrt0/XXXaenpp+nSSy/RwMCArLV65JFHdMkll0qS/vEd79S9996bU303/td/6cwzV2nZ0tOHV7KMMaqurpYkDQwMKDkwMHwz0rp163Tu6tVavmypzjrrTO3fvz+nzwVweAhcAHAY3nrZZfrNHXcokUio4e9/1+uXjPi4tINs3bpVd9zxG/3if36pD3zg/Tpj1So99fRfVFlRoT/8/vdqa23VhIkTVVKSuX9p1qxZ2r1rV9b3vPuuu7Rs6el697veqZdeekmS9OCDD2rz5kY9/PAjevyJJ1X//+r1+GOPScrsFKxYvkzHzpurs88+R0uWLFF/f7+uuPy9+toNN+iJJ5/S3Xffw01KQMgIXABwGE466SRt375dd/z61zr//Dcc1u+cd/55Ki0tVV1dnVKplM477zxJ0ol1dXpx+3ZZa1/xO9nG4Vxw4YX6e8NzevKpp3XW2Wfrqg9eKUl66MEH9dBDD2nliuU6Y+UKbXphkzZv3ixJisfjevyJJ/X8ho1at+4ZPfdcg154YZOOOmq6Tj31VElSTU3NcOgDEA6v/xfGHK7clZeXuS4BKDoXXnSRPvOZz+j+/71fbW1tgeeXl5VLkmKxmEpLS4f/Py0WiymVTKp2yhR1tLcrmUyqpKREO3fu1PQZM0Z9v9ra2uHvL7/8Cn3us5+VJFlr9YlrrtH73vdPo/7uxIkTtfKMM/TAnx7QOatX8/+vQJ4F9V2vV7hY4s7dCSecqBNOONF1GUBRefe736NPX/tp1dWdlJf3M8Zo1apV+t3v7pQk/eK/f66LL7541PObmpqGv7//vvu0YMHxkqTV556rn/3sZ+rq6pIk7dq1Sy0tzdrb0qL2wQfq9vb26uE//1nHLVigBQsWqKlpt9atWydJ2r9/v5LJZF7+TEBUBfVcr1e4AMAns2bN0oc+9OG8vufnv/BFXXHF5friF7+o1558st7znveOeu7NN92k+++/TyUlJZo0aZJuvvlmSdLq1au1ceMGnbv6HEnSuHHV+uEtt6inp0dXffBKpVIppdNpXfqWt+jCCy+UJN1620/0yX/9VyUSvaqoqNTd99wzfIE9gPwzI11D4IsTT6yzT3MLc04aGxslSfPnz3dcCQAAxa+xsVGnvG7xOmvtiHfUeL3ClU4zhytXQ1sLAAAgfEF91+vABQC+u/1nP9NNN33/oNdOX7pU3/rWf+b8nl//+g363Z13HvTaJZdeqk9+8lM5vycAt7zeUly4cKFd+8w612UUpPr6eknS4sWLHVcCAEDxq6+v16ozVo66pej1XYoAAADFwOstxViMPJgrRmoAADB2gvqu14GroqLCdQkF6/jjj3ddAgAAkRHUd1lCAgAACJnXgSuRSLguoWBt3LhRGzdudF0GAACRENRzvd5STKfTrksoWL29va5LAAAgMoL6rtcrXAAAAMWAwAUAABAyAhcAAEDIvL6GKxaLuy6hYFVXV7suAQCAyAjqu14HroqKctclFKz58+e7LgEAgMgI6rtsKQIAAITM68DFaIPcPf/8c3r++edclwEAQCQE9VyvtxStta5LKFh9ff2uSwAAIDKC+q7XK1wAAADFgMAFAAAQMgIXAABAyLy+hiseZw5XrmpqalyXAABAZAT1Xa8DV3k5c7hyNW/ePNclAAAQGUF9ly1FAACAkHkduJjDlbuGhgY1NDS4LgMAgEgI6rlebykyhyt3AwMDrksAACAygvqu1ytcAAAAxYDABQAAEDICFwAAQMi8voaLOVy5mzRxousSAACIjKC+63XgYg5X7o6ZM8d1CQAAREZQ32VLEQAAIGReB66eHuZw5Wr9s89q/bPPui4DAIBICOq5Xm8pSszhylUqnXZdAgAAkRHUd71e4QIAACgGBC4AAICQEbgAAABC5vU1XCUlXpfntdraWtclAAAQGUF91+tEU1ZW5rqEgjV79mzXJQAAEBlBfZctRQAAgJB5Hbh6enpcl1Cw6uvrVV9f77oMAAAiIajneh24AAAAigGBCwAAIGQELgAAm0WXDgAACgpJREFUgJARuAAAAELm9VgI5nDlburUqa5LAAAgMoL6rteJhjlcuZs1a5brEgAAiIygvuv1lqK11nUJBSuVSimVSrkuAwCASAjquV4Hrt7eXtclFKz169dr/fr1rssAACASgnqu14ELAACgGBC4AAAAQkbgAgAACBmBCwAAIGRej4UoLS11XULBmj59uusSAACIjKC+S+AqUgQuAADGTlDf9XpLMc0crpwNDAxoYGDAdRkAAERCUM/1OnAlmMOVs4aGBjU0NLguAwCASAjquV4HLgAAgGJA4AIAAAgZgQsAACBkBC4AAICQMRaiSM2cOdN1CQAAREZQ3yVwFalp06a5LgEAgMgI6rtebymm02nXJRSsRCKhRCLhugwAACIhqOd6HbgIDLnbsGGDNmzY4LoMAAAiIajneh24AAAAigGBCwDw/9u73xDL6jqO4+9vs83ItrrujBWL7uaYbuCj3CSM0gcV/qO0f4QRKBlIUZBEkCGETy3qQRRJkaRhalbSPpGUkHqSmtqqK+rsuGOuua04U6PLxG67/XpwfhNnh71z7w73zDnnnvcLLnPmN/devufD78z5zjnnnpFUMRsuSZKkitlwSZIkVazRt4UYHx+vu4TW2rZtW90lSJLUGf32u41uuDZsaHR5jTY1NVV3CZIkdUa//W6jTyke8z5ca7a0tMTS0lLdZUiS1An99rmNbrgOex+uNZuZmWFmZqbuMiRJ6oR++9xGN1ySJEmjwIZLkiSpYjZckiRJFbPhkiRJqlij77vgfbjWbvv27XWXIElSZ/Tb7za64fI+XGs3OTlZdwmSJHVGv/1uo08pHjt2rO4SWuvQoUMcOnSo7jIkSeqEfvvcRjdchw8frruE1pqdnWV2drbuMiRJ6oR++9xGN1ySJEmjwIZLkiSpYjZckiRJFbPhkiRJqlij77swPjFRdwmtNT09XXcJkiR1Rr/9bqMbrg1jY3WX0FqbN2+uuwRJkjqj33630acUj3ofrjVbXFxkcXGx7jIkSeqEfvvcRjdcR7wP15rNzc0xNzdXdxmSJHVCv31uoxsuSZKkUWDDJUmSVDEbLkmSpIrZcEmSJFWs0beFmPA+XGt27rnn1l2CJEmd0W+/2+iGa8z7cK3Zpk2b6i5BkqTO6LffbfQpxaNHj9ZdQmstLCywsLBQdxmSJHVCv31uo49wHTlypO4SWuvll18GYHJysuZKJEkafcv73V4afYRLkiRpFNhwSZIkVcyGS5IkqWI2XJIkSRVr9EXzE6ecUncJrbVjx466S5AkqTP67Xcb3XCNvcUDcGu1cePGukuQJKkz+u13G93ReB+utZufn2d+fr7uMiRJ6oR++9xGH+HyPlxrt3//fgCmpqZqrkSSpNG3vN/tpdFHuCRJkkaBDZckSVLFbLgkSZIq1rhruCLiBuCG/O3h007dtKfOelriDOD1uotoCbManFkNxpwGZ1aDM6vBNC2nd/X6QaSU1rOQkxIRj6eULqy7jqYzp8GZ1eDMajDmNDizGpxZDaZNOXlKUZIkqWI2XJIkSRVresP1k7oLaAlzGpxZDc6sBmNOgzOrwZnVYFqTU6Ov4ZIkSRoFTT/CJUmS1Ho2XJIkSRVrZMMVEZdHxAsRMRsRN9VdTx0iYltEPBwRz0XEsxHxtTx+S0T8PSJ258eVpdd8K2f2QkRcVhof6Twj4qWIeCbn8Xgem4yIhyJib/66JY9HRPwgZ/F0ROwsvc91+fl7I+K6utanKhHxntK82R0Rb0TEjc6pQkTcHhGvRcSe0tjQ5lFEvC/P09n82ljfNRyOHjl9NyKez1ncHxGn5/GzI+Lfpbl1W+k1J8yjV+Zt1COroW1vETEdEY/mrO6NiPH1W7vh6pHVvaWcXoqI3Xm8nfMqpdSoBzAGvAicA4wDTwHn111XDTlsBXbm5VOBGeB84BbgGyd4/vk5qwlgOmc41oU8gZeAM1aMfQe4KS/fBNyal68EHgACuAh4NI9PAvvy1y15eUvd61ZhZmPAPyhu0uecKtb3EmAnsKeKeQQ8Bnwgv+YB4Iq613mIOV0KbMjLt5ZyOrv8vBXvc8I8emXexkePrIa2vQG/Aq7Jy7cBX657nYeZ1Yqffw/4dpvnVROPcL0fmE0p7UspHQHuAa6uuaZ1l1I6kFJ6Mi+/CTwHnLnKS64G7kkpHU4pzQGzFFl2Nc+rgTvy8h3AJ0rjd6bCI8DpEbEVuAx4KKW0kFL6J/AQcPl6F72OPgK8mFL62yrP6dScSin9CVhYMTyUeZR/dlpK6c+p+I1/Z+m9WuVEOaWUHkwpHc3fPgKctdp79MmjV+at02NO9XJS21s+cvNh4Nf59SObVV7XzwJ3r/YeTZ9XTWy4zgT2l75/hdUbjZEXEWcDFwCP5qGv5kP3t5cOi/bKrQt5JuDBiHgiin8NBfDOlNIBKJpX4B15vMs5lV3D8b+8nFMnNqx5dGZeXjk+iq6nOLKwbDoi/hoRf4yIi/PYann0ynyUDGN7mwL+VWp0R3lOXQwcTCntLY21bl41seE60XUNnb13RURsAn4D3JhSegP4MfBu4L3AAYrDrNA7ty7k+cGU0k7gCuArEXHJKs/tck4A5Os8rgLuy0POqZN3stl0IrOIuBk4CtyVhw4A21NKFwBfB34ZEafRkTx6GNb21qUMP8fxfyC2cl41seF6BdhW+v4s4NWaaqlVRLyVotm6K6X0W4CU0sGU0rGU0n+Bn1IcbobeuY18nimlV/PX14D7KTI5mA8vLx9mfi0/vbM5lVwBPJlSOgjOqT6GNY9e4fjTbCOXWf6AwMeAz+fTOeTTY/N5+QmKa5F2sHoevTIfCUPc3l6nOJW9YcX4SMnr9yng3uWxts6rJjZcfwHOy5++GKc49bGr5prWXT5n/TPguZTS90vjW0tP+ySw/ImOXcA1ETEREdPAeRQXD450nhHxtog4dXmZ4uLdPRTruPwJseuA3+XlXcC1UbgIWMyHl38PXBoRW/Ih/kvz2Cg67q9F59SqhjKP8s/ejIiL8rZ9bem9Wi8iLge+CVyVUloqjb89Isby8jkUc2hfnzx6ZT4ShrW95ab2YeAz+fUjl1X2UeD5lNL/TxW2dl6t91X6gzwoPgE0Q9G13lx3PTVl8CGKQ6FPA7vz40rgF8AzeXwXsLX0mptzZi9Q+gTUKOdJ8cmdp/Lj2eX1o7i+4Q/A3vx1Mo8H8KOcxTPAhaX3up7iQtVZ4At1r1tFeW0E5oHNpTHnVLFOd1OcqvgPxV/KXxzmPAIupNi5vgj8kPyfPtr26JHTLMV1Rsu/q27Lz/103i6fAp4EPt4vj16Zt/HRI6uhbW/5999jOf/7gIm613mYWeXxnwNfWvHcVs4r/7WPJElSxZp4SlGSJGmk2HBJkiRVzIZLkiSpYjZckiRJFbPhkiRJqpgNlyRJUsVsuCRJkir2P6mdGpGTD4HHAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "schedule.draw(channels_to_plot=[drive_chan, meas_chan, acq_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We assemble the `schedules` and `schedule_frequencies` above into a program object, called a Qobj, that can be sent to the quantum device. We request that each schedule (each point in our frequency sweep) is repeated `num_shots_per_frequency` times in order to get a good estimate of the qubit response.\n", + "\n", + "We also specify measurement settings. `meas_level=0` returns raw data (an array of complex values per shot), `meas_level=1` returns kerneled data (one complex value per shot), and `meas_level=2` returns classified data (a 0 or 1 bit per shot). We choose `meas_level=1` to replicate what we would be working with if we were in the lab, and hadn't yet calibrated the discriminator to classify 0s and 1s. We ask for the `'avg'` of the results, rather than each shot individually." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from qiskit import assemble\n", + "\n", + "num_shots_per_frequency = 1024\n", + "frequency_sweep_program = assemble(schedule,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_frequency,\n", + " schedule_los=schedule_frequencies)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can run the assembled program on the backend using:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "job = backend.run(frequency_sweep_program)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is always a good idea to print the `job_id` for later retrieval, and to monitor the job status by using `job_monitor()`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# print(job.job_id())\n", + "from qiskit.tools.monitor import job_monitor\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the job is run, the results can be retrieved using:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "frequency_sweep_results = job.result(timeout=120) # timeout parameter set to 120 seconds" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will extract the results and plot them using `matplotlib`:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAbjUlEQVR4nO3de5gsdX3n8ffnHBAYOLgbmSgC022yoIIgwkBEcgHW8KjghQ1ZkAGDl2cSs6DoisbMYxSTeYyXGNesT3AAAfc0rKKyQe6InOAFgTlwkPvK6pmzBFkOIYAw3g5894+qgT7DTE/NdF26uz6v5+lnqqurq75TXV3f+v1+1b+fIgIzM6ufVVUHYGZm1XACMDOrKScAM7OacgIwM6spJwAzs5rapuoAlmOXXXaJZrNZdRhmZn1l/fr1D0fE8Pz5fZUAms0m09PTVYdhZtZXJM0sNN9VQGZmNeUEYGZWU04AZmY15QRgZlZTTgBmZjXlBGBmVlNOAGZdaLVaNJtNVq1aRbPZpNVqVR2SWWZ99TsAs17SarUYHx9ndnYWgJmZGcbHxwEYGxurMjSzTFwCMFuhiYmJZ07+c2ZnZ5mYmKgoIrPlcQIwW6FNmzYta75Zr3ECMFuhkZGRZc036zVOAGYrNDk5ydDQ0FbzhoaGmJycrCgis+WpNAFI2ijpdkkbJLmXN+srY2NjTE1N0Wg0kESj0WBqasoNwNY3VOWg8JI2AqMR8XCW5UdHR8O9gZqZLY+k9RExOn++q4DMzGqq6gQQwNWS1ksarzgWM7NaqfqHYIdGxAOSfhO4RtI9EXF9+wJpYhgH311hZpanSksAEfFA+vch4GLg4AWWmYqI0YgYHR5+zohmZma2QpUlAEk7SlozNw0cCdxRVTxmZnVTZRXQC4GLJc3FcUFEXFlhPGZmtVJZAoiIHwOvrGr7ZmZ1V/VdQGZmVhEnADOzmnICMDOrKScAM7OacgIwM6spJwAzs5pyAjAzqyknADOzmnICMDOrKScAM7OacgIwM6spJwAzs5pyAjAzqyknADOzmnICMDOrKScAM7OacgIwM6spJwAzs5pyAjAzqyknADOzmnICMDOrKScAM7OacgIwK1ir1aLZbLJq1SqazSatVqvqkMwA2KbqAMwGWavVYnx8nNnZWQBmZmYYHx8HYGxsrMrQzKovAUhaLelWSZdWHYtZ3iYmJp45+c+ZnZ1lYmKioojMnlV5AgDeC9xddRBmRdi0adOy5puVqdIEIGl34Cjg7CrjMCvKyMjIsuablanqEsDngA8CTy+2gKRxSdOSpjdv3lxeZGY5mJycZGhoaKt5Q0NDTE5OVhSR2bMqSwCSjgYeioj1nZaLiKmIGI2I0eHh4ZKiM8vH2NgYU1NTNBoNJNFoNJiamnIDsPUERUQ1G5Y+AZwEbAG2B3YGvhERJy72ntHR0Zieni4pQjOzwSBpfUSMzp9fWQkgIj4cEbtHRBM4Hvh2p5O/mZnlq+o2ADMzq8iiPwST9J8yvP8XEXF5t0FExDpgXbfrMTOz7DqVAM4Cjgbe2OHxD0UHaFYld+Ngg6xTVxBXRMQ7Or1Z0tqc4zHrGe7GwQZdZXcBrYTvArIyNZtNZmZmnjO/0WiwcePG8gMyW6Fc7wKS9KLuQzLrbe7GwQbdSu8COifXKMx6kLtxsEG3ogQQEUflHYhZr3E3DjbolhwPQNKClzsR4XKwDbS5ht6JiQk2bdrEyMgIk5OTbgC2gbFkI7Ck24EARNJlw0uAeyNin+LD25obgc3Mlm+xRuAlSwARse+8FR0A/GmOsZmZWQWW3QYQEbcABxUQi5mZlShLG8D7256uAg4A3DG/mVmfyzIo/Jq26S3AZcDXiwnHzMzKkqUN4IwyAjEzs3Kt9JfA43kHYmZm5VrpL4GVaxRmZla6lf4S+It5B2JmZuXK0giMpKOAfUh+CAZARHy8qKDMzKx4S5YAJJ0JHAecSlL188dAo+C4zMysYFmqgF4TEW8D/i29I+gQYI9iwzIzs6JlSQA/T//OSnox8GuS/oDMzKyPZWkDuFTSvwM+DdxC0jHcWYVGZWZmhcvyQ7C/Tie/LulSYPuIeKzYsMzMrGiLVgGlvX5uJSJ+2X7yX2gZMzPrD51KAOdKOozOP/o6B3jVSjYsaXvgemC7NI6vRcRHV7IuMzNbvk4J4PnAejongG56Bf0lcEREPCFpW+C7kq6IiB90sU4zM8to0QQQEc0iNxzJUGRPpE+3TR+dhyczM7PcrLQvoFxIWi1pA/AQcE1E3LjAMuOSpiVNb97sYQjMzPJSaQKIiKciYn9gd+BgSa9YYJmpiBiNiNHh4eHygzQzG1CVJoA5EfEosA54XcWhmJnVxqJtAEvd4pmODbxikoaBX0fEo5J2AF4LfLKbdZqZWXad7gL6uw6vBXBEl9veFThf0mqSkshXI+LSLtdpZmYZdboL6PAiNxwRP2SFvyEwM7PuZR0P4BXA3mw9HsCXiwrKzMyKt2QCkPRR4DCSBHA58Hrgu4ATgJlZH8tyF9CxwH8EHoyItwOvJOm+wczM+lim8QAi4mlgi6SdSX609VvFhmVmZkXL0gYwnY4HcBZJ30BPADcVGpWZmRUuy3gAf55OninpSmDn9A4eMzPrY1nvAtqNZCD4bdLnvx8R1xcZmJmZFSvLXUCfBI4D7gKeSmcHSV/+ZmbWp7KUAN4CvDQifll0MGZmVp4sdwH9mKSvfjMzGyBZSgCzwAZJ15KM4gVARLynsKjMzKxwWRLAJenDzMwGSJbbQM8vIxAzMytXlruAbue5Y/U+BkwDfxMR/1pEYGZmVqwsVUBXkNz+eUH6/HhAJEngPOCNhURmZmaFypIADo2IQ9ue3y7pexFxqKQTiwrMzMyKleU20J0k/c7cE0kHAzulT7cUEpWZmRUuSwngXcCXJO1EUvXzOPAuSTsCnygyODMzK06Wu4BuBvaV9HxAEfFo28tfLSwyMzMr1KIJQNKJEbFW0vvnzQcgIj5bcGxmZlagTiWAHdO/a8oIxMzMyrVoAoiIL6Z/zygvHDMzK8uSdwFJ+pSknSVtK+laSQ/79k8zs/6X5TbQIyPiceBo4H5gL+D0bjcsaQ9J10m6W9Kdkt7b7TrNzCy7LLeBznUF/Qbgwoh4ZK4huEtbgP8aEbdIWgOsl3RNRNyVx8rNzKyzLCWAb0q6BxgFrpU0DPyi2w1HxE8j4pZ0+mfA3cBu3a7XzMyyWTIBRMRfAIcAoxHxa5LxAd6cZxCSmsCrgBsXeG1c0rSk6c2bN+e5WTOzWstSAiAi/i0inkqnn4yIB/MKIP2F8deB09K2hvnbnoqI0YgYHR4ezmuzZma1lykBFEXStiQn/1ZEfKPKWMzM6qayBKCkJfkc4G7/qtjMrHyduoI4oNMb5xpwu3AocBJJ99Ib0nl/GRGXd7leMzPLoNNtoH+X/t2e5A6g20h6A92PpLH2d7vZcER8N12fmZlVYNEqoIg4PCIOB2aAA9KG2ANJ7ta5r6wAzcysGFnaAF4WEbfPPYmIO4D9iwvJzMzKkOWXwHdLOhtYSzI4/IkkP9oyM7M+liUBvB14NzDXV8/1wD8WFpGZmZUiy4hgv5B0JnB5RNxbQkxmZlaCLN1BvwnYAFyZPt9f0iVFB2ZmZsXK0gj8UeBg4FGAiNgANAuMyczMSpAlAWyJiMcKj8TMzEqVpRH4DkknAKsl7Qm8B/h+sWGZmVnRspQATgX2AX4JXAA8BpxWZFBmZla8jiUASauBMyLidGCinJDMzKwMHUsA6RgAB5YUi5mZlShLG8Ct6W2fFwFPzs10//1mZv0tSwL4DeBfgSPa5gXgBGBm1sey/BL47WUEYmZm5VoyAUg6l+SKfysR8Y5CIjIzs1JkqQK6tG16e+AY4IFiwjEzs7JkqQL6evtzSRcC3yosIjMzK8VKBoXfExjJOxAzMytXljaAn7F1G8CDwIcKi8jMzEqRpQpoTRmBmJlZubKMB3CopB3T6RMlfVZSo/jQzIrXarVoNpusWrWKZrNJq9WqZQxWT1naAP4RmJX0SuCDwAzw5UKjMitBq9VifHycmZkZIoKZmRnGx8dLPQH3QgxWX4p4zi3+Wy8g3RIRB0j6K+BfIuKcuXldb1z6EnA08FBEvGKp5UdHR2N6errbzZoB0Gw2mZmZec78RqPBxo0baxODDT5J6yNidP78LCWAn0n6MHAicFnaQ+i2OcV1HvC6nNZltiybNm1a1vxBjcHqK0sCOI5kLIB3RsSDwG7Ap/PYeERcDzySx7rMlmtkZOG7mRebP6gxWH0tmQAi4sGI+GxEfCd9vikiSmsDkDQuaVrS9ObNm8varNXA5OQkQ0NDW80bGhpicnKyVjFYfWW5C+jVkm6W9ISkX0l6SlJpYwRHxFREjEbE6PDwcFmbtRoYGxtjamqKRqOBJBqNBlNTU4yNjdUqBquvLI3A08DxJOMBjAJvA/aMiL/MJQCpCVzqRmAzs2Is1gicpTM4IuI+SavTEcLOleRB4c3M+lyWRuBZSc8DNkj6lKT3ATvmsfG0Y7kbgJdKul/SO/NYr5mZLS1LCeAkkkRxCvA+YA/gj/LYeES8NY/1mJnZ8mXpC2hG0g7ArhFxRgkxmZlZCbLcBfRGYANwZfp8/3SQeDMz62NZ2gA+BhwMPAoQERuAZnEhmZlZGbIkgC0RUdp9/2ZmVo4sjcB3SDoBWC1pT+A9gG8DNTPrc1lKAKcC+5D0B3Qh8DhwWpFBmZlZ8bLcBTQLTKQPMzMbEIsmgKXu9ImIN+UfjpmZlaVTCeAQ4P+SVPvcCKiUiMzMrBSdEsCLgD8E3gqcAFwGXBgRd5YRmJmZFWvRRuCIeCoiroyIPwFeDdwHrJN0amnRmZlZYTo2AkvaDjiKpBTQBD4PfKP4sMzMrGidGoHPB14BXAGcERF3lBaVmZkVrlMJ4CTgSWAv4D3SM23AAiIidi44NjMzK9CiCSAisvxIzMzM+pRP8mZmNeUEYGZWU04AZmY15QRgZlZTTgBmZjXlBGBmVlNOAGZmNeUEYGZWU5UmAEmvk3SvpPsk/UWVsZiZ1U1lCUDSauALwOuBvYG3Stq7qnjMzOqmyhLAwcB9EfHjiPgV8D+BN1cYj5lZrVSZAHYjGXFszv3pPDMzK0GVCWChISbjOQtJ45KmJU1v3ry5hLDMzOqhygRwP7BH2/PdgQfmLxQRUxExGhGjw8PDpQVnZjboqkwANwN7SnqJpOcBxwOXVBiPmVmtdBwSskgRsUXSKcBVwGrgSx5w3sysPJUlAICIuBy4vMoYzMzqyr8ENjOrKScAM7OacgIw63GtVotms8mqVatoNpu0Wq2qQ7IBUWkbgJl11mq1GB8fZ3Z2FoCZmRnGx8cBGBsbqzI0GwAuAZj1sImJiWdO/nNmZ2eZmJioKCIbJE4AZj1s06ZNy5pvthxOADawBqHufGRkZFnzzZbDCcAG0lzd+czMDBHxTN15vyWByclJhoaGtpo3NDTE5ORkRRHZIHECsIE0KHXnY2NjTE1N0Wg0kESj0WBqasoNwJYLRTynA86eNTo6GtPT01WHYX1g1apVLHRsS+Lpp5+uICKz6khaHxGj8+e7BNBjBqHeuhe47txsaU4APWRQ6q17gevOzZbmBNBD+qXeuh9KKa47N8sgIvrmceCBB8YgkxQko6Jt9ZBUdWjPWLt2bQwNDW0V39DQUKxdu7bq0Mxys3bt2mg0GiEpGo1G3x/fwHQscE51CaCH9Eq9dacr/H4ppVh9dVtCHaSq2Ll9ARy44AILZYVefRRZAsgj43e7jixX10VfmSwVQ1mllEG7AitaL+yvXomh2xJqo9FY8BhvNBq5x1rmdzkWOKdWflJfzqObBNBpZ+dx4s3r5F10nEsts9TBn9eXo9v/M+v/Wgf9cOFQljyOzzIucvI653R6ff6+iLomgKV29lIHTZYPK491LCWPbXR7hZ/H/9Ht55FXHIMir2OvmyRRxoVBFllO3ss9cRZRAuj2M8vymc7fFzGoCaDbD3SpgybLAZHHOpaSxzbyuMLv9kva7eeR1/4cFHkcF91ekWa9as6j5NdJGRdJWSz1Hen2M1vJdz0GMQGsJBMud2fncULKo1iZxzbKuMJfShkJt07KOH7LKLXlcfGRxzaybqebRNbtZ5a1pDNQbQBzO2g5OzLLMr1ycC8lj22UcYW/1DryuEpzCeBZeRwX3SblMk56eVRl5XHh0Avni+UmsoFJAPN31Eoy4UIHTtGNknldWefRSFz0FX4e9ZfdXunVTdVXpEvFkGUdeZ30OiljHWVUhy33+GeR3wFUflJfziOPTNjNLZpFXhXnJcs2io6jF0oZtrWyqk466bYUUcbVexZltPfNxbrUZ5b1+B+4BFBmnbUtj+vn+1PRJdhuS35lnViX0m0iq0JPJQDgj4E7gaeB0WW8r7CrSctPXl9U6y1Vl9p65cSaRxVm2XotAbwceCmwbiUJoOpsap31yhfVBk+vnFh7JY6sFksAlQ4II2kd8IGIyDTKS7qzmZycdK+OPa7VajExMcGmTZsYGRnxZ2ZWIS0yIEzPJwBJ48A4wMjIyIEzMzMlRWdmNhgWSwDbFLjBbwEvWuCliYj4p6zriYgpYAqSISFzCs/MrPYKSwAR8dqi1m1mZt3zeABmZjVVSQKQdIyk+4FDgMskXVVFHGZmdVZYFVAnEXExcHEV2zYzs4SrgMzMaqrS20CXS9JmYKH7QHcBHi45nJVwnPnphxjBcebNca5MIyKG58/sqwSwGEnTC93j2mscZ376IUZwnHlznPlyFZCZWU05AZiZ1dSgJICpqgPIyHHmpx9iBMeZN8eZo4FoAzAzs+UblBKAmZktkxOAmVlN9WQCkLRa0q2SLl3gtYakayX9UNI6Sbu3vfaUpA3p45K2+edJ+knba/tXHOeIpKsl3S3pLknNdP5LJN0o6UeSviLpeT0aZ8/sT0mHt8WxQdIvJL0lfS33/VlAjD2zL9PXPiXpzvQz/7wkpfMPlHS7pPva5/dgnOsk3du2P3+z4jg/KemO9HFc2/xCvuvLttAoMVU/gPcDFwCXLvDaRcCfpNNHAP+j7bUnFlnfecCxPRTnOuAP0+mdgKF0+qvA8en0mcC7ezTOntqfbcv8BvBIkfuzgBh7Zl8CrwG+B6xOHzcAh6Wv3UTSd5eAK4DX92ic61jGKIMFx3kUcA1Jlzs7AtPAzkUdmyt59FwJIM2eRwFnL7LI3sC16fR1wJvLiGu+lcYpaW9gm4i4BiAinoiI2fQK5gjga+l7zgfe0mtxdhtP3nHOcyxwRVH7M+8Yu4mlky7iDGB74HnAdsC2wP+TtCvJieuGSM5YX6bCY3OxOLuNp4A49wb+OSK2RMSTwG3A64r6rq9EzyUA4HPAB0kGjF/IbcAfpdPHAGskvSB9vr2kaUk/mCtit5lMi2h/L2m7CuPcC3hU0jfSIuWnJa0GXgA8GhFb0vfcD+zWg3HO6ZX92e544MJ0uoj9mXeMc3piX0bEDSQnsJ+mj6si4m6S/XZ/2/srPTY7xDnn3LT65yM5VVWt9HO/DXi9pCFJuwCHA3tQ3Hd92XoqAUg6GngoItZ3WOwDwB9IuhX4A+BfgLkdORLJz69PAD4n6bfT+R8GXgYcRFIE/1CFcW4D/F76+kHAbwEnkxSt5+vqHt2C4oTe2p9z69gV2BeY61o81/1ZUIzQQ/tS0n8AXg7sTnJCOkLS79Njx2aHOAHGImJfkmP394CTqoozIq4GLge+T5L0byA5HnLfnytWRb1Th3q2T5Bkw43Ag8AssLbD8jsB9y/y2nksULcKHMYC9XhlxQm8GljX9tpJwBdIDoqHSapdIKlvvarX4uy1/dk2773AVNvzXPdnETH22r4ETgc+0vbaX5Fc+e4K3NM2/63AF3stzgXeczLw36s+NtteuwB4QxHf9RX/f1VsNOOOX/DLQNLL3qp0ehL4eDr974Ht2pb5EbB3+nzX9K9IinN/W2Gcq0mKhsPp83OB/5JOX8TWDUN/3qNx9sz+bHv9B8Dh8+YVsj9zjrFn9iVwHPAtktLftiT12m9MX7uZ5KJgrhH4Db0WZ/p8l3SZbUnq2P+swjhXAy9Ip/cD7uDZk35h3/XlPHqqCmgxkj4u6U3p08OAeyX9b+CFJDsckiLhtKTbSOoH/zYi7kpfa0m6Hbid5MP6m6rijIinSIqM16YxCTgrfc+HgPdLuo+knvCcHo2zZ/ZnulyTpG71n+etovD9mUOMvbQvvwb8nzSW24DbIuKb6WvvJmkEvS9d5ooejHM74CpJPwQ2kFTFnEUBMsa5LfAdSXeRdA1xYjxb71/Kd30p7grCzKym+qIEYGZm+XMCMDOrKScAM7OacgIwM6spJwAzs5pyArCep617ed2Q3lI5ECSdLGmzpLPb5h2spFfJH0m6RdJlkvZNX/uYpA/MW8fGtKuBxbZxnaQnJPX8IOVWrm2qDsAsg59HxKLdJEvapu3+6n70lYg4BUDSC0l6ijwhIr6fzvtd4LdJ7ntftog4XNK6nGK1AeISgPWl9Mr5IknfBK5O550u6ea0Y7Uz2padUNJH/LckXTh3BZ1eZY+m07tI2phOr047v5tb15+m8w9L3/M1SfdIas11NibpIEnfl3SbpJskrZH0HbX17y/pe5L2W+JfOwU4f+7kDxAR342I/5Vhn/xZWynpJ5Kuy7Y3ra5cArB+sIOkDen0TyLimHT6EGC/iHhE0pHAnsDBJL9aviTtIOxJkh44X0VyvN8CdOrYC+CdwGMRcZCS3jm/J+nq9LVXAfsAD5D0SX+opJuArwDHRcTNknYGfk7yy9mTgdMk7UXSVckPl9j2PiTdA3fyPkkntj1/MUBEnAmcKWlb4NvAZ5dYj9WcE4D1g8WqgK6JiEfS6SPTx63p851IEsIa4OJI+99X20hxHRwJ7Cfp2PT589N1/Qq4KSLuT9e1AWgCjwE/jYibASLi8fT1i4CPSDodeAdJB4XLIulGYGfg6oh4bzr77yPiM23LbJz3tv8GfLutGwezBTkBWD97sm1awCci4ovtC0g6jcW72t3Cs9Wg289b16kR0d5tM5IOA37ZNuspku+QFtpGJAPTXEMyQMh/BrI0wt4JHAD8U7qO30kT0dEZ3oukk4EGSVWSWUduA7BBcRXwDkk7AUjaTcl4sNcDx0jaQdIakl4j52wEDkynj523rnenVSlI2kvSjh22fQ/wYkkHpcuvkTR3cXU28Hng5rbSSidfAE6W9Jq2eUMZ3oekA0k68DsxIhYbvMTsGS4B2ECIiKslvRy4IW2XfYLkRHiLpK+Q9A45A3yn7W2fAb4q6SSSOvM5Z5NU7dySNvJupsOQfRHxKyUDfv+DpB1I6v9fSzJG9XpJj5N0p53l/3gwXdcnJe0GPETSd/zHM7z9FJJBZa5L98F0RLwry3atntwbqNWKpI+RnJg/s9SyOW3vxSQDlb9soavytMpmdO420ALjWAd8ICKmi9yO9RdXAZkVRNLbgBuBiQ5VMj8nGTd2sQHH84jjOpIhPX9d1DasP7kEYGZWUy4BmJnVlBOAmVlNOQGYmdWUE4CZWU05AZiZ1dT/B9o6TlZPNLRpAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "\n", + "sweep_values = []\n", + "for i in range(len(frequency_sweep_results.results)):\n", + " # Get the results from the ith experiment\n", + " res = frequency_sweep_results.get_memory(i)*scale_factor\n", + " # Get the results for `qubit` from this experiment\n", + " sweep_values.append(res[qubit])\n", + "\n", + "plt.scatter(frequencies_GHz, sweep_values, color='black') # plot real part of sweep values\n", + "plt.xlim([min(frequencies_GHz), max(frequencies_GHz)])\n", + "plt.xlabel(\"Frequency [GHz]\")\n", + "plt.ylabel(\"Measured signal [a.u.]\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see above, the peak near the center corresponds to the location of the qubit frequency. The signal shows power-broadening, which is a signature that we are able to drive the qubit off-resonance as we get close to the center frequency. To get the value of the peak frequency, we will fit the values to a resonance response curve, which is typically a Lorentzian shape." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "from scipy.optimize import curve_fit\n", + "\n", + "def fit_function(x_values, y_values, function, init_params):\n", + " fitparams, conv = curve_fit(function, x_values, y_values, init_params)\n", + " y_fit = function(x_values, *fitparams)\n", + " \n", + " return fitparams, y_fit" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "fit_params, y_fit = fit_function(frequencies_GHz,\n", + " sweep_values, \n", + " lambda x, A, q_freq, B, C: (A / np.pi) * (B / ((x - q_freq)**2 + B**2)) + C,\n", + " [5, 4.975, 1, 3] # initial parameters for curve_fit\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(frequencies_GHz, sweep_values, color='black')\n", + "plt.plot(frequencies_GHz, y_fit, color='red')\n", + "plt.xlim([min(frequencies_GHz), max(frequencies_GHz)])\n", + "\n", + "plt.xlabel(\"Frequency [GHz]\")\n", + "plt.ylabel(\"Measured Signal [a.u.]\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We've updated our qubit frequency estimate from 4.97429 GHz to 4.97435 GHz.\n" + ] + } + ], + "source": [ + "A, rough_qubit_frequency, B, C = fit_params\n", + "rough_qubit_frequency = rough_qubit_frequency*GHz # make sure qubit freq is in Hz\n", + "print(f\"We've updated our qubit frequency estimate from \"\n", + " f\"{round(backend_defaults.qubit_freq_est[qubit] / GHz, 5)} GHz to {round(rough_qubit_frequency/GHz, 5)} GHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 2. Calibrating and using a $\\pi$ pulse\n", + "## A. Calibrating $\\pi$ pulses using a Rabi experiment \n", + "\n", + "Once we know the frequency of our qubit, the next step is to determine the strength of a $\\pi$ pulse. Strictly speaking of the qubit as a two-level system, a $\\pi$ pulse is one that takes the qubit from $\\vert0\\rangle$ to $\\vert1\\rangle$, and vice versa. This is also called the $X$ or $X180$ gate, or bit-flip operator. We already know the microwave frequency needed to drive this transition from the previous frequency sweep experiment, and we now seek the amplitude needed to achieve a $\\pi$ rotation from $\\vert0\\rangle$ to $\\vert1\\rangle$. The desired rotation is shown on the Bloch sphere in the figure below -- you can see that the $\\pi$ pulse gets its name from the angle it sweeps over on a Bloch sphere." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will change the drive amplitude in small increments and measuring the state of the qubit each time. We expect to see oscillations which are commonly named Rabi oscillations, as the qubit goes from $\\vert0\\rangle$ to $\\vert1\\rangle$ and back." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# This experiment uses these values from the previous experiment:\n", + " # `qubit`,\n", + " # `measure`, and\n", + " # `rough_qubit_frequency`.\n", + "\n", + "# Rabi experiment parameters\n", + "num_rabi_points = 50\n", + "\n", + "# Drive amplitude values to iterate over: 50 amplitudes evenly spaced from 0 to 0.75\n", + "drive_amp_min = 0\n", + "drive_amp_max = 0.75\n", + "drive_amps = np.linspace(drive_amp_min, drive_amp_max, num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "# Build the Rabi experiments:\n", + "# A drive pulse at the qubit frequency, followed by a measurement,\n", + "# where we vary the drive amplitude each time.\n", + "rabi_schedules = []\n", + "for drive_amp in drive_amps:\n", + " rabi_pulse = pulse_lib.gaussian(duration=drive_samples, amp=drive_amp, \n", + " sigma=drive_sigma, name=f\"Rabi drive amplitude = {drive_amp}\")\n", + " this_schedule = pulse.Schedule(name=f\"Rabi drive amplitude = {drive_amp}\")\n", + " this_schedule += rabi_pulse(drive_chan)\n", + " # Reuse the measure instruction from the frequency sweep experiment\n", + " this_schedule += measure << this_schedule.duration\n", + " rabi_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The schedule will look essentially the same as the frequency sweep experiment. The only difference is that we are running a set of experiments which vary the amplitude of the drive pulse, rather than its modulation frequency." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qVRUqVRclwEAQCKE9Vxvg9bY2JjrEmJr69at2rp1q+syAABIhLCe623QAgAAiDuCFgAAQEQIWgAAABEhaAEAAETE2/EO2WzWdQmxtWjRItclAACQGGF9l6DVgghaAAA0T1jf9XbrMGCOVt1KpZJKpZLrMgAASISwnutt0MozR6tufX196uvrc10GAACJENZzvQ1aAAAAcUfQAgAAiAhBCwAAICIELQAAgIgw3qEFLV682HUJAAAkRljfJWi1oIULF7ouAQCAxAjru95uHQZB4LqE2Mrn88rn867LAAAgEcJ6rrdBi6BQv+3bt2v79u2uywAAIBHCeq63QQsAACDuCFoAAAARIWgBAABEhKAFAAAQEW/HO7S1tbkuIbaWLl3qugQAABIjrO96G7QyGW9L815PT4/rEgAASIywvuvt1mGFOVp1y+VyyuVyrssAACARwnqut0Gruyhr0gAACCdJREFUwBytuu3cuVM7d+50XQYAAIkQ1nO9DVoAAABxR9ACAACICEELAAAgIgQtAACAiHg7Q4E5WvU7//zzXZcAAEBihPVdb4MWc7TqN2/ePNclAACQGGF919utw0ql4rqE2BodHdXo6KjrMgAASISwnutt0CoUCq5LiK3+/n719/e7LgMAgEQI67neBi0AAIC4I2gBAABEhKAFAAAQEYIWAABARLydodDW3u66hNhavny56xIAAEiMsL7rbdDKpNOuS4itOXPmuC4BAIDECOu73m4dlpmjVbeRkRGNjIy4LgMAgEQI67neBq0ic7TqtmvXLu3atct1GQAAJEJYz/U2aAEAAMQdQQsAACAiBC0AAICIELQAAAAi4u14h3bmaNVtxYoVrksAACAxwvqut0ErzRytunV3d7suAQCAxAjru95uHZbLZdclxNbw8LCGh4ddlwEAQCKE9VxvV7SKxaLrEmJr7969kqR58+Y5rgQAgNZX67tT8XZFCwAAIO4IWgAAABEhaAEAAESEoAUAABARbw/Dt3d0uC4htlauXOm6BAAAEiOs73obtNIpFtvq1dXV5boEAAASI6zveptmmKNVv6GhIQ0NDbkuAwCARAjrud6uaDFHq36Dg4OSpJ6eHseVAADQ+mp9dyrermgBAADEHUELAAAgIgQtAACAiHh1RssYc7eku8e/Lcw+p/sZl/XExHxJL7guIiZ4r2aO92pmeJ9mjvdq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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rabi_schedules[-1].draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# Assemble the schedules into a Qobj\n", + "num_shots_per_point = 1024\n", + "\n", + "rabi_experiment_program = assemble(rabi_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}]\n", + " * num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# print(job.job_id())\n", + "job = backend.run(rabi_experiment_program)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "rabi_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have our results, we will extract them and fit them to a sinusoidal curve. For the range of drive amplitudes we selected, we expect that we will rotate the qubit several times completely around the Bloch sphere, starting from $|0\\rangle$. The amplitude of this sinusoid tells us the fraction of the shots at that Rabi drive amplitude which yielded the $|1\\rangle$ state. We want to find the drive amplitude needed for the signal to oscillate from a maximum (all $|0\\rangle$ state) to a minimum (all $|1\\rangle$ state) -- this gives the calibrated amplitude that enacts a $\\pi$ pulse." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# center data around 0\n", + "def baseline_remove(values):\n", + " return np.array(values) - np.mean(values)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "rabi_values = []\n", + "for i in range(num_rabi_points):\n", + " # Get the results for `qubit` from the ith experiment\n", + " rabi_values.append(rabi_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "rabi_values = np.real(baseline_remove(rabi_values))\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\")\n", + "plt.ylabel(\"Measured signal [a.u.]\")\n", + "plt.scatter(drive_amps, rabi_values, color='black') # plot real part of Rabi values\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(drive_amps,\n", + " rabi_values, \n", + " lambda x, A, B, drive_period, phi: (A*np.cos(2*np.pi*x/drive_period - phi) + B),\n", + " [3, 0.1, 0.5, 0])\n", + "\n", + "plt.scatter(drive_amps, rabi_values, color='black')\n", + "plt.plot(drive_amps, y_fit, color='red')\n", + "\n", + "drive_period = fit_params[2] # get period of rabi oscillation\n", + "\n", + "plt.axvline(drive_period/2, color='red', linestyle='--')\n", + "plt.axvline(drive_period, color='red', linestyle='--')\n", + "plt.annotate(\"\", xy=(drive_period, 0), xytext=(drive_period/2,0), arrowprops=dict(arrowstyle=\"<->\", color='red'))\n", + "plt.annotate(\"$\\pi$\", xy=(drive_period/2-0.03, 0.1), color='red')\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\", fontsize=15)\n", + "plt.ylabel(\"Measured signal [a.u.]\", fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pi Amplitude = 0.24926196161156502\n" + ] + } + ], + "source": [ + "pi_amp = abs(drive_period / 2)\n", + "print(f\"Pi Amplitude = {pi_amp}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Our $\\pi$ pulse!\n", + "Let's define our pulse, with the amplitude we just found, so we can use it in later experiments." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "pi_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=pi_amp, \n", + " sigma=drive_sigma,\n", + " name='pi_pulse')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## B. Determining 0 vs 1 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once our $\\pi$ pulses have been calibrated, we can now create the state $\\vert1\\rangle$ with good probability. We can use this to find out what the states $\\vert0\\rangle$ and $\\vert1\\rangle$ look like in our measurements, by repeatedly preparing them and plotting the measured signal. This is what we use to build a discriminator, which is simply a function which takes a measured and kerneled complex value (`meas_level=1`) and classifies it as a 0 or a 1 (`meas_level=2`)." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "# Create two schedules\n", + "\n", + "# Ground state schedule\n", + "gnd_schedule = pulse.Schedule(name=\"ground state\")\n", + "gnd_schedule += measure\n", + "\n", + "# Excited state schedule\n", + "exc_schedule = pulse.Schedule(name=\"excited state\")\n", + "exc_schedule += pi_pulse(drive_chan) # We found this in Part 2A above\n", + "exc_schedule += measure << exc_schedule.duration" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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fMd3vDCuvOLbjxwpK6XEhg0bIqJ/U9PqykqUwXig66+/Pl561VXx3CuviBe96DvioYceOq7XBcbDJZdc0qx2uoBWzEGDifH9r3lN/NE118Ti4mLs+sIX4vLnXD70Z26//fa45po/it/7/T+IN7zhx+IFL3xhfPozn4118/Pxob/8y7j3wIE4fdOmmJ6ejoiILVu2xFfvuusxa37g/e+PK6/49vjhf/pD8ZWvfCUiIj7ykY/El760J/7mbz4Wn/zUtbHzf+6MT37iExER0e1243nPvTK++cIL4sUvfkk85znPieXl5fiR178ufvltbzPAz3kAABArSURBVItPXfvp+MAH/tR/cMIT3NTUVLPa6QLaY10rAjyxfMu3fEvs3bs3rnnve+PlL//Of9DPvOzlL4uZmZnYsWNHdLvdeNnLXhYREc/csSO+vHdv1Fof9TOP9R9+3/WKV8QXdt0U1376M/GiF784/vmPXx0RER/9yEfiox/9aDz/ec+NFzz/eXHrF2+NL33pSxHR/6X8yU9dGzffsjuuv/66uOmmXfHFL94aT3rSufHsZz87IiI2btx4JCQCT0x33nlns9rpfnusrq6OugXgFHrFd393vPnNb44//4s/j3vvvXfo+nOzcxER0el0YmZm5kj46nQ60V1djc1nnRUP3H9/rK6uxvT0dNx5551x7pOffMx6mzdvPvL49a//kfiFt7wlIiJqrfGvf+qn4kd/9J8d82c3bdoUz3/BC+LDf/XheMlVVzkDABNm//79zWqnO4IGTJYf/uHXxs++6Wdjx45vOSn1Sinxwhe+MN73vj+JiIjf+++/G9/zPd9zzPWPHjT553/2Z3HRRRdHRMRVL31pvOc974mDBw9GRMRdd90V+/ffE1/bvz/uv//+iIg4dOhQ/M1f/3U8/aKL4qKLLoq77/5qXH/99RER8dBDD/kPTuC4pTuCBkyWLVu2xE/8xE+e1Jq/+G/fGj/yI6+Pt771rfGtl14ar33t64657jve/vb48z//s5ieno4zzjgj3vGOd0RExFVXXRW7d98SL73qJRERcdppG+K/vutdsbCwEP/8x6+ObrcbvV4vXv193xeveMUrIiLiv/3Wb8cbf/qnY3HxUMzPr4sP/OmfHrmhAODxKGtdrzFK27dvr5+77vpRtwEA8Jh27twZL3zB86+vtQ6/w+lxcooTACCZ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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gnd_schedule.draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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e562bd8uSfr1t/y6du7cGfo1uVxOb3rTm6pf8+tv0YPz+Jop27Zt04f+04f06U9/SiMjI2pqatLdd92lu+++W1dfdaWuufoq7X1ir5588sloPxAAAPCed2ey4mDOeMZilCcwTj1GU1OTgiCQJJXGx2e87/ve/3696tWv0ve/933d8Irrdeed35S1Vu97//v1rnf91tl/cwAAkDjerWS1xTAnq6+vTw899JAk6fbbbtf27VeGfk0QBLrjjq9Lkm677R+fXQm78MKL1NX1c0nSHXfcMePX7tu3T5s2Xa7/+L736UUverH27t2rG268UbfeeqtGR0clVV9UcnBw7lfvPlubN2/W5s2b6/qYAABgZmE917uVrDNXnephw4YN+urff0V/8Pu/p+c///n6rXe/W9/5zrfn/JoFCxZo9+7duvaaq7Vw4UJ94QtflCT93u/9nt7+9rfpa1/9mq59+bUzfu2nPvVJ3fvjHyufz2vDxo165U03qVAoqKdnj2684RW1x+/Q5z7/eS1fvqJuP2c+n6/bYwEAgLmF9V1jrW1QKfNz+eWX250PPlS3xzt48KB+7c236KGf/PSsvu6ClefraP/TdaujEQ4fPixJWr16teNKAABIv8OHD+vSjRsesdZunenz3m0Xlstl1yUk1uDgoAZroyYAAEC8wnqud9uF9XbRRRfNuYp1/fXXaeKMA+yf/dznEreKBQAA/JL6kBXmhz+8x3UJAAAghbzbLgQAAEgDQhYAAEAMvNsubG9vd11CYm3ZssV1CQAAZEZY32UlCwAAIAbehayJiQnXJSRWX1+f+vr6XJcBAEAmhPVc70IWc7KiGxoa0tDQkOsyAADIhLCe613IAgAASANCFgAAQAwIWQAAADHwboSDZFwXkFj5HJkZAIBGCeu73oWs9vY21yUk1uYrrnBdAgAAmRHWd1n6AAAAiIF3IWt8fNx1CYl18MABHTxwwHUZAABkQljP9W67sFKpuC4hsY4dPy5JushxHQAAZMFU352NdytZAAAAaUDIAgAAiAEhCwAAIAbenckyhjlZUTU3N7suAQCAzAjru96FrLY25mRFtWnTJtclAACQGWF9l+1CAACAGHgXspiTFd2+ffu0b98+12UAAJAJYT3Xu+1C5mRFd+LECdclAACQGWF917uVLAAAgDQgZAEAAMSAkAUAABAD785kMScrukKh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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exc_schedule.draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We assemble the ground and excited state preparation schedules into one Qobj. Each of these will run `num_shots` times. We choose `meas_level=1` this time, because we do not want the results already classified for us as $|0\\rangle$ or $|1\\rangle$. Instead, we want kerneled data: raw acquired data that has gone through a kernel function to yield a single complex value for each shot. (You can think of a kernel as a dot product applied to the raw measurement data.)\n", + "We pass the same frequency for both schedules, although it is only used by the `exc_schedule`." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "# Execution settings\n", + "num_shots = 1024\n", + "\n", + "gnd_exc_program = assemble([gnd_schedule, exc_schedule],\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='single',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}] * 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# print(job.job_id())\n", + "job = backend.run(gnd_exc_program)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "gnd_exc_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have the results, we can visualize the two populations which we have prepared on a simple scatter plot, showing results from the ground state program in blue and results from the excited state preparation program in red. Note: If the populations irregularly shaped (not approximtely circular), try re-running the notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "gnd_results = gnd_exc_results.get_memory(0)[:, qubit]*scale_factor\n", + "exc_results = gnd_exc_results.get_memory(1)[:, qubit]*scale_factor\n", + "\n", + "plt.figure(figsize=[4,4])\n", + "# Plot all the results\n", + "# All results from the gnd_schedule are plotted in blue\n", + "plt.scatter(np.real(gnd_results), np.imag(gnd_results), \n", + " s=5, cmap='viridis', c='blue', alpha=0.5, label='state_0')\n", + "# All results from the exc_schedule are plotted in red\n", + "plt.scatter(np.real(exc_results), np.imag(exc_results), \n", + " s=5, cmap='viridis', c='red', alpha=0.5, label='state_1')\n", + "\n", + "# Plot a large dot for the average result of the 0 and 1 states.\n", + "mean_gnd = np.mean(gnd_results) # takes mean of both real and imaginary parts\n", + "mean_exc = np.mean(exc_results)\n", + "plt.scatter(np.real(mean_gnd), np.imag(mean_gnd), \n", + " s=200, cmap='viridis', c='black',alpha=1.0, label='state_0_mean')\n", + "plt.scatter(np.real(mean_exc), np.imag(mean_exc), \n", + " s=200, cmap='viridis', c='black',alpha=1.0, label='state_1_mean')\n", + "\n", + "plt.ylabel('I [a.u.]', fontsize=15)\n", + "plt.xlabel('Q [a.u.]', fontsize=15)\n", + "plt.title(\"0-1 discrimination\", fontsize=15)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can clearly see that the two populations of $|0\\rangle$ and $|1\\rangle$ form their own clusters. Kerneled measurement results (from `meas_level=1`) are classified (into `meas_level=2`) by applying a discriminator which optimally separates these two clusters. Optimal separation is simply a line in the IQ plane, equidistant from the average results we plotted above in the large dot, and normal to the line connecting the two dots.\n", + "\n", + "We can set up a quick classifier function by returning 0 if a given point is closer to the mean of the ground state results, and returning 1 if the point is closer to the average excited state results." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "\n", + "def classify(point: complex):\n", + " \"\"\"Classify the given state as |0> or |1>.\"\"\"\n", + " def distance(a, b):\n", + " return math.sqrt((np.real(a) - np.real(b))**2 + (np.imag(a) - np.imag(b))**2)\n", + " return int(distance(point, mean_exc) < distance(point, mean_gnd))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C. Measuring $T_1$ using inversion recovery \n", + "The $T_1$ time of a qubit is the time it takes for a qubit to decay from the excited state to the ground state. It is important because it limits the duration of meaningful programs we can run on the quantum computer.\n", + "\n", + "Measuring $T_1$ is similar to our previous experiments, and uses the $\\pi$ pulse we've calibrated. We again apply a single drive pulse, our $\\pi$ pulse, then apply a measure pulse. However, this time we do not apply the measurement immediately. We insert a delay, and vary that delay between experiments. When we plot the measured signal against delay time, we will see a signal that decays exponentially as the qubit relaxes in energy. The decay time is the $T_1$, or relaxation time, of the qubit!" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "# T1 experiment parameters\n", + "time_max_us = 450\n", + "time_step_us = 6\n", + "times_us = np.arange(1, time_max_us, time_step_us)\n", + "# Convert to units of dt\n", + "delay_times_dt = times_us * us / dt\n", + "# We will use the same `pi_pulse` and qubit frequency that we calibrated and used before" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "# Create schedules for the experiment \n", + "t1_schedules = []\n", + "for delay in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T1 delay = {delay * dt/us} us\")\n", + " this_schedule += pi_pulse(drive_chan)\n", + " this_schedule |= measure << int(delay)\n", + " t1_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can check out our $T_1$ schedule, too. To really get a sense of this experiment, try looking at a couple of the schedules by running the next cell multiple times, with different values of `sched_idx`. You will see the measurement pulse start later as you increase `sched_idx`." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sched_idx = 0\n", + "t1_schedules[sched_idx].draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [], + "source": [ + "# Execution settings\n", + "num_shots = 256\n", + "\n", + "t1_experiment = assemble(t1_schedules,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}] * len(t1_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(t1_experiment)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "t1_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t1_values = []\n", + "for i in range(len(times_us)):\n", + " t1_values.append(t1_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "plt.scatter(times_us, t1_values, color='black') \n", + "plt.title(\"$T_1$ Experiment\", fontsize=15)\n", + "plt.xlabel('Delay before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Signal [a.u.]', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then fit the data to a decaying exponential, giving us T1!" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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Tx/69u3LEUccwdKlbg2fjz76iIEDB1JQUMBNN90UsdyDDjpoc9w77bQTI0aM2Or1efPmkZubyxNPPJGw78WYbFNZWUlDQ8NW+xoaGqisrExTRC0weajqD6q62nv8LJAvIh3THFbMiouLWbBgAQsWLODss8/mwgsv3Px89OjRPP/88wk9X6QyL774Yt577z0WLFjA0KFDueYa14TUoUMH7rjjDi666KKo5f773//eHPfAgQM59thjN7+2adMmxo4dy5FHHpnQ78WYbFNfXx/T/lRocclDRLqIV+EtIv1x38PK9EaVWL/5zW/o0KFDSsrcfvvtNz9es2bN5raETp068atf/cp3V9gff/yRuXPnbnXnceedd3LcccfRqVOnsO+pra3d6k7opptuYty4cQDccccd9OzZkz59+nDSSSf5isGY1qqkpCSm/amQiV11HwV+B3T0FvS5CsgHUNX7gOOBc0RkI26N6JM0EfPKX3ABLFjQ7GK20rcv3HZbYsv0VFdXc+ONN26zf9ddd425iqiyspKHH36YHXbYgZdffjmueGbOnMmhhx66ORl99dVXzJw5k7lz5zJv3ryYy5swYQJffvklBQUFfPfdd3HFZExrUVVVRUVFxVZVV0VFRVRVVaUtpoxLHqo6sonX7wLuSlE4Gau8vJzy8vKElFVVVUVVVRXXX389d911F1dffXXMZTz66KOceeaWNZguuOACbrjhBnJzc+OKqU+fPpSXlzNixIht2lGMyTaBv/XKykrq6+spKSmhqqoqYZ8B8ci45JE2SbpDSJZE3nkEnHzyyQwZMiTm5LFy5UreeustZs6cuXlfTU3N5uqmb7/9lmeffZa8vLytEkFeXh6NjY2bnweP23jmmWf417/+xaxZs7j22mtZuHAheXn262qyVyL/YUwE+2tsoRL1i/Tpp5+y2267ATBr1iz23HPPmMv4+9//ztChQyksLNy878svv9z8ePTo0QwdOnSbO4jOnTuzfPlyVq5cSbt27Zg9ezaDBg2isbGRxYsXc/DBB3PggQcyffp0Vq9eTfv27eP8Lo0xidbiGsyzwciRIxk4cCAff/wx3bt358EHH0xamZdeeim9evWiT58+zJkzh9tvvx2AZcuW0b17d2655RbGjx9P9+7d+eGHHwAYPHjw5i69ADNmzGDkyKi1jWHl5+dz5ZVXMmDAAIYOHbo5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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fit the data\n", + "fit_params, y_fit = fit_function(times_us, t1_values, \n", + " lambda x, A, C, T1: (A * np.exp(-x / T1) + C),\n", + " [-3, 3, 100]\n", + " )\n", + "\n", + "_, _, T1 = fit_params\n", + "\n", + "plt.scatter(times_us, t1_values, color='black')\n", + "plt.plot(times_us, y_fit, color='red', label=f\"T1 = {T1:.2f} us\")\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.title(\"$T_1$ Experiment\", fontsize=15)\n", + "plt.xlabel('Delay before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Signal [a.u.]', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 3. Determining qubit coherence\n", + "## A. Measuring the qubit frequency precisely using a Ramsey experiment \n", + "\n", + "Now, we determine the qubit frequency to better precision. This is done using a Ramsey pulse sequence. In this pulse sequence, we first apply a $\\pi/2$ (\"pi over two\") pulse, wait some time $\\Delta t$, and then apply another $\\pi/2$ pulse. Since we are measuring the signal from the qubit at the same frequency as the pulses, we should observe oscillations at the difference in frequency between the applied pulses and the qubit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "# Ramsey experiment parameters\n", + "time_max_us = 1.8\n", + "time_step_us = 0.025\n", + "times_us = np.arange(0.1, time_max_us, time_step_us)\n", + "# Convert to units of dt\n", + "delay_times_dt = times_us * us / dt\n", + "\n", + "# Drive parameters\n", + "# The drive amplitude for pi/2 is simply half the amplitude of the pi pulse\n", + "drive_amp = pi_amp / 2\n", + "# x_90 is a concise way to say pi_over_2; i.e., an X rotation of 90 degrees\n", + "x90_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=drive_amp, \n", + " sigma=drive_sigma,\n", + " name='x90_pulse')" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "# create schedules for Ramsey experiment \n", + "ramsey_schedules = []\n", + "\n", + "for delay in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"Ramsey delay = {delay * dt / us} us\")\n", + " this_schedule |= x90_pulse(drive_chan)\n", + " this_schedule |= x90_pulse(drive_chan) << int(this_schedule.duration + delay)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + "\n", + " ramsey_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like for $T_1$ schedules, it will be illuminating to execute the next cell multiple times to inspect a few of the schedules we've made. As you look at increasing indices of `ramsey_schedules`, the delay between the two $\\pi/2$ pulses will increase." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ramsey_schedules[0].draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we will apply a commonly used experimental trick. We will drive the pulses off-resonance by a known amount, which we will call `detuning_MHz`. The measured Ramsey signal should show oscillations with frequency near `detuning_MHz`, with a small offset. This small offset is exactly how far away `rough_qubit_frequency` was from the qubit frequency. " + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "# Execution settings\n", + "num_shots = 256\n", + "\n", + "detuning_MHz = 2 \n", + "ramsey_frequency = round(rough_qubit_frequency + detuning_MHz * MHz, 6) # need ramsey freq in Hz\n", + "ramsey_program = assemble(ramsey_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: ramsey_frequency}]*len(ramsey_schedules)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(ramsey_program)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "ramsey_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ramsey_values = []\n", + "for i in range(len(times_us)):\n", + " ramsey_values.append(ramsey_results.get_memory(i)[qubit]*scale_factor)\n", + " \n", + "plt.scatter(times_us, ramsey_values, color='black')\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.title(\"Ramsey Experiment\", fontsize=15)\n", + "plt.xlabel('Delay between X90 pulses [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will fit the data to a sinusoid, and extract the information we are interested in -- namely, $\\Delta f$." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(times_us, ramsey_values,\n", + " lambda x, A, del_f_MHz, C, B: (\n", + " A * np.cos(2*np.pi*del_f_MHz*x - C) + B\n", + " ),\n", + " [5, 1./0.4, 0, 0.25]\n", + " )\n", + "\n", + "# Off-resonance component\n", + "_, del_f_MHz, _, _, = fit_params # freq is MHz since times in us\n", + "\n", + "plt.scatter(times_us, ramsey_values, color='black')\n", + "plt.plot(times_us, y_fit, color='red', label=f\"df = {del_f_MHz:.2f} MHz\")\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.xlabel('Delay between X90 pulses [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Ramsey Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we know `del_f_MHz`, we can update our estimate of the qubit frequency." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our updated qubit frequency is now 4.974399 GHz. It used to be 4.974351 GHz\n" + ] + } + ], + "source": [ + "precise_qubit_freq = rough_qubit_frequency + (del_f_MHz - detuning_MHz) * MHz # get new freq in Hz\n", + "print(f\"Our updated qubit frequency is now {round(precise_qubit_freq/GHz, 6)} GHz. \"\n", + " f\"It used to be {round(rough_qubit_frequency / GHz, 6)} GHz\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## B. Measuring $T_2$ using Hahn echoes \n", + "\n", + "Next, we can measure the coherence time, $T_2$, of our qubit. The pulse sequence used to do this experiment is known as a Hahn echo, a term that comes from the NMR community. A Hahn echo experiment is very similar to the Ramsey experiment above, with an additional $\\pi$ pulse between the two $\\pi/2$ pulses. The $\\pi$ pulse at time $\\tau$ reverses the accumulation of phase, and results in an echo at time $2\\tau$, where we apply the last $\\pi/2$ pulse to do our measurement. \n", + "\n", + "The decay time for the Hahn echo experiment gives us the coherence time, $T_2$." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "# T2 experiment parameters\n", + "tau_max_us = 200\n", + "tau_step_us = 4\n", + "taus_us = np.arange(2, tau_max_us, tau_step_us)\n", + "# Convert to units of dt\n", + "delay_times_dt = taus_us * us / dt\n", + "\n", + "# We will use the pi_pulse and x90_pulse from previous experiments" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "t2_schedules = []\n", + "for tau in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T2 delay = {tau *dt/us} us\")\n", + " this_schedule |= x90_pulse(drive_chan)\n", + " this_schedule |= pi_pulse(drive_chan) << int(this_schedule.duration + tau)\n", + " this_schedule |= x90_pulse(drive_chan) << int(this_schedule.duration + tau)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + " \n", + " t2_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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ZMetW7c8QJGlnSW7K1lOQ9a+fY31XqtWrco5CbLm1q1bHmTHrVu3PECRTZ2n6dhdyQIAAGgFDFkAAAARMGQBAABEwJAFAAAQgd+erCuuSDZufCjvGJJ+/BB+R0dHzkmQNbdu3fIgO27duuUBiqxarap35YoC7ckKIe8ITXwTal1u3brlQXbcunXLAxRZ2nmyu13otMLhwIEDOnDgQN4xEIFbt255kB23bt3yAEWWdpYYsmbAN6PW5datWx5kx61btzxAkRVuyAIAAGgFDFkAAAARMGQBAJBi6Vk9+sVf/IXm/56YmNBFF16gN91++7w/986dO/Wyl71UGza8SG+/8w6Nj49P+75/9dnP6qILL9CNN1yvG2+4Xn/5F38x4+euVCp66Utfohuuv04vvuZq/c7v/Pa88+L0MWQBAJBiyZIl2vzEExodHZUk3X///TrvvPMy+dz/6UMf1Lve9S719X1fy5cv12c+85czvv9Pv/GN+ubDj+ibDz+iO9/+9hnft6urS1/5yt/r4Ue+pW8+/Ijuvfdeffvb384kN9LZDVnd3d15R2i6/PLLdfnll+cdAxG4deuWB9lx69YtT5G84hWv1Ne+9lVJ0j33fE633/6mGd//P//n39E777pLP/VTr9dll16iL33xi/rgBz6g6659sd7whttUrVaVJIkeeOAB3XbbGyRJ/+pn36qvfOUrc8r38T/4A73kJbfo+uuubV6xCiGop6dHUuOFZRPVqsLkqqTHHntML7/1Vt1w/XV66UtfouPHj8/pn3smSztLdkNWMNqT1dbWpra2trxjIAK3bt3yIDtu3brlKZI33n67/u6ee1SpVNT/gx/o6mtOuX/yaXbs2KF77vk7/c3f/k/94i/+gm6+5RZ969Fvq3vRIn3tq1/V0OCgli1frvb2xtrKNWvWaP++fTN+zi998Yu6/rpr9bafe6ueeuopSdJ9992nJ58c0De+8YC++fAj6vten775UGOxd61W0403XK/n/sRFetnLflLXXHONxsfH9Y6336nf/ehH9fAj39KXvvRlq4scRZF2luyGrJnuRS+0vXv3au/evXnHQARu3brlQXbcunXLUySXXXaZdu/erXs+9zm98pWvOq2PecUrX6GOjg5deumlqtVqesUrXiFJuuTSS7Vr926d6qeuzHSx4dWveY1+0P+EHvnWo3rpy16mX3rn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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t2_schedules[0].draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "# Execution settings\n", + "num_shots_per_point = 512\n", + "\n", + "t2_experiment = assemble(t2_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: precise_qubit_freq}]\n", + " * len(t2_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(t2_experiment)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "t2_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEhCAYAAACHjCx5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deZgcdbn28e+doEBwYUkAETMB5aAYUSGgCCIqIKCHKODCGRXcclwQ9eiryCgGMOcgbrx6VIwIQYiyCS8c0cOO4ApB2QWJMAlhMYEgW0Ag87x//KqTTqerp3q6epmZ+3NddU1XdXXVM9Uz/XT9VkUEZmZmzZjQ7QDMzGz0cfIwM7OmOXmYmVnTnDzMzKxpTh5mZtY0Jw8zM2uak4cVJmm2pAdynpsnaUGTx5smKSS9rZwI654jcpaFTRzj0Ow1z2lTjPMaxLlbO845UpL2yOKa3u1YqknaW9Knux3HeLJOtwMw64BvAufUbHuyG4E0cBvwgTrbb+l0IMP4E7AL8LduB1Jjb+Ag4IRuBzJeOHnYeDAYEX/odhDDeLyXY5QkYN2IeATo2Titc1xsZW0h6QWSTpZ0p6QnJP1V0lclPbvO7pMk/VDSw5KWSDpa0oSqY82W9ICkV0v6g6QVkv4s6fUlxru7pCskPZbFcaWkV9fstpWkSyQ9Luk2SQfUOc5hku6Q9E9JCyV9pqT4vidpmaRNq7YdmBUh7ZWtV4rXdpJ0ddV1f0ed482UtEDSk5Lul3S8pGdVPV+55rtJupZ0p/bOesVW2fpnJH1T0oPZ6z6XPXdI9jfwj+zvYb2aOKZKOkPS8ux9vUjStlXPV4o235X3NyJpNvBZoK+quG9eGdfd8jl5WNMkrVO7AKrZbTKwHPgPYB/g66Rime/WOeTxwGOkYofTgaOyx9UmAacCPwQOBP4JnCdpUoGQJ9SJuTo57QFcBjwNHAK8G7gaeGHNcX4KXAC8A7gDOEPSllXH+Uj2+10A/CtwNvBNSUcUiDHvulZ8Hng4+/3JksgPgBMj4pKaQ50JnA8cANwEnC3plVXneRdwLnANsD9wNDAL+K+a41Su+Umk9/CaBuF/FngOcDDpOn1d0vHAocDhwJFAP7CqXkLSxsBvgG2BjwLvAjYALpW0fs3xG/2NnJSd835SkdouwLENYrUyRIQXL4UWYDYQDZYFDV67DvBvpG+wz862Tcte95Oafa8Hzqhz3jdVbXtVtm2fYWLOi3Ve1T6/BxYAyjnGodlrPli1bRPgGeCj2foE4B7glJrXfp/0ob9egxjn5cVZs9+uwErgfcDPSfUOz6kT55FV2yaQ6lPOyNYFLKoT5weBJ4BNaq75zJr99si2T6+5xlfUnPM+4CHgeVXbzwL+WLV+LPAgsHHVto2y6/WJJv9GvkEqnuz6/8l4WVznYc16GNizzvavAC+orGRl5J8ifaPdCqgurpgKVLd2urjmWLdm+1R7GriyZh+ALRne10kfXNUeyOLcAHgN8KnIPoUaWBVnRDwoaWnV+bcEtiDdbVQ7E/gY8Arg2gbH/gvw/kYnj4jfSvoW8CPgWcAeEfFYnV3Pq3rNkKTzgXdmm/6FdG3PqrmzuZz0Hk0Hfl15OfCrRjFVuazmnHcBKyLVkVQsBF5Xtb4ncAnwSFUsjwLXATNqjl/kb8Q6yMnDmvVMRKzVJFfSg1QlD1LxxDeA40gfRg8BOwHfY81EAvCPmvWn6uzzSEQMVVYi4qmUn9bar57F9WLObET6Nn5fgeM0irPyu/+9Zp/K+sbDHHtFgxir/Qz4HHBjRFyds8/SOuuV+CZnP3+Z89oXVT1+KCKeKhAT1L82w72vk4HXkooJa11Ws17kb8Q6yMnD2uWdwNkRMVDZIGm7LsaT5yFgiDUT30hUks+mNds3y34ub/H4ZN/O55LqMV4uaVZEzK2z66ak4qDq9Up8lThmAX+u89q7qh63e76G5aT6oXr1E4+2+dzWIicPa5f1SZXa1fq7EUgjEfG4pD8C75f03wWKrvIsAe4lJc3qop53AY+QPvBbdSSpcnl74MPANyRdHBGDNfu9g1QMRtYwYCarK7tvJ9XNTIuIH5UQUysuI12fWyLiiRaP5TuRDnPysHa5BDg8+2D+GylxvKRLsUyT9NqabRERf8weHwFcCvxK0lzgcVKLnQUR8YsiJ8jK+WcDP8yK8C4B3kCq7zgyIobrlLhBnRgBFkbEA1mz4S8Bn4yIuyQdDbwNOFnSm2uS3oclPQXcDHyEdN0Prorzs8Bpkp5HSnRPAVsDbwcOiogVRX7nEnwLeC9wuaTvkpLaZqTr9puI+FkTx7oN2EzSoaTf+4E6SdVK5ORh7XIMMAX4arZ+LqnJ5v90IZbPZku1lWR//xFxVdZX4lhSM9CnSEU6/6+Zk0TEjyStS6rv+RTpbuSzEfHtAi9/KanVV633STqL1GT2ioj4YXaupyQdQrqjOIw1m0C/B/g26dovAd4dEauKqCLiTEmPkO5kPki6FncCvyD97h2RJcXXAnOyeDckFa/9BrixycOdBbyR1KR3Cul6HVpasLYWjfwu3cx6Sfat+xTguTmtsMxK406CZmbWNCcPMzNrWs8lD0n7SLo9GxdorWEdsvF7lkm6Pls+3I04zXpNRMyLCLnIyjqhpyrMJU0kdSLbi1TRd62kCyLi1ppdz4yIwzoeoJmZAT2WPICdSU0T7wSQdAapjXpt8mja5MmTY9q0aa0exsxs3LjuuuseiIgp9Z7rteTxQuDuqvUlpHGHah0oaXfgr8BnIuLuOvsgaRapJy1Tp05lwYKmJrozMxvXJC3Ke67X6jxqh/WGtYdI+B9S79jtSR27Ts07WETMjYgZETFjypS6ydPMzEag15LHEtYcmG1L0pAPq0TEgxFRGfbiR8COHYrNzMwyvZY8rgW2kbSV0oxz7yENnLaKpOoB7PYnG8PHzMw6p6fqPCLiGUmHARcBE4GTI+IWSceQxhm6gDRe0v6kiXiW4yEIzMw6btwMTzJjxoxwhbmZWXGSrouI2om5gN4rtjIzs1HAyaOB+fPnM23aNCZMmMC0adOYP39+t0MyM+sJPVXn0Uvmz5/PrFmzWLEiTW2waNEiZs2aBUB/f8/NaWRm1lG+88gxMDCwKnFUrFixgoGBgZxXmJmNH04eORYvXtzUdjOz8cTJI8fUqVOb2m5mNp44eeSYM2cOkyZNWmPbpEmTmDNnTpciMjPrHU4eOfr7+5k7dy59fX1Ioq+vj7lz57qy3MwMdxI0M7Mc7iRoZmalcvIokTsVmtl44U6CJXGnQjMbT3znURJ3KjSz8cTJoyTuVGhm44mTR0ncqdDMxhMnj5K4U6GZjSdOHiNQr1WVOxWa2Xji1lZNGq5VlZOFmY0HPXfnIWkfSbdLWijpiDrPryvpzOz5P0qa1sn43KrKzKzHkoekicD3gH2B7YCDJW1Xs9uHgIci4iXAt4GvdTJGt6oyM2tQbCXpmhEcL4D3R8TtI4xnZ2BhRNyZxXAGMBO4tWqfmcDs7PE5wH9LUnRokK6pU6eyaNGiutvNzMaLRnceM4ClwC0Fl1uz12zQQjwvBO6uWl+Sbau7T0Q8AzwMbFLvYJJmSVogacGyZctaCGu1kbSq8rAlZjbWDFdhfkxEFLoDkbQO8P4W41GdbbV3FEX2SRsj5gJzIY2q21poSaVCfGBggMWLFzN16lTmzJmTW1HuYUvMbCxqdOfxAeBvRQ+U3QV8ALirhXiWAC+qWt8SuDdvnyxhPR9Y3sI5m9bf38/g4CBDQ0MMDg42TAKuYDezsSg3eUTEqRHxYDMHy17zUAvxXAtsI2krSc8G3gNcULPPBcAh2eODgMs7Vd8xEq5gN7OxqKdaW2V3L4cBFwF/Ac6KiFskHSNp/2y3HwObSFoI/AewVnPeXuJhS8xsLGq5k6CkL5FmJDy2hHiIiF8Cv6zZdlTV4yeBd5Zxrk6YM2fOGnUe4GFLzGz0K+POYzarm85aDQ9bYmZjkecwNzOzujyHuZmZlapQnYekScPtExErhtvHzMzGhqIV5o+R0xGvysQWYzEzs1GiaPL4IGsnj42BvUkDGJbS0srMzEaHQnUeETEv6wBYvXw7IvYFLgRe3t4wxx+Ph2VmvayMCvNzaX1MK6tSGQ9r0aJFRMSq8bCcQMysV5SRPHYC/lnCcSzj8bDMrNcVbW11fJ3NzwZeBrwZOKHMoMY7j4dlZr2uaIV5veFAniSNcHs42bDnVg5POGVmva5ohflWdZaXRcReEfH9bEBDG4F6FeMjmXDKzKyT3MO8i/IqxgGPh2VmPa3lsa0kvT47zlXlhNQevTi21bRp0+oWT/X19TE4ONj5gMzMqjQa26rlIdmBy0l3MO5h3iRXjJvZaFVGsdWbgTeVcJxxxxNFmdlo1XLyiIirIuLXZQQz3rhi3MxGq56pMJe0saRLJN2R/dwoZ7+Vkq7Pltr5zUcVTxRlZqNV4QpzSbsAHwL+BViv9vmI2LmlQFJHxOURcZykI4CNIuILdfZ7LCKe0+zxe7HC3Mysl7U8GZSkvYCrgC2B3YBlpGHaXwlsAtxcQpwzgVOzx6cCby/hmGZm1gZFi62OAf4v8NZs/csR8SbSXcjTwJUlxLJZRNwHkP3cNGe/9SQtkPQHSU4wZmZdULSp7nbAl4Ah0rweGwBExCJJs4GjgZ8MdxBJlwKb13mqmRH/pkbEvZK2Bi6XdFNE/C3nfLOAWeAWTGZmZSp65/EkMCFSBcl9wIurnnuEVJw1rIjYMyKm11nOB/4u6QUA2c+lOce4N/t5J+mO59UNzjc3ImZExIwpU6YUCbHneZ4PM+sFRZPHDcC22ePLgC9K2kvSG0hFWjeVEMsFwCHZ40OA82t3kLSRpHWzx5OBXYFbSzj3qOB5PsysVxRNHiewehraI4HHgYuAK0h1E58oIZbjgL0k3QHsla0jaYakk7J9XgYskHRDdu7jImLcJA/P82FmvWJEY1tJEvASYH3gtoh4quzAyjYWmupOmDCBeu+XJE477TQGBgZYvHgxU6dOZc6cOe4vYmYtKX1sq6zu446WorKm5c3zsfHGGzNr1qxVdyXVo/M6gZhZO+QWW0k6XFJec9lGr5ncelhWT95wJoCLs8ysoxrVeXwb6Ct6IEkTs9e4TWyb5A1nsnz58rr7e3ReM2uX3DoPSUOk4dbrfzLVeQlwALBTRPypnPDKMxbqPPJ4XhAza4eRDk9yFWmOjikFl8nZax4tLXIrxKPzmlmn5VaYR8QeHYzDWlCpFHdrKzPrlJanoR0txnKxlZlZO7Q8qq6ZmVk1Jw9bi8fPMrPhjKiToI1dlfGz3OHQzBrxnYetweNnmVkRTh62hryOhe5waGbVcoutJF3L6pF0h9XqHObWG/LGz/JkWmZWrVGdxy00kTxsbJgzZ84adR7gDodmtrZGnQQP7WAc1iPc4dDMinAnQTMzq6uU+TwkTQPeC/wLsF7t8xHxrhHGZ2Zmo0yh5CFpR+DXwN2k5HEj8HxgGrAEWNim+MzMrAcVbar7deDnwHTS0Osfioitgd1IlerHtxqIpHdKukXSkKS6t0nZfvtIul3SQklHtHpeMzNrXtHk8Srgp8BQtr4eQET8DjgaOK6EWG4mzQdyVd4O2YRT3wP2BbYDDpa0XQnnNjOzJhRNHgE8lc1dvpQ1Zxi8G9im1UAi4i8Rcfswu+0MLIyIOyPiKeAMYGar5zYzs+YUTR63Ai/OHv8e+IykbST1AZ8H/taO4Op4ISlZVSzJttUlaZakBZIWLFu2rO3BmZmNF0VbW81l9d3GkcDFwG3Z+uPAQUUOIulSYPM6Tw1ExPlFDlFnW25b44iYS4qdGTNmjI82yWZmHVDoziMiTouIr2aP/wK8jFTv8A7gJRFxccHj7BkR0+ssRRIHpDuNF1WtbwncW/C11iIP1W5mFSMakj0iHiPdfXTatcA2krYC7gHeA/xbF+IYdzxUu5lVK9zDXNJ6wO6kb/u1nQQjIn7QUiDSO4DvAlOAfwDXR8RbJG0BnBQR+2X77QecAEwETo6IQoMuuYd5a6ZNm1Z3wMS+vj4GBwc7H5CZtV2jHuaFkoek3YBzgck5u0RETBx5iO3n5NGaCRMmUO9vRRJDQ0N1XmFmo10Zc5h/h9Si6tXAuhExoWbp6cRhrcsbkt1DtZuNT0WTx7bA7Ii4ISKebmdA1pvmzJnDpEmT1tjmodrNxq+iyeNG6jextXGiv7+fuXPn0tfXhyT6+vqYO3euK8vNxqmidR6vAuYBn4qIX7c7qHZwnYeZWXPKGJL9EmAScLmkp4FHaneIiE1HHqKZmY0mRZPH9/CUtGZmlimUPCJidpvjMDOzUaRohbmZmdkqRWcSvIL8YqshUh3I9cApEXF3zn5mZjZGFL3zeAB4CWnmwPWBx7Kfu5Gmpd0AOBy4RdJObYjTzMx6SNHk8QtgGTAtInaJiP0jYhdgK1JiORvYmjTvx3+1JVIblTwSr9nYVDR5HAUcExFrDH8eEfcAx5Dm43gE+BbwmnJDtNGqMhLvokWLiIhVI/E6gZiNfkWTxwuAdXOeWw/YLHu8lPoTNlkPavddwcDAwKoh3CtWrFjBwMBAqecxs84rmjx+DRwnacfqjZJmkIqprsw2bQMsLi06a1legujEXcHixfX/FPK2m9noUTR5zCK1qLpG0j2Srpd0D/BH0twb/151vOPLD9NGolGC6MRdgUfiNRu7Ck8GBSDprcAM0iCJ9wPXRsQv2xRbqcbj2FaNJnBavHhx2+fnqJ19ENJIvB5Q0Wx0KGNsKwAi4kLgwlKisrZrVGw0derUuomlzLuCSoIYGBhYdc45c+Y4cZiNAbnFVpImVT8ebulMuNaMRsVGZc7P0ajivb+/n8HBQYaGhhgcHHTiMBsrIqLuAqwEds4eD2XruUvecYouwDuBW7JzzWiw3yBwE6lH+4Kix99xxx1jvDn99NNj0qRJQRodIICYNGlSnH766aue7+vrC0nR19e3anuZ5zCz0avRZ2xunYekQ4BfRMSDkg5lmFF1I+LUEeSu6vO9LEscPwQ+FxF1KygkDZKSywPNHH881nkAqyrH21Vs1KheZXBwsLTzmFnnNarzaKrCvBMkXYmTx6gxYcKEtle8m1l3NEoeIxpVV9IrJL1T0u6SOj0ybwAXS7pO0qxGO0qaJWmBpAXLli3rUHjji5vjmo1PjSrMPyjp7Drb55PqG84EriD1/diwyMkkXSrp5jrLzCZi3jUidgD2BT4hafe8HSNibkTMiIgZU6ZMaeIUVlSZFe9mNno0umt4P6kvxyqSPgwcTJrPfHtSJfdU4PNFThYRe0bE9DrL+UUDjmx8rYhYCpwH7Fz0tVa+/v5+5s6dS19fH5Lo6+sr1I/DAyaajW6N+nm8lDT9bLX3kRLKrIhYCdwsaSqpB/qR7QlxNUkbABMi4tHs8d6kgRmti/r7+5uqhK/tPFjp+V45lpn1vkZ3Hs8jDXQIgKR1gdcCF2eJo+LPpLuPlkh6h6QlwC7AhZIuyrZvIanSi30z4DeSbgCuAS6MiP9t9dzWWR4w0Wz0a5Q8FgMvr1rfHXgWqZ6j2iTgiVYDiYjzImLLiFg3IjaLiLdk2++NiP2yx3dGxCuz5eUR4YL1UWgkAya6mMustzQqtjob+LKk+4G/k0bPfQy4oGa/1wEL2xOejUXNDo3iYi6z3tPozuO/gBuAc4CrgW1JdR0PVXaQtB7wQeCidgZpY0uzLbRczGXWe3KTR0SsiIh9SHOU7wxsERFn1Oy2DrA/cEL7QrSxplELrXrFU54XxKz39FwP83ZxD/PelzeE+/rrr8+DDz641v4eAsWsvUrvYW7WDnnFU4A7Ipr1GCcP6xl5xVDLly8fUUdEM2sfF1tZz/AIvWa9xcVWNip4nCyz0cPJw3rGSMfJMrPOazQZ1MnNHCgiPlhKRG3iYqvxp90TYZmNdY2KrRr1MH9FzfpUYAppvKulwKbZsgxYu6DarIvcK92svRp1EtypspBGrn0M2C0iNo+I7SNic+D1wKPAVzsTrlkx7pVu1l5F6zyOA74UEb+r3hgRvwWOAr5WdmBmrXCvdLP2Kpo8tgZW5Dy3AphWSjRmTcobbdfT45q1V9Hk8SdgtqQXVG+UtAUwG7iu5LjMhlWp11i0aBERsapeY/78+W72a9ZmjSrMq80CLgYGJV3H6grzHYEHgfe2JzyzfI3qNSqdCt3ayqw9Cvcwrxp+fSdgc9J0tNcCp0REy5NBtZub6o49EyZMoN7frySGhoa6EJHZ2DLSprpriIgnge+XFpVZi5qdVMrMytNUD3NJ+0r6sqS5kqZm23bP6j5aIunrkm6TdKOk8yRtmLPfPpJul7RQ0hGtntdGL9drmHVPoeQhaTNJfwT+BzgE+BAwOXv6A8CXS4jlEmB6RGwP/BX4Yp04JgLfA/YFtgMOlrRdCee2UaiXhzPxnOs21hUttvou8BzgpcAg8FTVc5cCX2k1kIi4uGr1D8BBdXbbGVgYEXcCSDoDmAnc2ur5bXTq7+/viWRRzb3bbTwoWmy1D6mT4EKgtoZyCfDCUqNKFfO/qrP9hcDdRc8taZakBZIWLFu2rOQQbbRq912Be7fbeFC4whxYmbN9MlCotZWkS0kttWoNRMT52T4DwDNAvf9o1dmW21wsIuYCcyG1tioSo41tnbgrcO92Gw+K3nlcDXwyq3OoqHwYfxC4vMhBImLPiJheZ6kkjkOAtwH9Ub8N8RLgRVXrWwL3FvwdzDpyV9Cod7vrQmysKJo8vkDq33EzcCwpcXxE0lXALsCXWg1E0j7ZefaPiLyhUK4FtpG0laRnA+8BLmj13DZ+dOKuIK8V2H777ZfbIz5PN5ONE501FBGFFuDFwGmkb/pPkToJzge2KXqMYY6/kFSfcX22nJht3wL4ZdV++5FaY/2NVNxV6Pg77rhjmPX19QXpy88aS19fX6nnOf3006Ovry8kRV9f36r1Zs59+umnx6RJk9bYd9KkSXH66aeXGmuvndt6B7Agcj5Th+1hLmkC8ALg4Yh4rLVU1T3uYW6wdp0HpLuCTjTxbbZHfDfndPd88gatz2E+gdQ8d7cygzLrhkZ9Q9pdTNPsSL/drHh3pb8NZ9jkERHPkGYKnDTcvmajQX9/P4ODgwwNDTE4OLgqcTRbH9GsZnvEd3NYeQ9pb8PKK8+qXoCPkIZdn1Jk/15cXOdhjXSzLqTRvq7zsG6iQZ1H0eRxNqmi/HHgqmz9rKrlzCLH6ebi5GGNSKqbPCQ19YFftvF6busNjZJHoSHZJV1R4A7mjYVudbrEFebWSF4F8SabbMITTzzRlQp2s25rtcKciHjjcEu5IZt1Vl59BJDbqdD9IGw8a2pIdrOxKq8V1vLly+vuX6lQb2cFu1kvK1psdfxw+0TE50uJqE1cbGUjkVecNXHiRFauXHu4t5H2g5g/f76nzLWe03KxFfDOOsss4HOkllj1hk83G/XyirPqJQ4YWT+IkTYTdrGZdVVeTXqRBXgNcAOwSyvH6cTi1lY2UmUMNdLISI7lprTWCbTaVLfRArwXuK7V47R7cfKwMpX54d2omXCeTvVLyeNmvONDo+RRRoX5g8C2JRzHbNQocwrckfTm7ubwIZ3ojW+9r+gc5pPqLBtK2gU4BrilvWGa9Z56w5yMRLPDlkB3hw9pNCeK62HGkbxbkuoFGCLNJFi7DJGGUd+xyHG6ubjYynpZs8VA3azzyCtmq8TQjZisPSihh/mhrD3d65Okmf2uiYinW8hfHeGmujbWdKt5b6eaL1v3NWqqWyh5jAVOHmblyJsTpbYoqyJvvhLrfS3385C0qaStqtYlaZakEyT9a1mBmlnvy2ss0NfXV3d/D+M+NhVtbTUP+EzV+tHA94F9gPOyYi0zG4VGUsldr7HASCr+bfQqmjx2AC6HVdPSfgw4MiJeCswBPt1qIJK+Luk2STdKOk/Shjn7DUq6SdL1klwOZdaCMpvdltl82Xpf0QrzJ4C9I+JqSTsBfwCmRsQ9kt4AXBgRz2kpEGlv4PKIeEbS1wAi4gt19hsEZkTEA80c33UeZmvzXOXWSBljWy0BtssevxW4LSLuydafT2p51ZKIuDjSlLeQktOWrR7TzBrzXOU2UkWTx8nA8ZLOBj4PzK167rXAX0qO64PAr3KeC+BiSddJmtXoIFml/gJJC5YtW1ZyiGajn+cqt5EqOhnUfwGfBO7Pfn6n6umNgZOKHEfSpZJurrPMrNpnAHgGyCt03TUidgD2BT4hafcGcc+NiBkRMWPKlClFQjQbV1zJbSNVeGyriPhJRHwyIn4cVRUlEfHRiDi14DH2jIjpdZbzASQdArwN6I+cypiIuDf7uRQ4D9i56O9gZmsaS5XcvTg0Si/GVJq8ruf1FmAdYGtS/ccaSzPHyTn2PsCtwJQG+2wAPLfq8e+AfYoc38OTmI1dvThEfS/G1CxaHZIdeBbwA2AF9ce4WlnkOMOcYyFpnKzrs+XEbPsWwC+zx1uT5g+5gTQY40DR4zt52HjXzWHU233ubg9RP1pialYZyePY7IP9YNJgiB8D3g9cDPwN2K/Icbq5OHnYeNbNb8GdOPdI5kRpt16MqVmNkkfRfh63A8eTepo/DewUEddlz50KPBkR/z7sgbrI/TxsPOtmf45OnLsX+6v0YkzNKqOfx4uAv0bESlKfjo2qnpsPHNhaiGbWTt3sz9GJc/diq7FejKlMRZPHfUBluJC7gOrmsS8uNSIzK103+3N04ty92GqsF2MqVV55VvUC/Bg4Pnv8aVI/jJ8Cp5Aq0X9c5DjdXFznYePZWK/zsPaghDnMB4CfZMnmBOD/AH3AK4HvAoeXkcjMrD26+S14zH8D75Ce6zOSl1XG2uI7Dxsvutkk19qjW3dvlHDnAYCk7SS9T9KRkjbPtr1E0nPLT2tm1qwyh1i34tp9VzAwMLDWTI0rVqxgYGCg1PM0o2hT3eeQBkc8kFTfsQ6pue6fJJ0FLI6Iz7U10ha5qa6NB2Oheehokzctb5lFcxMmTKDeZ3W7p/gto6nut4DXAXsCzwVU9dwvSUOLmFmXeYj1zuvEXUEvjn5cNHkcAHwhIq4gDUdSbRGp8tzMuqwXP2TGuvHaj6Vo8lgfeOGfZnAAABVOSURBVDDnueeydkIxsy7oxQ+Zkei5lkUNjNd+LEX7eVwJ/DR7PJE0vtUO2fpPyAYu7OXFra1svBjtra1GW7+Q0RZvMyhhYMTdSMOSXAr8O+lO40vAacATpMrzrieIRouTh9noUPZotGUm07xjjfaEnafl5JGOwa7A1aSBEYeyBPJb0sx+XU8Owy1OHma9p96Hbpmj0ZZ5VzCW7zDyNEoehZrqVpO0PmlgxH9ExIrh9u8Vbqpr1lvymriuv/76PPjg2lWsI2luXGbT5fHYDLqMprqrRMQTEXHvaEocZtZ78pq4Ag0r/ZupTC+zJZSbQa9pnbwnJB3VxHEiIo4tIR4zGyfyPnSXL1/OaaedxsDAAIsXL2bq1KnMmTOH/v7+te5WKj3ogbotj6ZOnVr3bmEkLaHKPNaYkFeeRarXeBxYCiwbZlmad5xeWVznYdZbRlIx3uxrXOfRGkZSYU6aU/wp4FfAIcDz8vYtayFNd3sjaQ7zi4EtcvY7BLgjWw4pcmwnD7PeMpIP45FUpneitdVY1Sh5NKwwlzQDeA/wLmAy8L/Az4BfRMQTTd3iFCDpeRHxSPb4cGC7iPhozT4bAwuAGdkfznXAjhHxUKNju8LcrPfMnz+/bvFUnvFYad1NI64wj4gFEfG5iJhKGr/qfuC/gaWS5kvavdHrm1VJHJkNSMmh1luASyJieZYwLsFja5mNSv39/QwODjI0NMTg4OCwPabL7EE/mnqx96LCra0i4qqI+DhpPvMTgXeTZhUslaQ5ku4G+oF6lfYvBO6uWl+Sbat3rFmSFkhasGzZsrJDNbMOK2uYDg9d37rCyUPSrpK+SxoI8WPAOcD/bfaEki6VdHOdZSZARAxExIuA+cBh9Q5RZ1vdsreImBsRMyJixpQpU5oN1cx6ULN3K/U0GgnXdyTF5DbVBZC0A6nO493AZqQ6j88AF8QI+3lExJ4Fd/0pcCHwlZrtS4A9qta3JI29ZWZWSF4z4codSNGmwONZ7p2HpNuBPwDbkz7AN42It0fEGSNNHMORtE3V6v7AbXV2uwjYW9JGkjYC9s62mZkVktc3Y+LEiR2ZsW8s3N00KrbahjRr4I7A8cBCSUvzlpLiOS4rwrqRlBQ+BanVl6STACJiOalJ77XZcky2zcyskLyK95Ur688uUWYv8rFS35LbVFdSbXFRQxFxdCkRtYmb6ppZtXrNhAcGBtreFLhTzY2bbQZdT6Omurl1Hr2eDMzMWtHf31/3w7TeYI1lTqbViTGymh3GZSSaHhjRzGys6sSMfZ2YebAT86o3PST7aOViKzPrBXlD0ZeZpCZMmEC9z3ZJDA0NFT5OqUOym5nZyI2VuxsnDzOzDiujo2MjZQ7jksfJw8ysh5TRB6QTdzeu8zAz6xGdqA9phus8zMxGgU60kiqLk4eZWY8YTfOkO3mYmfWIkbSS6tY4WU4eZmY9otlWUt0cJ8vJw8ysRzTbSqqbdSRubWVmNkqV1ZM8j1tbmZmNQZ3oSZ7HycPMbJTqRE/yPE4eZmajVCd6kudxnYeZmdXlOg8zMytV7kyCnSbpWGAmMAQsBQ6NiHvr7LcSuClbXRwR+3cuSjMzg9668/h6RGwfEa8CfgEclbPfExHxqmxx4jAz64KeSR4R8UjV6gbA+KiMMTMbhXomeQBImiPpbqCf/DuP9SQtkPQHSW8f5nizsn0XLFu2rPR4zczGq462tpJ0KbB5nacGIuL8qv2+CKwXEV+pc4wtIuJeSVsDlwNvjoi/DXdut7YyM2tOo9ZWPdlUV1IfcGFETB9mv3nALyLinALHXAYsaiKMycADTezfSb0aW6/GBY5tpBxb83o1Lmg+tr6ImFLviV5qbbVNRNyRre4P3FZnn42AFRHxT0mTgV2B44scP+8CNIhnQV7G7bZeja1X4wLHNlKOrXm9GheUG1vPJA/gOEnbkprqLgI+CiBpBvDRiPgw8DLgh5KGSPU1x0XErd0K2MxsvOqZ5BERB+ZsXwB8OHv8O+AVnYzLzMzW1lOtrXrM3G4H0ECvxtarcYFjGynH1rxejQtKjK0nK8zNzKy3+c7DzMya5uRhZmZNc/KoIWkfSbdLWijpiB6IZ1DSTZKul7Qg27axpEsk3ZH93KhDsZwsaamkm6u21Y1FyXey63ijpB26ENtsSfdk1+56SftVPffFLLbbJb2ljXG9SNIVkv4i6RZJn8q2d/26NYitF67bepKukXRDFtvR2fatJP0xu25nSnp2tn3dbH1h9vy0LsQ2T9JdVdftVdn2Tv8vTJT0Z0m/yNbbc80iwku2ABOBvwFbA88GbgC263JMg8Dkmm3HA0dkj48AvtahWHYHdgBuHi4WYD/gV4CA1wJ/7EJss4HP1dl3u+y9XRfYKnvPJ7YprhcAO2SPnwv8NTt/169bg9h64boJeE72+FnAH7PrcRbwnmz7icDHsscfB07MHr8HOLON1y0vtnnAQXX27/T/wn8APyV1oKZd18x3HmvaGVgYEXdGxFPAGaRh4nvNTODU7PGpQMMxvsoSEVcBywvGMhP4SSR/ADaU9IIOx5ZnJnBGRPwzIu4CFpLe+3bEdV9E/Cl7/CjwF+CF9MB1axBbnk5et4iIx7LVZ2VLAG8CKiNK1F63yvU8B3izJHU4tjwde08lbQm8FTgpWxdtumZOHmt6IXB31foSGv8zdUIAF0u6TtKsbNtmEXEfpA8AYNOuRZcfS69cy8OyooKTq4r3uhJbVizwatI31Z66bjWxQQ9ct6z45XrS/D6XkO50/hERz9Q5/6rYsucfBjbpVGwRUbluc7Lr9m1J69bGVifusp0AfJ7U2RrSNWjLNXPyWFO9rNvttsy7RsQOwL7AJyTt3uV4iuqFa/kD4MXAq4D7gG9m2zsem6TnAD8HPh1rTj+w1q51tnU6tp64bhGxMtL8PluS7nBe1uD8XY1N0nTgi8BLgZ2AjYEvdDI2SW8DlkbEddWbG5y7pbicPNa0BHhR1fqWwFqzGXZSZLMpRsRS4DzSP9HfK7e92c+l3YswN5auX8uI+Hv2Tz4E/IjVRSwdjU3Ss0gfzvMj4txsc09ct3qx9cp1q4iIfwBXkuoLNpRUGRmj+vyrYsuefz7FizHLiG2frBgwIuKfwCl0/rrtCuwvaZBU5P4m0p1IW66Zk8eargW2yVonPJtUiXRBt4KRtIGk51YeA3sDN2cxHZLtdghwfv0jdEReLBcA789amrwWeLhSTNMpNeXK7yBdu0ps78lam2wFbANc06YYBPwY+EtEfKvqqa5ft7zYeuS6TZG0YfZ4fWBPUp3MFcBB2W61161yPQ8CLo+sJrhDsd1W9WVApHqF6uvW9vc0Ir4YEVtGxDTSZ9flEdFPu65ZO2v9R+NCahnxV1L56kCXY9ma1LrlBuCWSjykcsnLgDuynxt3KJ6fkYoxniZ9a/lQXiykW+LvZdfxJmBGF2I7LTv3jdk/yguq9h/IYrsd2LeNce1GKgq4Ebg+W/brhevWILZeuG7bA3/OYrgZOKrqf+IaUmX92cC62fb1svWF2fNbdyG2y7PrdjNwOqtbZHX0fyE75x6sbm3Vlmvm4UnMzKxpLrYyM7OmOXmYmVnTnDzMzKxpTh5mZtY0Jw8zM2uak4eZmTXNycPMzJrm5FFDaS6DyJYhSQ9JulbSHEmbj+B485TNw9FuZZ5L0rskHVrGsbpN0uVKcy+sU7P9wOx93qtq29uzge3+qTQ3w3/kHHM7SZdJWiHpXknHSJrY7t+l6vwd+7tqJ0nTs/dgj27H0kinrrekK6s+fz5d8rGrP9vOGf4VjTl51PcwsAvwOlI3/3OB9wE3Sdqxm4F10LuAQ7sdREk+ThpU7/DKhmwwwBOAsyLikmzbrqT3+hrgX4GTga/V/hNno8xeSuqdPRM4BvgscHTbfxMbD64gff6cUfJxT8qO++cyDrbO8LuMS89EGne/4iJJPwCuAs6UtG1ErOxSbNakiLhN0jeBoyWdGRH3kD7onw98pmrXo4DfRMSHs/WLs0RxlKTvR5rjBeCjwPrAAZFGob1E0vOA2ZKOj8aj5poNZ3nN508pImIJsERSKX+fvvMoKNLomZ8nDVVdXcyxm6RfZ8UXD0r6UWUww3ok7SLpgqyo43Gl6Sr7a/Z5a1ZktlXN9q2y7fs3ijUrerlN0pOSfiNpuzr75MYtaR5wIPCGqtvc2ZLelD3eouo4v5e0sjJQXLbtJklzmrlGBfeZJ2mBpL2yoqXHs9/v5Y2uR+ZY4EHg25K2J92FfCWyUYszryLdUVS7GNiI9I2tYl/gopokcQYpobwhL4Cq+Bu+P1nRxTk12/bIrv30nGO/XNL/SlqeXZe/SPpEzT5N/a1mryny91r4fZH0cUl3Z/v8D2k2w4YkXVr1d1hv6ct53bDXeyTXOtunLde7wfkmZzHtWbP9BEl/KBpTmZw8mnMF8AxpaOhKMcdlwP2kUSk/TRpY7pQGx+gDfgt8mFQ08nPgFEkHV+3zv6Rhkw+pee2hwDLgl8Mc/1ukD8t/I327vkjSepUdCsR9bPa7/pn0obkL6Zb396SBB1+fHWcSsCPwFGk4aCRtDLwcuLrguZq9jlOBrwNzgINJkyidJTWeAS0iVgCfAt5JGlX0VuC7Nbutl/0u1f6Z/ayeS+KlwG01x18MrMiea2TY92eELgBWAu8F9if9bqs+qEb4t1qJd7i/VyjwvkiaSRog8BfAAaRBAk8u8Lt9Dngoe23l7/Fk0v/IayNi0TDxj6brneeV2c8barZvT7qOw8ZUunaP7jjaFtL8zQ80eP4+4AfZ46uBK2qefxOpLHx6tj4PWJBzLJGKDn9IGg65+rmvAnfBqsErRZrP/BsNYpuXnft1Vdv6SAnvo1XbisR9DnBlnXP8Hvjvqtc8QPrWfVy2bX/SH/DzmjjXsPtU/X7PANtUbXt7tt9LC76/C7L931jnueuAn9ds+0K2/5FV254mTZxU+/olwH+W8P5cCZxT89o98v6ugMnZc69ocO5C13iYa1f377Xo+0KqS/pVzTF/lO23R4PzbpjtM7Nq29m1xxrJ9S5yrTt5vevFk23/LHBvne0PAp8sEtNw52h28Z1H8wSrvnXvQvp2tU5lAX5D+nCpW7EuaSNJ35G0KNvvaWAW8C81u55M+kPfI1t/Y7Y+3DeXpRHxu8pKpG9l15FNTDPSuKtcTXbnAeyerf+6ZtsNEfFIkXONIJ7BiLijav3W7OeWw8SNpBmkqVaD1de12onATEkfyd6nt5D+aSElxGr1hqNWzvZqDd+fEVpOmk70REnvlrTGtMStvOdN/L02fF+UWqK9mrXnnjmX4VWKj26p2rY9q+fLaGRUXe8GXknNXYfSfOUbk4aGbxhTOzh5NCG71d0E+DupHHwi8H1W/1M9TSrmeBZrzhxWbR7wbtIt/t6kKStPJhWZrBIRd5K+IXwg2/QB4JqIqP4HqqferIJLWV22PNK4K64CpivVcbyelDyuBmZk16eyrei5mo3nHzXrlWKmhsUQkiaQplf9Pamy/POStq7Z7WRSAvkB6Z/xXFJLKkjvecVDpG/DtZ5fJ75aw70/TYs049/epCKSk4H7JV0t6dXZLq285/Mo8PfK8O/LFNJdS+3vX2QWzOmkIsE7YdUETC+hYPLI2dar1zvPWsmD1UVZNxaIqXRubdWcN5Ku2e9J/yxBKuaqVwex1jST2YfrW4HDIuLEqu15Sfwk4EeSvkgqI/5szn7V6n3j2JTV39qajrvGb0nfsPcg1f18ITv2Y8CbgR1IHzRFz/Vwi/EU9VHSN98dSBMZvQ/4DvC2yg6RWtAdJunLpG/Md7G6DqO69ctt1NRtSHoRsAE1dSF1DPf+ADwJPLtmn40bHTQibgMOVJpW9vXA14ALs2+nI3rPR/D32sgyUnFR7e9f5Bvyy0mzHQ5VrU+gWPIY7no3fa2hPdc7j9Kspi9j9f9Vxa7APRHx0HAxVV270jh5FJR90/4aadatSyNiZdbKYduIOKbxq1dZl/SNpFIJS9b6Yn/qF3ecS6okPIP0z1Kk3femkl5XuVWXNJX0gXkKQEQ8XjDup6jzbT4iHpJ0M6mJ60rgzxERkn5Dao1WuT0vfK4RXMemZLfwc4DvRsSN2bbDSf9YMyNijaKU7J/xoWy/jwO/y/4xK34F/B9Jz42IR7Nt7waeIBXhNdLw/cksIRX/VduLAiLiaeBySd8CfgpsGBHLR3iNm/17bRTXSknXk/rFnFj11AEFXj6dNZPrdGCI1UVjjQx3vUd8raH0651nO9Idy6oEoNRPqZ9UZDVsTLRhPncnj/rWUZprGFJrhR2BjwGTSBPdV8q/Pw9cJmmIVMH8KKnVyVtJU8b+tfqgEfGwpGtJ/QYeIf0xHEH69v282iAi4klJ84FPAD+L1Fx4OA8Ap2Xfnp8gFbssJRU/VBSJ+zZS+f/bSf9g98bqZq1XZTFdVHUtriZ9M7ojIu5v8lxNXccR+EZ2Lb5S2RARv5R0PnCCpIsj4onsPd+NNB3r80itht6Sbat2Iqmp77mSvkaa5nM28K0Yvo9HkffnPOBDkr4NXEi6431L3gGVmh5/AziTVLSzEemO8IaIqHxoNH2Nm/17LeA/SdfsB9nv+AZgnwKvezlrfoPfEnicYglsuOvd1LWG9l3vBl5J+qL2JUkrSZ/bhwObA3dJeiXpWgwXU7larXEfawvpQyCyZYh0C7qA9M118zr7v4bUtPYR0h/0raSmgc+PmlYa2fpLSHMdPw4sJv2RzSanhRewZxbLngVin5fFegBpHvZ/koqZ1mrdUSDuyaR/rOXZ+WdXvfbdrN0C6TXZtpObPVcT+6xxLbNt07Lzvi3nmuyePX9wnef6snMdm63vCFxLKoJ7hPRhUrf1Cunb4OWkD6T7SE1BJ5b4/nyRVAH6KGk+7Mq3/XqtrTYlzTt+J6kY5n7SnO5Tm30f6sQx7N9rM+8LcBjpy8gKUkLYmwatrbLfLaiaL53U5PVR4KYyrvdw17rD1/tK1m799W3SF5qvZDHeQ2q0cAqptdVbisaUd46RLJ7DvMdJOp70Yb1VtKHc0jpHqfPl9IiY0e1YxoPReL0lXUlKCO8GVkZESLocWBwRh7Z47Amk4u/LgGURcVArx3Nrqx4laVtJ7yAVl33XicNs3DiA1DrrU9n6K0l3Hq06KjtubR3PiLjOo3f9kHTbewGpVZCZjX3/zupe4Yur+nKUkTzmknr3QwkV6C62MjOzprnYyszMmubkYWZmTXPyMDOzpjl5mJlZ05w8zMysaU4eZmbWNCcPMzNr2v8H7dvsRVxeBc0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t2_values = []\n", + "for i in range(len(taus_us)):\n", + " t2_values.append(t2_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "plt.scatter(2*taus_us, t2_values, color='black')\n", + "plt.xlabel('Delay between X90 pulse and $\\pi$ pulse [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Hahn Echo Experiment', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEhCAYAAACHjCx5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOydaXhURdaA35OwhICIgOCCdECQYRGRxX3cF8QFBUUxKrhFnXEcnfFz0IyKS0ZHHcVxj8vASBQUdXBBRUEUHVFhXBFQhATBhU0BCXvO96Nuh6bT3bmd7qS7k/M+Tz19b926Vaeru+/pqlN1jqgqhmEYhhEPWakWwDAMw8g8THkYhmEYcWPKwzAMw4gbUx6GYRhG3JjyMAzDMOLGlIdhGIYRN6Y8DN+IyGgRWRnl2lgRmR1nfXkioiJycnIkjNiGRkkL46hjpHdPi1qScWwMOQ+rjTZriogc6cnVK9WyhCIix4vIVamWoyHRKNUCGEYd8A9gUljexlQIEoP5wAUR8ufWtSDV8D/gYODbVAsSxvHAGcCYVAvSUDDlYTQESlV1VqqFqIb16SyjiAjQVFXXAmkrp1F32LSVUSuIyO4i8qSILBKRDSLytYjcJiJNIhTPFZFHRWSNiCwVkZtFJCukrtEislJE9heRWSJSLiKfiMhvkyjv4SLytoj86skxQ0T2DyvWSUTeFJH1IjJfRIZEqOcKEflGRDaJyEIRuTpJ8j0oIitEpF1I3lBvCuk47zw4vTZARGaG9PvpEeobLCKzRWSjiPwoIneKSOOQ68E+P0xEPsaN1M6MNG3lnV8tIv8QkVXefdd410Z434FfvO9DTpgcHUVkgois9j7XN0SkW8j14NTmsGjfEREZDfwZCIRM941NRr8b0THlYcSNiDQKT4CEFWsLrAb+BAwE7sJNy9wfoco7gV9x0w7jgRu941BygXHAo8BQYBPwoojk+hA5K4LMocrpSGAasAUYAZwFzAT2DKvnaeAl4HTgG2CCiHQIqecS7/29BJwCPAf8Q0RG+ZAxWr8GuRZY471/PCXyMPCIqr4ZVtVEYDIwBPgCeE5E9gtpZxjwAvARcCpwM1AA3B5WT7DPH8d9hh/FEP/PQAtgOK6f7hKRO4GRwJXA9UA+UGmXEJHWwHtAN+AyYBjQHHhLRJqF1R/rO/K41+aPuCm1g4FbY8hqJANVtWTJVwJGAxojzY5xbyPgHNw/2CZeXp5337/Dyn4KTIjQ7tEheX28vIHVyBxN1rEhZT4AZgMSpY6R3j0XhuS1AbYCl3nnWcAy4F9h9z6Ee+jnxJBxbDQ5w8odCmwDzgOex9kdWkSQ8/qQvCycPWWCdy5AWQQ5LwQ2AG3C+nxwWLkjvfxeYX38dlibPwA/Ay1D8p8FPgw5vxVYBbQOydvF66/fx/kduRs3PZny30lDSWbzMOJlDXBshPybgN2DJ94c+R9x/2g7AaHTFR2B0NVOU8Pq+sorE8oWYEZYGYAOVM9duAdXKCs9OZsDBwJ/VO8pFINKOVV1lYgsD2m/A7AHbrQRykTgcmBf4OMYdc8Dzo/VuKq+LyL3AI8BjYEjVfXXCEVfDLmnQkQmA2d6Wfvg+vbZsJHNdNxn1At4J3g78FosmUKYFtbmYqBcnY0kyELgkJDzY4E3gbUhsqwD5gD9w+r38x0x6hBTHka8bFXVKktyRWQVIcoDNz1xN3AH7mH0MzAAeJAdFQnAL2HnmyOUWauqFcETVd3s9FOVcpFYEklmj11w/8Z/8FFPLDmD7/2nsDLB89bV1F0eQ8ZQngGuAT5X1ZlRyiyPcB6Ur633OiXKvXuFHP+sqpt9yASR+6a6z7UtcBBumjCcaWHnfr4jRh1iysOoLc4EnlPVwmCGiPRIoTzR+BmoYEfFVxOCyqddWH5773V1gvXj/TsvxtkxeopIgaoWRyjaDjcdFHoelC8oRwHwSYR7F4cc13a8htU4+1Ak+8S6Wm7bSBBTHkZt0Qxn1A4lPxWCxEJV14vIh8D5IvKAj6mraCwFvscpzdCpnmHAWtwDP1GuxxmXewMXA3eLyFRVLQ0rdzpuGgxvYcBgthu7F+BsM3mq+lgSZEqEabj+mauqGxKsy0YidYwpD6O2eBO40nswf4tTHF1SJEueiBwUlqeq+qF3PAp4C3hNRIqB9bgVO7NV9RU/DXjz/KOBR70pvDeBI3D2jutVtbpNic0jyAiwUFVXesuG/wr8QVUXi8jNwMnAkyJyTJjSu1hENgNfApfg+n14iJx/Bp4SkZY4RbcZ6AycBpyhquV+3nMSuAc4F5guIvfjlFp7XL+9p6rPxFHXfKC9iIzEve+VEZSqkURMeRi1xS3ArsBt3vkLuCWbL6dAlj97KZRteN9/VX3X2ytxK24Z6GbclM5/4mlEVR8TkaY4e88fcaORP6vqvT5u/w1u1Vc454nIs7gls2+r6qNeW5tFZARuRHEFOy6BPhu4F9f3S4GzVLVyikpVJ4rIWtxI5kJcXywCXsG99zrBU4oHAUWevK1w02vvAZ/HWd2zwFG4Jb274vprZNKENaogNR+lG4aRTnj/uv8F7BRlFZZhJA3bJGgYhmHEjSkPwzAMI27STnmIyEARWeD5Bari1sHz37NCRD710sWpkNMw0g1VHauqYlNWRl2QVgZzEcnGbSI7Dmfo+1hEXlLVr8KKTlTVK+pcQMMwDANIM+UBHIBbmrgIQEQm4NaohyuPuGnbtq3m5eUlWo1hGEaDYc6cOStVdddI19JNeewJfBdyvhTndyicoSJyOPA1cLWqfhehDCJSgNtJS8eOHZk9O65Ad4ZhGA0aESmLdi3dbB7hbr2hqouEl3G7Y3vjNnaNi1aZqharan9V7b/rrhGVp2EYhlED0k15LGVHx2wdcC4fKlHVVaoadHvxGNCvjmQzDMMwPNJNeXwMdBWRTuIizp2Nc5xWiYiEOrA7Fc+Hj2EYhlF3pJXNQ1W3isgVwBtANvCkqs4VkVtwfoZewvlLOhUXiGc15oLAMNKCLVu2sHTpUjZurM6Nl5Fu5OTk0KFDBxo3blx9YY8G456kf//+agZzw6g9Fi9ezE477USbNm3wYq0YGYCqsmrVKtatW0enTp12uCYic1Q1PDAXkH7TVoZhZCgbN240xZGBiAht2rSJe8TYoJRHSUkJeXl5ZGVlkZeXR0lJSapFMox6hSmOzKQmn1ta2Txqk9WrV1NQUMDR5eX0BKaUlVFQUABAfn7axSgyDMNIaxrMyGPZsmVsLC9nNG5jyG5AeXk5hYWFsW80DCMjWLVqFX369KFPnz7stttu7LnnnvTp04e9996bo446iu7du9OzZ0/uu+++pLR34YUX0q5dO3r16lXl2v3330+3bt3o2bMn1157bWX+7bffTpcuXejWrRtvvPFGxHqnTZtG37596dOnD4cddhgLFy4EYNOmTZx11ll06dKFAw88kNLS0qS8jxqjqg0i4TYb6m9Ay0GneOciooZhJM5XX32VahEquemmm/Suu+5SVdXvv/9e58yZo6qqa9eu1a5du+rcuXMTbuOdd97ROXPmaM+ePXfInz59uh5zzDG6ceNGVVX96aefVFV17ty52rt3b924caMuWrRIO3furFu3bq1Sb9euXSv78sEHH9QRI0ZUHl966aWqqvrMM8/osGHDEn4PoUT6/HCrXCM+UxvMyKNJkyaAi1V5DXAi8Duc2xLDMOovu+++O3379gVgp512onv37ixbtizheg8//HBat25dJf/hhx9m1KhRNG3aFIB27doBMHnyZM4++2yaNm1Kp06d6NKlCx999FGV+0WEtWvXArBmzRr22GOPyvtHjBgBwBlnnMG0adOCf4wrmTFjBieffHLl+RVXXMHYsWMBGDVqFD169KB3795cc801Cb77BmTz2HPPPfnpp58oLy/nIVzw57uBgb/7XYolM4x6yFVXwaefJrfOPn1gzJiEqigtLeWTTz7hwAOruswrKSnhrrvuqpLfpUsXJk2a5LuNr7/+mpkzZ1JYWEhOTg533303AwYMYNmyZRx00PYw9R06dIioxB5//HEGDRpEs2bNaNmyJbNmzQLc1PteezkHHI0aNWLnnXdm1apVtG3btlqZVq9ezYsvvsj8+fMREX755Rff7ycaDWbk0bp1a4qLiwkEAogIN3bogOy0E6dMnAib6yxss2EYKeLXX39l6NChjBkzhpYtW1a5np+fz6efflolxaM4ALZu3crPP//MrFmzuOuuuxg2bFjo9PkORFrldO+99zJlyhSWLl3KBRdcwJ/+9CcA3/dHomXLluTk5HDxxRfzwgsvkJubG9d7ikSDGXmA+3LssLLqP/+B00+H0aPhb39LmVyGUe9IcISQbLZs2cLQoUPJz89nyJAhEcska+TRoUMHhgwZgohwwAEHkJWVxcqVK+nQoQPffbfdAfjSpUsrp6SCrFixgs8++6xyZHTWWWcxcODAynq/++47OnTowNatW1mzZk2VabNGjRpRUVFReR7cu9GoUSM++ugjpk2bxoQJE3jggQeYPn267/cUiQYz8ojIaafBxRfDHXfAzJmplsYwjFpAVbnooovo3r175b/4SCRr5HHaaadVPpi//vprNm/eTNu2bTn11FOZMGECmzZtYvHixXzzzTcccMABO9y7yy67sGbNGr7++msA3nzzTbp37w7Aqaeeyrhxzon4pEmTOProo6uMPAKBAF999RWbNm1izZo1TJs2DXCjrjVr1jBo0CDGjBnDp0mYUmzYygPg3nuhc2c47zxYs6bKZdtYaBiZzfvvv89T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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(2*taus_us, t2_values,\n", + " lambda x, A, B, T2: (A * np.exp(-x / T2) + B),\n", + " [-3, 0, 100])\n", + "\n", + "_, _, T2 = fit_params\n", + "print()\n", + "\n", + "plt.scatter(2*taus_us, t2_values, color='black')\n", + "plt.plot(2*taus_us, y_fit, color='red', label=f\"T2 = {T2:.2f} us\")\n", + "plt.xlim(0, np.max(2*taus_us))\n", + "plt.xlabel('Delay between X90 pulse and $\\pi$ pulse [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Hahn Echo Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C. Dynamical decoupling \n", + "\n", + "A single $\\pi$ pulse is able to eliminate quasi-static noise due to the reversal of phase accumulation. This concept can be extended to noise that cannot be approximated as quasi-static by applying several $\\pi$ pulses in succession. This technique, commonly known as dynamical decoupling, allows us to cancel different frequencies of noise and is used to extract longer coherence times from qubits." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total time ranges from 12.0 to 462.0 us\n" + ] + } + ], + "source": [ + "# DD experiment parameters\n", + "tau_us_min = 1\n", + "tau_us_max = 40\n", + "tau_step_us = 1.5\n", + "taus_us = np.arange(tau_us_min, tau_us_max, tau_step_us)\n", + "# Convert to units of dt\n", + "taus_dt = taus_us * us / dt\n", + "num_pi_pulses = 6 # apply two pi pulses\n", + "print(f\"Total time ranges from {2.*num_pi_pulses*taus_us[0]} to {2.*num_pi_pulses*taus_us[-1]} us\")" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [], + "source": [ + "T2DD_schedules = []\n", + "for delay in taus_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T2DD delay = {delay * dt/us} us\")\n", + " this_schedule |= x90_pulse(drive_chan)\n", + " this_schedule |= pi_pulse(drive_chan) << int(this_schedule.duration + delay)\n", + "\n", + " for _ in range(num_pi_pulses - 1):\n", + " this_schedule |= pi_pulse(drive_chan) << int(this_schedule.duration + 2*delay)\n", + "\n", + " this_schedule |= x90_pulse(drive_chan) << int(this_schedule.duration + delay)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + " \n", + " T2DD_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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9nWv67l9bKbnp5/cSNLXvvZV/ezrXucitFnnOjd5eu6wruzITWexrqsP33abXvqSK/TSl1yhf/7nO4/8fMuWLbrhhpdr+fKLdfPb36Zt27b11ZfP9zscv25z6L3IMsb8jKRLJS2X9FJJHzDGLJp8+E8kfTpJknMlPSPpV1wWWS79v3/xFzr//Bc67a9SqeTmBW96fvrNzb59+1SpVFyENutc50bKz3OHdWVHbjqLcV1985vf1I9+tEoPrnxId99zr/78s5/VwYMHJUl/8OHbdOutt2rVqh9pyZIl+v/++q+dFlmYHUGLLGPMFcaYx4wxc4wx840xa5QWWPclSVJPkuSwpB9Jeo0xxkh6haRWqf+3kl5v+9vvefe79Ru//j69+lWv1CXLl+s//uM/JElfuuMOvf/9v3Xk937ngx/UihX3H9P28OHDetMb36irr7rymE8XP/zhD/Xa17xa1193rV7/+p/Trl27tHXrVl126SV69y236KorX6q3/vIvqVQq6adf+xr94Ac/sI792cuepd/73d/Vdddeo9f9l5/R3j17JOmYdmN79+rCC140o+0DD6zQNVdfpWuuvkrXXnO1Dh06JEn67Gc+o5e97HpddeVL9fGP/5G175DIjx25sSM3duSms1jz82u/dquuuvKlKpfLOnz4sF5yxeX60Y9W6Zprr9XQ0JDmz5+vCy+8SHfd9W0lSaL77rtPr3/9GyRJ/9d//SWtWLHCGnuo9zv457TISpLke5K+LumPJH1S0h2SHpH0WmPMPGPMKZJukHSmpKWS9idJUp9s/hNJZ3T6+1u3bdN/fPM/9eU779Rv/savH/mCzG7uuuvbevazn62VDz2sR777Pd100ytVq9X0gd/+bd1++x26f8UDeutb36qPfuQjkqQnnnhC73jHO/TQw49o4cJF+uIXvtC1j8OHD+vi5cu14oEHdc211+oT//MTxxWbJP35Z/9cf/Znn9KDKx/SN//zW5o7d66+853v6MknN+ree+/Tgysf0qofrtKDD/R2Q4Br5MeO3NiRGzty01mM+Xl619O66KKL9LGPflS33fb7estbflGXX36Fvv2tb6tUKmls716tWHG/dvxkh/aNjWnxkiUaGkovgz7jjDO0d++ejjGEer+DXz5OF35U0islXS7pk0mSfEvSv0taKekfJD0kqS6p3RXuHW91/Pk3/LwK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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T2DD_schedules[0].draw(channels_to_plot=[drive_chan, meas_chan], label=True, scaling=1.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "num_shots_per_point = 1024\n", + "\n", + "T2DD_experiment = assemble(T2DD_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: precise_qubit_freq}]\n", + " * len(T2DD_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(T2DD_experiment)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "T2DD_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "times_us = 2.*num_pi_pulses*taus_us\n", + "DD_values = []\n", + "for i in range(len(taus_us)):\n", + " DD_values.append(T2DD_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "plt.scatter(times_us, DD_values, color='black')\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.xlabel('Total time before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Dynamical Decoupling Experiment', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fit the data\n", + "fit_func = lambda x, A, B, T2DD: (A * np.exp(-x / T2DD) + B)\n", + "fitparams, conv = curve_fit(fit_func, times_us, DD_values, [3.5, 0.8, 150])\n", + "\n", + "_, _, T2DD = fitparams\n", + "plt.scatter(times_us, DD_values, color='black')\n", + "plt.plot(times_us, fit_func(times_us, *fitparams), color='red', label=f\"T2DD = {T2DD:.2f} us\")\n", + "plt.xlim([0, np.max(times_us)])\n", + "plt.xlabel('Total time before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Dynamical Decoupling Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Part 4. References " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. H. Abraham, I. Y. Akhalwaya, G. Aleksandrowicz, T. Alexander, G. Alexandrowics, E. Arbel, A. Asfaw, C. Azaustre, P. Barkoutsos, G. Barron, L. Bello, Y. Ben-Haim, L. S. Bishop, S. Bosch, D. Bucher, CZ, F. Cabrera, P. Calpin, L. Capelluto, J. Carballo, C.-F. Chen, A. Chen, R. Chen, J. M. Chow, C. Claus, A. W. Cross, A. J. Cross, J. Cruz- Benito, C. Culver, A. D. C ́orcoles-Gonzales, S. Dague, M. Dartiailh, A. R. Davila, D. Ding, E. Dumitrescu, K. Dumon, I. Duran, P. Eendebak, D. Egger, M. Everitt, P. M. Fern ́andez, A. Frisch, A. Fuhrer, J. Gacon, Gadi, B. G. Gago, J. M. Gambetta, L. Garcia, S. Garion, Gawel-Kus, L. Gil, J. Gomez-Mosquera, S. de la Puente Gonz ́alez, D. Green- berg,J.A.Gunnels,I.Haide,I.Hamamura,V.Havlicek,J.Hellmers,L􏰀.Herok,H.Horii, C. Howington, W. Hu, S. Hu, H. Imai, T. Imamichi, R. Iten, T. Itoko, A. Javadi-Abhari, Jessica, K. Johns, N. Kanazawa, A. Karazeev, P. Kassebaum, V. Krishnan, K. Kr- sulich, G. Kus, R. LaRose, R. Lambert, J. Latone, S. Lawrence, P. Liu, P. B. Z. Mac, Y. Maeng, A. Malyshev, J. Marecek, M. Marques, D. Mathews, A. Matsuo, D. T. Mc- Clure, C. McGarry, D. McKay, S. Meesala, A. Mezzacapo, R. Midha, Z. Minev, P. Mu- rali, J. Mu ̈ggenburg, D. Nadlinger, G. Nannicini, P. Nation, Y. Naveh, Nick-Singstock, P. Niroula, H. Norlen, L. J. O’Riordan, S. Oud, D. Padilha, H. Paik, S. Perriello, A. Phan, M. Pistoia, A. Pozas-iKerstjens, V. Prutyanov, J. P ́erez, Quintiii, R. Raymond, R. M.-C. Redondo, M. Reuter, D. M. Rodr ́ıguez, M. Ryu, M. Sandberg, N. Sathaye, B. Schmitt, C. Schnabel, T. L. Scholten, E. Schoute, I. F. Sertage, Y. Shi, A. Silva, Y. Siraichi, S. Sivarajah, J. A. Smolin, M. Soeken, D. Steenken, M. Stypulkoski, H. Takahashi, C. Taylor, P. Taylour, S. Thomas, M. Tillet, M. Tod, E. de la Torre, K. Trabing, M. Treinish, TrishaPe, W. Turner, Y. Vaknin, C. R. Valcarce, F. Varchon, D. Vogt- Lee, C. Vuillot, J. Weaver, R. Wieczorek, J. A. Wildstrom, R. Wille, E. Winston, J. J. Woehr, S. Woerner, R. Woo, C. J. Wood, R. Wood, S. Wood, J. Wootton, D. Yeralin, J. Yu, L. Zdanski, Zoufalc, azulehner, drholmie, fanizzamarco, kanejess, klinvill, merav aharoni, ordmoj, tigerjack, yang.luh, and yotamvakninibm, “Qiskit: An open-source framework for quantum computing,” 2019.\n", + "2. D. C. McKay, T. Alexander, L. Bello, M. J. Biercuk, L. Bishop, J. Chen, J. M. Chow, A. D. C ́orcoles, D. Egger, S. Filipp, J. Gomez, M. Hush, A. Javadi-Abhari, D. Moreda, P. Nation, B. Paulovicks, E. Winston, C. J. Wood, J. Wootton, and J. M. Gambetta, “Qiskit backend specifications for OpenQASM and OpenPulse experiments,” 2018." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

    Version Information

    Qiskit SoftwareVersion
    Qiskit0.15.0
    Terra0.12.0
    Aer0.4.0
    Ignis0.2.0
    Aqua0.6.4
    IBM Q Provider0.4.6
    System information
    Python3.7.3 (default, Mar 27 2019, 16:54:48) \n", + "[Clang 4.0.1 (tags/RELEASE_401/final)]
    OSDarwin
    CPUs8
    Memory (Gb)16.0
    Sun Feb 09 17:56:06 2020 EST
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "0072369eeca34ca7b4d53f0bfa666210": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "05f70e2217f44c4a9b7b82290ffd45c2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ed6185522fe54a8e840f8a67775a9914", + "IPY_MODEL_c98fdf244ff241ffa1707ade6fc300ad", + "IPY_MODEL_7f104f7daaa74420b1435400ba09b24f", + "IPY_MODEL_a84e82a6d25446c493261c5f594e0b85", + "IPY_MODEL_bf25f5e156bd4df8812027ed099c4990", + "IPY_MODEL_83418154ddf84da79041f08cc7fc1f5b" + ], + "layout": "IPY_MODEL_3b0ad54fdc364fa0813a02937f3224b9" + } + }, + "0ba2b3b50f45489f88664c1bab17fdfd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a7d40a3f2205411d825e0051ec1d6d20", + "placeholder": "​", + "style": "IPY_MODEL_362552ebd1d54a91b17880b2ad8adbe8", + "value": "5e3031f4edc73f0018347a31" + } + }, + "0c31954c302b43cc850905a2216297d4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "0c9049a0589b4be39c65bbe912ea1f3a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "0cf053bd101d42d1a2da777f1e39ab38": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4f8359aeaab3421e8edf6b2a92f4bc88", + "placeholder": "​", + "style": "IPY_MODEL_d8a151ecce6e46cbbd8a15f10ef2836c", + "value": "ibmq_armonk" + } + }, + "0d2fd76bb2f345e8aa46d1e3f30e9b2a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0e53a10a2f7e42129ea37fe3e20d4033": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_2b72abd763774677b10ddf0df161642f", + "style": "IPY_MODEL_923c0c24fcbb424e91ea976b36a12a16", + "tooltip": "" + } + }, + "0e5c407a5f9341a998277c81617f69fc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0f7cecfcead34ca7890404750b2c3bc1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "primary", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_8e7c184587ca45c7bedc4470a2efcea2", + "style": "IPY_MODEL_e809880aae1a4335a506dcb28f516c2c", + "tooltip": "" + } + }, + "1026e786fc1a4904a1b7dc6244141a16": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a992aaf40b764094aad7d17b18cb3b6a", + "placeholder": "​", + "style": "IPY_MODEL_ac626702f19e4d338f77f9be3e86203f", + "value": "ibmq_armonk" + } + }, + "1652b7f28b38450c81fd157f29bf3859": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "184e3f8938d34718aebf91a6e0b1a6fa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1da0bbdb49be441a9c67e16fa9f96215": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "21ac0dc341db471383ee2dd1311bf2ae": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "25b9ff1566564a5988f025061f14840a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "26fed3320922450ea927843c4448697a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "275812a657704fe1b0c9ee251f29d32f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4a0f9a5464744bc0b58c218d0b5bea63", + "placeholder": "​", + "style": "IPY_MODEL_e01b19aa405747d6a4c5693ab10b4a74", + "value": "ibmq_armonk" + } + }, + "276b1f365fbf48fc9616e4c9151ad622": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "292b60f194ee49eda998490c95c7701b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "299905bdeebf4bbf85327a94b5fdca50": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3303a3bc98d14474a0084b6444c742fc", + "placeholder": "​", + "style": "IPY_MODEL_71931abee214427faae02a7017295529", + "value": "
    Queue
    " + } + }, + "2b72abd763774677b10ddf0df161642f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "2cdec44aef4d4f8c8e4711ab0b89671d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cac849d7e0224e22a63adf3aab2967e6", + "IPY_MODEL_a0b7f2794e374a9f98b9619693df7109", + "IPY_MODEL_7702d69d119248e082f591284e4407fd", + "IPY_MODEL_374747abd3af4dbeb3e33c6be23a4640", + "IPY_MODEL_d8b43b9f310a46fda0cc05e0489d7a6e", + "IPY_MODEL_9c7bf08e4fa34ef9ab444ad55ef55f6d" + ], + "layout": "IPY_MODEL_f8b637ff93db401f9d37a1486619e378" + } + }, + "2ce16657ac5c40e6b3e22e15e15daaab": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2f1fa1f4bb1542478a025a1b495e9967": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8128858d616b42e1ad0e4100a0ca7f66", + "IPY_MODEL_9d8a1dbad754444091d9c42a108a21cc", + "IPY_MODEL_275812a657704fe1b0c9ee251f29d32f", + "IPY_MODEL_c294575334024b488fa60666ce74088f", + "IPY_MODEL_609cdb0d11334e0fbc41b0be1cab5929", + "IPY_MODEL_95416769f4dd4f1f9f3514303c0f3312" + ], + "layout": "IPY_MODEL_9dcd4a9b784f4a86b45c4adcece427b1" + } + }, + "308963ebf4044cbfa13ab95d3053169d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "3303a3bc98d14474a0084b6444c742fc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "362552ebd1d54a91b17880b2ad8adbe8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "370c8141be6d4a148c259635f894fa95": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "374747abd3af4dbeb3e33c6be23a4640": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_da776c1c4e434451adb5439d076c26d4", + "placeholder": "​", + "style": "IPY_MODEL_25b9ff1566564a5988f025061f14840a", + "value": "DONE" + } + }, + "3751030567db4416a85a45162a9de647": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "39838c73f17543148f729e226af66b20": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "3b0ad54fdc364fa0813a02937f3224b9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3e2f2c1f127c4a8dbeb3d32f53fef0e4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3ea74c3b02cb4818a547264c51565307": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3751030567db4416a85a45162a9de647", + "placeholder": "​", + "style": "IPY_MODEL_b52357c543c049a6949bb2bc2f9cfcb4", + "value": "
    Backend
    " + } + }, + "3f44fb7057b841a198335d488beb0830": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4239eae0a5104ed59cc4cb4b57c49244": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_bdcfe7686dbc4151a9df53fa21d29690", + "IPY_MODEL_e1765d9703254f2a906b3a297e486f97", + "IPY_MODEL_d73b3a4a18824d2ab8db39bc66ef1645", + "IPY_MODEL_4f82abc038484affabebc00baa2b0fc9", + "IPY_MODEL_776ff2060d4d409e81df86100e299a2a", + "IPY_MODEL_c671ffc82aed4712bab3380ccfda96eb" + ], + "layout": "IPY_MODEL_60e5f084532a4e98b498759eaf7f4b51" + } + }, + "43b57aab3c004b80831a5f05b363ab75": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "43bce01a01ba4020bdbea7e105f25c39": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "4444a0bc1ea24594aa6aef302a584422": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "GridBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "GridBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0f7cecfcead34ca7890404750b2c3bc1" + ], + "layout": "IPY_MODEL_795bd795f98649d8bf693c531706e969" + } + }, + "46071747da30418a89e7418c726f49ac": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "468bccb30bd14391a37c0b48fb5c4422": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "47438d487ad24a30a07057cbacbd0db1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "4a0f9a5464744bc0b58c218d0b5bea63": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "4b1c596b17d84fca99c400d8ec7e8c61": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4bdfc504bb9f40d08acd46ec19d965c8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "4e603261c7604d0995df361e014a5349": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8f97bdd62d06420ca6e9158fbb24697d", + "placeholder": "​", + "style": "IPY_MODEL_7652f9637278493f922a449e333f4885", + "value": "
    Status
    " + } + }, + "4f82abc038484affabebc00baa2b0fc9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cfd4aa67eaca47b397cb27fe039734fe", + "placeholder": "​", + "style": "IPY_MODEL_851b8ed5100c46ada618ab792e9bccbb", + "value": "DONE" + } + }, + "4f8359aeaab3421e8edf6b2a92f4bc88": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "505893c18d624338bb42e29f4f14b295": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_f7a58f868cfb452b938997e3b20c00a1", + "IPY_MODEL_be7258eb875b4cba86c9e5df686dd432", + "IPY_MODEL_1026e786fc1a4904a1b7dc6244141a16", + "IPY_MODEL_9643e3f79341486db5facada4c4fdeba", + "IPY_MODEL_e989c7bf8e3d4ca3aa1043d1a7191e22", + "IPY_MODEL_ee6abf7d838d4a58ac5780f61f3790f2" + ], + "layout": "IPY_MODEL_e79af0af85c2427e8c3b70c538c77a3f" + } + }, + "54cd496ad4f54638a2087920b7e15b7e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5a26eacd67e1462086729251bea5e26d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "601e3a43700548fd8de6dfdb69fceeb3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "609cdb0d11334e0fbc41b0be1cab5929": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_21ac0dc341db471383ee2dd1311bf2ae", + "placeholder": "​", + "style": "IPY_MODEL_54cd496ad4f54638a2087920b7e15b7e", + "value": "-" + } + }, + "60e5f084532a4e98b498759eaf7f4b51": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "61136d6ec4274d939bc36b21f4df5372": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_74bde2be52054fc1bc8ae357aaea8e55", + "style": "IPY_MODEL_0c31954c302b43cc850905a2216297d4", + "tooltip": "" + } + }, + "61d453f1b57d4a2b94c9cabd5800da54": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "61d773833d3248ada7ad61530fb293ec": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "62e04f75b68e48a89e339af3b5889cfe": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "64bb532fee004473b5defe4001a2ad7e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "64df55b9c9de4a64812deaba617ecee8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "66ef0d02c5a44ea6a26a4120713538a6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "6b8b721b7f2b47ea83c02806fa574e49": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "70215f1e749c4ee685f6172f3a384323": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dc9194eaaf9e44c582d11c43922d3257", + "placeholder": "​", + "style": "IPY_MODEL_43b57aab3c004b80831a5f05b363ab75", + "value": "ibmq_armonk" + } + }, + "7146ce9a76634b24a6ec2868416d2e47": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "71931abee214427faae02a7017295529": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "727371f455c848ee9daf472e8d1e5c5f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "74bde2be52054fc1bc8ae357aaea8e55": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "7652f9637278493f922a449e333f4885": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7702d69d119248e082f591284e4407fd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1da0bbdb49be441a9c67e16fa9f96215", + "placeholder": "​", + "style": "IPY_MODEL_84ea956ba9e844108970a0a0477b3d05", + "value": "ibmq_armonk" + } + }, + "776ff2060d4d409e81df86100e299a2a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dee26793296546658ee231188ecf5f75", + "placeholder": "​", + "style": "IPY_MODEL_0072369eeca34ca7b4d53f0bfa666210", + "value": "-" + } + }, + "779afbb4cd574842bc8726c73d554643": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "77b1580882394eb5850bff86f2d3cb1d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_94587c2f76124fa99abbc46e54ab3a15", + "IPY_MODEL_3ea74c3b02cb4818a547264c51565307", + "IPY_MODEL_4e603261c7604d0995df361e014a5349", + "IPY_MODEL_299905bdeebf4bbf85327a94b5fdca50", + "IPY_MODEL_c9ae41fee86d4f1b8e61ae41c4a57d29" + ], + "layout": "IPY_MODEL_fc6cf64062e44e26a84b5cd1dcac5535" + } + }, + "795bd795f98649d8bf693c531706e969": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "7a93a8049d13499bb9a85a00a50524ae": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f5e05b385ed147f88d16958547683376", + "placeholder": "​", + "style": "IPY_MODEL_8879ed3c906f480991f35b6da2465e32", + "value": "job has successfully run" + } + }, + "7ea31ceabbf64fa5acda51ad2c0b8440": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7eb065db44c84f1a94d900530913a843": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "7f104f7daaa74420b1435400ba09b24f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9dc2e632d17c43b7aeda0a799a055378", + "placeholder": "​", + "style": "IPY_MODEL_a3685fb023ff468d9d8aaf1c5b810507", + "value": "ibmq_armonk" + } + }, + "8128858d616b42e1ad0e4100a0ca7f66": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_1652b7f28b38450c81fd157f29bf3859", + "style": "IPY_MODEL_47438d487ad24a30a07057cbacbd0db1", + "tooltip": "" + } + }, + "83418154ddf84da79041f08cc7fc1f5b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cdc385656b81422a96674c1fb9a79a74", + "placeholder": "​", + "style": "IPY_MODEL_292b60f194ee49eda998490c95c7701b", + "value": "job has successfully run" + } + }, + "84ea956ba9e844108970a0a0477b3d05": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "851b8ed5100c46ada618ab792e9bccbb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8879ed3c906f480991f35b6da2465e32": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8e7c184587ca45c7bedc4470a2efcea2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": "right", + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 0px", + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "8f97bdd62d06420ca6e9158fbb24697d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "90d83b3b8f6e4c65b0512b3c9e97a1f7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "91818e6b81b845deb2e692863779294f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_61136d6ec4274d939bc36b21f4df5372", + "IPY_MODEL_0ba2b3b50f45489f88664c1bab17fdfd", + "IPY_MODEL_0cf053bd101d42d1a2da777f1e39ab38", + "IPY_MODEL_fcce710109934594b0455acb89df7c66", + "IPY_MODEL_d6dd048855044abdabdd7f24175a75cc", + "IPY_MODEL_ba6fcd144c4f461ea3dba2b8073baf33" + ], + "layout": "IPY_MODEL_d1a40a95dbe34a7ea8ee803725fa2826" + } + }, + "923c0c24fcbb424e91ea976b36a12a16": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "9276fe323a894ea0a87dfd1e3c3baa03": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "30px" + } + }, + "92ba820ecc0345b2a0719c13ee1d6f43": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_64df55b9c9de4a64812deaba617ecee8", + "placeholder": "​", + "style": "IPY_MODEL_3e2f2c1f127c4a8dbeb3d32f53fef0e4", + "value": "DONE" + } + }, + "93bbf77e7e344a94a12c3946de86ca18": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "94587c2f76124fa99abbc46e54ab3a15": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_fa4251a15e2a4863b92bdcdd9e104f4d", + "placeholder": "​", + "style": "IPY_MODEL_90d83b3b8f6e4c65b0512b3c9e97a1f7", + "value": "
    Job ID
    " + } + }, + "95416769f4dd4f1f9f3514303c0f3312": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a91e64b7e7bb418099c87e5b3f9f23cb", + "placeholder": "​", + "style": "IPY_MODEL_7ea31ceabbf64fa5acda51ad2c0b8440", + "value": "job has successfully run" + } + }, + "9643e3f79341486db5facada4c4fdeba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_26fed3320922450ea927843c4448697a", + "placeholder": "​", + "style": "IPY_MODEL_370c8141be6d4a148c259635f894fa95", + "value": "DONE" + } + }, + "98da9cab80ad4cbebfd49067b25c8383": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "9ba4aa3e00eb4c09808d6a30d43ae59c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "9c7bf08e4fa34ef9ab444ad55ef55f6d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0e5c407a5f9341a998277c81617f69fc", + "placeholder": "​", + "style": "IPY_MODEL_276b1f365fbf48fc9616e4c9151ad622", + "value": "job has successfully run" + } + }, + "9d8a1dbad754444091d9c42a108a21cc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d050f2a254f64edba7492fb491b63546", + "placeholder": "​", + "style": "IPY_MODEL_f9ae9fdbd514450486e2f751116fa2d5", + "value": "5e30316fedc73f0018347a2e" + } + }, + "9dc2e632d17c43b7aeda0a799a055378": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "9dcd4a9b784f4a86b45c4adcece427b1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a03124250b954f27aa8a923af5609cc8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a0b7f2794e374a9f98b9619693df7109": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4bdfc504bb9f40d08acd46ec19d965c8", + "placeholder": "​", + "style": "IPY_MODEL_61d773833d3248ada7ad61530fb293ec", + "value": "5e30323aafc86d0019e41aef" + } + }, + "a3685fb023ff468d9d8aaf1c5b810507": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a50f69fed3704c189f3015a223e9beea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a7d40a3f2205411d825e0051ec1d6d20": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "a84e82a6d25446c493261c5f594e0b85": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_601e3a43700548fd8de6dfdb69fceeb3", + "placeholder": "​", + "style": "IPY_MODEL_e79395c24c204dd0a255706588e8bc3f", + "value": "DONE" + } + }, + "a864e96beb374153adf9d15255081f26": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a91e64b7e7bb418099c87e5b3f9f23cb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a992aaf40b764094aad7d17b18cb3b6a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "aa97152aa91543a1af0deabfb160eb5d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "aadb1295cb554b16b67447cd69e5b0b4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "ac626702f19e4d338f77f9be3e86203f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "af7a4a15d0494ff38d443a65844dd8d8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b52357c543c049a6949bb2bc2f9cfcb4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b6cba26bd9714980b1b5577ceeb3fa7d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "ba6fcd144c4f461ea3dba2b8073baf33": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7146ce9a76634b24a6ec2868416d2e47", + "placeholder": "​", + "style": "IPY_MODEL_6b8b721b7f2b47ea83c02806fa574e49", + "value": "job has successfully run" + } + }, + "bdcfe7686dbc4151a9df53fa21d29690": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_46071747da30418a89e7418c726f49ac", + "style": "IPY_MODEL_7eb065db44c84f1a94d900530913a843", + "tooltip": "" + } + }, + "be7258eb875b4cba86c9e5df686dd432": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aa97152aa91543a1af0deabfb160eb5d", + "placeholder": "​", + "style": "IPY_MODEL_0d2fd76bb2f345e8aa46d1e3f30e9b2a", + "value": "5e3030a27059370018777243" + } + }, + "bf25f5e156bd4df8812027ed099c4990": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_64bb532fee004473b5defe4001a2ad7e", + "placeholder": "​", + "style": "IPY_MODEL_e0452d96a1b0417896771bbc5cf3adb5", + "value": "-" + } + }, + "c00e8fd6f9b64e50a6694c4f008d1b6e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c294575334024b488fa60666ce74088f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_308963ebf4044cbfa13ab95d3053169d", + "placeholder": "​", + "style": "IPY_MODEL_af7a4a15d0494ff38d443a65844dd8d8", + "value": "DONE" + } + }, + "c49cd261f6af4937b387f898aac7eaac": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0c9049a0589b4be39c65bbe912ea1f3a", + "placeholder": "​", + "style": "IPY_MODEL_e42353a4b10b41ed8b58ab2dc7995d9b", + "value": "5e3031b283720900188c512d" + } + }, + "c671ffc82aed4712bab3380ccfda96eb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_727371f455c848ee9daf472e8d1e5c5f", + "placeholder": "​", + "style": "IPY_MODEL_e2264914e7ae48a7944e4c65a0ad5f41", + "value": "job has successfully run" + } + }, + "c78ea793c8984e79a6a02bb8cd52881d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_66ef0d02c5a44ea6a26a4120713538a6", + "placeholder": "​", + "style": "IPY_MODEL_a03124250b954f27aa8a923af5609cc8", + "value": "-" + } + }, + "c98fdf244ff241ffa1707ade6fc300ad": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_eccd6fa2c89a46188d715238fc4fc210", + "placeholder": "​", + "style": "IPY_MODEL_3f44fb7057b841a198335d488beb0830", + "value": "5e3030f183720900188c512c" + } + }, + "c9ae41fee86d4f1b8e61ae41c4a57d29": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a864e96beb374153adf9d15255081f26", + "placeholder": "​", + "style": "IPY_MODEL_5a26eacd67e1462086729251bea5e26d", + "value": "
    Message
    " + } + }, + "cac849d7e0224e22a63adf3aab2967e6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_43bce01a01ba4020bdbea7e105f25c39", + "style": "IPY_MODEL_39838c73f17543148f729e226af66b20", + "tooltip": "" + } + }, + "cd2c296042f44d60972ece6a31e9c4a4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cdc385656b81422a96674c1fb9a79a74": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cfd4aa67eaca47b397cb27fe039734fe": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "d050f2a254f64edba7492fb491b63546": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "d1a40a95dbe34a7ea8ee803725fa2826": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d6dd048855044abdabdd7f24175a75cc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aadb1295cb554b16b67447cd69e5b0b4", + "placeholder": "​", + "style": "IPY_MODEL_a50f69fed3704c189f3015a223e9beea", + "value": "-" + } + }, + "d73b3a4a18824d2ab8db39bc66ef1645": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f85c9be6272a45cfbec70fd8d123c0f6", + "placeholder": "​", + "style": "IPY_MODEL_2ce16657ac5c40e6b3e22e15e15daaab", + "value": "ibmq_armonk" + } + }, + "d8a151ecce6e46cbbd8a15f10ef2836c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d8b43b9f310a46fda0cc05e0489d7a6e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_468bccb30bd14391a37c0b48fb5c4422", + "placeholder": "​", + "style": "IPY_MODEL_c00e8fd6f9b64e50a6694c4f008d1b6e", + "value": "-" + } + }, + "d9cc60ac6ba943a0b1da6afe2a62335e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "da776c1c4e434451adb5439d076c26d4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "dc9194eaaf9e44c582d11c43922d3257": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "dee26793296546658ee231188ecf5f75": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "e01b19aa405747d6a4c5693ab10b4a74": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e0452d96a1b0417896771bbc5cf3adb5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e1765d9703254f2a906b3a297e486f97": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e2fa7accb3a248d49f3cac01020914f8", + "placeholder": "​", + "style": "IPY_MODEL_61d453f1b57d4a2b94c9cabd5800da54", + "value": "5e3031547059370018777244" + } + }, + "e2264914e7ae48a7944e4c65a0ad5f41": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e2fa7accb3a248d49f3cac01020914f8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "e42353a4b10b41ed8b58ab2dc7995d9b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e79395c24c204dd0a255706588e8bc3f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e79af0af85c2427e8c3b70c538c77a3f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e809880aae1a4335a506dcb28f516c2c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "e989c7bf8e3d4ca3aa1043d1a7191e22": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_779afbb4cd574842bc8726c73d554643", + "placeholder": "​", + "style": "IPY_MODEL_9ba4aa3e00eb4c09808d6a30d43ae59c", + "value": "-" + } + }, + "eccd6fa2c89a46188d715238fc4fc210": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "ed6185522fe54a8e840f8a67775a9914": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_9276fe323a894ea0a87dfd1e3c3baa03", + "style": "IPY_MODEL_b6cba26bd9714980b1b5577ceeb3fa7d", + "tooltip": "" + } + }, + "ee6abf7d838d4a58ac5780f61f3790f2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cd2c296042f44d60972ece6a31e9c4a4", + "placeholder": "​", + "style": "IPY_MODEL_93bbf77e7e344a94a12c3946de86ca18", + "value": "job has successfully run" + } + }, + "f3c98b6859fa4f06aee98c24b37ba638": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0e53a10a2f7e42129ea37fe3e20d4033", + "IPY_MODEL_c49cd261f6af4937b387f898aac7eaac", + "IPY_MODEL_70215f1e749c4ee685f6172f3a384323", + "IPY_MODEL_92ba820ecc0345b2a0719c13ee1d6f43", + "IPY_MODEL_c78ea793c8984e79a6a02bb8cd52881d", + "IPY_MODEL_7a93a8049d13499bb9a85a00a50524ae" + ], + "layout": "IPY_MODEL_4b1c596b17d84fca99c400d8ec7e8c61" + } + }, + "f5e05b385ed147f88d16958547683376": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f7a58f868cfb452b938997e3b20c00a1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_62e04f75b68e48a89e339af3b5889cfe", + "style": "IPY_MODEL_d9cc60ac6ba943a0b1da6afe2a62335e", + "tooltip": "" + } + }, + "f85c9be6272a45cfbec70fd8d123c0f6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "f8b637ff93db401f9d37a1486619e378": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f9ae9fdbd514450486e2f751116fa2d5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fa4251a15e2a4863b92bdcdd9e104f4d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "fc6cf64062e44e26a84b5cd1dcac5535": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 0px 0px 35px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "600px" + } + }, + "fcce710109934594b0455acb89df7c66": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_98da9cab80ad4cbebfd49067b25c8383", + "placeholder": "​", + "style": "IPY_MODEL_184e3f8938d34718aebf91a6e0b1a6fa", + "value": "DONE" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/calibrating-qubits-pulse.ipynb b/translations/ja/ch-quantum-hardware/calibrating-qubits-pulse.ipynb new file mode 100644 index 0000000..a84ba6d --- /dev/null +++ b/translations/ja/ch-quantum-hardware/calibrating-qubits-pulse.ipynb @@ -0,0 +1,7190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# Qiskit Pulseで量子ビットを較正する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitは量子コンピューティングのオープンソース化されたフレームワークです(参照 [1](#refs))。Qiskitを使用して、量子回路を構築し、シミュレーションし、量子デバイス上で実行することが可能です。\n", + "\n", + "Qiskit Pulseは、特定のハードウェアに依存しない一般の量子デバイスに対してパルスレベルの制御(例: 入力シグナルの連続時間ダイナミクスの制御)を指定する言語を提供します(参照 [2](#refs))。\n", + "\n", + "このチュートリアルでは、QiskitとQiskit Pulseを使った単一量子ビットのキャリブレーションと特性評価実験の実装について説明します。これらは通常、デバイスが製造されシステムに取り付けられた直後にラボで行われる最初の実験です。このチュートリアルは教育的であり、学生は二準位系のダイナミクスを実験的に調べることに使えます。すべての単位は標準SI系(つまり、Hz、秒など)です。\n", + "\n", + "それぞれの実験でシステムに関する詳細情報を取得し、通常、それを後続の実験で使用します。そのため、このnotebookは基本的に順番に実行する必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [はじめに](#importing)\n", + "2. [周波数スイープを使った量子ビット周波数の探索](#frequencysweep)\n", + "3. [較正と$\\pi$パルスの利用](#calib) \n", + " 3.1 [ラビ実験を使った$\\pi$パルスの較正](#rabi) \n", + " 3.2 [0か1の決定](#zerovone) \n", + " 3.3 [反転回復法を使った$T_1$の測定](#T1) \n", + "4. [量子ビットコヒーレンスの決定](#det_co) \n", + " 4.1 [ラムゼイ実験を使った正確な量子ビット周波数の測定](#ramsey) \n", + " 4.2 [ハーンエコーを使った$T_2$の測定](#hahn) \n", + "5. [参考文献](#refs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. はじめに \n", + "\n", + "最初の準備として基本的な依存関係を設定します。このnotebookでのキャリブレーション実験には現実のノイズの多いデバイスを使用するため、IBMQアカウントをロードして適切なバックエンドを設定する必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "from qiskit.tools.jupyter import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dsche/.local/lib/python3.8/site-packages/qiskit/providers/ibmq/ibmqfactory.py:192: UserWarning: Timestamps in IBMQ backend properties, jobs, and job results are all now in local time instead of UTC.\n", + " warnings.warn('Timestamps in IBMQ backend properties, jobs, and job results '\n" + ] + } + ], + "source": [ + "from qiskit import IBMQ\n", + "IBMQ.load_account()\n", + "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", + "backend = provider.get_backend('ibmq_armonk')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "バックエンドがPulse機能をサポートしていることを確認するため、バックエンドの構成をチェックします。この構成を確認することで、バックエンドのセットアップ構造に関する一般情報を知ることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "backend_config = backend.configuration()\n", + "assert backend_config.open_pulse, \"Backend doesn't support Pulse\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "例えば、バックエンド構成内のバックエンド・パルスのサンプリング時間を見つけることができます。これは、キャリブレーションルーチンを構築して実行するときに非常に有用な値になります。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sampling time: 0.2222222222222222 ns\n" + ] + } + ], + "source": [ + "dt = backend_config.dt\n", + "print(f\"Sampling time: {dt*1e9} ns\") # dtを秒の単位で返すので\n", + " # 1e9をかけてナノ秒を得ます" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "バックエンドの使い方を学ぶにはバックエンドのデフォルト値を知ることから始まります。バックエンドのデフォルト値には基本的な量子演算子を実行するための量子ビット周波数とデフォルトプログラムの推定値が含まれています。次の方法でそれらにアクセスできます:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "backend_defaults = backend.defaults()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 周波数スイープを使った量子ビット周波数の探索 \n", + "\n", + "まずは量子ビット周波数を探すことから始めます。量子ビット周波数は基底状態と励起状態間のエネルギーの差であり、それぞれ$\\vert0\\rangle$と$\\vert1\\rangle$の状態としてラベル付けします。この周波数は、量子ビットに特定の量子演算子を実行するためのパルスを作成するのに重要で、この周波数を求めることがキャリブレーションの最終目標です!\n", + "\n", + "超伝導量子ビットでは、より高いエネルギー準位も利用できますが、どの遷移を励起するかを制御できるようにシステムを非調和に作ります。このようにして、2つのエネルギー準位を分離し各量子ビットを基本的な二準位系として扱う事で、より高いエネルギー状態を無視することができます。\n", + "\n", + "一般的な実験室の設定は、ネットワーク・アナライザーと呼ばれるツールを使用して特定の範囲の周波数をスイープし、吸収のサインを探すことで量子ビット周波数を見つけることができます。この測定により、量子ビット周波数の大まかな推定値が得られます。後半で、ラムゼイ・パルスシーケンスを使用してより正確な測定を行う方法について説明します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "まず、量子ビットを探すためスイープする周波数範囲を定義します。この範囲は任意に広げられるので、`backend_defaults`を使って推定量子ビット周波数の周りの40MHzの幅に制限します。そして1MHz単位で周波数を変更します。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Qubit 0 has an estimated frequency of 4.974445646137273 GHz.\n", + "The sweep will go from 4.954445646137273 GHz to 4.994445646137273 GHz in steps of 1.0 MHz.\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "# 単位変換係数 -> バックエンドプロパティはSI系(Hz、秒)で返されるため\n", + "GHz = 1.0e9 # Gigahertz\n", + "MHz = 1.0e6 # Megahertz\n", + "us = 1.0e-6 # Microseconds\n", + "ns = 1.0e-9 # Nanoseconds\n", + "\n", + "# 以下の量子ビットについて量子ビット周波数を探索する\n", + "qubit = 0\n", + "\n", + "# デフォルトの推定周波数を中心値としてスイープを行う\n", + "center_frequency_Hz = backend_defaults.qubit_freq_est[qubit] # デフォルト周波数はHzで与えられる\n", + " # 注意:これは将来のリリースで変更予定\n", + "print(f\"Qubit {qubit} has an estimated frequency of {center_frequency_Hz / GHz} GHz.\")\n", + "\n", + "# データを見やすくするスケーリング\n", + "scale_factor = 1e-14\n", + "\n", + "# 推定周波数を中心に40MHzのスパンでスイープする\n", + "frequency_span_Hz = 40 * MHz\n", + "# 1MHzの単位で\n", + "frequency_step_Hz = 1 * MHz\n", + "\n", + "# 推定周波数より20 MHz高く、20 MHz低くスイープ\n", + "frequency_min = center_frequency_Hz - frequency_span_Hz / 2\n", + "frequency_max = center_frequency_Hz + frequency_span_Hz / 2\n", + "# 実験のために周波数のnp配列をGHz単位で作成\n", + "frequencies_GHz = np.arange(frequency_min / GHz, \n", + " frequency_max / GHz, \n", + " frequency_step_Hz / GHz)\n", + "\n", + "print(f\"The sweep will go from {frequency_min / GHz} GHz to {frequency_max / GHz} GHz \\\n", + "in steps of {frequency_step_Hz / MHz} MHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、実験に使用するパルスを定義します。ガウシアン・パルスである駆動パルスから始めます。\n", + "\n", + "先述の`dt`の値を覚えていますか?パルスの持続時間は`dt`で与えられます。次のセルでは、駆動パルスの長さを`dt`で定義します。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# サンプル数は16の倍数である必要があります\n", + "def get_closest_multiple_of_16(num):\n", + " return int(num + 8 ) - (int(num + 8 ) % 16)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "from qiskit import pulse # これで、Pulseのすべての機能にアクセスできます。\n", + "from qiskit.pulse import Play\n", + "from qiskit.pulse import pulse_lib # このPulseモジュールは、一般的なパルス形状のサンプルパルスを構築するのに役立ちます\n", + "\n", + "\n", + "# 駆動パルスのパラメーター (us = マイクロ秒)\n", + "drive_sigma_us = 0.075 # ガウシアンの実際の幅を決定\n", + "drive_samples_us = drive_sigma_us*8 # 切り捨てパラメーター。sigmaの8倍の長さでカットする。\n", + " # ガウシアンには自然な有限長がないためです。\n", + "\n", + "drive_sigma = get_closest_multiple_of_16(drive_sigma_us * us /dt) # dt単位でのガウシアンの幅\n", + "drive_samples = get_closest_multiple_of_16(drive_samples_us * us /dt) # dt単位での切り捨てパラメーター\n", + "drive_amp = 0.3\n", + "# 駆動パルスを構築\n", + "drive_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " sigma=drive_sigma,\n", + " amp=drive_amp,\n", + " name='freq_sweep_excitation_pulse')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットを適切に測定するには、測定マップを確認する必要があります。ハードウェアの制約の確認です。1つの量子ビットに対して取得されると、残りの量子ビットに対しても行われます。 Pulseでプログラムをビルドするときは、この制約を尊重する必要があります。私たちの量子ビットが入っている量子ビットのグループをチェックしましょう:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# この量子ビットに必要な測定マップインデックスを見つける\n", + "meas_map_idx = None\n", + "for i, measure_group in enumerate(backend_config.meas_map):\n", + " if qubit in measure_group:\n", + " meas_map_idx = i\n", + " break\n", + "assert meas_map_idx is not None, f\"Couldn't find qubit {qubit} in the meas_map!\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、測定パルスを定義します。パルスをハードコーディングするのではなく、バックエンドのデフォルトの命令スケジュールマップからキャリブレーション済みの測定パルスを取得できます。頻繁にキャリブレーションされるため、測定パルスを自分で定義するよりも正確です。この測定パルスには取得チャネルも含まれるため、取得チャネルは手動で追加する必要はありません。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "inst_sched_map = backend_defaults.instruction_schedule_map\n", + "measure = inst_sched_map.get('measure', qubits=backend_config.meas_map[meas_map_idx])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、パルスを適用するチャネルを指定します。駆動、測定、取得チャネルは、量子ビットのIDによってインデックス化されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "### 必要なチャネルを集める\n", + "drive_chan = pulse.DriveChannel(qubit)\n", + "meas_chan = pulse.MeasureChannel(qubit)\n", + "acq_chan = pulse.AcquireChannel(qubit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "パルスパラメータが定義され、実験用のパルス形状が作成されたので、パルススケジュールの作成に進むことができます。\n", + "\n", + "各周波数で、その周波数の駆動パルスを量子ビットに送信し、そのパルスの直後に測定します。 パルスエンベロープは周波数に依存しないため、再利用可能な`schedule`を作成し、周波数構成配列でドライブパルス周波数を指定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 基本のスケジュールを作成\n", + "# 駆動パルスを駆動チャネルで動かすことから開始\n", + "schedule = pulse.Schedule(name='Frequency sweep')\n", + "schedule += Play(drive_pulse, drive_chan)\n", + "# `<<` は、スケジュールの開始時刻をある期間だけシフトすることを意味する特別な構文です\n", + "schedule += measure << schedule.duration\n", + "\n", + "# スイープする周波数を設定(Hz単位で)\n", + "frequencies_Hz = frequencies_GHz*GHz\n", + "schedule_frequencies = [{drive_chan: freq} for freq in frequencies_Hz]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "健全性チェックとして、常にパルススケジュールを確認することをお勧めします。 これは、以下のように`schedule.draw()`を使って行われます。" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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07dIyI4zLJ0d0U/S62/dUPJRuDnqCgUAAABg7xFusiN6W7wA0GiI+9y8cBMAAABgrxJusiPuW0xoa9qz+/0Snd4AAAAAe5twk201CiBHq5ufsm/rEsnuFneDAgA02ev+8A9z2qmH8opXvHzSpQAA7BjhJttqZm7wOAoiD0xv/pwHhwHpVg91BwAAAKBZrJbOtrpruOBPtz/Ybm1BnH5wX83RuZKFfsmB1PRr0jL1JgCwx73ghS/ME5/4xJxxxhmTLgUAYMcIN9lWd88M0sytHEK+f9j9OercvHc2OfXA1p0fAKCJ7ne/++V+97vfpMsAANhRhqWzrUYB5GjOza0w6tIcdYPefdRtDABszpvf/Ob8l+/8zlzyhMfnIQ9+UM4+64F56hc/Ja/8xV/M3Nzcise8973vzTd/8zflMY9+VM484wF51CPPywtf8Py89jWvOea1H/3oR/Lv/92/y8Meek4e/KCz8xX/5tn5h3/4h7z97W/Laaceynd8+7cve/3znvucnHbqoVx//fXHnOv666/PaaceyvOe+5xl+1ebc/M7vv3bc9qph/L2t78t//iP/5jnP++5eeg5D8lppx7K4cOHF1/3D//wD3nR131dHnHuw3PmGQ/IY7/wovzQy16WO+64Y61vIwDAjpMKse36NanbsLL5qBv0nhlj0gGAzfmu/++/5K/+6i9z//s/IM9+9rPzxU99am66+eb89E//VF70dV+b3thk37/xG7+eZ3/5l+X//fmf5+yzz84Lv/Irc8EFF+QjH/lIfuzHfnTZa9///vfny571rPzN37wxD37wg/MVz3lOZmdn86Kv+9r8xV/8xY59jn/2+tfn6772a3Lv0aP58mc/O49/whNSyuD/o37ix388X/e1X5O3vOVf8qhHPTrPe97z0m538uu//mt51rO+NLfdduuO1QkAsB6GpW9Sp9POGWeemdZWTCZ5kloY/i7Q3uK3aNANWi0stIJWq5Uzzjxz2TYAsLpf/uVfybO+7Mty4MB9c93cc889ecl//s9585v/Nn/6p3+ab/iGb0iSXPav/5ofetnLcujQobzuj/4oz3zmly4e0+1280//9E+L27XWfMe3f1uOHDmSH3zZy/IjP3Jf8PnqV/9O/vv3fd8OfHYDr33ta/Oa1742X/d1L1q2/y/+4v/lVa/6X7ngggvyuj/645x33nmLtb/i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3lj+hiRpm+nTB/36+PHjNW7cOPX29mrNmjUDvj516tQB13X4g4YymWzhuleWviJJuuGGGzS2s2PQjxdeeEHW2kGfBwAAjI7jOOrp4Q+HtcYIZQAAAKBM5557rq677hf65fXX67OfPW/Uj2OMGfJrsdjw+hKCrs/dd99ds2fvttHbtqRSwy8OAACgDhFuAgAAAGWaMHGizjzzLH3ve1fqe9+7UltO2XLAbYLrXnn11UEfY926dVq7dq3a2tq02WabjbqWrfwOz/0POEBXXvm9UT8OAABAI2BZOgAAAFABZ59zjjo7O3XDr36l1994fcDX5+y5p9ra2rTwySe1ePHiAV+/9dbfSZL233//YXdpDuaQQw5RPB7X//vb35TL5Ub9OAAAAI2AcBMAAACogAkTJujMs85SJpPRb268ccDXx4wZo4+dfLI8z9PnPne+uru7C19btGiRvvud70iSzjrr02XVsdVWW+nkk0/W0qVLdeopnxx0yNFLL72k2277U1nPAwAAUA9Ylg4AAABUyDnnfEY/v/ZarV+/ftCvf+1rX9djjz6qe++5R7vvNlsHHXSQurt79MAD9yudTuusT39axx53XNl1XPGd72rpK6/otttu01133aXddttd07aepp7uHr34rxf1n5de0jvf+S4df/wJZT8XAABAmAg3AQAAgArZbLPN9On/+i9dcfnlg369s7NTd9z5N/3kJz/WH/7v/3THHXcolUppzz331OlnnKEPfvDEitTR1tamP/zhj7r11lt1y8036emnn9Hjjz+miRMnauutp+vDH/6w3v/+D1TkuQAAAMJkrLVh19CwjDHPbb319F2uvvpqHTh3rpLJZNglAZKkXC6n+fPmFY45PwEAAAAAqK5cLqc5e+yhV1995Xlr7a5h1xMV7LkJAAAAAAAAoCERbgIAAAAAAABoSISbAAAAAAAAABoSA4XKlEqltP3MmYrH42GXAhTE43FtP3NmyTEAAAAAAKieeDyuVCoVdhmRQ7hZpmQyoWnTpoVdBlAiFotxXgIAAAAAUEOxWEzJJFFbrbEsHQAAAAAAAEBDItwEAAAAAAAA0JAINwEAAAAAAAA0JDYCKFM2m9XixYs1Y8YMhragbriuqyVLlhSOOT8BAAAAAKgu13WVzWbDLiNy6NwsUy7n6LVly+R5XtilAAWe5+m1ZcsKH5yfAAAAAABU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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "schedule.draw(label=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の`schedules`と`schedule_frequencies`をQobjと呼ばれるプログラムオブジェクトにアセンブルし、量子デバイスに送信します。量子ビット応答の適切な推定値を得るために、各スケジュール(周波数スイープの各ポイント)を`num_shots_per_frequency`回繰り返すように要求します。\n", + "\n", + "測定設定も指定します。`meas_level=0`は生データ(ショットごとの複素数値の配列)を返し、`meas_level=1`はカーネルデータ(ショットごとに1つの複素数値)を返し、`meas_level=2`は分類されたデータ(ショットごとに0または1のビット)を返します。ラボにいて、0と1を分類するための識別器(discriminator)をまだキャリブレーションしていないと仮定して、`meas_level=1`を選択し、作業しているものを複製します。個々のショットではなく、結果の`'avg'`を求めます。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "scrolled": true, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dsche/.local/lib/python3.8/site-packages/qiskit/compiler/assemble.py:320: RuntimeWarning: Dynamic rep rates not supported on this backend. rep_time will be used instead of rep_delay.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "from qiskit import assemble\n", + "\n", + "num_shots_per_frequency = 1024\n", + "frequency_sweep_program = assemble(schedule,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_frequency,\n", + " schedule_los=schedule_frequencies)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "別のユニット変更警告が表示される場合がありますが、これは無視してかまいません。最後に、以下を使用して、アセンブルされたプログラムをバックエンドで実行できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "job = backend.run(frequency_sweep_program)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "後で結果を取り出すために`job_id`をプリントし、`job_monitor()`でジョブのステータスをモニターすると良いです。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# print(job.job_id())\n", + "from qiskit.tools.monitor import job_monitor\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ジョブが実行が完了したら、以下を使って結果を取得できます:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "frequency_sweep_results = job.result(timeout=120) # タイムアウトのパラメーターは120秒にセット" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果を抽出し、`matplotlib`を使ってプロットします:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "sweep_values = []\n", + "for i in range(len(frequency_sweep_results.results)):\n", + " # i番目の実験から結果を得る\n", + " res = frequency_sweep_results.get_memory(i)*scale_factor\n", + " # この実験から`qubit`の結果を得る\n", + " sweep_values.append(res[qubit])\n", + "\n", + "plt.scatter(frequencies_GHz, np.real(sweep_values), color='black') # スイープ値の実数部分をプロット\n", + "plt.xlim([min(frequencies_GHz), max(frequencies_GHz)])\n", + "plt.xlabel(\"Frequency [GHz]\")\n", + "plt.ylabel(\"Measured signal [a.u.]\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上に見られるように、中心付近のピークは量子ビット周波数の位置に対応しています。信号はパワーブロードニングを示しています。これは、中心周波数に近づくと、量子ビットを非共振に駆動できることを示しています。ピーク周波数の値を取得するために、値を共鳴応答曲線に適合させます。これは通常、ローレンツ分布の形です。" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "from scipy.optimize import curve_fit\n", + "\n", + "def fit_function(x_values, y_values, function, init_params):\n", + " fitparams, conv = curve_fit(function, x_values, y_values, init_params)\n", + " y_fit = function(x_values, *fitparams)\n", + " \n", + " return fitparams, y_fit" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "fit_params, y_fit = fit_function(frequencies_GHz,\n", + " np.real(sweep_values), \n", + " lambda x, A, q_freq, B, C: (A / np.pi) * (B / ((x - q_freq)**2 + B**2)) + C,\n", + " [-5, 4.975, 1, 3] # フィッティングの初期パラメーター\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(frequencies_GHz, np.real(sweep_values), color='black')\n", + "plt.plot(frequencies_GHz, y_fit, color='red')\n", + "plt.xlim([min(frequencies_GHz), max(frequencies_GHz)])\n", + "\n", + "plt.xlabel(\"Frequency [GHz]\")\n", + "plt.ylabel(\"Measured Signal [a.u.]\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We've updated our qubit frequency estimate from 4.97445 GHz to 4.97453 GHz.\n" + ] + } + ], + "source": [ + "A, rough_qubit_frequency, B, C = fit_params\n", + "rough_qubit_frequency = rough_qubit_frequency*GHz # 周波数の単位をHzからGHzへ\n", + "print(f\"We've updated our qubit frequency estimate from \"\n", + " f\"{round(backend_defaults.qubit_freq_est[qubit] / GHz, 5)} GHz to {round(rough_qubit_frequency/GHz, 5)} GHz.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. 較正と$\\pi$パルスの利用 \n", + "\n", + "### 3.1 ラビ実験を使った$\\pi$パルスの較正 \n", + "\n", + "量子ビットの周波数がわかったら、次のステップは、$\\pi$パルスの強度を決定することです。量子ビットを2レベルのシステムとして厳密に言うと、$\\pi$パルスとは、量子ビットを$\\vert0\\rangle$から$\\vert1\\rangle$に、またはその逆に変換するパルスです。これは、$X$ または$X180$ゲート、ビットフリップ演算子とも呼ばれます。前の周波数スイープ実験からこの遷移を駆動するためのマイクロ波周波数が既に分かっているため、$\\vert0\\rangle$から$\\vert1\\rangle$への$\\pi$回転を実現するのに必要な振幅を求めます。望ましい回転は、下の図のブロッホ球に示されています -- $\\pi$パルスは、ブロッホ球をスイープする角度から名前が付けられていることがわかります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "駆動パルスの振幅を少しずつ変化させ、量子ビットの状態を毎回測定します。量子ビットが$\\vert0\\rangle$から$\\vert1\\rangle$へ行ったり来たりすること、つまりラビ振動と一般に呼ばれれいる振動が見られることが予想されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# この実験では以下について前回の実験から得た値を用います:\n", + " # `qubit`,\n", + " # `measure`, and\n", + " # `rough_qubit_frequency`.\n", + "\n", + "# ラビ実験のパラメーター\n", + "num_rabi_points = 50\n", + "\n", + "# 駆動パルスの振幅値:0から0.75の間で等間隔に配置された50個の振幅\n", + "drive_amp_min = 0\n", + "drive_amp_max = 0.75\n", + "drive_amps = np.linspace(drive_amp_min, drive_amp_max, num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ラビ実験を構築:\n", + "# 量子ビット周波数において、毎回駆動パルスの振幅を変化させながら\n", + "# パルスを駆動し、その後測定する\n", + "rabi_schedules = []\n", + "for drive_amp in drive_amps:\n", + " rabi_pulse = pulse_lib.gaussian(duration=drive_samples, amp=drive_amp, \n", + " sigma=drive_sigma, name=f\"Rabi drive amplitude = {drive_amp}\")\n", + " this_schedule = pulse.Schedule(name=f\"Rabi drive amplitude = {drive_amp}\")\n", + " this_schedule += Play(rabi_pulse, drive_chan)\n", + " # 周波数スイープの実験で使った測定命令を再利用する\n", + " this_schedule += measure << this_schedule.duration\n", + " rabi_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "周波数スイープ実験の時と基本的に同じスケジュールに見えます。違いは、周波数を変化させているのではなく、駆動パルスの振幅を変化させる実験を実行していることです。" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAX1CAYAAADTYT4hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAABcSAAAXEgFnn9JSAAEAAElEQVR4nOzdeZxkZ10v/s9T1T1bJiGQAIEEEvYtLEJYA4igsigqAurFBbzuu3LvT3Hhyr1uqFxxxQWv4IKKiqIii6CyGAgQIEISwhJIQhKyk2WWnumqen5/nOpJT3fNTHd1V1ef6ff79apXd52qc+rbNadruj71fZ6n1FoDAAAAANAWnWkXAAAAAACwGkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCTAhpZSnlVLqkssrplDH0hpev9E1rFUp5azN8FwuquclI+p52rTqgTYqpVy+5Hfo3Svc7xUjfv/Ommy1W8O4/yYcf0opdyulPLuU8sOllJ8ppfxUKeV7SylfXkrZNe36ACBJZqZdAHD8KaVcnuTMVeyyN8ltSW5J8qkkH01yXpJ311oH610fAACHK6V0knxzkh9O8sQk5Qh3nSulvC3J/621nrdR9S01/JD2xRN8iPfUWp+2gjrOSvL5dX7su9Zab1znYwIcd4SawGZwwvByjyQPSfINw+1XllL+KM0fzXNTqg2A48AweHjJks3vrrW+e8OLgU2mlPKAJG9I8tgV3H1HkucleV4p5S+S/GCt9fZJ1jclddoFAHB0Qk1gM7t3kl9M8m2llG+rtX5k2gUB0FpnJfn5EdvfvbFlwOZSSnlSkrcmudMYu39bki8rpTy91nr9+lY2dR+ddgEAHJ1QE9goe5P0jnDb7iTdo+z74CTvKqU8tdb6iXWvDABgCyqlPCTJ25KcNOLmLyR5V5LPJdmV5P5JnpNmdM1iD0vyr6WUJ9Za90+w3KX2Jbl1HY6zLcnOEdv/ZA3HnE9T37hMvwSwAkJNYKN87dGG+JVS7pLkMUlekOTbs/yPy5OTvLWU8qBa61r+SAQA2PJKKduS/G2WB5r7k/xQkj+vtfaW7HPnJC9P8hNL9nlkkt9K8r2TqXa5WusPJvnBtR6nlPLnaTpOF/tQrfXiNRz2L2utL1nD/gCsgNXPgU2h1npzrfWdtdbvS/KIJB8fcbczkvzYxlbWfrXWsuTykmnX1Ha11tePeF7fPe26YCuotb5ixO/f5dOuC1rof6TpslxsT5Kn11pftzTQTJJa65dqrS/N6L/HvruU8sQJ1DkxpZSTknzjiJvW0qUJwAYRagKbTq31s0meleTaETf/WCnlSKtxAgBwDKWUE5P85IibXlZrPf9Y+9dafzvJ3y89bJL/sw7lbaRvSTO0frH9Sf56CrUAsEpCTWBTqrV+Mckvj7jp7mk6OQEAGM9L0kzts9h/JXnNKo7xQ0kOLtn2laWUh49f1ob7zhHb/r7Wuh5zdQIwYUJNYDP76yR1xPZzN7oQAIDjyHeM2PYHtdZRf3eNVGu9NsmbR9z07eMWtZFKKQ9O8oQRNxl6DtASFgoCNq1a6w2llM8nue+Sm05by3FLKbuSPDDJg5KcmmaC/H6SLyW5OclFtdZPreUxxqjpzDQLJd07zaqiNye5JsnHaq1XbmQtG6GUckKSJyU5Pc2/Zz/J9UkuTvLRWuuGr/pZStmZ5JwkD0hySpLtSW4f1vO+ja5nGkopD02zuu1dh5cDSW5Icy6ev1kX6SqlnJHkIWl+f+6UZqGx29L8Tl+TZsGHPRtYz2ySxw5rOjXNkMwb03RBfbTW2l/Fsc5Kc16ekea14aYkVyV5T6319vWtfOTjn5bmZ7lPkhPTrDR8TZrXyU9P+vEZXymlm+Rxaf7t7pnm7/4vJfl0kg9u5O/zcKjzOWle7++aO87lG5Jc7FzaWKWUe6b591jsYJI3jHG4P0nyTUu2fX1GD23fbP77iG2fT/IfG10IAOMRagKb3Q1ZHmqeupoDlFJmkjw9zTydT0uzQudRO9VLKTckeUeS/1trvXA1j7eKujpJXpxmsv1HHuFutZTywSR/kOTPVtNBsehxlu7zp9NaLKiU8pgkL0vynCyfw2rBTaWU1yf59VrrdevwmEt//vfUWp+26PYnJ3lpkmcn2THiEP+Y5LBQs5TykiSvW3K/rxi1WFAp5f5JPrNk88W11rNXUP5RlVL+Lc25vdiTa63nreIY56RZPfar04TMR3KglPKfSX6/1vqmVRe7joYh5jek+dmfmiaEPpp+KeXCJK9P8v9qrfvHfNx3J/nyxdtqrWXR7fdK8tNJvjXLVxNecFUp5TeS/M6oRTiGx+mm6aL60SSPOsJxDpRS/inJT652kZxhUPr5JZsPe10opTwvzSIiT0oTyo46zsfT/B787pF+lkkopbwiyc8v2XyfUc/D8LXkxUc53M+XUpYea5Rlxy+lPC3Lw4/vrLW+fgXHW2a9XquHQfTPJnlhmilbRpkrpfxjkl+ptf7Xah9jhXXsTPJ9SZ6X5IlJZo9y38vTdPz92nD6GSbrK0dsu2DMD0rel6SXw99XPrCUcq9a6xfGqm4DDF9nR3WUvn6cv7UAmA7Dz4HNrjti24oXCiqlvDTJF9MElD+R5Muyste+uyb5tiQfK6W8qZRy8kofc4V1nZHk/Wk6HI4UaCbNz/qENGHMu4cBWeuUUnaUUn4zyQeTvCBHDjSTJqD6H0k+WUoZtSLpetW0cxh4vC/Nm+5RgeaaDRe+Wtrp+bBSymPXctxhMPUVSzZ/aqWBZinl/qWUNyX5cJo5xY4WaCZN5+ozkvxdKeWCUsrRztuJKKWcXkp5X5Irk/xOmn+3YwWaSfM68pjhPldM4rwaBt2XJPmBHDnQTJqOy99I8r5Syl1HHOe+ueO14VFHOc72NKHVJcMAcl2UUu5USnlLmgVAzs3RX28fkeTVST46/MCCKSulfE+STyb54Rw50Eya17tvTvKRUsovrOcCfKXx/UkuS3N+PDVHCTSHzkry40kuK6X8n+GHfkzO40ds+89xDjTs+P3YiJseN87xNtCzs3zkzyDN31sAtIQ/GIDNbtSbsptXsf9Ts8rOzhG+McmHSyn3W+Nxkhzq5vpARr+pOJqnpglCHrwedWyUUsqONB04P5bRIfWR3DlNgDZqEv+11rQrybty9A6u9TRqfq61/lwvzvLAaWn36EillGekCTPHDfcek+Q/SylfM+b+47prkidnFR9sHOEYf7fC7rwVKaX8f2me+92r2O0JSd4xnIph4TgPSxNoriYM2JnkjaWUZ65in5FKKXdK8t4kq/13fXiaD12evNYaGN+wg/WPsnzxl6PpJvm5JP9vnWrYkWY+7N9Pco8xDrEzycuTvHnx7wbrbtSHUh9dw/E+MmLbo9ZwvI0wauj5vx+PU/4AHM8MPwc2reGcT/cacdPFazhsP8lnh8f4fJo5E/ekmd/rrmk6j56QZNuS/e6f5E2llCfUWufW8PjbkvxTmm6tBXNpOkkvTRPY3i1NSPD0LH+dPi3Jf5RSHreZh3UtGHb//G2SIwUuH08TolyTpnPoXmmmCVh4M1zSvEkftaDBWvxJmmG1C/pJzk8T9F2fpgvu9DTTFayHv03y22nmJFzw30opLx3nfBo+r0sD2X6SP1vBvt+c5C8y+m+AL6YJ1T6TZu69HWn+LZ6a5KFL7rs7yT+WUp5Ra33Pqn6A9fWlNL/Pl6SZo++2NN02d0ozP+rjkpy5ZJ+S5BWllE/XWv9qLQ8+7Pr8tUWbemmeww+nmT5jV5q5NZ+Vw//9k6Zz/JeS/Piwa/NtOfyDnM8l+fc0c2geSHNOPnP4cy02m+SPSykPWePcoX+Z5jVw8c/y70k+keb34i5JHjysYWln8+4kbyulPLXWOqpra1r2pZkHNGnO+aVB2YE0r8HHsuHz/K7GMFg/UlB/dZK3pzmPDqaZX/PLkyyeAuM7SymXrLGGXUn+LaMXXplPE5pdkOb3Yl+a8+nsYS1Lfzeem+TvSynPnsYcy1vAqFEfV6zheKOCwE07smT4evu1I25azwWC7ltK+YU0He/3TfMB+0yav/NuStPJ/L40U+JcsI6PC7C11FpdXFxc1vWS5PI0q5YvvjxtjOP89Ijj9JOcsYpjvDnNG9a/TDPU7uQV7HPnNBPc3zbi8V+1isd+2oj9b1z0fS/Jq5KceIT975YmpFp6jJrkbauoY+m+r9/Ac+EHjlD/h5I8+gj7dIb/Vtcuuv8NI47xijF//j2Lvh8k+eMk9zjK/meO2PaS1Z7jw8dZus+3jPm8fsWIY71lBfudnWTviH3PTxO6laPs+/gk543Y95okd9ug8+lRw8f8ZJrusi9b4X5PSjP34dLabz/av/2I47x7xDFuWvT9nyY5/Qj7nprkTSP276UZevvPi7ZdnOSrjnCckuS704RTS4/18hX+HGeN2PfGJdf/NMldj7D/iWmG0PdHHOfjSWZXWMflS/Z99wr3e8WIxz1rBfs9bcR+r1jD+TjqeC9Zw/HGeq1OE0SPOh+uSTPdx8jf6zQLQH100f3nhr8Tq/43GR5v1P9Xc0n+T5K7H2W/3WnmWp4bsf/Pjft8uhzx+d4x4nmuSe65hmN+64jjfWDaP+tR6v3xEfXenGTHmMcb9Zq6msvHkrwoycy0nxsXFxeXtl0MPwc2peG8cv/fiJveVWu9ahWH+sMk9661vqjW+sZa6y3H2qHW+qVa668leXSWdx9833CI5rgW5v/rpwm0/mc9wsT8tdbra63fkdHPw7NKKevdvbiuSimnJ/nVETf9U5In1VpHDnWrtQ5qrW9MszLr5cPNa51CYLGFTq1Bku+qtX53PcrCFLXWtXSvLLaeQ9BH7XfUDpPhsNC/y/L5TH81ybm11rfXWuuR9q+1fjBNiLO0G/QeaUKLjXBdkq+utT6k1vqLdYUdgbXW99davyLJLy+5aXeaRZLW4i7Dry+ttb641nr1EWq4MU1Yv7SrtZumk3eha+jdSZ5Ya33nEY5Ta61/nOSHRtz8kjXMjbh4btKFn+WGI9Rwe631pWnehC/tont4mg+k2ADDf+/XZfmclZcleUyt9e+O9Htda/1wmg8r3jrctD2rm0JhcR0vyfJFV65M8+HV/6pHWfSt1rqn1vrKJE/JHV21C/7XcMqWiSulvKiUcsuULxsxhcOo/09rmk79cY163VvP/7fX26j/Q/+qrm0kzlo8Ks3K8+8tpdx7SjUAtJJQE9h0SimPSvKvaTomFxtklW+Wa61vq7VeP04dtVng5Ztz+Jv23Wm69Nbq52qtf7fCOl6V0fOd/eQ61DFJP5TlQwovTvJNdQUrJQ/D62elGR46Cb9Sa33dhI69TK31/WmmGFjsK4eLRq1YKeXEJM9fsvnGNJ1+R/OSJA9asu33aq0vq7X2V/LYtdb5NF2CH1hy04tLKUdblGRd1Fq/eKSwb4X7/2zuCHAWfH9pVsFdi9fWWl+9gsfvpVkEa6lzhl+vTvL8WuttK3jMP04zLHyx+2bt89j94Up+liQZfvjw8yNu+tFhiM7kfVWaD+AWm0vyrKN9WLNg+Dv9/Cx/bVqxUspsln+wcWuSp9daVzykfRiyftuSzbNJXjpubau0Lc20FdO8bMTUYHcZsW3/0T7UWoF9K3ycqRsuavaIETet59DzpeaT7F/B/Z6Y5MJSyrkTrAXguCLUBKaulLK7lHKfUsoLSylvTDMX3ahFef6/I3X3TUqt9fw0nVOLPX2Nh700yf9d5T4/leULJD2slPLUNdYyEaWUbUm+a8RNP1xrXXFIWWv9VJJfX7fC7nBlNq67cLGlIWonq1+s6JuzvNvyL4bhxEjD0O5/Ltl8ZcYIxoePs/RYO7Jxiy6t1SuXXD81o9/grtTtWf58HFGt9SNJPnWEm3+21rqihdCGAcRfjrhpLauQ35jVd1n+Wpo5WBc7Jck3raEOVu4HRmz71eGHcisy7E774TXU8KIsn//6Z2utl632QLXWtyRZ+sHFd5VSrAOwfpb+/5GsLHA7mlH771zjMSdlVJfmx4evzevhM2nm0P6mJA9LsqvWuq3WuivNc/LANIsUvSVNh+xSd07yT6WUB65TPQDHNaEmsFH+o5RSR13ShAKfS/I3af4IXPrmZT7Jj9Zaf2ODa17wH0uuj1oEYTV+72gB1Ci11psyehGYzRocfHmaOUEX+1it9d1jHOt30sw7uJ7+pNZ6cJ2PuRJ/nmbqgcVesspjrHroeZph40s/KPj9Wuuo7ppjGnadfm7EY7TBeWnmH1xsLb/Tf77CzsrFlna6Js2HFqtdtOj8EdvWEtD+aa31S6vZYfh79Hsjbtqsr03HjeHCPEsXO5lP8rurPVat9d/SzIc6ju9ecv3WrG019T9fcv3ELO9GZXxLpypIVrZY1tGM2n/pgotTV0rZniaEX2qtXZoH03TPP6bW+sBa64/VWv+21npJrfVQ4Ftrnau1fqbW+rpa63PTzHM9apGgu6QJNkf9WwGwiFAT2MwOJPnrJGfXWn9ninVcu+T63Uop484VVdP8TON4w4htTxzzWJM2qq5RXWXHNJw+4F/XVs4y/7jOx1uR4XDQty3ZfP9SylNWsv+wc+NJSzZfUGtdOgx5qaeN2Pb3K3nMozhvyfVzSymb/u+K2qykvHSuyIet4ZDvGmOfT4/Y9r4xgvZRHZ9rmcdu3JXg/yrLO47W+uEPx3ZOln8I+K/D+VvH8Rer3aGUsjPJ45Zsfusa5yZc+tqSNPNtTlSt9fW11jLly7sn/XMe6cefwP7jzu87Sd+Q5VMbHczov69WrNZ6Ta31e1Y7mmg4PcO5aeZVXupBSb5nLXUBbAWb/s0HsKX9W5ohbKMCgLGUUk4ppXxnKeW3Syn/UUr5XCnlhlLK3FE6SV874lBL/yheqc+s4Q3nhVneDfGI4ZvKzebxI7a9fw3HG9XZNq65JBet4/FWay0LBo3TpZk0nbOL7c3yIcOrtTTsPymHLzYzcaVxbinl50opf11K+Xgp5apSyq2llP5RfqdPX3KocX+fk2bV2tUa1dm5XscZdyGz/WleY1Zt+MHD0qHGp5RSHjBmLazMZnidfWKWd+RduIYakuWvLUkzXyzrY9RIkbX+HTFq/0nNh70W/33Etn9ew99lazb8MOvb00y9tNTL12HOZ4DjmvlpgI2yN6OHEO/MkYcoPSfJU0sp31Jr/Ze1PHgp5cuS/EKSZ2Z9XvtOHnO//xr3AWutvVLKxTl8zryZJGdk7QHVervPiG3jDm1M1vC8jXDlShYqmqC3JLk+hw/Pf2Ep5UdqrXuPtNPwjc3SFe/nsrLuuqWdiCckGYy/UPYRnZLlXZDrbjiE8MfTrFy+HivFnryGfcd5Mzzq3/mm1R6k1rp3xL/hqPnyVuKilS4YdQT/leT+S7adlc332nQ8GfU6u5bXynH2HdXl/KullF9dQx2jbOgHJse5Scx/OWr/tc7Tua6Gi/J95YibJrlA0IrUWg+UUn48y7uUT0vz4cVaPqwAOK7p1AQ2ytfWWk8ecdmeJlD4iiSvyfJP9ncn+ftSyjPGedBSSqeU8htp5iz6mqzfhznjBgdrDXxGreS+li6zSVla075a6541HO+6tRSzxK3reKxVG86nunSY5+4kLzzGrl+d5J5Ltv1DrfWWo+00HBJ+8ipKXIuJr3Y7/IDi4jQL/qxHoJmM//ucNZ7Xi63XccZNqrfKa9PxZNTzO+rfYUVqrbdn9UHURoWNm3Il7ZYatRjZzrK2T7lGvYauaNGzDfTiLH/ve3WSd0yhlmWGc1V/aMRNz9roWgDaRKgJTF2t9dZa67trrT+U5OFZ3tmzLckbh5+yr9jwD/Q/S/ITWdnrXS9NsHDrksuoN3nj/vG/2gVFlhoVyG3G4GBpTZP4ucc11uI462ycIejjDj0/ORv3//1EF4YopTw2yb9n+aJHo9Q0H5Is/X2+Ncvnf9uMc79ttK3y2nQ8GfX8bvRr7UaFjZtu0ZkWG/UBRknTFTiupR+4JeN1sU/SS0Zs+7M1dqivt1EB68M3vAqAFjH8HNhUaq2fKaU8Pc3cQov/wD4lzcqSq/nE+r8n+dYR229Ls0jKf6YZEn11kuuO9IdtKeUlSV63iseFo6q1XlxK+VAOX2DjKaWU+9Val85NmFLKXZJ83ZLNV6YJ+I5l+6gSsvbwY5SJDesfDjn/y4zuOv1wkn9J8sEklye5eth1dqRjXZ7kzHUvEraeUa8v+9MsvrKe1quTecurtc6VUq5LcvclN907yRfHPOyorvnLxzzWuiulPDXLp8dINt/fdqPmkL/rhlcB0CJCTWDTqbVeVUr5jixf8fqZpZTn11rfdKxjlFK2pRmeutRrk7x0lUNGT1jFfY/lpDXuP2oRkC+t8ZiT8KUcHkpP4uduu9fl8FCzpOkkefmI+74oy8OD1w9X8j6WUUMAb6y13m3E9s3sh7L8Tek1Sb51jBWD1/N3+nixVV6bjiejnt+Nfq0d9fryP2utr1ljHRuulPKiNNPgTNPX1lr/cwMe57IsDzXPTPPB0DhGfUi07AO6KRo10uE/a62bbc7fUV20p254FQAtYvg5sCnVWt+Z5fMOJs0CBCv5QOYZWf6H4Jtqrd87xhx46zm8bq2fuI8KojZjcLC0pl2llN1rON7SN1/Hg7/K8qkNXjycA3OppW/IalbYYVJrPZDlXU53WeP8adPwzUuuzyd57hiBZrJxc4y2yVZ5bVpPS6cxGFspZZwwctTzO/aHFaWUE7P6BWNGDTFu66I+29KEutO8bFTDyYUjtj1mxLaVGrXvqMfYcMO/PUbNWT31BYJGGDU36aZacAlgsxFqApvZz2b5wkH3SzOs/FhGLSz0i2PW8aAx9xvlkePuOAxzl64020ty1ZoqmozPj9j2iDUcb+znbbOqtd6aZhqExe6VJeduKeURSR695H7/UWu9fBUPd8WS6900K1O3wjDweeySzW+ttX50jGPdP0aqjHJ2KaW7hv1H/Y5evobjtcGosGHcRafG6cYa9Tq7ltfKcfZd+tqSjB7my+YyakGac8c5UCllV5IvW+FjTMM3ZXl3/p4kfzOFWo5l1LymYy/+BbAVCDWBTavWemWSPxhx088Oh5cfzelLru+rtV44ZilPGXO/UR5QShl3KNGjkuxYsu3jtdbN+Cn+qCFsT1rD8Z64hn03s5UsGDRq2Nxq5wEbNffm01Z5jGm6R5Yv5vP+MY+1nr/Px5OdaV5jVq2UcrcsX7zppk04tHPdOiuHRi2qM25n/zlj7LMZXmffneXP69PWUAMb410jtp0z7NZdrSdn+QdFnxn+DbcZjPo/9G9qrXs3vJJje/KIbePOcwqwJQg1gc3uV5PMLdl27yTfdYz9lg5/u2WcBy+lPC2jJ8AfV0nyLWPuO2rRo/PXUMskfWDEtheNc6BhYPLVaytn0/qPLO+2el4p5eQkKaXMZvm/+61Jjjmv7BLvHLFt1Pm0WY0azjru0OYXr6WQ49x/W8N+S0Pncefmm6Slnf/J2lbVHjX0+uwxj/XMMfa5IMsX5/rqNXxw9m2r3aHWemOSjy3ZfO9SyqhwZlOrtb6+1lqmfHn3Bv2sVyf5yJLN2zPe/9OjRs/84xjHWXellAdkdFC46Yael1JOyOjFMN+9waUAtIpQE9jUaq1fTPJHI2766WN0ay5d+fjUFXR3jvIzY+xzLD80DKtWbLj69XeMuGkzDp9Kkvdk+ZCpLxuGxKv1IzlOhwvXWmuS1y/ZvCN3BN9fm+VzHf71GN2570py7ZJtzxiuCNsGo1Yyv+dqD1JKOTfJl6+9nOPWixcC9ZUavq7+4IibNuNr020jtp087sFqrTcluXrJ5qeudhh/KeXuGSNMqrXuS/IvSzbPJvnh1R6rlPKMjD9FyKj5r//3mMdi4/z5iG0/sJr5lksppyV53gqPPQ2jujQ/VWs9b8MrObb/kdGd3u/Y6EIA2kSoCbTBqG7NeyX57qPss3SeyW0Z/Qn4EZVSfijJV61mnxV6cJo/Xlfj17L8j91Laq3vWZ+S1let9WCS/zfipt8tpSxdxfuISikPSvL/rVthm9Prkyxdxfw7l3xdbLVDzzMMQV854qY3lFLusdrjTcHS4ChJvm41BxjOy/ln61POcevUjD5PjuYnkzxwybabk7xxXSpaX6PmpnvIGo/54SXX75Hmw4jV+IMsn1pkpUat1v1Tw7ljV6SUsiPJ7475+ElT/9Ihsk8vpbx8Dcdk8l6X5VMoPDKjP6Q4kt/N8m7nf6+1fnwtha2H4aJ7oz4MXvX/oZNWSvmKNPPIL/XW4Yf7AByBUBPY9Gqt1yR57YibfvooAdm7R2z7tZV2IZVSXpLkN1dy3zH9Yinl+Sus5X9m9HD7X1vfktbda7J81e2HJfmblaxgX0o5Pcnb0gyJO24N5x1bOufl40opT0/y7CXbL661jjus9w+TXLZk2xlJ/qOU8vAxj5lSyrNKKf9aSlk6p+K6qbXenGTpm+RHl1K+fyX7D4fj/muS+653bceh7yul/PhK7lhK+eaM7sj77Vrr0g+ipm44VHppQH7u8LVmXKOmgnj1sLv+qEopnVLKbyb5hjU8/juzfPj3jiRvX8kHFsNRA29K82HbWIYfmvyvETf971LKL467AFUp5W6llP9dSvmNcWvjyGqttyX59RE3vbKU8vhj7V9K+dEkS/+OqRl9LhztOJeXUuqSyytWc4wjeGaWz6/ezzp/uFVK+f1Synes5O+aI+z/vCRvzvJwuJ/kp9ZYHsBxT6gJtMUrs3w+tDOSfM8R7v+vWT7f2YOSvLeUcsQFGUopZ5ZS/jzNJ/kLf6Cu56fkNw2/dpO8sZTy60eamH/4hu5PM/pNxztrrX+6jnWtu1rrVUl+esRNX5fk/aWUUaulLrzR/+Y0833dZ7h51Nx1x5NR83u9IcuH3Y/dYTIMmb4+y4dyPyjJh0opv1lKuc/yPQ83/Pd5XCnlV0opn04TPH9Vls+puN7eMGLb75VSXjFcfXeZUkq3lPJtaUKfhTfpezN6GPJWd9Oi719dSnl9KWXp1AdJklLKiaWU/5vkL7P8b8mLk/zKhGpcD/+x5PpskneUUp5XShk1d+ux/F2Wz+96nyTvPtJrXJIM/x96V5IfG2666Uj3PZrhFBbfleVza94vyUdKKS840nDiYQ3nJ3nOcNOBLP8gaqV1/HGWv46VNN1nHyqlfNMKP8w6pZTy4lLKm5NcmSYgu9s4NbEir0ryySXbdif591LKd476NyulnDz8/f+tEcd73SYa2j1qpMPbJ9D5+JAkf5rk86WU/1tKeeKwS/SoSimPLqX8dZK/T3LSiLv8Wq31onWuFeC4c1zOUQYcf2qt15RSXpvlc4W9rJTy2lrrgSX331tK+YUs/6P74Uk+XEq5IMl5aeYZ7Ca5e5InpFmBdvEbwE8l+Z2sbWjeYn+U5g3kI4eP+z/TzLH5jiSXpnlzfNdhnc/I6Nfp63PkMHez+b00P+/SjsPHJvloKeW/krw3TXC8Pc2iTM9KM4RzQS/Jj6YJUI5X/5Dm3/7Oi7adtuQ+vaxxnrJa68WllG9J8yZqcQfsjjThyo8Ng8oPJLlmWNNskjulGZr8sDTn5sgQccJ+N815sLjzppPk59PU/c4kl6QJZe6SJlj66iyftuHHkrw8o99EbmVvSfPasxBwvTjJt5ZS/i3JJ5LckOb8fHCa39FRw6X3JnnxcPqJzeqPsnxBnIel+Z1IKeVAlk93kiSPGLWac611rpTysjSd0Is9PMkFpZTzk7w/zfO3M81r29PSfJiwYJDk25O8dbU/zLCGjw2Hei8Nk++R5G+TXDX8P+YLSQ6mmY/2y4c1LvbyJD+UJtQaxw8kOTPN/12LPTrNdAR7SikfSPN7enOSfUlOTDOv6Vlp/l88c8zHZgy11gOllBemec1f/AHrrjQh9SuGr62Xp/mdv3+a6RVOGHG4T6R5jZ66Yaf0qClKJrlA0BlJXjq87CulfCLJRWk+lL01TeflXdJMn/TkHH0Ryj/P6OHoACwh1ATa5JVpwrzFYczpSb43TfC41O+k+cPxhSNuO2d4OZovpHnz/rTVFnoUB9P8oX1emj+Ak+aN7jescP/rk3xFrfWKdaxpYmqtdTjM/h8zen7SRw4vRzxEku/L6NXUjxvDYOSvcvS5zP6l1jpqTsDVPtZbS7Ngzt+lCRKWemCWz5E4dbXWfaWUb0wztcTOJTefnNG/50v9Yq31/5nr74helOR9uSPsmkkzhHMlK3PvTfI1tdalKypvKrXW95VS/l9GT+mRNP+/jJry4oidV7XWPyqlPDPJN47Y50nDy5EMknx3rfVtq1ifZVQNryzN6sk/N+LmM3Lkn3fB62utvz6cS3rcGg6WUp6VZmqUnxhxl91p/h+YxFzVjGn4YdfXpPlgY+mHPffOsc+dpOn2/Opa6971rm9M35rlv8c3JPnnDXr8XWlGBxxzGP8SgyT/N8nPDLuwATgGw8+B1qi1Xp3kj0fc9LLhQgdL71/TdL/8wRgP9+4kj6+1Xj7Gvkc17PZ5UpYvMHEs5yV5Sq31kvWuaZKG8619XZpOu6UL4hzNrUm+qdY6yc6KzeRYP+e6PQ/D4OkxaYL/1a6kvtQNSX47y1dXX3e11g8l+cosXwjsWPYk+Z5aqzDzKGqttyZ5apK3r3LXi5M8fbMuXDbCD6Tpalw6ZHstvjmr/x29Iclza63rsnDJ8Pz+gaxueoVBmufiv69TDb1a60uTPDfJhWs9XJL3ZPTUE6yjWuv70gRw43wo8ddJnlBrnfj/Aaswauj5X9Ra5ze8kpX7aJKn1Vp/sta6nq9NAMc1oSbQNr+S5XNr3jNNN98ytdYDtdYfSDMc7p05eqjWTzMU+oW11q+Y5IqTtdYvJHlimi7Ti49x9w+lecP5lFrrpydV0yTVWudqrT+S5k3T3+foQdqX0oRkD6m1/t1G1LcZDIPGI60Ye13GHJp6lMe7udb6o2m6Nf93mvNsJW+kBmnqfHWaaQXuWWv9sVrrWHPxrVat9f1JHpGm5mN1rl6fps4HD+f84xhqrbfUWp+d5JuSHGtRqouS/I8kXzYMnFuh1jpfa/2ZNP93/EiSv8odQ+zHCvmHYd53JfmKNB+K9Y9y9+vT/F/24Frrev9e/0GaKQJek+bnOZKDaRYIelytdd27wmqtb6m1flmSr0kz9Py6Fe56S5rO/h9Ncp9a69NqrW9bz9oYrdZ6aZLHpZme4fw0ofKRHEizuM1Ta63/bbjo0KZQSnlkklHz2U7qA9IXJnlBmg8Jz0/Ttb5Slyd5fZIn1VofMwyXAViForMd2EqGq5+fm2ZI1Z3TBDS3JPlsko/UWpcu+LBRdd0nTefcvdMMW7o5zZyGHx01j1vblVJ2p+lWPSPNfKb9NG/AL07z73C0QIAJGS5adU6af5NT0gzrPphmcaGbknw6yaeH3bdTN1wA5eFJHpVmzs9daebpuybNuXSRIXzLlVLOSvL5JZv/tNb6khH3vUeaoOOsNMOHb0szB+4naq2fmmihLTb8v+bJaYLTU9L8X3NdmvD0Y7XW1XStj1tDN81c0WelmV9zNs2HRp9O8qGN+iBiUT0PSfKANM/HKWmGB98+vFyZ5NLhiAw2gVLK3dLMf33fNMPSB2n+NvlUkg9voqHmm8pwkaAz0/zenZFmHs1daZqJbkvzO3hDmteBNU8pA7DVCTUBALaQ1YSaAACwWRl+DgAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALRKqbVOuwYAAAAAgBXTqQkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ysy0C2ijUsq1SXYl+cK0awEAAABg6u6VZF+t9bRpF7JVlFrrtGtonVLKbbOzsyfe+973zuzs7LTLgcPMz88f+t75CQAAAJN32WWXZX5+/vZa60nTrmWr0Kk5ni+cdto9Hvqbv/lbedK55wqO2DTm5+fz/vPOO3Td+QkAAACTNT8/n0c98pH5wheuNKJ3Awk1x7Rr18487vGPz8yMp5DNY2ZmJo97/OMPuw4AAABMzszMTHbt2jntMrYciceYSinZudMJy+bivAQAAICNVUpJKWXaZWw5Vj8HAAAAAFpFqAkAAAAAtIpQEwAAAABoFXNqjmn//v05//zzc84551iMhU2j1+vlggsuOHTd+QkAAACT1ev1sn///mmXseVIO8Y0GNQcmJtLrXXapcAhtTbn5eLrAAAAwOTUWjMYeP+90Qw/BwAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFplZtoFtNXMTDennHpqOh25MJtHp9PJKaeeeth1AAAAYHI6nU5mZrrTLmPLEWqOafv27Tn77LOnXQYcptvtOi8BAABgA3W73Wzfvn3aZWw52rgAAAAAgFYRagIAAAAArSLUBAAAAABaxZyaY+r3+7nxxhtzl7vcxWIsbBqDwSA333zzoevOTwAAAJiswWCQfr8/7TK2HGnHmObmDuTiiy5y0rKp9Pv9XHzRRYcuzk8AAACYrH6/n7m5A9MuY8sRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFplZtoFtNWOnTvyyEc9KjMznkI2j5mZmTzyUY867DoAAAAwOTMzM9mxc8e0y9hyJB5j6nY6Ofnkk6ddBhymlOK8BAAAgA1USkm3YzD0RvOMAwAAAACtItQEAAAAAFpFqAkAAAAAtIo5Ncc0NzeXCy+8MGeffbbFWNg0er1eLrrookPXnZ8AAAAwWb1eL3Nzc9MuY8uRdoyp3x/k1ltuSa112qXAIbXW3HrLLYddBwAAACan1pp+fzDtMrYcw88BAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVpmZdgFt1el0csLu3SmlTLsUOKSUkhN27z7sOgAAADA5pZR0OvoGN5pQc0w7d+7IOeecM+0y4DAzMzPOSwAAANhAMzMz2blzx7TL2HLEyAAAAABAqwg1AQAAAIBWEWoCAAAAAK1iTs0xDQaD7NmzJyeccILFWNg0aq3Zu3fvoevOTwAAAJisWmsGg8G0y9hydGqOaf/+uXzkggvS6/WmXQoc0uv18pELLjh0cX4CAADAZPV6vezfPzftMrYcoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVZqZdQFtt374tD3rwg9PtdqddChzS7XbzoAc/+LDrAAAAwOR0u91s375t2mVsOULNMc3MzOS0006bdhlwmE6n47wEAACADdTpdDIzI2LbaIafAwAAAACtItQEAAAAAFpFqAkAAAAAtIoB/2M6cOBgLr300jzgAQ+wGAubRr/fz2c+85lD152fAAAAMFn9fj8HDhycdhlbjk7NMfV6vVx37bUZDAbTLgUOGQwGue7aaw9dnJ8AAAAwWYPBIL1eb9plbDlCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVZqZdQFuVkszMevrYfJyXAAAAsLFKmXYFW4/0Y0y7du3Kuec+edplwGFmZ2edlwAAALCBZmdns2vXrmmXseUYfg4AAAAAtIpQEwAAAABoFaEmAAAAANAqQs0x1ZrMz89PuwxYZn5+/tAFAAAAmLxap13B1iPUHNO+ffvy/vPOExyxqczPz+f955136OL8BAAAgMman5/Pvn37pl3GliPUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtMrMtAtoq23bZnPmWWem2+1OuxQ4pNvt5syzzjzsOgAAADA53W4327bNTruMLUeoOabZ2dmcddZ9pl0GHKbT6TgvAQAAYAN1Op3Mzgo1N5rh5wAAAABAqwg1AQAAAIBWEWoCAAAAAK1iTs0xzc/P5/LLP5973/vMdDqyYTaHwWCQK6+84tB15ycAAABM1mAwyPz8/LTL2HKEmmM6eHA+V1x+RU4//QyhEZtGv9/PFZffEWo6PwEAAGCy+v1+Dh4Uam40aQcAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVZqZdQFvt2rUrTzr33MzOzk67FDhkdnY2Tzr33MOuAwAAAJMzOzubXbt2TbuMLUeoOaZSBEZsTs5LAAAA2FilTLuCrcfwcwAAAACgVYSaAAAAAECrCDUBAAAAgFYxp+aY9u3bl/PO+8887nGPN4chm8b8/Hw+9KEPHrru/AQAAIDJmp+fz759+6ZdxpYj1BxTrUlvvjftMmAZ5yUAAABsrFqnXcHWY/g5AAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGgVoSYAAAAA0Coz0y6grWZmZnL3005LpyMXZvPodDq5+2mnHXYdAAAAmJxOp5OZGRHbRvOMj2n79m158IMfPO0y4DDdbtd5CQAAABuo2+1m+/Zt0y5jy9HGBQAAAAC0ilATAAAAAGgVoSYAAAAA0Crm1BxTr9fLtddem7vd7W4WY2HTGAwGuf766w9dd34CAADAZA0Gg/R6vWmXseUINcd04MDBfOrSS3PKKacIjdg0+v1+PnXppYeuOz8BAABgsvr9fg4cODjtMrYcaQcAAAAA0Co6NY+ilHLxEW6634YWAqtQBzWDG/cm/X76n70hZcavOQAAAExKv9dLev1sK91t065lK5F2wHFmcN1t6d+0L0nSu+a2pOvXHAAAACal1++l9gfZVmaEmhtI2nEUtdaHjdo+7OB86AaXAytSD/ZTe/0MrrktvXpt0u1OuyQAAAA4bvX6/WR+kE6KN+AbSKgJx7NuJ527njDtKgAAAOC4VW7ZN+0StiShJhzHunffne5dT5p2GQAAAHDc6m/XoDkNVj8HAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqFgoa086dO/KYc87JzIynkM1jZmYmj37ww9O//vb0c2O6HZMVAwAAwCR1O93smNmW26ZdyBYjkRtTp9PJ7t27p10GHKaUkt27TkhvRz/9bTtTSpl2SQAAAHBcK6Wk4/33hjP8HAAAAABoFaEmAAAAANAqQk0AAAAAoFWEmmPav38uF1xwQXq93rRLgUN6vV4+8smP56OXXZKPXfOZ9Pr9aZcEAAAAx7Vev5+53sFpl7HlWChoTIPBIHv37EmtddqlwCG11uzdvy/9uX0ZHJxL4vwEAACAyaoZyIc2nE5NAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFVmpl1AW3W7ndzp5JNTSpl2KXBIKSV32n1S+ge7GezoJ3F+AgAAwGSVdORDG06oOaYdO3bkUY961LTLgMPMzMzkkQ98aHrX3pb+/A3pdrvTLgkAAACOazPdbnbMbJt2GVuO4ecAAAAAQKsINQEAAACAVhFqAgAAAACtItQcU38wyC233JJa67RLgUNqrbnl9tty697bc+vcHucnAAAATFitNf06mHYZW45Qc0xz++fyXxdemF6vN+1S4JBer5ePf+aSfPzyT+UT134+/UF/2iUBAADAca0/6OdAb37aZWw5Qk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrzEy7gLbasWN7Hnb22el2u9MuBQ7pdrt56H0fmP71e9Lv3ZhO8bkFAAAATFKndLJ9ZnbaZWw5Qs0xdbvdnHrqqdMuAw7T6XRy6sl3SW9uJv1d8+l0hJoAAAAwSZ1OJ11NRRvOMw4AAAAAtIpQEwAAAABoFaEmAAAAANAqQs0xHThwIBdddFH6/f60S4FD+v1+Lr7sU7nkys/mk9dfkf5gMO2SAAAA4LjWHwxyoD8/7TK2HAsFjanX6+emG2/MYDCwAjqbxmAwyE23fin92/dlsO+21CrUBAAAgEmqdaCpaAp0agIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtMjPtAtqq0ynZvmNHSinTLgUOKaVk+7Zt6c/2MpiZTeL8BAAAgMkqEQ9tPKHmmHbu3JknPOEJ0y4DDjMzM5PHn/3o9K69Lf1yQ7rd7rRLAgAAgOPaTLebnTPbc+u0C9liDD8HAAAAAFpFqAkAAAAAtIpQEwAAAABoFaHmmGqt2b9/f2qt0y4FDqm1Zu7AXOYOHsjc/EHnJwAAAExYrTU13n9vNKHmmPbt258PffCD6fV60y4FDun1evnQxRfmw5/5RC64+lPpD/rTLgkAAACOa/1BP/vnD067jC1HqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGiVmWkX0Fbbtm3L/e5//3S73WmXAod0u93c94wz09++J/25m9MpPrcAAACASeqUTma7IraN5hkf0+zsTM4444xplwGH6XQ6OeNu90hvcFv6N3fS6Qg1AQAAYJI6nU5mO5reNprEAwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmmM6ePBgPvvZz6bf70+7FDik3+/nsqsuz+eu/UI+d/M16Q8G0y4JAAAAjmv9wSAH+71pl7HlCDXHND/fy9VXXZWB0IhNZDAY5Orrr83VN12Xa267KbU6PwEAAGCSah2kN9D0ttGEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFaZmXYBbXXCCbvy5U972rTLgMPMzs7mqY9+QnrX3pb+thvS7foVBwAAgEma6c5k1+z23DbtQrYYnZoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqDmmvXv35T3vfnfm5+enXQocMj8/n/d+9Py87+IL8p+XfyK9fm/aJQEAAMBxrdfvZd/8gWmXseUINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0yM+0C2mp2diann3FGOh25MJtHp9PJ6Xc7Lf3O3vT3zKYU5ycAAABMUimdzHS60y5jyxFqjmnbtm25//3vP+0y4DDdbjf3O+Os9GZuS//2HekK3QEAAGCiup1OtnVFbBtN4gEAAAAAtIpQEwAAAABoFaEmAAAAANAqQs0xzc/3ctVVV2UwGEy7FDhkMBjkquu/mKtvui5X33aj8xMAAAAmbDAYZH7Qn3YZW45Qc0wHDx7MZZ/9bPp9Jy2bR7/fz+euuiKfu/YL+fzNX8ygCjUBAABgkgZ1kPl+b9plbDlCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKvMTLuAttq1a2ce9/jHZ2bGU8jmMTMzk8c97FHpXXd7+uXGdDvdaZcEAAAAx7Vup5uds9ty27QL2WIkcmMqpWTnzp3TLgMOU0rJju070tt2MP3ZbSmlTLskAAAAOK6VUlLi/fdGM/wcAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaY9q/f3/OP//89Hq9aZcCh/R6vXzwoo/mQ5/+eD581aXp9fvTLgkAAACOa71+P/t7B6ZdxpZjoaAxDQY1B+bmUmuddilwSK01Bw4eTH/+YAa9+STOTwAAAJisGvHQxtOpCQAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALTKzLQLaKuZmW5OOfXUdDpyYTaPTqeTU+505/R72zLYlZTi/AQAAIBJKqWTrnxowwk1x7R9+/acffbZ0y4DDtPtdvOw+z0ovRNuS//ADV5UAQAAYMK6nU62d2enXcaWI/EAAAAAAFpFqAkAAAAAtIpQEwAAAABoFaHmmPr9fm688cYMBoNplwKHDAaD3HjLzbnptlty075bnZ8AAAAwYYPBIP3q/fdGE2qOaW7uQC6+6KL0+/1plwKH9Pv9XPK5T+eSL3w2n7z+ygy8qAIAAMBEDeogB3rz0y5jyxFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWmVm2gW01Y6dO/LIRz0qMzOeQjaPmZmZPOIBD03/+tvTH9yYbqc77ZIAAADguNbtdLN9ZnbaZWw5ErkxdTudnHzyydMuAw5TSsnJJ56U3t6kv2MupZRplwQAAADHtVJKusVg6I3mGQcAAAAAWkWoCQAAAAC0ilATAAAAAGgVoeaY5ubmcuGFF6bX6027FDik1+vlvz59ST5++afyiWs/l16/P+2SAAAA4LjW6/cz1zs47TK2HAsFjanfH+TWW25JrXXapcAhtdbcuue29Pfuy2BubxLnJwAAAExWzUA+tOF0agIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtMjPtAtqq0+nkhN27U0qZdilwSCklJ+zclf7+ZLDtYBLnJwAAAExWSUc+tOGEmmPauXNHzjnnnGmXAYeZmZnJYx7yiPSuvS39wQ3pdrvTLgkAAACOazPdbnbMbJt2GVuO4ecAAAAAQKsINQEAAACAVhFqAgAAAACtYk7NoyilXHyEm+43GAyyZ8+enHDCCRYLYtOotWbPvr3pz+1L/+D+nFhPmnZJAAAAcFyrtWZQ67TL2HJ0ao5p//65fOSCC9Lr9aZdChzS6/Xy0Us/kY9edkk+ds1n0x/0p10SAAAAHNf6g37megenXcaWo1PzKGqtDxu1fdjB+dANLgcAAAAAiE5NAAAAAKBlhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFVmpl1AW23fvi0PevCD0+12p10KHNLtdvPAM++X/q7b0z94czrF5xYAAAAwSZ3SybauiG2jecbHNDMzk9NOO23aZcBhOp1OTjvlrunNb09/d02nI9QEAACASep0OpnpaHrbaBIPAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqjunAgYO59NJL0+/3p10KHNLv9/OpKy7Lp6++PJ+58QvpDwbTLgkAAACOa/3BIAf789MuY8sRao6p1+vlumuvzUBoxCYyGAxy3U035Lpbbsx1e25Jrc5PAAAAmKRaB+nJhzacUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABolZlpF9BWpSQzs54+Np+Z7kxKdyaDjs8sAAAAYCOUaRewBUnlxrRr166ce+6Tp10GHGZ2djZPeuQ56V17W/rdG9Lt+hUHAACASZrpzmTn7PbcOu1CthitXAAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1BxTrcn8/Py0y4Bler1eev1eev3+tEsBAACALaFOu4AtSKg5pn379uX9550n2GRTmZ+fz/s/fkE+cOmFOf8Ll6TX7027JAAAADiu9fq97J8/MO0ythyhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFVmpl1AW23bNpszzzoz3W532qXAId1uN/c+7fT0Z/ZmsG9HOsXnFgAAADBJndLJrHxowwk1xzQ7O5uzzrrPtMuAw3Q6nZx1z3ul17kt/Vtn0+kINQEAAGCSOp1OZjsito0m8QAAAAAAWkWoCQAAAAC0ilATAAAAAGgVoeaY5ufnc/nln89gMJh2KXDIYDDI5dd8IVdcf02uvOU65ycAAABM2GAwyPygN+0ythyh5pgOHpzPFZdfkX6/P+1S4JB+v58rr706V95wTa685foMqlATAAAAJmlQB5mXD204oSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVZqZdQFvt2rUrTzr33MzOzk67FDhkdnY2T3rEOeldd1v63Rsz0/UrDgAAAJM0053JztntuW3ahWwxEo8xlRKBJpvSzMxM0p1J6XanXQoAAABsCWXaBWxBhp8DAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilBzTPv27ct55/1n5ufnp10KHDI/P5/3/9cF+cClF+b8Ky9Or9+bdkkAAABwXOv1e9k/f2DaZWw5FgoaU61Jb15gxObT6/fS7/cyGAymXQoAAABsCXXaBWxBOjUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVpmZdgFtNTMzk7ufdlo6Hbkwm0en08ndT7lr+nVvBrd1UorzEwAAACaplE5m5EMbTqg5pu3bt+XBD37wtMuAw3S73TzozPult/229PedkK4XVQAAAJiobqeTbd3ZaZex5Ug8AAAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoOaZer5drr702g8Fg2qXAIYPBINfedEOuu+XGXLfnS85PAAAAmLDBYJDeoD/tMrYcoeaYDhw4mE9demn6fSctm0e/38+nr7gsn7768nzmxqsyqEJNAAAAmKRBHeRgvzftMrYcoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrCDUBAAAAgFYRagIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVZqZdQFvt3LkjjznnnMzMeArZPGZmZvLoBz88/etvTz83ptvpTrskAAAAOK51O93smNmW26ZdyBYjkRtTp9PJ7t27p10GHKaUkt27TkhvRz/9bTtTSpl2SQAAAHBcK6Wk4/33hjP8HAAAAABoFaEmAAAAANAqQk0AAAAAoFWEmmPav38uF1xwQXq93rRLgUN6vV4+8smP56OXXZKPXfOZ9Pr9aZcEAAAAx7Vev5+53sFpl7HlWChoTIPBIHv37EmtddqlwCG11uzdvy/9uX0ZHJxL4vwEAACAyaoZyIc2nE5NAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtItQEAAAAAFpFqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFVmpl1AW3W7ndzp5JNTSpl2KXBIKSV32n1S+ge7GezoJ3F+AgAAwGSVdORDG06oOaYdO3bkUY961LTLgMPMzMzkkQ98aHrX3pb+/A3pdrvTLgkAAACOazPdbnbMbJt2GVuO4ecAAAAAQKsINQEAAACAVhFqAgAAAACtItQcU38wyC233JJa67RLgUNqrbnl9tty697bc+vcHucnAAAATFitNf06mHYZW45Qc0xz++fyXxdemF6vN+1S4JBer5ePf+aSfPzyT+UT134+/UF/2iUBAADAca0/6OdAb37aZWw5Qk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGgVoSYAAAAA0CpCTQAAAACgVYSaAAAAAECrzEy7gLbasWN7Hnb22el2u9MuBQ7pdrt56H0fmP71e9Lv3ZhO8bkFAAAATFKndLJ9ZnbaZWw5Qs0xdbvdnHrqqdMuAw7T6XRy6sl3SW9uJv1d8+l0hJoAAAAwSZ1OJ11NRRvOMw4AAAAAtIpQEwAAAABoFaEmAAAAANAqQs0xHThwIBdddFH6/f60S4FD+v1+Lr7sU7nkys/mk9dfkf5gMO2SAAAA4LjWHwxyoD8/7TK2HAsFjanX6+emG2/MYDCwAjqbxmAwyE23fin92/dlsO+21CrUBAAAgEmqdaCpaAp0agIAAAAArSLUBAAAAABaRagJAAAAALSKUBMAAAAAaBWhJgAAAADQKkJNAAAAAKBVhJoAAAAAQKsINQEAAACAVhFqAgAAAACtMjPtAtqq0ynZvmNHSinTLgUOKaVk+7Zt6c/2MpiZTeL8BAAAgMkqEQ9tPKHmmHbu3JknPOEJ0y4DDjMzM5PHn/3o9K69Lf1yQ7rd7rRLAgAAgOPaTLebnTPbc+u0C9liDD8HAAAAAFpFqAkAAAAAtIpQEwAAAABoFaHmmGqt2b9/f2qt0y4FDqm1Zu7AXOYOHsjc/EHnJwAAAExYrTU13n9vNKHmmPbt258PffCD6fV60y4FDun1evnQxRfmw5/5RC64+lPpD/rTLgkAAACOa/1BP/vnD067jC1HqAkAAAAAtIpQEwAAAABoFaEmAAAAANAqQk0AAAAAoFWEmgAAAABAqwg1AQAAAIBWEWoCAAAAAK0i1AQAAAAAWkWoCQAAAAC0ilATAAAAAGiVmWkX0Fbbtm3L/e5//3S73WmXAod0u93c94wz09++J/25m9MpPrcAAACASeqUTma7IraNtqWf8VLKw5I8Isk9k/STXJ3kglrr54+17+zsTM4444wJVwir0+l0csbd7pHe4Lb0b+6k0xFqAgAAwCR1Op3MdjS9bbQtGWqWUl6Q5OVpAs1Rt78/yc/WWt+9kXUBAAAAAMe2pdq4SindUsrrkvxtjhBoDj0pyb+VUv7PxlQGAAAAAKzUVuvUfHWSlyy6vi/JG5JcmGRbkscneX6S2TSB78tLKV+qtb56Y8sEAAAAAI5ky4SapZSvSfIjizZdkuRZtdYvLLnfI5O8Nc08m0nyqlLKu2qtn1h8v4MHD+azn/1s7nOf+1gsiE2j3+/nsqsuT//GvenffHPue9qJW6sdGwAAADZYfzDIwX5v2mVsOVsi7yildJL8yqJN+5I8d2mgmSS11v9K8sIkg+GmTpJfXnq/+flerr7qqgwGg6U3wdQMBoNcff21ufqm63LNbTelVucnAAAATFKtg/QG/WmXseVs2k7NUkpJ8qAkD01yRpITk+xPclOS/0ry8bryxOYZSR6+6Ppv11o/d6Q711rfX0r52yTfPNz0taWU+9daP7vKHwMAAAAAWGebKtQspWxP8tw0nZJPT3LqUe5+Uynld5K8utZ62zEO/bwl1/94BeW8NneEmknyDUletYL9AAAAAIAJ2mzDz5+YZmXyb8rRA80kOSXJK5J8sJRyv2Pc92sWfX9ZrfWyFdTyviRzi65/7Qr2AQAAAAAmbFN1ai6xJ8l5ST6S5IvD63dO8sgkX5/k5OH9Hpzkn0sp59Ra9y09SCnl5CT3XrTp/JU8eK31YCnlI0nOHW56xOp/BAAAAABgvW3GUPNjSX4tyT/WWvePukMpZXeSVyf57uGmhyT5qSQ/P+LuD1lyfTXzYl6WO0LNO5dSTqu1XruK/QEAAACAdbbZhp+fX2t9dK31r48UaCZJrXVPrfV7kvzNos3fV0qZHXH3+y65fuUq6ll636XHAgAAAAA22KYKNWutc8e+12Fetuj7uyd59Ij7nLTk+s2rOP6Xllw/cRX7AgAAAAATsKlCzdWqtX4+yecWbXrsiLvtXnJ9NcHp0m7RpccCAAAAADZYq0PNoS8u+v70EbfvWHL94CqOfWDJ9Z2r2BcAAAAAmIDNuFBQkqSU8vgkz08zpPyBaVY7352kHGW3k0dsW9qZuW0VZWxfcv2I83wCAAAAABtj04WapZSHJ/mDJE8aY/elXZlJsmcF9zmSpZ2Zh461c+fOnPPYx+bgwYM5eHA1zZ8wWY95yCPSu+72DHJjDszPZ35OFg8AAACTMpifz46Zbblt2oVsMZsq1CylPCHJO7J8cZ+k6bi8Zfi1v2j76bkjqBzVxbn0nLrzKkp62ZLrv19K2Z/kfp/+9Kdyj9PuvopDAQAAAHC8OrlsX00jHWu0aULNUsqOJH+ROwLNmuSvk7whyYdrrdcfYb/3JHnqUQ79+SXX772KspYOVZ9fxb4AAAAAbBE1ddolbCmbJtRM8vVJ7rfo+vfVWl+7gv1OPsbtlyy5fv9V1HRRknOH33+p1vqgJCmlXHzmqac99HXf/dOrOBRLfWG2yZdv75yYA6WZvvSk/q3ZNsyO7zV/5dRqAwAAAFip7/zjX8mXbrp5MO06tpLNFGo+Y9H3n1pJoFlK6SQ562j3qbXeUkq5Mnd0aD5xJcWUUrYlecyiTZ9YfPuOO5+UB3zD01dyKEa48rZdOb3Xzf5eN5nblhOH27ul5u4nzKUkecBdVpM/s1TZPpt0jrauFgAAALAetv/N72TPjdfePO06tpLNFGqevuj7/1rhPudk9PybS701yfcPv79fKeW+tdbPHWOfp+TwRYXesvjGfXNzufCGK/Kkc8/N7OzsCstlQeeKbnYlufXmkh39knvcZZAv3txJkvRPqLnTrpqrcvc87Mz+0Q/EYebn5/P+8847dN35CQAAAJM1Pz+f/fMHMzh8DRgmrDPtAhZZ3FK20olVf3yF9/uHJde/ZwX7LL3Pm1f4WBxDb/grPncw6fWbf/bZbnLvuzZd2rfvj1koAAAAADiizRRqXrHo+6eWUo7agVlK+YYk/22Fx35XmvkxF/xIKeU+Rzn2k5K8cNGmf6m1fmaFj8UxfOqqbpJkz1wTaN7tTodPOTEYlMwdXPh+Q0sDAAAAoAU2U6j5jkXfn5zkz0opu5beqTS+O8kbh5uOGXvVWgdJfmbRphOS/HMp5V4jjv+IJH+TO56bQZKfXckPwMoNarL/YBNq7li0xvzdT27+OfcdaG775Be6G14bAAAAAJvbZppT85+SXJzkYcPrX5/kM6WUv07yyTQh432G2x8yvM/b0wSUTznWwWut/1xKeU2SHxxueliST5ZS3pDkwiSzSZ6Q5AXD7xf8VK11pXN8cgyD4bjyuYNl5Bjz7cNnfv/Bkpoay9wAAAAAsNSmCTVrrYNSyguSvDfJXYeb75nkpUfY5QNJXpTl82UezY8mOTHJtw+vn5Dke49UUpJX1lpftYrjcwyfvrrpvNw/HF5+2p1HN9oOBsmB+WSHNW4AAAAAWGIzDT9PrfXSJI9OE1Qeaa2YLyZ5eZKn1lq/tMrj92ut35Hkm3P4HJtLnZ/kK2utP3OU+zCG/qJFgpJk24hY/eQT6vA+TZ/mzbfr1wQAAADgDpumU3NBrfWqJN9YSjk9zbDyM9KEr9cluSzJ+4dzZC7c/2ljPMbfJPmbUsrZSR6RpiO0n+SaJB+utX5urT8HRzbfT/qDIweVJ+2quWVvyYH55voXb+7kLif2N6g6AAAAADa7TRdqLqi1Xp3kryf8GBfl6B2brKP+MIo+MN8EmjPHWAPowHzJoNZ0NGoCAAAAsMimGn7O8e2K65vTbaED87STj7lwfQ72JlkRAAAAAG0k1GTD7D/QtFwuhJqdo5x9d95dh/ctw30nWhoAAAAALbJph59vdrOzMzn9jDPSOVoyxzL9QdLrH3s8+Yk7a7605455NT9/XTcPvbd5NY+l0+nk9DPOOOw6AAAAMDmdTiezsyK2jeYZH9O2bdty//vff9pltM5qh5Mf7JUkNbVOpJzjTrfbdV4CAADABup2u9m2bdu0y9hytHGxIRaGjx/oNV2ap5507Pk0k2QwSOZXdlcAAAAAtgihJhviCzc2p9r8sFNz1/Zj77Mwcnp+3vLnAAAAANxBqMmGmB92aB6cX/k+dx12cy4MWd87t95VAQAAANBGQs0xzc/3ctVVV2UwMDZ6pfqDpD9Yedfl9tnm60Koec3NTtdjGQwGueqqqw5dnJ8AAAAwWYPBIPPzq1xEhDWzUNCYDh48mMs++9nc/e53t8L0Ch0cc/HyhdeFg4ahH1O/389ln/3soevOTwAAAJisfr+fgwcPTruMLUfawcT1h82CC0PQ77x7dUuZ9wclA6ufAwAAADAk1GTibry1CTMXOi5371h9QnlQFzcAAAAAQ0JNJu7G24Yrnw+Hn5dVjCK/064mAF3o8tSxCQAAAIBQkw1Rc0cwuRon7hyGmsNA9JY95tUEAAAA2OqEmmyI3iCpY3RZLqxxszB0/YZbnbIAAAAAW52EiA3RG4aSs93xxo/P95sOzd6YK6gDAAAAcPwQajJRh1Y+H4aSJ+0aL9QcDO44FgAAAABbm1CTifrSnsNXPt+1ffXHWJhFc16XJgAAAAARajJhN912+LDx1ax8vmChu7M37PYcZ25OAAAAAI4fQk0maiGIXBh+Po7dCyugD7s99x5Yc1kAAAAAtNjMtAtoq127duZxj398ZmY8hccyqM2cmOPqDqP33vAYN9/eye4dJtgcZWZmJo97/OMPuw4AAABMzszMTHbt2jntMrYciceYSinZudMJuxILHZbj92oefpzb9631SMcv5yUAAABsrFJKyjjz7bEmhp8zcfOD5hf7xJ1rmwyz1y8xnSYAAAAAQk0mZu5g87U37LA8YY2hZnLHEHQAAAAAti6hJhNzy97DVz6f7Y5/rO2zwxXQe2utCgAAAIC2M6fmmPbv35/zzz8/55xzjsVYjuCWvU1mvh7dlbt31ByYL8PV1GsGNemYrmKZXq+XCy644NB15ycAAABMVq/Xy/79+6ddxpYj7RjTYFBzYG4utZrl8Uj6ww7N+d7a08ed25qvC12fe+eSE62Hs0ytzXm5+DoAAAAwObXWDAbef280w8+ZqP4gWY9crTM8U+eHoeate526AAAAAFuVZIiJWuis7KzTmdY7FGoaew4AAACwVQk1maj5QRM+nrB9fdqwmzk1AQAAANjKhJpMxEJH5cK8musVaibrs/AQAMDx4g1/8Rc56cTd+eVf/qVplwIAsGGEmkzEbfuajsqFcHPb7NqPOTtTDzsmAAAAAFuT1c+ZiFuXhJrrYde25NbecAj6rFXFAACS5Guf+9w89rGPzSmnnDLtUgAANoxQk4nYNzeBUHNHza37yqFjHuwl25zBAMAWd6c73Sl3utOdpl0GAMCGMvyciRkk6Q/Wb2Gf2W7zdSHUXBjiDgAwrre//e35wR/4gZzzmEfn9HveI6fd/W550hOfkFf9+q/nwIEDI/f58Ic/nJe85MV50AMfkFNPuUsecP/75blf+zV5/etet+y+n/zkJflv3/Itufe9zsg973FanvnVX5V3vvOded/73puTTtyd7/++7zvs/s959rNy0om7c8UVVyw71hVXXJGTTtyd5zz7WYdtP9Kcmt//fd+Xk07cnfe9771517vela95zrNzrzNOz0kn7s4tt9xy6H7vfOc784LnPz/3OevMnHrKXfKIh5+dn37Zy3LTTTet9GkEANhwQk0mpj+hBX0Wjnu7UBMAWKMf/qEfzD/90z/mzne+S77qq74qT3zSk3LV1Vfn//yf/50XPP8b0+8fPuzkNa/5vXzVVz4jf/+mN+W0007Lc7/u6/LQhz40l1xySV7+8p877L4f/ehH84ynPz3/8i9vyT3vec8881nPytzcXF7w/G/MP/zDP2zYz/i3f/M3ef43Pi979+3LV37VV+XRj3lMSmn+jvr5//W/8vxvfF7e/e7/yAMe8MA85znPSbc7k9/7vd/N05/+Fbn++us2rE4AgNUweHdMMzPdnHLqqel05MJHstBRuWOd579cOO6+A0LNpTqdTk459dTDrgMAR/Zbv/XbefoznpGdO3ce2nb77bfnu/77f8/b3/62vPGNb8yLXvSiJMl5//mf+emXvSy7d+/OG/7yL/O0p33FoX16vV7+7d/+7dD1Wmu+//u+N3v27MlPvexl+dmfvSPwfO1r/yj/46Uv3YCfrvH6178+r3v96/P857/gsO3/8A9/n1e/+jfy0Ic+NG/4y7/K/e53v0O1//Iv/1J+9ZWvzE/+5E/m9a//0w2rFQDaqNPpZGamO+0ythyJx5i2b9+es88+O92uk/ZI+v0mdNy5fX1Dzf6gZEJNoK3X7XZz9tlnH7o4PwHg6L7ma7/2sEAzSU488cT8yitfmSR567+85dD233j1b6TWmv/5P/+/wwLNJJmZmckzn/nMQ9ff97735tJLL81Z97lPXvaynz7svt/zPd+bc8557Hr/KEf0zGc+a1mgmSSv+vVfT5L8yetedyjQTJJSSn7mZ342j3jEI/KPb35zbrrxxg2rFQDaqNvtZvv27dMuY8vRqcm6OzDffF3oqNy5bf0fo99POvI6AGAdfPazn82//us78rnPfS779u7LYDBIrc2HspdddlmSphPzP9/3viTJS77zO495zPe///1Jkm/4+m8Y+SHjC174glxwwYfX60c4quc85znLtt1ww/X5xCc+kfvd7/556EMftuz2Ukoe/4Qn5OMf/3g+duGF+cqv/MqNKBUAYMWEmqy72/cfvvL5enZg75itmZsv6Q3uWDgIAGActdb87M/8TH7v9373UIi51J49e5IkN998U/bv35873/kuufOd73zMY1/7xS8mSe5173uNvP3Me585ZtWrd8a9ltdwxRVXJkkuu+yzOenE3Ufd34JBAMBmJNRk3S2EmpNYKGjn9ibU7PdLss5zdQIAW8ub3vR3+d3f/Z2cccYZ+ZVXvjKPe9zjc+qpp2Z2djYHDx7Mqafc5Yhh5zQMBuP9cbVjx/LhcAvHuvvd755nPOPoXZj3HhGKAgBMm1BzTP1+PzfeeGPucpe7WIxliX1zh3dqrqed25IvLTr2gflk++z6P05bDQaD3HzzzYeuOz8B4Mje8s//nCT5jVf/Zp71rGcddtvln//8YddPOeXU7Ny5M1/60s255ZZbcvLJJx/12Hc/7bQkyReu/MLI26/8wpUjt89ua+bt2bt3z7Lbrr76qqM+5mqcfvrpSZJTTjklf/CHf7huxwWArWgwGKTfn0AIwlFJO8Y0N3cgF190kZP2CAZpFvRZbwtD2RdCzT1zVkBfrN/v5+KLLjp0cX4CwJF96ZZbktwR8C329//w94dd73a7efJTnpIkef3rXnfMYz/pSU9KkvzjP/3jyA7LN/3dm0bud9rdmzD0s5/57LLb/v3f//2Yj7tSp59+eh74wAfm0ksvzWc+85l1Oy4AbEX9fj9zcwemXcaWI9RkIiYx9HzU8ffsF2oCAOO5//3vnyR53ev+5LBh5u8/77z89m/91rL7/8RP/ERKKXnVq349733vew67rdfr5R3veMeh6095ylPzwAc+MJ//3Ofya7/2q4fd90/+5P/lQx/64MianvzkJydJfud3fif79u07tP0973l3fv81r1nlT3h0P/lTL8tgMMi3f9u35uMf//iy22+66aYVBbgAANNg+DkTsdAguGNC817q1AQA1ur7v/8H8pdveEP++LWvzX++73152Nln54vXXJMPfOAD+ZEf+dH89m8fHmw++clPyS/8wi/m5S//uXzt13xNvuzRj8797ne/3HTTTbnoE5/IwYMH84Wrrk6SdDqd/P4f/GG+7rlfm1/+pV/KP775zXnIQx+az33uc/nYRz+a7/6e78kfv/a1y2p6wQtfmN/8zVfngx88P4895zF59KMfnauvviYf/ehH8sM//CPLalqLb/qmb8qln7wkr3rVq/LUpzw5j3jEI3Kf+9wntdZ8/vOfz0UXXZTdu3evaLV3AICNplOTiegNh57v2DaZ4/cHJTVJNs/c/QBAyzzgAQ/Ie97z3jz72c/JTTfdlLe99a3Zu3dvfuu3fju/+Eu/NHKfH/2xH8vb3vb2PPe5z81VX/hC/vHNb84nL7kkD3vYw/JLv/TLh933sY99bN71b/+WZz/7Obnqqqvytre+NTPdmbzxb/42z3ve80Yef+fOnfnnt/xLXvDCF+b2PXvyr//6r+kP+nn9n/5pvud7v3fdn4P/9fOvyNve9vZ8/dd/fa677rq85S1vyXvf+970+/1813d/d/76r9+47o8JALAeymZa0bEtSikX3+te937oa17zmjzp3HMzO2ulmgW9fvKpq7q5dV/JrXtLTrvzINvWuR/4yhuaLP6epwwy00kedqZ5IxfMz8/n/eedd+i68xMANqf3ve+9+ZrnPCcvetG3WqgHAFpufn4+j3rkI/OFL1x5Sa31YdOuZ6vQqcm6WhgOvjD8fLa7/o+xbaYe9hgAAAAAbC1CTdbV3mGo2Rsu5FMmMOXlzuGQ9t4EVlcHAAAAYPMTarKu9uxvvvYm2EW5Y1s97DEmvdI6AAAAAJuL1c9ZV73+cPj5BLsoF+boXAgz9x9Idu+c2MMBAKy7pzzlqbnt9j3TLgMAoLV0arLuBjWZ5PpTC0PaF0LNhXk8AQAAANgahJqsu4Vh4TMTPrsWHmevUBMAAABgSzH8fEw7du7IIx/1qMzMeAqXWuigXJj7cnKPU5LUzB0Uai6YmZnJIx/1qMOuAwAAAJMzMzOTHTt3TLuMLUfiMaZup5OTTz552mVsKgtDzhfm1dw+O9lQczBIBtFuvFgpxXkJAAAAG6iUkm5HOrHRPOOsm4O95usdnZqTe6xD82pOcJV1AAAAADYnoSbrZt+BJmlcmOuyO8Gza8ewC7Q3mNxjAAAAALA5CTVZNwsL9vQ3IGhc6AJt5tUEAAAAYCsxp+aY5ubmcuGFF+bss8+2GMvQ3rnm60aEms18neXQ8PP+YLKdoW3R6/Vy0UUXHbru/AQAAIDJ6vV6mZubm3YZW460Y0z9/iC33nJLap3sYjhtsrBAUG8Duidnu83XhQB131xy4q6JP+ymV2vNrbfccth1AAAAYHJqrelvRIcXh9Hbxroa1CQbkKMtLBS0MH/n3gOGoQMAAABsFZs61Cyl3KmU8pWllJ8ppby5lHJ1KaUOL69Y58c6tZTyy6WUS0ope0spN5dSPlBK+eFSio7WFVoIGRc6KSftUKemUBMAAABgy9jsYd1vJXnxpB+klPJlSd6a5LRFm3clecLw8q2llGfVWm+ddC1ttxAybp/dmGHPzUJBNfuFmgAAAABbxqbu1FzkQJIPJfm9JOs6SUEp5S5J/jlNoHlLku9Mcs8k90/yy2kGUz8hyV+t5+MerxZWI9+oUHMwWOcTAgAAAIBNb7OHmq9N8tgkJ9VaH19r/eGs/4yNP5Xk9OFxv67W+vpa6xdrrZfVWn82ycuH93t2KeVZ6/zYx42DvebrwvDz7bOTf8yFeTXNxQsAAACwtWzqULPWel6t9YJa68FJHH84V+b3Dq++pdb6vhF3+/UkNw2//8FJ1HE8WJjTciFg7G7AmbVj2A3a70/+sQAAAADYPCYaPZVSfmDRwj7fcYT7lFLKvw7v86VSyr0mWdMST0ly8vD7vxl1h2Gg+ubh1a8qpeycfFnts2+u+boQapYNmOJyoRt0Ycg7AAAAAFvDREPNWuvvp5mvMkl+t5RynxF3+4kkXzX8/vtrrV+YZE1LPGbR9+cf5X4Lt+1I8tDJldNehzo1N7BrcmHezoUgdWAYOgAAAMCWsBHDz78rybVJTkzyhlJKd+GGUsojk/zK8Oqf1VrfuAH1LPag4ddBkiuOcr/Pj9iHRQ7MN6FmbwO7Jmdnmq8LQerc/IY9NAAAAABTNPFQs9Z6Q5oVxWuSJ2a48M5wGPdfJtmW5HNJfnjStYxw6vDrl2qtR4vErl/0/SlJ0ul0csLu3SkbMc66JQY1qRuz6HmSpDN86nvDDs29c/4tSik5YffuQxfnJwAAAExWKSWdzqZetua4NLMRD1JrfXsp5beT/FiSnyulvCPJt6cZyt1P8m211ts3opYlThh+nTvG/fYv+n53kuzcuSPnnHPORIpqq41cJGixhWHnzRD4DUxVN6GZmRnnJQAAAGygmZmZ7Ny5Y9plbDkbEmoO/VSSpyd5eJJ/yh1dkr9Qa/3ABtbBhCyEmttmNjZY7A2Hn+8/qCsRAAAAYCvYsJ66WuuBJC9K0xW5EGi+P8kvblQNI+wdfj1WnL54xfM9E6ql9Rbm09yxbWMftz8oqdnYRYoAAAAAmJ6NHvB/RQ6fn/Kvaq3TjKJuHH69cynlaF2rd1v0/U0TrKeVlq4+vn2DOzUXPzYAAAAAx7+NDjV/N8m9F13/pVLKWRtcw2KfGn7tJDlaHfdZus9gMMiePXtSN3JlnE1q7mDzdWEY+OwGTmowOwxQe0LNJEmtNXv27Dl0cX4CAADAZNVaM9BtteE2LNQspXxTku8YXv3lJDckOSnJn5dSprVE1EcWff/4o9zvCcOvc0kuSZL9++fykQsuSK/Xm1RtrbEwl+VCx+ZGLri9Y7b56rWj0ev18pELLjh0cX4CAADAZPV6vezff6w1qFlvGxImllLuleQPh1ffkeTnknzX8PqTk/zMRtQxwvuS3DL8/oWj7lBK2Zbk64ZX31lr3T/qflvZ3rkmxZxGsLiwKFF/YJEgAAAAgK1i4qHmsAvzz5OcnGYOy5fUxj8n+YPh3X6+lPK4SdeyVK21l+SPhlefW0o5d8Td/keSuw6/f82GFNYyc8NOzd4UZkfdPuzUXHjseY2JAAAAAMe9jejU/KkkXz78/rtqrdcuuu2lSS5NMpPkL0opJyzesZRyUinlCYsvi24+Y8ltD136wKWUs0opdXh5/RHq+9UkV6d5Lv65lPLiUspppZT7llJ+MXeszv62WuvbV/vDbwW9fprVx6fQLdkdnsELXaILQ+EBAAAAOH5NdEmXUso5Sf738Oof1lr/afHttdb9pZRvTXJ+kgck+c0k37PoLo9O8h9HOPx35Y4h7EnyniRPW22NtdabSynPTfLWJKclef2Iu52f5L+t9thbybTmtFyYv3NhoaB9B5KTdk2nFgAAAAA2xsQ6NYddl29IMptmxfCXjrpfrfWjSV4+vPrdpZRvmFRNR1Jr/ViShyd5ZZJPJtmXZq7N85P8SJKn1Fpv3ei62mRhkaCF1cin9fg6NQEAAACOfxPr1Ky17k3yoBXe91fTDANfuv3dScZOqWqtl690/1rrjUl+enhhlRZCxYU5Ljf+8UuSmv0HhJoAAAAAx7sNWf2c49/CfJrbp9SpORgkgyR1Og8PAAAAwAYSarImC6uOL8xpuW0KnZoL82r2pzSvJwAAAAAbS6jJmuw/2HxdWChoZgpn1EJ36KC/8Y8NAAAAwMYTarImC3NYLnRJlilMabnQHbowBB4AAACA49vEFgo63m3fvi0PevCD0+12p13KVC2sNj7Nod9Np2Y5VEOt0wlXN4Nut5sHPfjBh10HAAAAJqfb7Wb79m3TLmPLEWqOaWZmJqeddtq0y5i6fQudmlMc+n1Hp2bzdb6fbNuiZ3an03FeAgAAwAbqdDqZmdmiQcQUGX7OmgwGSc10h353h2fxQqi5MCQeAAAAgOOTUJM1G2ySVccPhZoHp1sHAAAAAJMl1GTNesMwcftsnWodC6HmPp2aAAAAAMc1A/7HdODAwVx66aV5wAMesOUXYxkM59Oc9jyWzRD4mrmDWzfU7Pf7+cxnPnPouvMTAAAAJqvf7+fAAcNGN5pOzTH1er1cd+21GWyWsddT1K9NiLhtZrqdmoNBMkiz+vlWNRgMct211x66OD8BAABgsgaDQXq93rTL2HKEmoytN+zQXBh+vrAK+TR0hs2ZfRkeAAAAwHFPqMnYFhbkWWgGnJni2bRtOJ/nwlB4AAAAAI5fQk3Gtn84d+VCd2SZ4lSWC/N5NvNqAgAAAHA8E2oytv0HDg81p2n7cD7PhVq28ryaAAAAAMc7oSZjO9SpuQmGfC/M57kQas5vgpoAAAAAmAyhJmPr95OazTHkuzs8kxdCzbmD068JAAAAgMkQarImg00w9HyxhVBz/4Hp1gEAAADA5Ag1WZOFEHHbzOaYxPJQqKlTEwAAAOC4JdRkTQ6FmrPTrWPBwlB4oSYAAADA8Wtm2gW0VSnJzKynbyFE3L5JOjUHg2aez802LH4jOS8BAABgYxW9VRtO+jGmXbt25dxznzztMqZmoUPzjuHn06tlQSlJrU1NM1u0B3l2dnZLn5cAAACw0WZnZ7Nr165pl7HlbNHoh7WaO9h8XQg1Z7rTq2XBwrye/S3cpQkAAACwFQg1GcvccM7KhQBxM7RZL3SLDvrTrQMAAACAyRJqMpZ9w1BzM81duX122KlZN0HCCgAAAMDECDXHVGsyPz8/7TKmZv+B5mtvE3VFLnRq9oZB62aqbSPNz88fugAAAACTVzfH+slbilBzTPv27cv7zztvywZH873h8PNN1BXZHZ7NC92jC/N+biXz8/N5/3nnHbps1fMTAAAANsr8/Hz27ds37TK2HKEmYxvUJJvok4iFeT0X5vncf3DzBK4AAAAArB+hJmNbCA9nu5so2cwddc0JNQEAAACOS0JNxrYQHm6bnW4dS/WHc2nuOzDdOgAAAACYDKEmY+sNmk7IhQV6Nov+oKQm6fV1agIAAAAcj4SarNpgONp8YUGebTOba/h5YtUxAAAAgOOZUJNVOzhcUHthmPdsd3q1LLUwv2evP+VCAAAAAJgYoSartrCq+MKcmp1NdBZtH87v2depCQAAAHDc2kRxFG2xf7gAz0KouZksDIXvD8ynCQAAAHC8EmqyanPzh3dqbiYLK7EvDI0fbMIaAQAAAFgboSartv/AQqi5+bohF+b3XAgz5+anVwsAAAAAkzEz7QLaatu22Zx51pnpdjfRKjkbaFA35wrjZZiz9hZCzYMlu7ZvwkInpNvt5syzzjzsOgAAADA53W432xaGjrJhhJpjmp2dzVln3WfaZUzNwkI83U3a67vQqdksarR1Qs1Op7Olz0sAAADYaJ1OJ7OzQs2NtkkjKTa7wXDOyoWFeTab/qFQc7p1AAAAALD+hJqMZWE+zW2btNd3ob4DBzffvJ8AAAAArI1Qk1VZmEdzoRNy2+zm7NSstZn3EwAAAIDjzybts9v85ufnc/nln8+9731mOp2tkw3PD4edHwo1N+EZNNNNev1m3s/OFmvUHAwGufLKKw5d32rnJwAAAGy0wWCQ+fn5aZex5WzCSKodDh6czxWXX5HTTz9jS4VGc8Ph3Auh5mZcKGi2W9Prl/T7yewmrG+S+v1+rrj8jlBzq52fAAAAsNH6/X4OHhRqbjRpB6uysPDOQqi5GW0fLjg2GGyxNk0AAACALUKoyarsX9KpuRktrMjeG9ZYza0JAAAAcFwRarIqB1oQas4OJ1UYDGtcmAcUAAAAgOODUJNV6fWTms09tHthns+F4HX/gc1bKwAAAACrJ9Rk1QabuEtzsYVQc85cvQAAAADHFaEmq7YQFm6f3dyTVerUBAAAADg+CTVZtYWwcGHuys2qPxwiv7C4EQAAAADHB6Emq7YQFm7//9m78zg56jr/4+9v9TFnDkggAQIECHeQsIQzgIAXKniLgLrrvbi7roK76nr8PHbx1l3vWzxRQF2jLqCicgU5JShHlHAEAgRIyDUzfVXV9/dHVfX0XElPT3dXd9Xr+XhMuqunu+czM5V+PPo9n+/3k+3sTk3fj/b/jLsSAAAAAAAANBOhJuoWdWh2Q6dm1JvZyVPaAQAAAAAA0BhCTdStWA4uq6FmJr5adiYf7vdJqAkAAAAAAJA8Hdxr19n6+/t14ooVyuVycZfSNsVwb8ooKDQdvFVlPiuVKulbep7L5XTiihVjjgEAAAAAQOvkcjn19/fHXUbqEGo2yJj0BUbRwJ1uCArzWSvJhPt/dvben82WtvMSAAAAAIC4dXLjV1Kx/Bx1K4xbft7J8mGuN34fUAAAAAAAAHQ/Qk3UrVwJ/uzg+p3/54dseGZHYWa0HygAAAAAAAC6H6EmpsW36orV3FHbdxRqjpQ6P4gFAAAAAABAfdhTs0EjIyNateoGHXvscanawzAKCbMdPPm8VlRvqZKOvTUrlYpuueXm6nHazk8AAAAAANqtUqloZGQk7jJSh1CzQdZKbsWNu4y2i0LCYBBP5/O84HKkFG8d7ZTG8xIAAAAAgDjZ7ohJEoXl55gWL9xPM98lcXhUb8Vl+TkAAAAAAEBSEGqiLtFfHKJOzZ5c9/wJwu+eUgEAAAAAAFAHQk3UpVQJLv1wOXeuC/bUjGqMglgAAAAAAAAkA6Em6lKsBMu33TAgdLrgzMmH3aQuoSYAAAAAAECidEE0hU5QCAfteF20lDva9zPaVxMAAAAAAADJQKiJuhTLQTAYLT/vBtGEdj/s1GRvTQAAAAAAgGQg1ERdCmGo6dnu6XrMRZ2aYRAb7QsKAAAAAACA7kaoibpYK/ka7XrsBk6Yv0aDgqJuUwAAAAAAAHQ3Qk3Uze+iIUG1olAz2hcUAAAAAAAA3S0bdwHdKpvNasHChXK6LeGbgWgZd7RXZbeohpplI6m7ap8ux3G0YOHCMccAAAAAAKB1HMdRNkvE1m78xBvU05PXIYccEncZbRVNEc932VkT1G1Tsfw8k8mk7rwEAAAAACBOmUxGPT35uMtIHdq4ULeo47Gnyzo1o/1AAQAAAAAAkAyEmtipihtcRqFmros6NTPhGe6RagIAAAAAACQGoSZ2qhAu244GBWUzMRYzTdH+n74XcyEAAAAAAABomi7quessrutqw4YN2n333RM/jKVYDi7dLux2zGelQnl0X82k831fTz75ZPU4DecnAAAAAABx8n1fruvGXUbqEGo2qFQq669r1mjevHmJD41Gok7NLswE8zkryVSXn1srmQTPC/I8T39ds6Z6nIbzEwAAAACAOHmep1KpHHcZqUPagZ0qlIIU0O3CJdzRpPYo1CzzhxMAAAAAAICuR6iJnfL9YOG273dfi+P4QUHFcvd9DwAAAAAAABiLUBN18btwP81aUahZoBscAAAAAACg6xFqoi7RkKCeXBdurKnaUJNOTQAAAAAAgG5HqIm6RJ2a+S4dLeWFS+ej/UEBAAAAAADQvQg1UZcoFMxnu7NT0/clX8H0cwAAAAAAAHQ3Qk3sUDTxPFq+nc/FV0ujnLA5s9v3BQUAAAAAAECAUBM7VAwH60ShZrYLz5iou9TzYi4EAAAAAAAATdGlOyS2hzHm7ik+dUBbC4lRNFgnCjVNF25Jmc9JxUq0hJ715wAAAAAAAN2uC/vu0E4jpbGhZjfqiTo1u/h7AAAAAAAAwCg6NXfAWnv4ZLcbY+7u6+s97Ojly5XNJvtHWAw7Nd0uXrqdC39FUahZdrt3ivvOZLNZHb18+ZhjAAAAAADQOtlsVn19vXGXkTokHg1yHEeDg4Nxl9Fyrhcs2Pb9Llx3Hspmgsso1CyWTddOcd8ZY0wqzksAAAAAADqFMUaOw2LoduMnjp1KytTwKNQslOKtAwAAAAAAADNDqImdisLAbu9urIaa5e7tOgUAAAAAAAChJupQDTVz8dYxU9H3MUKoCQAAAAAA0NXYU7NBhUJRt912m5YtW5b4YSxeuJ9mT5d3avq+kS8rJyHL6Sfjuq5Wr15dPU7D+QkAAAAAQJxc11WhUIy7jNQh7WiQ7/saHhqStd0d9O1INPE8CZ2axkjWBvuDJnnvXmuthoeGxhwDAAAAAIDWsdbKT8pAki6S4HgHM1UsB5dRqJnt4rMl2g/U82IuBAAAAAAAADPWxTEVWi0aqBOFmqaLt6LsCbtMo6X0AAAAAAAA6F6EmpjSSGlsqNnNqp2a4ffCqmwAAAAAAIDuRaiJKVU7NROwZDsf7h4bhZqVBHxPAAAAAAAAaUWoiSl5nmSVjCXbmfBMj0LNYrn7vycAAAAAAIC0ItTEDiVleFe0H2gUao6U4qsFAAAAAAAAM0OoiR1ywxAw2pOy20WhZqFEpyYAAAAAAEC3ItTEDkWdmtH08G4XLaUfYfk5AAAAAABA1yLUxA5FIWBSOjV9X/KlYLNQAAAAAAAAdKVs3AV0q0zG0Zy5c2VMMjv+3HA6uJugTk3HSL4NlqA7CY3zjTGaM3fumGMAAAAAANA6xhhlMgkNGjoYoWaDent7tWzZsrjLaJmRcM9JPww3k/B/M5+zKpZN8D0l4PuZTDabTfR5CQAAAABAp8lms+rt7Y27jNRJaLSDmSqE08GjTs0kNPz1hBF+tKQeAAAAAAAA3YlQE5OKBulE08KTIJ8LNtKMglrLvpoAAAAAAABdiVATk4qWnyepqzHq1IyW1Jcq8dUCAAAAAACAxhFqNsjzfW3ZskU2qe1+NpgS7ieoUzMaDhR1ahbKyQlsI9ZabdmypfqR2PMTAAAAAIAOYa2Vl6QApUsQajaoWCjqztWr5bpu3KW0TLT0PGnRX/R9Rd2oSeK6ru5cvbr6keTzEwAAAACATuC6roqFYtxlpA6hJqYULdPuySWr22801Iy3DgAAAAAAADSGUBNTivbTzOdiLqTJou+rXElepyYAAAAAAEAaEGpigmgbxmjvyaR1alor+cn6lgAAAAAAAFKFUBMTRFPBq8vPs/HV0mzZTHDpsX8vAAAAAABA1yLUxATRAJ2oU9NJ0FmSzwYtmi6hJgAAAAAAQNdKUFyFZolCzSR2M/aE+4NG+2oCAAAAAACg+xBqYoJoKngyQ82gU9MLl9Yn8XsEAAAAAABIOkJNTFBxo07N5HUz5sbtqVkoxVcLAAAAAAAAGkOoiUn5dnQKepKYMKeNQs1oqT0AAAAAAAC6B6EmJuWGy7OjaeFJQ6gJAAAAAADQvbJxF9Ctent7dPjSpcpkkpn6RaFftAdl0kSh7XDCQs1MJqPDly4dcwwAAAAAAFonk8mot7cn7jJSh1CzQZlMRvPnz4+7jJaJ9tNMaqjp+0a+rJyEfXuO4yT6vAQAAAAAoNM4jkNTUQxYfo4xog5Gt9qpGV8trcbkcwAAAAAAgO5EqIkxoj0m/WhPzQSeIVH3afQ9AgAAAAAAoLskMLLCTIyUgsuoU9Mka8tJSVJv2H0aLbEHAAAAAABAd2FPzQaVSiXdddddOvTQQxO1b8JQMQj6krw0O+jUNNXg1reSk5B80/M83XvvvdXjpJ2fAAAAAAB0Gs/zVCqV4i4jdQg1G+S6njZt3Cjf9xMVGpXKQbrneglJ+SaRD896L1x+XipLfQkZUub7vjZt3DjmOEnnJwAAAAAAncb3fbkue9y1G8vPMYFvJZuwqeC1nPCsjzo1h0vJDXABAAAAAACSiFATE0RLz5OyJHsqfhRqFhP+jQIAAAAAACQMoSYmiELNaEp4UkWd4XRqAgAAAAAAdBdCTUzghlPBe/MxF9Jinm9kJdkED0UCAAAAAABIIkJNVEUdmtEAnaR3akrJnvIOAAAAAACQVISaqBopBpdR0JdL8NDsfDYIbD2GkwEAAAAAAHQdQk1URXtLRntNmgRvNRktrff8BH+TAAAAAAAACUWoiaqhcAp4GpZkR0vr3fB79ZO/0h4AAAAAACAxCDVRVSpHoWbyuxd7ssFltPy8WI6vFgAAAAAAAExPNu4CupXjGPX09sokbI22byU/BZ2aThjnR52aw0Wj/p7ub9c0Jjgva48BAAAAAEDrGGPkOLz/bjdCzQb19fXp+OOPj7uMpouWnqfl/6JXE2ruNqf7Q81sNpvI8xIAAAAAgE6VzWbV19cXdxmpw/JzjBF1Lvbmuz/gq0c0FGm4mJIUFwAAAAAAIAEINTGG5wXhXjRIJ+l83ygFq+0BAAAAAAAShVATkqSKG1yOdmrGV0u7pWHaOwAAAAAAQJIQajbIWqtCoSBrk9HROFwKJ5+Hy7GzKTgzom7U6HtOgui8jD6Scn4CAAAAANCprLW8/45BCqKr1hgZKeiWm2+W67pxl9IUQ4Ug1Iw6NdMwNLs3F1y6fnK+Wdd1dcvNN1c/knJ+AgAAAADQqVzX1chIIe4yUodQE5JGB+UkqWtxZ6JhSNH3zDJ0AAAAAACA7kCoCUnBFHCrZHUt7kw+G1xGYeZIMb5aAAAAAAAAUD9CTVT5voJkMyWiJfZu2Km5vZieQBcAAAAAAKCbEWqiKtpPM5uJt452izo1o31FAQAAAAAA0NkINVHleUGoF+01mRZu+H1XXEJNAAAAAACAbkCoCflhhhl1avbl0hVqWjv6MwAAAAAAAEDnI9SECqXgMpoC3pOLr5Z2y4T/A9wUTX0HAAAAAADodoSa0FA4ICfq1HRSdFZES+09Qk0AAAAAAICukaL4ClPZHg7IiQbmpElfGGq6fvAzsCxDBwAAAAAA6HiEmlCpHHZqeukblNMbLrWPlp8XyvHVAgAAAAAAgPpk4y6gW+XzeR2wZIkymUzcpTSFbyU/hZ2a0VL7aOn9UMGov6d72zUzmYwOWLJkzDEAAAAAAGidTCajfD4fdxmpQ6jZoFwuq0WLFsVdRtNES8/T16sZiL7/7QWj3ed2b6jpOE6izksAAAAAADqd4zjK5YjY2o3l55A0uvy6r4u7FGciWnpfLKc11gUAAAAAAOgehJopFw3GiUK9aHBO2vh+sAQfAAAAAAAAnY9QM+WK4WAcL+zU7E3xFhBpnP4OAAAAAADQjVjw36Byuay1a9dqv/326+phLNsLQYdmJQz0MimMufvyVoWyketJue79VUqSPM/Tgw8+WD3u9vMTAAAAAIBO53meyuVy3GWkTgojrOaoVFw9un69/C4fGb4tDDXT3KUYTTuPluDbLl6G7vu+Hl2/vvrR7ecnAAAAAACdzvd9VSpu3GWkDqFmypXCwThRoJdG0ZL7aAl+kT+uAAAAAAAAdDRCTci3waCctIqW3EdL8KPuVQAAAAAAAHQmQk3I9eKuoDNES/C3jRBqAgAAAAAAdDJCTVSXXUd7S6ZVtAS/XCHUBAAAAAAA6GSEminmhxlmxQ9CvL58ukNN3x/9mQAAAAAAAKBzEWqm2EgpuIw6Nfvy8dUSNxM2Z7IUHwAAAAAAoPMRaqbY1uHg1++Ge0k6KT4boqX3aZ4CDwAAAAAA0C1SHGMhGohDd2JNqBkGvGmeBg8AAAAAANDpCDVTLAru6E6UenPBZRTwDhX5mQAAAAAAAHQqQs2U83zJMhxnwp6aW0cINQEAAAAAADpVNu4CutXAQL+eeeqpcZcxY1GIlyXeljT689g2bKT58dbSiFwul4jzEgAAAACAbpHL5TQw0B93GalDlJVyFT/oSOzvpV1TCpbi85MAAAAAAADobISaKVV2g8uoMzEalIPRYUEAAAAAAADoTISaKbV1OJx8HoabeTYiUD4bTkBnGjwAAAAAAEBHI9RMqS1hqOnRlVg10BtceuE0eAYoAQAAAAAAdCZCzQYND4/o2muuUaVSibuUhpQrQXBX8ZjyHYmW4Efdq4VyjMU0qFKp6Nprrql+dOv5CQAAAABAt6hUKhoeHom7jNQh1Ewx30o+nZpVmfB/QyX8mWwZIvAFAAAAAADoRISaKcbekZOLfi5bhvnvAQAAAAAA0IlIbVLMDZeeD/SyeWStCntqAgAAAAAAdDRCzRSKOhEr4eUgoeZYVnJZlg8AAAAAANCxCDVTaHO4V2QUbuazMRbTYbKZ4JKl+QAAAAAAAJ2LUDOFxoeahnk4VVHXqssSdAAAAAAAgI5FqJlCFTcI7KK9IzEq2l+04gbHI6UYiwEAAAAAAMCkCDVTyreSz76RE2TC/xHRnppPD/FfBAAAAAAAoNOQ2KRU1ImIybnhz2fbMN2sAAAAAAAAnYZQM6UqfhDWzepj08jJVDwjfjIAAAAAAACdibnXDcrlstpr0SI5TnflwsVycBl1Ig4Sak7J9aVcd/165TiO9lq0aMwxAAAAAABoHcdxlMsRsbUbP/EG5fN5LVmyJO4ypm3T9iDkqoSTz3OZGIvpUD05q1LFyHWlXD7uaqYnk8l05XkJAAAAAEC3ymQyyue7LEBIANq4UmbLULDs3PViLqSDDUYT0MPp8B4DlQAAAAAAADoKoWYKWUkVlwE4U+nvCS6jJfpREAwAAAAAAIDOQKiZQi6dhztkwgwzWqK/cRuhJgAAAAAAQCdhT80GVSqu1q9frz333LPrhrFEHYj5LEOCdiRYfm7let0Tavq+r8cee6x63I3nJwAAAAAA3cT3fVUqbtxlpA6hZoPK5bLuX7tWCxYs6JrQKNobMtorcnY/oeaO+H7wM8t0x69XkuR5nu5fu7Z63E3nJwAAAAAA3cjzPJXL5bjLSB3SjhTZtD0IM6M/HvQxmGunKgxUAgAAAAAA6DiEminy1Nbg1x0FdaZ7VlW33ZywizUaqGRpagUAAAAAAOgYhJppEgZzTD7fuVl9wQ/LDQPgrSP8zAAAAAAAADoFoWbKuD5dh/WItqEsh6Hmk1sINQEAAAAAADoFoWbKRPtpdtPwmzhFPy+6WwEAAAAAADoH0VZKjJ98PmfAj7Ga7uH7Rj6drQAAAAAAAB2FUDMlNm4dO/l8oCfGYrpM2Y27AgAAAAAAANQi1EyJjduYfD5d4yeg+zS3AgAAAAAAdARCzRSxksrsDVm3WVGoGQbBTw/xswMAAAAAAOgEhJop4noKkk3UxQkzzGjJ/hOb+e8CAAAAAADQCbJxF9Ct+vv7dOxxxymb7Z4fYbSMOp8l2ZyOsmtkZdUNfZrZbFbHHnfcmGMAAAAAANA62WxW/f19cZeROiQeDTLGqK+vO07YQim4jAbe7DJIqDkd1kquL+W6oFGzm85LAAAAAACSwBgjw/CStuuCmAYz9ejTY4cE9eRiLKbLZDPBZaXCixMAAAAAAECnINRMgVI5COTKlZgL6UK7DgYjz8thIFwox1gMAAAAAAAAJBFqpoZvJc+n23C6evPBZTQs6NGN/JcBAAAAAACIG3tqNqhQKOimm27S8uXLu2IYS7SfJhoTdbmWOnwZuuu6uu2226rH3XJ+AgAAAADQrVzXVaFQiLuM1CHtaJDvW5WKRVnb2UN33HDZdDmcfD53oLPr7VSeb+RbK6ezM01ZG5yXtccAAAAAAKB1rLXyfd5/txtraRPu0U3BrzjqNJzVx3+yRpXodgUAAAAAAOgIhJoJN1QIWgujPSFNh3cadqJoWFAl7HYtMXAJAAAAAAAgVoSaKeBbqeKRZjZqsC+4jMLM9QwLAgAAAAAAiBXpTAowJKg5om7XYpmAGAAAAAAAIE6EmgkWhZkMCWoO1zNi318AAAAAAID4EWom2MNPMiSo2dhPEwAAAAAAIH6EmglWqowdbMOQoMbNnx0MCyqFXa/DxTirAQAAAAAASDdCzYTzfMnzSTNnqr8nuIy6Xh96IhNfMQAAAAAAAClHqJlwZZZLN1W0PykAAAAAAADik427gG6VzWY0b/58OU5n5sKbh8Kl52EIt2CuH2c5ieH7UsWTch3aqOk4jubNnz/mGAAAAAAAtI7jOMpmOzQoSDBCzQb19PRo6dKlcZcxpcc2BWFWtJ9mTy7GYhIil7WquEalilEuY+X7UqdlhplMpqPPSwAAAAAAkiaTyainpyfuMlKnwyIZNJOv0U5NzNyCOcH0+Cgofvgp/vsAAAAAAADEgVQmwSoVSTbuKpIj6sqMQs3hIoExAAAAAABAHAg1E6hQCi6jLs3Z/SSbzeR6Rh5blAIAAAAAAMSGULNBnudp48aN8v3OS7ce2BBsTlssB8dzBwg1m61UCQJj22E/Wt/3tXHjxupHJ56fAAAAAAAkie/78jwv7jJSh1CzQcViSXffdVfHnrRWo8EbmmfhLkFIWAyXoD+6qbP+C3mep7vvuqv60annJwAAAAAASeF5norFUtxlpE5nJTJomrLbeV2ESZDPBpfRvppbhwmOAQAAAAAA2o1QM2GGisFl1KU52Euy2QoVl301AQAAAAAA4kKomTDrnhi7n+auswg1W6UYBsdsWwkAAAAAANBehJoJ5Gs0cEPz7blruK9mGByveTQTYzUAAAAAAADpQ6iZQKWKgklBaIlsmGEWwlDT0qkJAAAAAADQVoSaCfLIU8Gvs1gKujTnzyZtayXfNyq7cVcBAAAAAACQPoSaCbJtJAgzo2XR/T0xFpNwvfmgFTZa5s8UdAAAAAAAgPYh1EyYii9VPAK2Vtt9ThBqFkrB8fqN/FcCAAAAAABoF5KYhNheCC4L4dJzh1yzLUoVI5/9SwEAAAAAANqKUDMhHn4ymF4TdQ7uNY/9NNtlpBwkyOyvCQAAAAAA0B7ZuAvoVr19vTpy2TJls53zI/T8oHNQkgydmi23aJ6v9ZscFUrSYI9036MZHb6vF2tN2WxWRy5bNuYYAAAAAAC0TjabVW9fb9xlpA6JR4MyjqO5c+fGXYYkabgYXBbKJJnt5IR9zoWykW9tRyz5N8Z0zHkJAAAAAEAaGGOUcVgM3W78xBPgoSeCpefD4dLzRfNZet5WdnQJeqkScy0AAAAAAAApQKiZEJ4vlcoMCWq3aO/SaC/TtY9lYqwGAAAAAAAgHQg1u9yTW4MEc7hEkhmHTLQEvWTk0SALAAAAAADQFoSaDSoWi1q9erVcN96R109tCX6FI2Gn4N4sPY/NSBgsP7ElvoDZdV2tXr26+hH3+QkAAAAAQNK5rqtisRh3GalDqNkgz/O1dcsWWWtjqyH60mVXKjP1PDZRkDwUvn5t3BrffytrrbZu2VL9iPP8BAAAAAAgDay18li+2XaEml3snoeD/RuHikGS2d9DgBWHKEiuuEalsDHS51cBAAAAAADQMoSaXc630nAYas6fTZIWl1l9wc9+qBD8Lu59mIFBAAAAAAAArUKo2aXueyz41Q0XjVhhHL9dBoNfwnCRgUEAAAAAAACtRqjZpcoVIytpeyE4ZkBQ59geds7evY5uTQAAAAAAgFYg1OxCj2wMfm2FkpHrMSCoU+yzWzgwqGDYUxMAAAAAAKCFsnEXMFPGmIck7Rseftha+6FpPHa5pEMk7SmpIOlRSTdaazc0ucym2jYcdGluHQmO99yVLs1O4vvB8KbZfVZ3r8vo8H29uEsCAAAAAABIlK4PNRthjDlf0r9JOmCST3vGmN9J+ndr7Z/bW9nORUuaR0pGFTdoz8yyyrlj7D3f1yMbHW0bMRrstXLooAUAAAAAAGi6VC0/N8b0G2OulPQVTR5oSlJG0nMl3WqM+ce2FTcNvqStw8F1ujQ7S7QNgO9L20bYWxMAAAAAAKAVUtOpaYxxJF0i6YyamzdL+r6keyTNkvRMSS+UZCTlJX3FGPOUtfZnbS53UlE4NlQY3UuTLs3Os89uvh5+ytG2gtFAn1XOkUZKUn9P3JUBAAAAAAAkQ2pCTUlvlfTimuPrJb3YWru55rZPG2NOl/S/kmYrCDe/a4y5wVr7ZO2TOY6jgcFBmTZN6NkyHHydii9tDa8z8bzDWWnLkNFus60e3NCevTWNMRoYHBxzDAAAAAAAWscYI8dJ1WLojpCKn7gxZkDSB2puelzSi8YFmpIka+3vJdUuOx8c91hJUl9fr5YvX65stj258KPhxPPN241sOFmbvKpzRZPQCyWj4VL7lqFns1ktX768+tGu8xMAAAAAgLTKZrPq6+uNu4zU6ehQ0xhzjDHmjcaY9xhj3myMeY4xJt/AU50naUHN8YettVumurO19seSbq656U3GmMGp7t9qURi2vWBULAcBWRSaoXMtnBv8jp7eblQJf133PsJ+AQAAAAAAADPVkW1cxpgXSfqMpCWTfHqTMeZLkv7TWuvW+ZQvrbk+omBvzZ35hqTjwuu9Cvbi/EmdX69pokCzVJE2DwWB5l7zCDS7QT4XXForbdpmtPtcK4XbB8wZsPEWBwAAAAAA0MU6rlPTGPNJSSs1eaApSfMk/T9JvwuXle/s+XolPavmpj9aa7fXUcpvxx2fWcdjmioKNCu+9NS20bXmmY77rWEqUUdtuWL0dPg7XL/R0XAxzqoAAAAAAAC6W0d1ahpj3i3p32tusgrCxaslPS1pLwVdl8sknSLpS3U87SEKJplHbqqnFmvtw8aYR8OvKUnPqP287/saGhrSwMBAS4axRIGm50tPbTHyfZadd6toGvpIyWjzkLTLoNVDT2Q0f46vBXOb27FprdXw8HD1uFXnJwAAAAAACFhr5fvkNe3WMaGmMeYwSR+puWmzpJdba/8w7q4fMcb8s6TPS/oHSTs7aw4dd7x2GmXdr9FQ82BjjGOt9SWpUCjq9ttu04krViiXy03jKXcuCjRdX3pyi5HrEWh2u0XzfK3f5Gh7Ifhdzh202rjV0cataupUdNd1dfttt1WPW3F+AgAAAACAUa7rqlBgSWa7ddJC5os02lFpNXmgGXzS2i9Jel94uLPvYf9xxw9Po6ba+/ZLWjiNx07b3esyY/bQ3LCZQDMpHGd0L9TtBaON24z8sEnz7nUZuc3LNQEAAAAAABKvI0JNY8weGrtn5Y+nCjRrfFrSfXU8/exxx09Po7TN445nTeOxdbvvMacaZlpJW0eMntjisOQ8YTKOtPf84HdZKBlt2GxUrASf++v6IND2+FUDAAAAAADsVKcsP3++xtbyjZ09wFrrGmO+LeljO7nr4Ljj6fQDF3byXA0rVaS1j2XGfrGytGXYqOKO7oFIoJksxozusel6Rk9uMRrotZo9YJVzpDWPjJ4TzVyWDgAAAAAAkCSdEmoeW3O9KOm6Oh93lXYeavaOOy7XW5Sk0rjjvmk8tsq30r2PZII2zEk+N1I2GioEE7Ije8/3xXyX5NpnN1+PP21U8YyGi8HHQK/VYK9VT7gFZtS9G9ljV1+7zmruYCEAAAAAAIBu1Cmh5iE11++11tbbonaPJE9SZgf3Gd+ZmZ/0XpPrGXdc7dwslDxde/vTenj748pkpvdjdK1Udo3KZansjs06sxlpoMfq8Uen9ZToYltHxqbXGSP15KR8ziqXHd0j4s46nsvzXD3w103V443uY8o4485Pa5XftF1+vlP++wMAAAAA0PmcsqvyroPB4Iwanu+qUHLlZPsHYiotlTol1dil5vqT9T7IWls2xmwb9/jxhsYdj+/c3JE3jTv+sTGmLOmATU89pi9/8nyNjIxM4+kAAAAAAACQRJmeXfvjriFNOmJQkKTaJHv8PpY7M7yTz28bd7yjAHS88R2gbHAJAAAAAAAAxKxTOjVrg8np7lu5s9beB8cd7zON575T0inh9YKkQ621vjHm7rnzFh72ytd/RIv2O0pOHcvPHUfKGPZDROMq3s43WfU8V+vvv6N6vOiAo8Zsj+CUXe328BPq3V5Q79CIZIy87I52bwAAAAAAAJmKq3Jfj0bmDmrb/LkqzB2NozzP1X9/4CxtHxo/mgWt1Cmh5uaa67vX+yBjTF7S7J3c7Z5xx0vqfX5JB9RcX2OtrXZqDvbldNYpe+jEFQcol8tN4ymB1qlUKrpx1Ybq8fjz03tqSO69Wbnrt8huKSi3dI84ygQAAAAAoKtU7npcZjCv7OJ5yuw1V9kD5o9+rlLRNz+W05ZNjz8VY4mp0ynLz/9ac/0QY0y9rWOHasdDgiRpjcZOPD+hnic2xuwjaa+am/5SZ01A5yq5waXLTgoAAAAAAExLJXgvbctuzIVA6pxQ8+aa632STq7zcWfs7A7W2qKk39fcdIIxZlYdz/2ccce/qj3o6cnr4EMOUSbD0l10jkwmo4MPOaT6Mf78rL7wemyFAAAAAADAdFgvbBAqe2Nuz2Qy6unJx1BRunVKqHmlpNqY+807e4AxJivp9XU+///WXO+XdF4dj6mtoaSgxqpsNquFCxfKcTrlRwhIjuNo4cKF1Y/x56ethC+8Pp2aAAAAAADUzajaIGTHrX50HEfZbKfs8JgeHZHIWWsf19hOyHONMadMdf/QBZIOrvNLXCLpyZrjDxpj5k51Z2PMOZKOq7npm9baoTq/FtC5wlZ5+XRqAgAAAABQL5PPStbK+pIq3k7vj9briFAz9D5JlfC6kfS/xphTJ7ujMeZ8SR8PD3fachYGkv9Vc9MeklZOFmwaY06X9LWam4bHPRboWtHyc+v5krPzaeoAAAAAAEBSJozQfF+2TKjZCTqmN9Zae48x5gMaDSt3lfR7Y8yvJf1O0tMKBve8RNLfhff5rqRTJe1bx5f4koJ9Ms8Kj0+RdL8x5nuS7pU0GD7XmQpCVUmykl5vrd0gIAlcX9ZK8q1Mnv1gAQAAAACoSzYMNT1/9Dpi1TGhpiRZaz9hjJkv6d/Cm4yCYUCTDQS6TtI/S7q7zuf2jTHnKthfMxoCtKukd0zxkLKkC6y1l0/2yVKprDVr1ujAAw9kWBA6hud5uu+++6rHE85PY0aXnhNqAgAAAABQF5PLyEqyvtX4dY+e56lUKsdRVqp1XLRsrf13Bd2Ya6e4yyZJ/ynpWdba4Wk+97Ck5ykIQx+Y4m6+pKslHWet/fJUz+W6rp7YsEE+A1fQQXzf1xMbNlQ/Jpyfvl8dEmRyhJoAAAAAANQlF0Zok4yo8H1frutO/ARaqqM6NSPW2pUK9rw8TtIRknZTEGY+KOlaa2255r6Lp/ncVtKXJX3ZGHOMpEMV7LFZkPSopBvDwUVA4tiSW8cutAAAAAAAoJaJ5lLQ3NYxOjLUjFhrb5Z0cwuf/1ZJt7bq+YFOZKMXYMOgIAAAAAAA6hK9h/YnadVELDpu+TmAFgtff01vR/9NAwAAAACAzhFt4Uam2TEINYG0iTo1eSEGAAAAAKA+Uaemx/LzTkGoCaRN9PrrsPwcAAAAAIB6VPfUtDa8oFMoboSaQNpEL7xMPwcAAAAAoD6ZqaefIx6EmkDaMKkNAAAAAIDpiTJNL0w1Xd5bx41QE0ibaFBQlv/+AAAAAADUJdpTM3pTzRT02JFqAClR3e8jeuE17KkJAAAAAEA9TLT83CfU7BTZuAvoVsZI2Rw/PnSeKc/L8PW2Gm4SagIAAAAAMD3Re2vXk1GuejNvsduPVK5B/f39WrHipLjLAMbI5XJTn5deuN9HtO1HhldcAAAAAACmw1bnVIy+p87lcurv74+noBRj+TmQFlGoyag2AAAAAAAaE3Vqlirx1gFCTSA1oiwz3Pejuh8IAAAAAACoD++pOwa/ASAlrOuFV+KtAwAAAACArpQdjdFskU7NuBFqNshaqVLhBEbnqVQq1Y+xgv0+Rvf/AAAAAAAAdXP90a3dspkxn7I0ELUdoWaDRkZGdOOqVQSb6CiVSkU3rlpV/Rhzfpbd+AoDAAAAAKDLmfxokGlHytXrlUpFIyMjcZSUaoSaQFo44WQ2nz8fAQAAAAAwXbbsje6pmc/GXA0INYGUsBX21AQAAAAAoFGmZzTItIXyDu6JdiDUBNLGsqcmAAAAAADTZT1/dPXjuD010X6EmkBa2HGXAAAAAACgbsaY0YlAHg1DcSPUBFLClsJBQf7YlnkAAAAAAFCHnoxsGGpW32MjNiQbQEpUp7RZy4svAAAAAADTZAtutVOTZqH40akJpITdXqxeNwP5GCsBAAAAAKD7OLN7qtf9zSMxVgKJTk0gNUxfGGR6vmzRi7cYAAAAAAC6jB0uVwcFObN7Y64GdGoCKWGLlep1OjUBAAAAAJgeM1jTqTlUirESSISaQGrY8K9J1lomoAMAAAAAMF1e+L7atzKOibkYsPy8Qfl8Tvsu3leZTCbuUoCqTCajfRfvO+Y4YvLhf3ffShWWnwMAAAAAMB3R5HP5VsqNRmqZTEb5fC6mqtKLULNBuVxOixfvF3cZwBiO40x5XtZuYmwGWX4OAAAAAMB0mN6s7Lbguv/UkHToAknBe/FcjlCz3Vh+DqSEMyvc+8O3siOVHd8ZAAAAAACMYYtucMWzcnbtj7cYNCfUNMbYcR++MWarMeYmY8w7jDFNiauNMR8Kn/9103jM4vAx1zSphsWSDlu3bt20H/uC55+h2bMG1chjMdFUP8+lhx+m2bMGY6pq1PXXX6fZswZ1/j/+Y9ylSJJsya1eb2RQ0I9+u1LPveDV2vflJ+jAV52icz74z7rlntXTeo6Hn3hUu71w2U4//vV/Pjjha+/o/m/+xLun/f0AAAAAADAdpn803rLDDAqKW7OXn383vMxIWizpREnHSTrTGHOGtdad6oFAK61bt05HLD1cJ510kq648qq4y4mFLbqyfmOPfd/XP6mvr7xEfT29OvWo41Usl3XtHTfrmj/dpG+/91N6wQmn1/U8A739etWzzpry8yuv/42K5ZKOP/yoST9/+H4Haen+B0+4/eiDj6jvGwEAAAAAoFF29Ip1G3yDjaZpaqhprX1d7bEx5jhJ10h6lqRzJP2gmV+vTo9KOlTSyM7uOB3WWj300IPaZ5995Tj1Nbx+7evfUGFkRHvuuWczS8E4v/jlr+RW0rm82vd9PfzwaOdq7flpBvLS1oIkyZbr//vCtXfcpK+vvES7zp6rKz79XR2wVzCI6NZ779RL3vMm/et/f1ArjliuOYOzd/pc8+bsoi9e+J+Tfu5vDz+gS3/3S/X19OqsFc+e9D4vOOE0vevVb627dgAAAAAAmsYLgkzrW2UGe6o3+76vSkpziDi1dE9Na+3Nkr4THj6vlV9rBzVUrLVrrLUPN/l5te6hdfK8+qdI77333jro4IPZPLbF9t9/fx108MRuvjTwPE/rHlpX/ag9P/2nawYF9de//PwrP/++JOmCV72pGmhK0jGHHql/eMErtHV4u374m5/PuPbL//B/kqQzjjtVs/rj3z4AAAAAAIBapme0N9APm4ak4L14uUyo2W7tGBR0d3i5e+2NJnCuMebHxpi/GWOGjTHbjTG3GGP+yRizw9qMMccZY35tjNlijNlmjPmtMeb4Se7X0J6axpi9jTHfN8Y8ZYwZMcbcbox5zVT3/+hHL9LsWYP64Q9+oNtuu02vfMUrtO8++2j2rEH9+c9/ljRxD8innnpSu8ydo4MOXCLfn7xt+corrtDsWYN69XnnjrndWqvLL79MZ77wBdpn70Xabf48LT/67/TRj16kkZHpNaVeddVV+qe3vlXLj/477bXnHlq4YHedeMLx+vSnPqVSaeIeET/8wQ80e9agPvrRi/TAAw/oH/7+tVq87z7aa8899LKXvVRr1twrSXJdV5/+1Kd01LJl2m3+PB155DP09a9/bcLzrVu3TrNnDeoFzz9D27Zt07ve9e869JCDq9/TF7/4xSl/PpMZv6fmRz96kY5Yergk6YYbbtDsWYPVj2i/y9oaJlP7+x3v3nvv0bnnnKN99l6kPfdYqOc99zn67W9/u8Mam/n7q5fpz0k27JWv1PfzLJSKuuHOWyVJLzrpORM+f9aK4LZf33LtjGqz1upn114pSXrl6S+c0XMBAAAAANAK1SXnvh0TcCIe7fgNzAovnxx3e4+kSyRtknSPpD9JmqdgH84vSTpW0uumeM4TJX1N0lpJV0paIunZkk4xxpxlrf3NTAo2xuwn6UZJCyU9IOlqSXtJ+l5Y25RWrVqlf/3Xt2nJkiU6/Vmna8Pjj0+5PH233XbXaaefrqt/+1tdd921OvXU0ybc59LLLpUkvepV51Rv831fb3rTG/WTyy/X4OCgjjrqKM2dO1d33HGHPv6xj+m3v/2trrjiSvX19dX1/f7LP/+TisWiDj30MC1dulRbt23T7bffro985MO69tpr9POVv1Amk5nwuHUPrdNpp56q3XffTaeedpr+umaNrv7tb7X6jjv0x5tu1jve/nbdcMP1Ovnkk7V4v8W6/rrr9G/vfKfyubxe9/rXT3i+Uqmss858oR588EGdcsopKpcruvbaa/Te/3iP7vrLX/TVr00MROvxjCOeoRe/+MVauXKldt99dz372aPh3AknnNDQc0b+9Kc/6cwXvkBDQ0M67LDDdOhhh+mB++/XK17+Mr3xTW+a9DHN/v3Vy2QzUpRlZkxdj1m7/iGVKmXNn7OL9py/YMLnn7HkUEnSPQ/eN6Pabrr7Dj38xGPabe6uOu3vpv6d3Ln2Xn3oW5/V9pFh7b7LPJ105LFaccTyGX1tAAAAAADqYXJhNmKtZOp7X43WaUeoGbW+jZ/O4kp6qaT/s9ZWe3SNMbtJukLSPxhjvm2tvW6S53yzpIskfcDaoPXMGPNWSV+W9B1jzAHW2sIkj6vXlxUEmt+W9I/RgCNjzFmS/ndHD/zBD76vj3zkP/WOCy6o6wudffardPVvf6vLL7t8Qqi5fft2XXnFFZozZ46ed8ZoB+EXPv95/eTyy3XyySfr2xd/RwsWBGFTuVzWhRdcoO9977v6+Mc+pg9/5CN11fC5z31epz/rWWNCtO3bt+uNb3iDrrrqSl166aU677zzJjzuRz+6RBde+E598EMfkjFG1lr901vfqh/+8Ac668wXynEc3XHHas3fbTdJ0jXX/EEvOussffrTn5o01Lz11lu0dOlS3XHHas2bP1+S9MADD+j5ZzxPl1zyQ5155pk686yph8xM5cyzztIRz3iGVq5cqYMOOqjhcHQ8a63O/8e3aGhoSO9+z3v0vve9v/q5b3zj63rnhRdO+rhm//5e8PwzdMMNN0yr9s+96b0676Vn7/R+jz61QZK0xySBpiQN9PZpzsAsbRnapqGRYQ32D0yrjshPwqXnLznlecpmpn5Z+s0t1+k3t4y+JHz6R1/XiUccrW+8+5PafZd5DX1tAAAAAADq4owGmbbIcvO4tWT5uTHGMcYcYIz5iqRTJK2UdGntfay1rrX257WBZnj7U5L+Izx88RRfYp2kD0WBZvi4r0i6WdIekl4+g9r3VxDEbpN0Ye3EdmvtLyX9ZEePP/zww/X2d7yj7q931llnaWBgQL/4xcoJS71/+ctfqlAo6MUvfol6eoINaF3X1f/8z39rYGBAF39nNBCTpHw+r099+tNasGCBLv7OxXUv2X7hmWdO6AqcNWuWPvbxj0uSrvi/X036uMX77af3vf/9MuFfJ4wx+ud/+RdJ0po1a/TxT3yiGmhK0qmnnqYjjzxSDz/8cHUJ/nj/ddFHq4GmFOyP+a53v1uSJl26Hqfrr79Oa9as0eL99tN73vMfYz735je/RcuXHzPhMa34/T372c/Reee9Wued92qdc+65Ov30Z1U/zjn33NHPnfESverUF+rso5+txbvuUddzDxeDpfB9Pb1T3qe/Nzh3hgrDdT3neKVKWb+4IViuf/bpZ056nwW77qZ3vfp8/f7zP9YDl9+gu3/wO/3g/31OBy7aTzf+5Xa9+sNvm9b+tgAAAAAATJtXs/w8z/LzuDX1N2CMsZPc/A0F3Y6TfU7GmGWSnitpX0n9koxGl6wfOMWX+mlt2FjjR5KOk3SyGp+0flJ4eZW1dusUX+NVUz34jDOeXw356jEwMKAXvPCFuvyyy/Trq67Si148muNeFi09P2f0y61evVqbNm3Saaefrt13n9g919fXp2XLjtKvf32V7l+7VgcedFBddaxdu1a/+c2v9cADD2hkeES+7yv6ld1///2TPubkk06eMPRo8eLFkqRcLqeTTz5lwmMWL16sO++8Uxs2bNC+++475nO77LKrTj/99AmPecUrXqkL3vEO3XzzzfJ9v+5p86124403SpJe8uKXTLo8/xWvfIVuu+3WMbe14vd34TvfWb1eqVR046pV1eMTV6yo/o7Ktz8ib+OQvPs3KrPXnPq+yTb47S3Xa8vQNh24aD8tO/DwSe9z+tEn6vSjT6wez+of1POOe6ZWPOMYPfvt52r1ffdo5fW/0ctOfX67ygYAAAAApE1+9L2/LdNYE7dmx8rfDS97JR0p6RAFS8Vv1OgUdEmSMSYf3jZ2As5Ys6a4ffI2P+mh8HLPnVY6teixO/sak1q096Jpf8Gzz36VLr/sMl122aXVUPPJJ5/Qtddco7322ksrVpxUve/DDwdl/eH3vx8zDGcymzZtmjIVjlhr9b73vldf+tIXNUXurKGhoUlv32PPid1+g4NBTQsWLJg06BsYCD5fLk8cQLTPPntP+nXmzJmjuXPnasuWLdq8ebPmzeuMZcYbHn9ckrT3FHXvu8++E25r9u9vOuzwxJ/5zgz09ksKBgZNZaQY7PQw2DezpeeNDAga7OvXm190rt7zlY/r93+6kVATAAAAANAmk2coaJ+mhprW2tfVHhtj/l3SJyV9yRjzB2ttbVB4oYJA8y+S3qVgUNBma23FGHOQpL8q6NrsKr07WKY7lWc961maP3++fv3rX2vr1q2aM2eOfvKTn8jzPL3iFa8c05kYLUne/4ADdPxxE4a9j7Hrrrvu9Gv/9Kc/0Re/+AUtWrRIH/v4x3Xsscdp/vz5yuVyKpfLmj9v1ynDzh11THZKN2WzTGf6ej3P06zfnyR99jOf0d/+9rfg+a2vJ58Yncn1w0t+KMcEvwt/07BssSI7VNKrn/tSnXjSip0+9167LZQkPb7xiUk/P1wsaOvwds0dnN3Qfppbh7bp6ttukDFGrzjtBdN+vCTtv+c+kqQnNm9s6PEAAAAAANQligY8X8okK/foRi3dAMBa+yljzLMVLC//oKQ31Hz6peHludbau8c9dP+dPPXEFrixtz82rULHerzOr9E02WxWL3v5y/X1r31Nv1i5Uq/9+7/XZZddJkl61TnnjLnvXnvuJUk66MDmDLz51S9/KUn67H//j86oGUYkSQ89+OCMn386HnnkkUlv37Ztm7Zs2aK+vj7NnTu3JV87n89LkoaHJ98X8tH1j064bcHCIPB75OHJ6374kYcn3Nbs358kXX31b6c9KGjFMcfrxJ3fTUsWLVZPLq+NWzfr8Y1PTBgY9Oe190qSDtuvsZ7Sldf/RqVKWScsPVp7795Yg/WWoe2SpIGe5k6LBwAAAACglsnVBJlec5qf0Lh2xMrvCS9fa4ypDQR3CS/XT/KYnY1lfpkxZuLaZilKAKeX8IwVPfYMY8zsHXyNpjr77GDfzMsvv0xr167Vn26/XYcddpiWLl065n5/d/TRmjNnjlatukFPP/30jL/u5i1bJEl77bXXhM/97H9/NuPnn46nn35a11zzhwm3//QnwWymY489dtIl7fWIQkvXnXzPi3nz5imbzeqhh9bJdcdu11qpVLRq1cRT6sQTg1hw5S9WTtrJ+dOf/HTCbc3+/UnSFVdepW3bh7Rt+5A2Pb1Zv/zlr6ofm57eXP3cU/+3Wk9cerMe+8SVOueZkw/kGa+vp1cnHRkMPFoZDvOp9ctVwW3PO/aZDdV++R+ukNTY0vPIr1ZdLUk6YsmhDT8HAAAAAAB1Y+V5R2h5qGmtvUPSzxV0hb6r5lN/Cy/Pr72/MeYVkv5+J0+7WEHnZ+3j3iLpBElPSJqYJtVf7/2SfiNptqTP1IanxpgXSHplo8+9I8cee6z2239/XXfddfrC5z8naTTorNXT06O3v/0d2r59u17z6vP04CTdlI899ph+9KMf1fV1lyxZIkm6+OJvj1lmfuOqVfr85z7XyLcyI+9/3/u0adOm6vFDDz2kT3wimML+5je/peHnnTdvnnK5nB588IFJp2Tn83kde+yx2rz56TFT1l3X1Xvf+x966KGHJjzm5JNP0UEHHaQHH3hAn/zkJ8Z87tvf/pZuueXmCY9p9u9vOkxPVvLD3/E0/qL01pe8VpL035d+U/c/OrqDxK333qnvXflTzRmYpVc/9yVjHvOnv/5FJ/zjS/Sy9079O3vkycd08z13qDffoxef9Jwd1vA/l31Lm7ZuHnNbxa3oU5d8Vb+44bfq6+nVec9+Ud3fEwAAAAAADfNJNTtBu+bPf0jSiyW9wRjzn9baDQr22jxD0seNMa9UEHIeKGm5pE9L+rcdPN83JL3HGPMySX+WtETSMZIqkl5nrR2ZYb1vVTDc6E2STjPG3KpggNDJkr4s6Z8dxxkzWboZzj77bH3i4x/XxRdfLGOMXnn25A2rF77znfrbfX/Tj3/0Ix2z/Gg94xlHat/F+6pSLuu+++7TmjVrtHTpUp177o5mMAXOP/+tuuSHP9Q3v/EN3XD99Tp86VI9/thj+uMf/6i3ve1f9fnPty/YPOaYY1WplHXUsiN1yimnqFJxde2112hkZESvOuecMZPhpyufz+vZz36OrrzyCp14wvE6ctky5XN5HX/88XrNa4PQ7t3v+Q+99CUv1nve/W797Kc/04IFu2v16tUaGRnReee9Wpdc8sMxz+k4jr7y1a/pRWedqY9edJFW/vznOvSww/TAAw/ojj/9SW9685v1zW98Y0Itzfz9jZfL5XTiihVjjiO2VNOBmq+/4/WZRx2vt7z4PH195SU6/W2v0jOPOl5lt6Jr77hZ1lp9/oIPa87g2KbmQqmotesfUmmSgVCRn/zhCllr9dxjT9HsgalmggUu+u4X9OlLvqYjDzxMe81fqO0jQ7rrwb9qw6an1Jvv0ZffedGEpfEAAAAAADTVFPNDcrmc+vv721wM2rKrqbX2Tkn/q2Aq+oXhbddJOknS7xXsoXmmpLKkl0v60k6e8kZJz5S0IXzcoZJ+J+lUa+1VTaj3AUnHSbpE0lxJL1HQufl6BYGrJDU10JTGdmaeeOKJ2nvvyadqO46jr3/9G/rxjy/VaaedrnXrHtIvVq7UH//4R/X29urtb3+HvvTlr9T1NQ888EBde+11ev7zX6BNmzbpyiuu0PDwsD73uc/rvy66qCnfV716evL65a/+T6945St166236ne/u1p77bWXLrroo/rqV2e+/+QXv/RFnXPuuXr66ad1+WWX6Xvf++6YvShPO+00/fjSy/R3Rx+tO+9crRtuWKVjjjlG11x7nfbZd59Jn/OYY47R1b/7nZ7//Bdo/fr1uvKKK5TNZHXpZZfrpS996aSPaebvbzK5XK76MYEdd1mni97yLn3+HR/WgXvvr2vvuEm33ftnnbLsOP3iE9/SC044vaE6f3pNuPT8tJ0vPf+3c9+iE5b+nR576glddfM1uuHPt6qvp1f/8PxX6A9fuFRnrnhWQzUAAAAAAFC/4M10tNLV1nRsmq4bdd39zFSTrTE1Y8zdhxxyyGG33Hpb3KUkwrp163TE0sN10kkn6YorZ5xJYwqlVQ/I3zgk79GtyizeVc5gT9wlAQAAAADQNazry13zhJzdZimzYFD5E/aTyQUrIY89ZrnWrFlzj7X28JjLTA3mzwNpUbOPpsnyXx8AAAAAgGmhG7OjkGwAaUJjNgAAAAAAMxS+uWZgUKzaNSgocUZGRrRq1Q069tjjmr63JtCoSqUyZur6hPOTF1wAAAAAABpiMmFvoD821KxUKhoZmenMakwXoWaDrJXcirvzO2Kn9t13X23bPhR3GYlR13np0DMPAAAAAECzMLKm/Vh+DqQAA8EAAAAAAGguWzO7Au1HqAmkgRu80FovDDfp1AQAAAAAoCHVMJP+oVgRagJpZAg1AQAAAACYEd5ax4pQEwAAAAAAAKhHpiZKq3jx1QFCTSAVwuXn8sNLOjUBAAAAAJg+zx+dfo5YEWoCKWTYUxMAAAAAgJmhYShWhJpAKvBXJAAAAAAAZsrkMtXrluXnsSLUBFLARtPPaZEHAAAAAKBhtuKNLj+3vMeOE6EmkAZRSzwvuAAAAAAAzEz03pqt3WKVjbuAbpXNZrVg4UI5DrkwOofjOFqwcOGYY0ljw8wM5ywAAAAAAI0wvbnRAy94r+04jrJZIrZ24yfeoJ6evA455JC4ywDGyGQyk5+X5XCfD6tgUhsAAAAAAJg+35dMsK+mLbuSgvfiPT35OKtKpY4ONY0xcyQdI+nY8OMYSXuGn/6wtfZDTfgarwif92hJ+0raTVK/pKcl/UXSzyRdbK0tzvRrAbHJTNKxCQAAAAAApsWWPZne4D127dAgtF9Hh5qSPifpH1r8NX4sabKzcEH48WxJFxhjXmitva/FtQAtx4suAAAAAACNMQP56rJzxKtbNtcrSbpF0pckNXvt7L2SPivplZKWS9pD0t6STpF0cfj1DpR0lTGmv8lfG2gLW6iEV+KtAwAAAACApLDbWdQbp07v1PyGpC9K+rO1tixJxpjzm/kFrLVHTPGp9ZKuN8bcK+mTkvaXdLak70iS67rasGGDdt99d4YFoWP4vq8nn3yyelw9P3NOdAfZihdTdQAAAAAAdDc7XK6ugDR9wT6avu/Ldd04y0qljk7jrLWrrLW3RYFmTL5Vc/3o6EqpVNZf16yR5xEQoXN4nqe/rllT/Zjs/GT5OQAAAAAAjTGDPRNu8zxPpVKc0VU6tTTUNMa81Rhjw4+/n+I+xhjzm/A+m40xe7eypgZUaq6XYqsCmIlizV+MMh39twwAAAAAADqXY6pX/e3ERHFqabphrf2KpF+Gh180xuw3yd0ukPSc8Pr51tpHWllTA86uuX5rbFUAM5EJX3R9K1us7Pi+AAAAAABgcoWKrB8MrDC9nb6rY7K1o2XrjZI2SJol6YfGmOraV2PMkZI+Fh5+z1p7aRvq2SljzIAx5nBjzEcVDCeSpD9J+kmMZQGNM2GoaWuuAwAAAACA6and0o3317FqeahprX1K0usVxCknSPqAJBlj+iRdIikv6QFJ/9LqWnbEGPPsaKm8pCFJd0n6DwXDlC6VdLq1lg000Z08v3rV9OdiLAQAAAAAgO5lekZDTVtmOFCc2rK5nrX2KkmfDw/fb4w5QdJnJB0myZP0Gmvt9nbU0oCrJX3ZWrs17kKARtloT01rpbBNHgAAAAAATJNvg/fWklQi1IxTOyeGvFvSXyRlJP1C0lvD2//TWvvHNtYxlT8oWCI/S9ICSc+U9D1Jz5N0bbgUHehKpifc58O3sgX21AQAAAAAoBG26FabhUx/PuZq0q1toaa1tiTpPElFSfPDm2+U9F/tqmFHrLWetXYo/HjSWnudtfYfJL0jvMt/GGNeE2OJQFOY2b1xlwAAAAAAQFcygz2jB5aVkHFqZ6emJK2T9GTN8Y+6YJ/KzyvY81OS/jnOQoBG+VsLcZcAAAAAAECi+JuG4y4h1dodan5R0j41xxcZYxa3uYZpsdZaSbeFh8+IsxagUWYg+EuS9a3scDnmagAAAAAA6E62ELyntp6VmdMXczXp1rZQ0xhztqS/Dw8/KukpSbMlfd8Y0+5wdbrCDQlFXzG6HtPPAQAAAABojBkI99G0VjLx1pJ22Z3fZeaMMXtL+lp4+GtJ75d0k4KBQSdJeq86ZG/N8YwxWUnHh4f3R7f39fXq6OXLlc225UcI1CWbzero5cvHHEuSLY0OBzLZTv8bAgAAAAAAHcqMJpl2KOjazGaz6utjfkW7tTzdCLswvy9prqSNkl5nA7+U9NXwbh80xhzb6lomqW1JHV2iH5S0Z3j9Z9GNjuNocHBQxhDLo3MYYzQ4OFj9qJ6fFT+49K2sR8MxAAAAAAANid5TW1sdFGSMkePQQNRu7WgzfLekZ4bX32it3VDzuQslnSrpEEk/MMYcZa2t7rJqjJkt6bApnneRMeb4muNt1tp7au8Q7tf5YHj4XWvt68Y9x79Ier4x5vuSrlPQiTkkaY6koyS9RdILwvveL+kzO/xOgQ5l+sIl59ZKZTfeYgAAAAAA6FZ+1DRU814bsWhpqGmMWS7pw+Hh16y1v6j9vLW2YIx5tYKl6AdK+h9Jb665y99J+sMUT//G8CNyrYKAdLoOkvSfO7nPHyW9ylo71MDzA/Gzo92Z0dAgAAAAAAAwPaYnJ6kQHLAQMlYt6401xgxI+qGknKS/KujKnMBa+ydJHwgP32SMeUmraprEJxUEoz+Q9BdJT0pyJW1XUPMPJb1I0knW2kfaWBfQVP6m4Z3fCQAAAAAA1M1/mvfacWpZp2a4jPzgOu/7CUmfmOT2azSDWVLW2od29Hhr7WOSvh1+TEuhUNRtt92mZcuWMSwIHcN1Xa1evbp6HJ2fZk6f/Me3SZJsoTLFowEAAAAAwI7YcEs36/tyZg9ICt6LFwrFOMtKJdK4Bvm+r+GhIVlLrzE6h7VWw0NDY44lBdF+tIFxP3t+AAAAAADQiNp9NKPhvNZa+dFem2gbRjMBKTCmO9NpuPkZAAAAAACE/G10Z8aJUBNIg7I3ep3uYgAAAAAAGlP7lpr317Ei1ARSwAzkJT98sS3TEg8AAAAAQCNstMzcszIDPfEWk3KEmkDK1O7/AQAAAAAA6mfyjKfpFISaQAr4m4bjLgEAAAAAgESxw6W4S0g1Qk0gBcysXtlw+bmteDu5NwAAAAAAmJQXLj+3Vspm4q0l5Qg1gRQwjqluYGxyvOgCAAAAANCQ6D21tTJZYrU48dMHUmBMd2bGxFcIAAAAAAAJYYuVuEtINUJNIAXsSDnuEgAAAAAAAJqGkU0NymQczZk7V8bQ9YbOYYzRnLlzxxxLkhnokYaCYJM9NQEAAAAAaJANLz2/uqemMUaZDH2D7Uao2aDe3l4tW7Ys7jKAMbLZ7E7PS9Oba08xAAAAAAAkzGT7aGazWfX29sZQTboRIwMpYIdLcZcAAAAAAECyuKyEjBOhJpAaYY+8b3d8NwAAAAAAMDkbvqfmrXXsCDWBFDC9udEwk31gAQAAAABoTLR3Jg1DsWNPzQZ5vq8tW7Zozpw5DAtCx7DWauvWrdXj6vlpa15sM5yvAAAAAAA0ZJK31NZaeb7f/lpSjk7NBhULRd25erVc1427FKDKdV3duXp19SM6P22J8xQAAAAAgFZwXVfFQjHuMlKHUBNIBTPaGk+LPAAAAAAADQpaNW24ItK6dGjGhVATSIOsU12CbnL8twcAAAAAoCHRlm5Rv5ClcSgupBtAGrhezQF7agIAAAAAgO5GqAkAAAAAAACgqxBqAmnBXpoAAAAAAMyMCVc/euFemuypGRtCTSAtokwzw/JzAAAAAAAaYZxx76l5ix0bQk0AAAAAAAAAXYVQE0g4O37ZOavQAQAAAABoCsvy89gQagJJF+7zUQ03M/y3BwAAAABgJqxHmBk30g0gbdjvAwAAAAAAdLls3AV0q97eHh2+dKkymUzcpQBVmUxGhy9dOuZYHuvNAQAAAABomtoBvDZ4793b2xNfPSlFqNmgTCaj+fPnx10GMIbjOBPOS1txwyuEmwAAAAAAzJhnR+dVlF05s3poeosBy8+BpIvCzHBPTcOemgAAAAAAzIxlbkXc+MkDAAAAAAAAdTI5ujI7AaEmkHSsOgcAAAAAoCWs68VdQmqxp2aDSqWS7rrrLh166KHsm4CO4Xme7r333urxoYceKhO9wLKnJgAAAAAAM2YrnkxPGKl5Vp7nqVQqxVtUChFqNsh1PW3auFG+7xNqomP4vq9NGzeOOc6YYCqb9Qk1AQAAAABoiuqemka+78ulY7PtWH4OpEnGxF0BAAAAAABdzfTm4i4BItQEks/1464AAAAAAIBEsoVK3CWkFqEmkHRRS7xvJY8l6AAAAAAAzIQtVoL32JJMli0J40KoCSSdYck5AAAAAABNkzFS1DPEW+7YEGoCKWJy/AUJAAAAAICZYE/NzkCoCSScLbK/BwAAAAAArWC3l+IuIbUINYGky4b/zX1ftuLFWwsAAAAAAF3ODpdH99Tso2szLoSaQFpYSQ6bfQAAAAAAMBOmnyCzExBqAili8tm4SwAAAAAAoLsx8bwjkHA0yHGMenp7ZZgsjQ5iTHBe1h7b4XKMFQEAAAAAkDDWBh+S/K0FmYWDclgZ2XaEmg3q6+vT8ccfH3cZwBjZbHbCeen1hP/NPcvQIAAAAAAAZsgOlSQnWPxsBnuUzWbV19cXc1Xpw/JzIEXYwBgAAAAAgJlxZhNgdgJCTSDpbM112uEBAAAAAJiZ2rfWrh9bGWnH8nMg4exwKbxixwacAAAAAABg+qyqe2pW33Oj7Qg1G2StVaFQUC/DgtBBrLUqFovV497e3tEl51ayI+ypCQAAAADATNiRsuQHoaYZ6JG1VtbSRdRuLD9v0MhIQbfcfLNc1427FKDKdV3dcvPN1Y/x56eZ1RNTZQAAAAAAJIOZ3Tvm2HVdjYwUYqomvQg1gYSzFfb3AAAAAACgFWyRFZFxIdQEEq76Amttdc8PAAAAAADQoHDpufUlW/ZiLia92FMTSLhoT03rW4k9NQEAAAAAmBFbDrd6s1amPxdvMSlGpyaQIs64fT8AAAAAAMD0mIF83CVAhJpA4jHxHAAAAACA1rDbSnGXkFqEmkDSRftoWivrMTQIAAAAAIAZccP31r4vZYnW4sJPHkg40xNunetbiUnoAAAAAADMjB29NPlMrKWkGaEmkCLs+wEAAAAAwMxUm4cQK0JNIOH8bcW4SwAAAAAAIJH8TcNxl5BahJpAwpl8RjZcdW4rXrzFAAAAAADQ5awbvLe21soM9MRcTXrRL9ugfD6vA5YsUSbD3gnoHJlMRgcsWTLm2Ms61WFBxsRVGQAAAAAACZEJewR9K5NzlMlklM+z3Vu7EWo2KJfLatGiRXGXAYzhOM6E83JMbyb7fgAAAAAAMCOmduK5Dd6L53K83243lp8DCedvGom7BAAAAAAAEsnfWoi7hNQi1AQSzpnVI/nhppol9tQEAAAAAGAmqvMqrGR6c/EWk2KEmkDSOUay4fU8/+UBAAAAAJgJkw+XmvtWyvI+Oy4s+G9QuVzW2rVrtd9++zEsCB3D8zw9+OCD1eP99ttvzOcN5yoAAAAAADNTO4XXt/I8T+VyOb56Uoo4uUGViqtH16+XHy3rBTqA7/t6dP366ofv+/I3DcddFgAAAAAAiWRHyvJ9X5WKG3cpqUOoCSScmd0r6wfrz22ZF1kAAAAAAGbECxvcfDu6FB1tR6gJJJxxjGSDUNP08mILAAAAAMCM5KOt3WwwxwKxINQEEi7q0pQ0dt8PAAAAAAAwI9ZlW8K4EGoCCWe3FeMuAQAAAACAZHK9uCtILUJNIOHMQI8U7alZ4cUWAAAAAIAZiVZE+lbKZnZ8X7QMoSaQdEZS+HprenKxlgIAAAAAQLczOYLMTkCoCSQd3ZkAAAAAALQGy89jQ6gJJJwtuXGXAAAAAAAA0FSEmkDCmd6c5IfT2DymsgEAAAAA0BS8x44VoSaQJnn2/QAAAAAAYEYyJu4KICkbdwHdamCgX8889dS4ywDGyOVyE87LUrESTzEAAAAAAKRALpfTwEB/3GWkDp2aAAAAAAAAQL3s2Etr7ZR3ResQagJJl81IfvWVNt5aAAAAAADodk6w/NxG77U93mvHgVATSBGTZU9NAAAAAABmxGFPzU5AqAkknevFXQEAAAAAAEBTMSioQcPDI7r2mmt04ooVyuVycZcDSJIqlYpuXLWqenziihXBFTtuww8AAAAAADAz4VvsSrmk4eGReGtJITo1gTSI9vkwtMgDAAAAADAj0fJz3w8vaSCKA6EmkCbs+wEAAAAAABKA5ec7YIy5e4pPHdDWQgAAAAAAAABU0akJJJgNW+CjS7bUBAAAAACguWyFN9txoFNzB6y1h092e9jBeVibywGmb3yYmeHvGAAAAAAAzIQJ51VYL9xTk53eYkHCAaQJL7QAAAAAAMwcg3hjR6gJAAAAAAAATEdtosbq81gQagJJ5oet8JZXWAAAAAAAmsazo2FmxY21lLQi1ASSLAozo701HdrjAQAAAABoiug9N/MrYsFPHQAAAAAAAJiOXCbuClKP6ecNyuWy2mvRIjkOuTA6h+M42mvRotFj48iLsR4AAAAAAJLO8a1yOSK2duMn3qB8Pq8lS5bEXQYwRiaTGXNe+ttLQajJlpoAAAAAADRPxZN6gljNsUb5fD7mgtKHNkMgycItNG24z4cx7KkJAAAAAEBzhO+12VMzFvzUgbTIEGgCAAAAANAMppfFz3Ej1ASSzGfdOQAAAAAArWRLbtwlpBKxcoMqFVfr16/XnnvuybAgdAzf9/XYY49Vjxf2zY0+IXkEnAAAAAAANIMtujJ9wT6avvVVqRBsthuhZoPK5bLuX7tWCxYsINREx/A8T/evXVs93u2Io4Mr5JkAAAAAADRZ8GbbU5ATob1I44C0yGXirgAAAAAAgEQw/Uw7jxuhJpBg7OsBAAAAAECLDZXiriCVCDWBJHPCiee+lSpevLUAAAAAAJAQdqQ8Oruih90d40CoCSSYMWGoyaaaAAAAAAA0jemtCTLN1PdD6xBqAikx5gUXAAAAAAA0jrkVsSPUBBLMDjN9DQAAAACAVrJbi3GXkEq0bgFJFu3r4VnZIkODAAAAAABoBjtUkpygV9AMMAk9DnRqAilh2LgYAAAAAICmMLN64y4h9Qg1gSTzawYEZfjvDgAAAABAMxinZjqQ58dXSIqRcgBJNlwKLm31HwAAAAAAMFNWkg3eZ9uhUry1pBTrURvU39+nY487TtksP0J0jmw2q2OPO270eFNR3pPDks+emgAAAAAANIs/UpbCBs3s7H719/fFW1AKkcg1yBijvj5OWHSW8eelZ0b/WmRm9cRREgAAAAAAiePM6pH/dEFS8F7cGLOTR6DZWH4OJJgte3GXAAAAAABA8tSEmHakHGMh6UWoCSSYrYShprWSx56aAAAAAAA0hedLsrK+qntror1Yfg4kmOkJ/otb30ol9tQEAAAAAKAZrBtuqGmt1JuLt5iUItRsUKFQ0E033aTly5czLAgdw3Vd3XbbbdXjZbvvr6gh3mFPTQAAAAAAmsL05apTz13PU6FQiLmi9CGNa5DvW5WKRVlajNFBrA3Oy+rx1qLYqhgAAAAAgNbxNw3J98mH2o09NYEkC5efy7eyLD8HAAAAAKA5osG8vi9ngJWRcSDUBBLMZML/4lZShp5NAAAAAACaIlf7fpt4LQ781IGUMD1sXAwAAAAAQFNkayI1lp7HglATSDB/03DcJQAAAAAAkGj+Zt57x4FQE0gwM6dX1rOSrOxIOe5yAAAAAABIhlKwp6b1rZzZfTEXk06EmkCSmdF9NE1/PsZCAAAAAABIDtMXbvFmrcQIi1gQagJJFk1jkySHV1kAAAAAAJqi5i22LVTiqyPFCDWBBPOHisFfjQAAAAAAQPPUvNW2ZTe+OlKMUBNIMGd2X3UKmy3ylyMAAAAAAJrBuuHKSN/KDPTEW0xKZeMuoFtlsxnNmz9fjkMujM7hOI7mzZ9fPTY1/fBmgD01AQAAAABoBtOTG73uGGWzmRirSSdCzQb19PRo6dKlcZcBjJHJZMacl6UbHxSLzwEAAAAAaB1nxFVPD92a7UabIZBgJuuM7qnpEW8CAAAAANAUvh9cWisZBvPGgVATSDDTm5X1CTMBAAAAAGiqaDtCXzI9LISOA6EmkGQ1eabJs78HAAAAAABNkanpzqSZKBZEyQ3yPE8bN27UrrvuyrAgdAzf9/X0009Xjwc2D8dYDQAAAAAAyecVy/I8L+4yUoc0rkHFYkl333UXJy06iud5uvuuu6ofti9X7da0Fc5VAAAAAACaIppb4fvynSAnQnsRagJJZlQdFGTyNGYDAAAAANAMJl8TqTEoKBaEmkCC2WJl9IAXWQAAAAAAms9lZWQcCDWBJPP8mmFBbFwMAAAAAACSgVATSDDTkxudwuYRagIAAAAA0BzhakjPH72OtiLUBNIin4m7AgAAAAAAksEhyIwboSaQYLZU2fmdAAAAAADADLAyMg6EmkDShdPPq8vQAQAAAABAU9jqe23ec7cboSaQZNnMaKiZ4b87AAAAAABNwXvs2PEbAJLM9apXDf/bAQAAAABAQhBzAAAAAAAAAOgq2bgL6Fa9fb06ctkyZbP8CNE5stmsjly2rHqcufMpWb8cHLC9BwAAAAAAzRFNP/d8ZZyMent6460nhUjkGpRxHM2dOzfuMoAxjDFjzsuS2STLnpoAAAAAADSXqblqjDKZTHy1pBQpB5BotGcCAAAAAIDkIdQEEsr6YaBJrgkAAAAAQGtE77ktb77bjVATSKow1Bxdfm52cGcAAAAAAFAvY4L32NWGIrQde2o2qFgsavXq1Vq6dCnDgtAxXNfVXXfdJUmynq+DvIGabT4INQEAAAAAaJow2HQ9T8VSMeZi0oc0rkGe52vrli2jXXBAB7DWauuWLcF130qmP96CAAAAAABIqmrvkJXn+XFWkkosPweSKnpBjVrhHTo1AQAAAABoGt9KfhRm0vTWboSaQFJFGWbUTUymCQAAAABAc1WzTN50txuhJgAAAAAAADBduUzcFaQaoSaQUNYNW+DpgAcAAAAAoPlq56wwc6XtCDWBpAqnsNlwT01jaIUHAAAAAKBpXL9mT020G6EmkAbkmQAAAAAANJXpycZdQqoRagJJ5dX8tYguTQAAAAAAmqv2rTarz9uOUBNIqugF1fcln1dXAAAAAACayRZdyQsP6CVqO0JNIKmiF1TyTAAAAAAAmi9jxJvu+LD4v0GO42hgcJDhK+goxhgNDA5Kkqwtqpps5jLxFQUAAAAAQAKZnlw49dzIMfQNthuhZoP6+nq1fPnyuMsAxshms9Xz0ntiu9y/PiHXimlsAAAAAAA0W7jVWzaTUW9PT8zFpA8xMpBQJhv+97a+5NEODwAAAABAM9lipRpsspK3/Qg1gRQwvTRlAwAAAADQTGYW3ZlxItQEEsofKcddAgAAAAAAqWA9tn1rN9q3GuT7voaGhjQwMECLMTqGtVbDw8OSJK9SUo+1kmdli27MlQEAAAAAkCx2qCQ5jqy18pmC3nZ0ajaoUCjq9ttuk+sSFqFzuK6r22+7Tbffdpv+9Oc75PmeJMn08PcLAAAAAACayczqlSR5vqdiqRRzNelDqAkklK14owcZ/qsDAAAAANBMY1bu+nRqthvtW0BSRa+tvpX1vB3eFQAAAAAATI+tuJINw0x2Jmw72reAhDJO+IpqxV+MAAAAAABoNmOkaD4QoWbbEWoCCWVrgkwzkI+xEgAAAAAAkmfM/Ap6idqOUBNIKFsKh1hZO9oODwAAAAAAmsMG/1gr3nfHgD01gYSK/mJkfSsNl2OuBgAAAACAZLGlSnjFBkvR0VZ0agJJVfNHImd2X3x1AAAAAACQQGagJ+4SUo1QE0goO1SKuwQAAAAAANKBAb1tR6gJJJTpzwVXPCt/mIATAAAAAIBmsoVw+bnnSw7Lz9uNUBNIAWdWb9wlAAAAAACQKGYgH3cJqcagoAb19OR18CGHKJPJxF0KUJXJZHTwIYdIkirlR+UYR54k8QcjAAAAAACaK3yv7RhHeYeIrd34iTcom81q4cKFcZcBjOE4TvW8rGwx8jZsk2Rli268hQEAAAAAkDRlT5JkZJTN5WIuJn1Yfg4kVc1+HqaHv18AAAAAANBMJh++17ZihWQMCDWBhLJbCqMHWf6rAwAAAADQVJmaJNPz46sjpUg6gIQyPVnJt8GB68VbDAAAAAAACWPdMMi0VjK0arYba1IbVCqVtWbNGh144IEMC0LH8DxP9913nyTJfXST9svtEnyCF1cAAAAAAJrKZIJeQc/1VHYrMVeTPnRqNsh1XT2xYYN8n/ZidA7f9/XEhg3Bx/pHZW3YqZkneAcAAAAAoKnC5efW+nIrhJrtRqgJJJWVFGXu0TJ0AAAAAADQHNF7bct77jgQagJJ1Zsd7dT0eIEFAAAAAKCpoq3efLHtWwwINYGEssXR1nfTy/a5AAAAAAA0VbYmVqNbs+0INYGkcv3RF1VeXAEAAAAAaC474QraiFATSCjTl6/u72FdBloBAAAAANASvmX5eQwINYGEsqWa5ec9LD8HAAAAAKCZTLYmyGSFZNsRagJJ5Vs64AEAAAAAaBXec8eKUBNIKJPPVpefM/0cAAAAAIAmq04/t5JYft5uhJpAQtmyO3qQz8RXCAAAAAAASeTUBpk0E7UbG+01yBgpm+PHh84TnZc2Q5AJAAAAAEDLWQYFxYFUrkH9/f1aseKkuMsAxsjlctXzsmQelL9xSJ40ugwdAAAAAAA0RxhkZkxG/T29MReTPiw/B5LK9apXTY7/6gAAAAAANJVDd2acSDoAAAAAAACAabNjLtBehJpAYhmWnQMAAAAA0CpOGKv5viTJMAK9rQg1G2StVKlU4i4DmKBSqahSqcj1as5Ph//qAAAAAAC0iqWnqO1IOho0MjKiG1etIthER6lUKrpx1SqtWnWD/njPHXJdzk8AAAAAAFrJdV0VSgUZRqC3FaEmkERB57tstPyczYsBAAAAAGgqE77Xtmz9FgtCTSAN+GMRAAAAAABIEEJNIIksE9gAAAAAAGg5Y6rvwVl+3l6EmkASRaFmOIGN5ecAAAAAALSAtVJ1+TmdRe1EqAkAAAAAAAA0IkMTUVwINYEEsm40KSi8gddYAAAAAABawNRcY/l5OxFqAklkxk5gM7yuAgAAAADQfJ5fXX5uWX/eVoSaQBLZmtdRAk0AAAAAAFrC9GRHr7NOsq2yO78LgK7jRcvP7diAEwAAAAAANI2N3n+L5eftRqcmkETR6yiBJgAAAAAAreP61UXnljfhbUWnZoPy+Zz2XbyvMplM3KUAVZlMRvsu3lf+5oLc4R45JUfKcY4CAAAAANAKpj8nx7fKZXNyjKF5sI0INRuUy+W0ePF+cZcBjOE4jhYv3k/ewJDc7Xm5Dz0tW/HiLgsAAAAAgESyJVdONqNcNsugoDYjQQYSyGTYxgMAAAAAgNYzo1EmkWZbEWoCCeQPl6vXayexAQAAAACA5jH9uer1jDHs/9ZGhJpAAlWDTM/Kltx4iwEAAAAAIKHsUEnWDyag+7L+Tu6OJiLUbFClUtFDDz0o3+d8RefwfV8PPfSgHlq3TuueeFS+9RkUBAAAAABAi5jBHvm+r4rrysiwF1wbEWo2qFyuaN1D6+R5DGFB5/A8T+seWqd1Dzygh598TL7vyWT5bw4AAAAAQEsYI9+3qrgVOWL6eTux2R6QQCYXLT+XbLkSbzEAAAAAACSUHSlLfjAhiOXn7UWCDCSQLY/uo2kGe2KsBAAAAACA5HJm945ep1OzrfhhA0kU7eJhreSyRQIAAAAAAK1gK55krawkK9m460kTQk0giTLBf23rW8njNRUAAAAAgJYYMxuI99/tRKgJJJAdKlWvm/58jJUAAAAAAJBcpmd0XE3GOMyuaSNCTSCBTF8uuOJb+cOlHd8ZAAAAAAA0xBZGh/N61ro7uCuajFATSCBbGt1H05nFoCAAAAAAAFrBDIyujszIZGIsJXUINYEk8n3ZcJdi+XEXAwAAAABAQvnhPppsp9l2hJpAEuWzUjh7zTL9HAAAAACA1rCjaaYvS1tRGxFqAglktxaq1xkUBAAAAABAa5j8mEFBLD9vI6YyNai/v18nrlihXC4XdylAVS6X04krVsjd9Ql5G7ZKa58es2kxAAAAAABoHltxlc1k1N/Tq6etT6dmGxFqNsgYEWiiI+VyOdkRVyaTlSvJ9HOeAgAAAADQCqYneM9tJDnGYUV0G/HDBpLIMaMDgtisGAAAAACA1rC86Y4LoSaQRLmMbPTC6vMCCwAAAABASxhTvWrpKmorQk0ggez2YvW66WGXCQAAAAAAWiI7Gq0ZmR3cEc1GqNmgkZERrVp1gyoVhrCgc1QqFa1adYNuevAu/fGeP8n1PNmKG3dZAAAAAAAkk2flep5GSkVZ1qK3FaFmg6yVXMIidCC34qoyVJDreZIk08ugIAAAAAAAWsHkg2jNWitTuxYdLUeoCSRRxlF1QpDn7/CuAAAAAACgMZY5FrEh1ASSyPNHp55nM7GWAgAAAABAUhnec8eGUBNIqmgrD5rfAQAAAABAwhBqAklFBzwAAAAAAK3l0EkUF0JNIOFMhv/mAAAAAAC0BJlmbEg7gKQKl59bOjYBAAAAAGgNBp7HhlATSDiT5b85AAAAAAAtQagZG9IOIGFs1Jrp0aIJAAAAAEBLRZkmb8HbjlATSJrxL6QZ/moEAAAAAEArGDo1Y5ONu4Bulc1mtWDhQjkOuTA6h+M4Wrj7AlU2uPL8kfDFlRdYAAAAAABaxRijrJOJu4zUIdRsUE9PXoccckjcZQBjZDIZHXzgQSo/nZeX2y7/qSHJIdQEAAAAAKBVMo6jfJaIrd1oMwQSxnp+cMVnQw8AAAAAAFouQ7wWB37qQFKFA4MMnZoAAAAAALSO5zMoKAap7Y01xuwi6WRJe0maI+lxSWsl/dFa68dZGzAjZU9SNdMEAAAAAAAtZPLspxmH1IWaxpjFkj4t6SxJ+Unu8pgx5suSPmGtdad6Htd1tWHDBu2+++4MC0LH8H1fG556Uu7mjXK3bNV82xt3SQAAAAAAJJpXqsj1vbjLSJ1UpXHGmJdIulPSyzV5oClJe0r6L0k3GmN2n+q5SqWy/rpmjTyPkxadw/M8/fWee/S39Q/qviceZltNAAAAAABazOYzKruVuMtIndR0ahpjTpT0Y0k9NTdfI+kqSZslHSDptZL2CD93jKSVxpjTrLXFNpYKzEwm3EPTWtagAwAAAADQYrY45UJftFAqQk1jTK/GBpplSa+z1v5o3P0+KOkHCjo5Jel4SR+R9K42lQrM2JgX02yqmrEBAAAAAGg7M5CLu4RUSkvi8S+S9q45/n/jA01JCjsyz5P0l5qb32aM2avF9QFNY3LhBsW+JJeZVwAAAAAAtJIdZul5HNreqWmM6Zd0qqR9JO0q6UlJN1hr1+zgMVlJKyQtVTCpfLOkOyTdbO2O19caY4ykd9TctF7SZ6a6v7W2bIx5l6Qrw5t6JZ0v6QM7+jpAp7CF0RdT05OKZmwAAAAAAGJjZvfs/E5oupYkHsaY70j6h/DwWmvtqeES8IskvUnS7Eke8xtJb7HWrqu5zUh6m6T3SZpsaM+9xpg3W2tX7aCcYyTVdlpevKOp5qHfSHpYQfAqSS8VoSa6hMlHnZq+bIl9PQAAAAAAaCU7XJEYadF2bVl+boyZL+mPki7UJIFm6LmSbjLGLA4fk5f0M0mf0+SBpiQdKulqY8xpO/jyLxx3/Jud1Wut9SX9ruamw6O6gE7nj9R0avazrwcAAAAAAK3k0KkZi3asTc0oGNKzTFJF0kpJN0raKmmxgj0sDwjvu1DS9ySdIunLkl4S3n6DginljytYsv4iSSeHn+uV9D1jzCHW2uFJvv6RNdddSbfVWfeNkl5fc/wMSQ/V+VggNiaXkZVkfSs7wr4eAAAAAAC0Us02cCbOOtKmHaHmCgW/1PskvWj83pnGmIsk/a+k54c3nWyM+ZSkN0oaknSutfZX457z0+Gk8g+Fx4skvUHSFyb5+ofWXH80HAZUj/vHHR8m6Rd1PhaIjS3WdGry1yIAAAAAAFrKDObjLiGV2rH83EjaIun0yYYBWWtLCgLMUs3N/xZenj1JoBn5iKQ/1xyfM8X99q+5/nA9BU9x3/0nvRfQaTLhH4bo1AQAAAAAoOWieRa0abZXW/bUlPRRa+36qT5prX1c0tXjbv6VtfbKye4fPsZK+kHNTX8XTkmvMsb0aWw36tP1l6zN445nTeOxQHxcX9ZKspLDX4sAAAAAAGgp08c8izi0Y/m5FOyTuTN/0tihPt+v8zGRXgV7dK6tuW1w3P3rXXouSYVxx2Oeq6+vV0cvX65stl0/QmDnstmsjtr/cNmRslx3g5wK49cAAAAAAGiljG/Um81rK82abdWORG6dtfaJOu43/j431/GYDeOO54477h13XK7jOSOlccd9tQeO42hwcHxmCsTLGKNZc2bJc4fl5vvk9PLXIgAAAAAAWsnkMnKMkSHTbKt2LD8fHzxOZfzk8nqC0PGPGRh3PL4zczprccdPWBnfuQl0JH9rQcH6c/E3IgAAAAAAWsxk2rW7I2q1o1NzOku+q6YxpbzW+AhnaNzx+M7NHekbdzzmuXzfanh4fKYKxK+St/K2jsgrF2VKRpkieTwAAAAAAK3iFwvyg+YiWovaKNEbQlprC8YYV6Pf5y7TePjcccfPM8bcHV4/4G9/+6v2WLhgpiUCAAAAAAAgAeaanuk002GG0tAf+2DN9X2m8bh9xx1XmlALAAAAAAAAEolhve2U6E7N0D2SDgyvLzLG9Na5tP2Accdvttb+QpKMMXcvmLPrYe9+0Wu0dI/FyjqZZtYLNMz1Pd31+EPVY85PAAAAAABay/U9vfZr/6XCtiE/7lrSJA2h5p2SXhxez0paLumGOh534rjjv9QeZHJZDcyZrTnz5imbITRCZ3A9TwMjT0uSTD6rXQ7eh/MTAAAAAIAWcj1PTi6rsvUYatFGaQg1r5D0/2qOn6udhJrGGEfSs2puusdaW7uMXZm+Xu35vOO1ZMUK5XK5phULzESlUtGTq1ZVj/fn/AQAAAAAoKUqlYqyH+pVUd74gdVooTTsqXmLpMdqjl9vjNlZmPtcjd1/83+bXhUAAAAAAACAhiQ+1LTWWkmfq7lpkaQLp7q/MSYn6ZM1NxUlfbU11QEAAAAAAACYrsSHmqEvSHq05vg/jTHnjL+TMaZX0iWSjqi5+UvW2vUtrg8AAAAAAABAndKwp6astYUwxLxaUo+kvKQfGWPeIulKSVsUTDt/raQ9ax56q6QPtLdaAAAAAAAAADuSilBTkqy1NxhjzpP0XUmD4c2nhR+TuV3SWdZaJlcBAAAAAAAAHSQty88lSdban0l6hoLBP+Up7va4gmnpJ1hrn2hXbQAAAAAAAADq05JOTWvt6yS9bpqP+Y6k70zzMQ9JMtN8zIOSXmaM2VXSyQoGB82S9ISktZJWWWv96TwnAAAAAAAAgPZJzfLz8ay1T0ta2ejjMxlHc+bOlTHTylSBljLGaM7cuWOOAQAAAABA6xhjlMmkajF0R0htqDlTvb29WrZsWdxlAGNks1nOSwAAAAAA2iibzaq3tzfuMlKHGBkAAAAAAABAVyHUBAAAAAAAANBVCDUBAAAAAAAAdBX21GyQ5/vasmWL5syZwzAWdAxrrbZu3Vo95vwEAAAAAKC1rLXyfD/uMlKHTs0GFQtF3bl6tVzXjbsUoMp1Xd25enX1g/MTAAAAAIDWcl1XxUIx7jJSh1ATAAAAAAAAQFch1AQAAAAAAADQVQg1AQAAAAAAAHQVQk0AAAAAAAAAXYVQEwAAAAAAAEBXIdQEAAAAAAAA0FUINQEAAAAAAAB0FUJNAAAAAAAAAF2FUBMAAAAAAABAVyHUBAAAAAAAANBVsnEX0K16e3t0+NKlymQycZcCVGUyGR2+dOmYYwAAAAAA0DqZTEa9vT1xl5E6hJoNymQymj9/ftxlAGM4jsN5CQAAAABAGzmOQ1NRDFh+DgAAAAAAAKCrEGoCAAAAAAAA6CqEmgAAAAAAAAC6CntqNqhUKumuu+7SoYceyr4J6Bie5+nee++tHnN+AgAAAADQWp7nqVQqxV1G6hBqNsh1PW3auFG+7xMaoWP4vq9NGzeOOeb8BAAAAACgdXzfl+t6cZeROiw/BwAAAAAAANBVCDUBAAAAAAAAdBVCTQAAAAAAAABdhVATAAAAAAAAQFch1AQAAAAAAADQVQg1AQAAAAAAAHQVQk0AAACgDrNnDWr2rEHtvWgvbdmyZdL7fPYzn9HsWYP66Ecvam9xAAAAKUOoCQAAAEzD1q1b9cUvfiHuMgAAAFKNUBMAAACokzFGvb29+upXvqLNmzfHXQ4AAEBqEWo2yHGMenp7ZYyJuxSgypjgvIw+OD8BAGgux3H0ute/Xtu2bdMXPv+5uMsBAAAdwBgjx+H9d7sRajaor69Pxx9/vLLZbNylAFXZbFbHH3989YPzEwCA5rvwwneqr69PX/va17Rp06a6HzcyMqJPfOLjOu7YY7T7bvO1aK89dcbznquf/OTySe+/9PDDNHvWoCTpu9/5jk44/jjtvtt8LTlgf739X9825b6eruvqm9/8hp51+unaa889tPtu87XixBP0pS99Sa7rTvv7BQAAO5bNZtXX1xd3GalDqAkAAABMw8KFC/WGN7xR27dv1+c/V1+35vbt2/X8M56ni/7rv/TUU0/pjDPO0HHHH6/bb79db3j96/Wud/37lI/9wPvfr3e+80ItWLhQz3nOc2St1cUXX6xzXnW2rLVj7lsoFPSSF79IF15wgdauXavlxxyj0047XRs2bNB/vOfdes2rXy3f92f0/QMAAHQCQk0AAABgmi648AL19/fr61//mjY+9dRO7//hD39Id9xxh0455RTd+ee/6Hvf/4F++tOfadWqG7Xbbrvpq1/5iq688spJH/vjH/9If/zjTfr5z1fqh5f8SLfccqv2P+AA3XjjjbruumvH3Pd973uvrrvuOr3s5S/Xn//yF61c+QtdetllWn3nn/Xc5z5PV1zxf7r44m835WcAAAAQJ0JNAAAAYJp2332B3vjGN2l4eFj//d//vcP7Dg8P6/vf+54cx9FnP/vfmjVrVvVzBx18sP79Xe+SJH31K1+e9PHvf/8HdOBBB1WP582frze+4Y2SpFWrVlVvf+qpJ/Xd73xHixYt0le+8lXNmTOn+rlZs2bpS1/+svL5vL71zW9O/xsGAADoMISaDbLWqlAoTFjyA8QpOi+jD85PAABa54ILLtDAwIC+9a1v6sknn5jyfqvvuEOFQkFHLlumgw4+eMLnzznnXEnSTTfdNOnS8NOf9awJty1ZskSS9MSGDdXbrr/+elUqFT372c+edF+vBQsW6IADDtDdd9+tQqGw828QAADUxVrL++8YEGo2aGSkoFtuvpnN1tFRXNfVLTffXP3g/AQAoHXm77ab3vzmt2hkZESf/exnp7zf4xselyTtu88+k35+7ty5mjNnjgqFgjZv3jzh83vttdeE2wbDAUKlUrl628PrHpYkfec739HsWYOTftx7772y1k76dQAAQGNc19XICH8wbDdGIwMAAAANevvb365vfvMb+va3vqV3vOOChp/HGDPl5xynvj6EqMvzGc94hpYuPWKH9+3J5+svDgAAoAMRagIAAAANmjd/vv7xH8/XZz7zaX3mM5/WHgv3mHCf6LaHH3lk0ufYunWrtmzZor6+Pu2yyy4N17Jn2NF5/Akn6NOf/kzDzwMAANANWH4OAAAAzMC/vO1tmjVrlr5z8cV67PHHJnx+2VFHqa+vT6vvuENr166d8PlLL/2xJOn444+vuytzMqeccooymYx+fdVVqlQqDT8PAABANyDUBAAAAGZg3rx5+sfzz1epVNL3v/e9CZ8fGBjQa177Wvm+r3e+80INDw9XP3fffffpU5/8pCTp/PPfOqM69txzT732ta/VunXr9IbXv27S4UX333+/Vq78+Yy+DgAAQCdg+TkAAAAwQ29727/q61/7mrZt2zbp5z/0oQ/rtltv1R9+/3s944ilOumkkzQ8PKLrrrtWxWJR57/1rXr+C14w4zo+8clPad3DD2vlypW6+uqr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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rabi_schedules[-1].draw(label=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dsche/.local/lib/python3.8/site-packages/qiskit/compiler/assemble.py:320: RuntimeWarning: Dynamic rep rates not supported on this backend. rep_time will be used instead of rep_delay.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "# Qobjにスケジュールをアセンブルします\n", + "num_shots_per_point = 1024\n", + "\n", + "rabi_experiment_program = assemble(rabi_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}]\n", + " * num_rabi_points)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "print(job.job_id())\n", + "job = backend.run(rabi_experiment_program)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "rabi_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果が得られたので、それらを抽出し、正弦曲線にフィットさせます。私たちが選んだ駆動振幅の範囲で、量子ビットがブロッホ球の上で$|0\\rangle$から始めて完全に何回か回転すると予想されます。この正弦波の振幅は、$|1\\rangle$状態を生成したラビ駆動振幅でのショットの割合を示します。信号が最大(すべて $|0\\rangle$の状態)から最小(すべて$|1\\rangle$の状態)に振動するために必要な駆動振幅を求めます。 -- これによって、$\\pi$パルスを実行する振幅がキャルブレーションされます。" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 0を中心にデータを合わせる\n", + "def baseline_remove(values):\n", + " return np.array(values) - np.mean(values)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "rabi_values = []\n", + "for i in range(num_rabi_points):\n", + " # i番目の実験から`qubit`の結果を得る\n", + " rabi_values.append(rabi_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "rabi_values = np.real(baseline_remove(rabi_values))\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\")\n", + "plt.ylabel(\"Measured signal [a.u.]\")\n", + "plt.scatter(drive_amps, rabi_values, color='black') # ラビ実験結果の実部のみプロット\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(drive_amps,\n", + " rabi_values, \n", + " lambda x, A, B, drive_period, phi: (A*np.cos(2*np.pi*x/drive_period - phi) + B),\n", + " [3, 0.1, 0.5, 0])\n", + "\n", + "plt.scatter(drive_amps, rabi_values, color='black')\n", + "plt.plot(drive_amps, y_fit, color='red')\n", + "\n", + "drive_period = fit_params[2] # 3個目のパラメーターがラビ振動の周期\n", + "\n", + "plt.axvline(drive_period/2, color='red', linestyle='--')\n", + "plt.axvline(drive_period, color='red', linestyle='--')\n", + "plt.annotate(\"\", xy=(drive_period, 0), xytext=(drive_period/2,0), arrowprops=dict(arrowstyle=\"<->\", color='red'))\n", + "plt.annotate(\"$\\pi$\", xy=(drive_period/2-0.03, 0.1), color='red')\n", + "\n", + "plt.xlabel(\"Drive amp [a.u.]\", fontsize=15)\n", + "plt.ylabel(\"Measured signal [a.u.]\", fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pi Amplitude = 0.23400325324347926\n" + ] + } + ], + "source": [ + "pi_amp = abs(drive_period / 2)\n", + "print(f\"Pi Amplitude = {pi_amp}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 我々の$\\pi$パルス!\n", + "今、決定した振幅で我々のパルスを定義して、後の実験で使えるようにします。" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "pi_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=pi_amp, \n", + " sigma=drive_sigma,\n", + " name='pi_pulse')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 0か1の決定 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我々の$\\pi$パルスがキャリブレーションされたので、適切な確率で$\\vert1\\rangle$の状態を作ることができます。これを使って、$\\vert0\\rangle$ と $\\vert1\\rangle$を繰り返し測定してその測定されたシグナルをプロットすることで、測定でどのように見えるかを確認できます。 これは、識別器(discriminator)を構築するために使います。識別器とは、測定されカーネル化された複素数値(`meas_level=1`)を受け取り、それを0または1(`meas_level=2`)として分類する関数のことです。" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 2つのスケジュールを作成\n", + "\n", + "# 基底状態のスケジュール\n", + "gnd_schedule = pulse.Schedule(name=\"ground state\")\n", + "gnd_schedule += measure\n", + "\n", + "# 励起状態のスケジュール\n", + "exc_schedule = pulse.Schedule(name=\"excited state\")\n", + "exc_schedule += Play(pi_pulse, drive_chan) # 上記2Aで見つけています\n", + "exc_schedule += measure << exc_schedule.duration" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gnd_schedule.draw(label=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exc_schedule.draw(label=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "基底状態と励起状態の準備スケジュールを1つのQobjにアセンブルします。これらはそれぞれ`num_shots`回実行されます。 今回は、結果が$|0\\rangle$または$|1\\rangle$に分類されていないため、`meas_level=1`を選択します。代わりに、カーネル化されたデータが必要です:つまり、カーネル関数を通過してショットごとに1つの複素数を生成した生の取得データです。(カーネルは、生の測定データに適用される内積と考えることができます。)\n", + "`exc_schedule`でのみ使用されますが、両方のスケジュールに同じ周波数を渡します。" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実行の設定\n", + "num_shots = 1024\n", + "\n", + "gnd_exc_program = assemble([gnd_schedule, exc_schedule],\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='single',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}] * 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "# print(job.job_id())\n", + "job = backend.run(gnd_exc_program)\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "gnd_exc_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで結果が得られたので、準備した2つの母集団を単純な散布図で視覚化できます。基底状態プログラムの結果は青で、励起状態準備プログラムの結果は赤で表示されます。 注:母集団が不規則な形(ほぼ円形ではない)の場合は、ノートブックを再実行してみてください。" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "gnd_results = gnd_exc_results.get_memory(0)[:, qubit]*scale_factor\n", + "exc_results = gnd_exc_results.get_memory(1)[:, qubit]*scale_factor\n", + "\n", + "plt.figure(figsize=[4,4])\n", + "# 全ての結果をプロット\n", + "# gnd_scheduleの結果は青でプロット\n", + "plt.scatter(np.real(gnd_results), np.imag(gnd_results), \n", + " s=5, cmap='viridis', c='blue', alpha=0.5, label='state_0')\n", + "# exc_scheduleの結果は赤でプロット\n", + "plt.scatter(np.real(exc_results), np.imag(exc_results), \n", + " s=5, cmap='viridis', c='red', alpha=0.5, label='state_1')\n", + "\n", + "# 0と1の状態の結果の平均は大きなドットでプロット\n", + "mean_gnd = np.mean(gnd_results) # 実部と虚部両方の平均をとる\n", + "mean_exc = np.mean(exc_results)\n", + "plt.scatter(np.real(mean_gnd), np.imag(mean_gnd), \n", + " s=200, cmap='viridis', c='black',alpha=1.0, label='state_0_mean')\n", + "plt.scatter(np.real(mean_exc), np.imag(mean_exc), \n", + " s=200, cmap='viridis', c='black',alpha=1.0, label='state_1_mean')\n", + "\n", + "plt.ylabel('I [a.u.]', fontsize=15)\n", + "plt.xlabel('Q [a.u.]', fontsize=15)\n", + "plt.title(\"0-1 discrimination\", fontsize=15)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|0\\rangle$と$|1\\rangle$の2つの集団が独自のクラスターを形成していることがはっきりとわかります。カーネル化された測定結果(`meas_level=1`から)は、これら2つのクラスターを最適に分離する識別器を適用することによって(`meas_level=2`に)分類されます。最適な分離は、IQ平面の直線であり、上の図で大きなドットでプロットした平均結果から等距離にあり、2つのドットを結ぶ直線に垂直です。\n", + "\n", + "与えられた点が基底状態の平均に近い場合は0を返し、励起状態の平均に近い場合は1を返すことにより、迅速な分類関数を設定できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "def classify(point: complex):\n", + " \"\"\"与えられた状態を|0>か|1>に分類する\"\"\"\n", + " def distance(a, b):\n", + " return math.sqrt((np.real(a) - np.real(b))**2 + (np.imag(a) - np.imag(b))**2)\n", + " return int(distance(point, mean_exc) < distance(point, mean_gnd))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 反転回復法を使った$T_1$の測定\n", + "量子ビットの$T_1$時間は、量子ビットが励起状態から基底状態に減衰するのにかかる時間です。量子コンピューターで実行する意味のあるプログラムの実行時間として、重要です。\n", + "\n", + "$T_1$の測定は以前の実験と同様であり、キャリブレーションした$\\pi$パルスを使用します。再び、単一の駆動パルス、$\\pi$パルスを適用し、次に測定パルスを適用します。ただし、今回はすぐには測定を行いません。遅延を挿入し、その遅延を実験間で変化させます。遅延時間に対して測定されたシグナルをプロットすると、量子ビットがエネルギーで緩和するにつれて、シグナルが指数関数的に減衰することが分かります。減衰時間は、量子ビットの$T_1$または緩和時間です!" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# T1実験のパラメーター\n", + "time_max_us = 450\n", + "time_step_us = 6\n", + "times_us = np.arange(1, time_max_us, time_step_us)\n", + "# dtの単位へ変換\n", + "delay_times_dt = times_us * us / dt\n", + "# 以前キャリブレーションし使ったのと同じ`pi_pulse`と量子ビット周波数を使います" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実験のスケジュールを作ります\n", + "t1_schedules = []\n", + "for delay in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T1 delay = {delay * dt/us} us\")\n", + " this_schedule += Play(pi_pulse, drive_chan)\n", + " this_schedule |= measure << int(delay)\n", + " t1_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "T1のスケジュールも確認できます。この実験を実際に理解するには、`sched_idx`の値を変えて、次のセルを複数回実行して、いくつかのスケジュールを確認してみてください。`sched_idx`を増やすと、すこし後で測定パルスが開始するのがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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bEWpbEOCzykZNZ6nDBQAAADYDLXW/PDLXpbf+I1fPxx0Dtu7d2+S5M4778j+/ftz0kkn56STTlqz7ds++ckkycPPevjIx88+6+wNVj2+Mx++vIYbb7wpSfKxj12Xhxx/3KrHm+TowU3wOSV12RcAAAAAm+Mv//Iv8uu//ms588wz87M/93N5ylOemlNPPTVzc3M5dOhQTj3l5BUD0VkYDAYbOm7XruW3k9/f1mmnnZZnP3v13pxnjQhOefAQfI6h3+/n9ttvz8knn7xsUOL7zyV1xLZhg8Egd9555+H1Ue0BAAAAR6/Nvvb/u7/92yTJL/7SL+c5z3nOEY/dcP31R6yfcsqp2b17d+66687s2bMnJ5544qptn3b66UmST9z0iZGP3/SJm0Zun9uxI0ly3317lz12yy03r/qc4zjjjDOSJKecckp+67d/e2rtjmMwGKTf78/kuVk/adsYDhw4mA9dffXIN/ao4HMl/X4/H7r66sOLDwoAAAC0y2Zf+9+1Z0+SB0LApf7vX/3fI9a73W6e/oxnJEle/apXrdn2ZZddliT567/565E9Nf/yL/5y5HGnn9YEptdde92yx/7f//t/az7vep1xxhl55CMfmWuuuSbXXnvt1NodR7/fz4EDB2fy3Kyf4HNKRvbu3D49ygEAAIAWOf/885Mkr3rV7x1xS/vbrrgiv/orv7Js/+///u9PKSUvf/kv5C1vefMRjy0sLOSNb3zj4fVnPONz88hHPjLXf/zj+fmf/19H7Pt7v/e7ede73jmypqc//elJkl/7tV/Lvn37Dm9/85vflN98xSvG/A5X999/8KUZDAb5xv/4DfnABz6w7PE77rhjXSEv7eZW9ykZjJjVvaZE+gkAAABM23d913fnj1/zmvyfV74y//bWt+axF12UT956a97+9rfnJS/5T/nVXz0y/Hz605+R//k/fyo/+qM/kuc/73l5whOfmPPOOy933HFHrv7gB3Po0KF84uZbkiSdTie/+Vu/nS99wfPzMz/90/nr170uj7nwwnz84x/P+9773rz42789/+eVr1xW0wu/+qvzy7/8S3nnO9+RJ1/ypDzxiU/MLbfcmve+9z35vu97ybKaJvE1X/M1ueYjH87LX/7yfO4znp7HPe5xOffcc1NrzfXXX5+rr746xx133Lpmsae99PickhG5JwAAAMCmuOCCC/Lm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POMRJ2xz47qgAAAAwJCZ6g5jNc3B51Srdfu7uZ1//vl569v+Nm9961vzpje9Mdf83d+thaA///M/nzf/1V/lzDPPTH9lt7gDBw7kK7/yBSds84mXPnGg/gMAAABbMNW92bYf7TAm0xx8XrDZwVLKqVke7Tmf5L5hvmC32930+M2fujlJ8uhHn7N2bGZl86NDBw9t+pw777xr0+PH0+l08rznPS/Pe97zll/z5pvz7//dS/PWt741P/9zP5cf+dEfzZlnnpm5ubm0Wq288ld/9Zi1SAEAAADg4WSax1mfWUp53ibHv27l69/XWnvDfMH5+cPp9R7a5J/88Z8kSa589lVrx8455+wkyY033viQ+jfeeGPuuuvOgfpywQUX5D+97DuTJB/68IeSLIejn/t5n5cHHnggb3nLWwZqHwAAABjQWoZQTXWHMZj2d91Pl1LOXC2UUh6b5AdXir8y7Bfr9Xr5/d///WOO/dZv/mbe9a535lGPelRe8IKj08s/+7OfkX379uUv//Iv8t73vnft+N133ZX/9B//w3E3KNrML//yL+f2229/yPG/+Iv/lyQ5/7zz1o59z3d/T1qtVv7dS1+Sv/3btz3kOQcPHszvvOY1mZ+f3/brAwAAACdh/QbJprrDris7WWtyEpRSLkryiSTvSDKb5HFJ/jrJTJLnJdmX5LW11heue85bknx+ksfWWm86idd8eZIfOu2003L48OFccsklefJll+XjH/94/uE978nMzEz+4A//KM9//vOPed6P/diP5id/4icyNzeXqz/3c1NKybXXXpsnfNYT0u/38u53vzvvve59ufjii9eec+opB3LBBRfk+g9+aO3YY84/Lw8++GCe8pSn5OKLL06tNR/4wPW58caP5hGPOCN/9dd/nUsuuWSt/m/8xq/nu7/ru9Lr9fKkJz0pl1xySTozM7n5kzfnAx94f44cOZKbP3VLTj/99J1+KwAAAIBtOnLPwXTfd0u6n7o37UPdzDz50ePuEkNQa033g7fluT//ktx6+203P9hbuHDcfWJz0zzi80iSL0jye0muTPLFST6V5LuTvGgUL7h379684Y1vytlnn53/96Y35R8/8pE897nPzRve8MaHhJ5J8l//63/Lj/7oj+Xc887L29761nz4Qx/KC7/xhXnd61+fPXv2JDn+TvHr/dT/+Ol89dd8TQ4fPpy/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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sched_idx = 0\n", + "t1_schedules[sched_idx].draw(label=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実行の設定\n", + "num_shots = 256\n", + "\n", + "t1_experiment = assemble(t1_schedules,\n", + " backend=backend, \n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: rough_qubit_frequency}] * len(t1_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(t1_experiment)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "t1_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t1_values = []\n", + "for i in range(len(times_us)):\n", + " t1_values.append(t1_results.get_memory(i)[qubit]*scale_factor)\n", + "t1_values = np.real(t1_values)\n", + "\n", + "plt.scatter(times_us, t1_values, color='black') \n", + "plt.title(\"$T_1$ Experiment\", fontsize=15)\n", + "plt.xlabel('Delay before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Signal [a.u.]', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then fit the data to a decaying exponential, giving us T1!" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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6hDqXXHFFXrTTTfV337ttdd0/vz5OmjQoLiUX1NTo/369dPPPvtMf/nlF91pp5104cKFja5bvHixDh06VNeuXauqql9//XWja9asWaPdunXT9evXxyW2OuF+H8A8DfOe2uZrCqWlpeTl5fEc8ChwKbBjbi6lpaUpjswYkwh777033bt3j1t577zzDv3796dfv360b9+eY445hieffLLRdVOnTuWss86iW7duAPTs2bPRNbNnz+bAAw8kLy+v0X377rtv/ZI+3377LXVrvi1cuJBdd92VoUOHstNOO7FkyZIW/TxtvqO5rjO5pKSEP1VWMlqEF37zG7b2qnbGmBY67zx4//34ljl0KNx6a3zLDFJeXs5NN93U6Hz//v2ZPXt2g3MrV66kT58+9bd79+7N22+/3eixixe7bbH32GMPNm3axJVXXsno0aMbXDNr1iz+/Oc/RxXr3XffzbnnnktxcTHV1dVs2rQpqseHavNJAVxiqB9pdOeddD7rLN4480yKn3uOZcuWUVBQQGlpqY1GMqaNaPCeECc1NTUsWbKEV199lRUrVrD33nuzYMECunbtCsCqVatYsGABo0aNiqrcESNGUFpayooVKzj88MPZdtttWxSnJYVQZ5zBt3//O9vdfTfrcB0MNkzVmBZI4Cf6RImmptCrVy+WL19ef3vFihX06tWr0WN79+7N8OHDycnJoW/fvmy33XYsWbKEXXbZBXCd0IcddljEmcft2rWjtrYWoMG8g2OPPZbhw4fzzDPPMGbMGO655x7222+/6H9oT5vvU2gkK4vjqqroBtwYdNqGqRrTdhQXF/P+++83OkITAsAuu+zCkiVL+OKLL6iurmbWrFmMHTu20XWHHnoor776KuD6BBYvXky/fv3q73/44YeZMGFCxJgKCwuZP38+QIM4Pv/8c/r168c555zDuHHj+PDDD2P9sQFLCmH9+6uvuBk4Bdgn6LwNUzUm802YMIERI0bw6aef0rt3b6ZNm9ai8tq1a8ftt9/OqFGjGDBgAEcddRSDBg0C4PLLL+epp54CYNSoUeTn5zNw4EBGjhzJTTfdRH5+PgAVFRUsX76cffbZJ+LzXHDBBdx1113svPPOfPvtt/XnH330UQYPHszQoUP56KOPOOGEE1r082T8Hs1FRUUa7012CgsLWV1ZyQKgFhgC/AwEAgEqKiri+lzGtEaL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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# データをフィッティング\n", + "fit_params, y_fit = fit_function(times_us, t1_values, \n", + " lambda x, A, C, T1: (A * np.exp(-x / T1) + C),\n", + " [-3, 3, 100]\n", + " )\n", + "\n", + "_, _, T1 = fit_params\n", + "\n", + "plt.scatter(times_us, t1_values, color='black')\n", + "plt.plot(times_us, y_fit, color='red', label=f\"T1 = {T1:.2f} us\")\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.title(\"$T_1$ Experiment\", fontsize=15)\n", + "plt.xlabel('Delay before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Signal [a.u.]', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. 量子ビットコヒーレンスの決定 \n", + "\n", + "### 4.1 ラムゼー実験を使った正確な量子ビット周波数の測定 \n", + "\n", + "次に、量子ビット周波数をより正確に決定します。ラムゼー・パルスシークエンスを使って行います。このパルスシークエンスでは、最初に$\\pi/2$(\"pi over two\")パルスを適用し、$\\Delta t$時間待ち、また別の$\\pi/2$パルスを適用します。パルスと同じ周波数で量子ビットからのシグナルを測定するので、適用したパルスと量子ビットの間の周波数における差で振動を観測する必要があります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ラムゼイ実験のパラメーター\n", + "time_max_us = 1.8\n", + "time_step_us = 0.025\n", + "times_us = np.arange(0.1, time_max_us, time_step_us)\n", + "# dtの単位へ変換\n", + "delay_times_dt = times_us * us / dt\n", + "\n", + "# 駆動パラメーター\n", + "# pi/2の駆動振幅はpiパルスの振幅の半分です\n", + "drive_amp = pi_amp / 2\n", + "# x_90はpi_over_2の簡潔な方法です:つまりX軸周りの90度回転\n", + "x90_pulse = pulse_lib.gaussian(duration=drive_samples,\n", + " amp=drive_amp, \n", + " sigma=drive_sigma,\n", + " name='x90_pulse')" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# ラムゼー実験のスケジュールを作成\n", + "ramsey_schedules = []\n", + "\n", + "for delay in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"Ramsey delay = {delay * dt / us} us\")\n", + " this_schedule |= Play(x90_pulse, drive_chan)\n", + " this_schedule |= Play(x90_pulse, drive_chan) << int(this_schedule.duration + delay)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + "\n", + " ramsey_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$T_1$スケジュールと同じように、作ったスケジュールのいくつかを検査するために次のセルを何回か実行して明らかにできます。`ramsey_schedules`が増えると、2つの$\\pi/2$パルスの間の遅延が増加します。" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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venO7U36rZRSZt0lAACAxiulpMT101aztBwAAAAAaDxBJgAAAADQeIJMAAAAAKDx7JE5gUOHDuUtb3lLLrvsMgVVWLdut5urr776yPFmj59pt8/O1u1287br3pXepw8kC908/oIz0mkr+AMAALCabq+XQ935WXdj15F2TKDfr5k/fDi11ll3hW2k1sG4WXq8ndpnZ6tJ5hcX0usuJL3e8AwAAACrq3H5vfUsLQcAAAAAGk+QCQAAAAA0niATAAAAAGg8QSYAAAAA0HiCTAAAAACg8QSZAAAAAEDjCTIBAAAAgMYTZAIAAAAAjSfIBAAAAAAarzPrDmwnnU47Z5x5Zlot+S/r12q1csaZZx51vJ3aZ2drlZIzTjktvXvayWI3pZRZdwkAAKDxSmml7fp7ywkyJ7B3795ceumls+4G20y73Z7quJl2++xs7XY7F5/30HRzezK/mHarPesuAQAANF671cre9tysu7HriI4BAAAAgMYTZAIAAAAAjSfIBAAAAAAazx6ZE+j1ernlllty+umnK6jCuvX7/dx2221Hjjd7/Ey7fXa2fr+fW++6Pd177kzmF3PfvoJmAAAAa+n3++nV/qy7sesIMidw+PB83nvttbniyitd6LNuvV4v77322iPHmz1+pt0+O1uv38/7brw+vc8cSBZ7OaOen5bJ+gAAAKvq137mu4uz7sau42oVAAAAAGg8QSYAAAAA0HiCTAAAAACg8QSZAAAAAEDjCTIBAAAAgMYTZAIAAAAAjSfIBAAAAAAaT5AJAAAAADSeIBMAAAAAaDxBJgAAAADQeJ1Zd2A72bd/Xx716Een0/FtY/06nU4e9ehHH3W8ndpnZ+u023nkQy5Kd+6OZH4x7VZ71l0CAABovHarnb2duVl3Y9eReEyg3WrltNNOm3U32GZKKVMdN9Nun52tlJJTTzw53f3dpLWYUsqsuwQAANB4pZS0i4XOW813HAAAAABoPEEmAAAAANB4gkwAAAAAoPHskTmBw4cP55prrsmll16qoArr1u12c+211x453uzxM+322dm63W7e/eHr0rv57mSxm8+64Ix02gr+AAAArKbb6+Vwd2HW3dh1pB0T6PX6ufOOO1JrnXVX2EZqrbnzjjuOOt5O7bOz1SR33nN3eocPJIu94RkAAABWV9N3/b3lLC0HAAAAABpPkAkAAAAANJ4gEwAA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8447JUn3PeO+Y/iujk0cr/8djh07duiar12rz332s/rMZz6tL33py/rgBz+oD37wg3rbRW/TJz/1KdXr9e45t27dqsc8ZmUI1++M+2bntcgK5mdP4een28c6sr2GPwAAAABQUraVdC23sVWwcdrzaMqNIDMjvnLVVXrTm96krVu36vzzz9d//dd/6a/+6vV62cv+16rPf/CDH6wHP/jByx678stfVhRFuuSSS7pLeCVpx0/s0Cc+8XF967pvrXqub33ruuR5O3Yc1/dw249vW/Vx16Tl1G2ndh+r1+qSpIXFlZvkRlGku+8erjPz9PS0nvTkJ+tJT36yJOnGG7+r5/z2b+uaa67Wu999uZ73vOfrtNOSZjInnXSS3v6Odwx1/rJjfvYwPwEAAACgXMxMrXfQjvwNBOyRmQWHDh3S85//PEVRpLe+7e36x3e+U1u2bNHrX/c6fe1rX1v3ed7xjrdL0rKGJpL08z//eEnSpz71SbVarWUfu+eeu3XVVVdp8wkn6JJLHnZc38eHPvjBFY+FYaiPfvQjkqSHPax3/m3btkmSbr755hWfc8UVV6jT6RzXWM4773w973nPlyR997vJvoSnnXaaHvCAB+imm27SD37wg+M6f5kwP5crw/y0biNrSaryZwIAAAAAHNs8vutBHB+uUDPgD//wD7Rr1y49/wUv0GMf+1idcspWvfnNb1EYhnre856rxcXF7nP37LlHP/7xj5d9fhiGes1rXq0Pf/jDeuQjH6lf/MWnL/v4hRdeqEsueZj27NmjV77yFcs+78UvepE6nY4uu+wy1Wo1HY+vfOUreu973rPssde+5tX68Y9/rB07dujSnTu7j7v7//Zv/6Zdu3Z1H7/11lv1kj/6w3V/zaWlJb3tbW/VgQMHlj0ex7E+97nPSpJOP+307uMveenLFMexfvM3fl3f/va3V5xv3759uvxd71r31y8D5mf55qeppH8aYrt8v0wAAAAAKCHbSaswIyszN+V3MCVnLPufrYsx5oYHPvDc86/6yleOO1Dp96EPfVDP/K3f0rnnnqsvXvElzczMdD/2P37vv+vyyy/Xb/3WM/Xmt7xFkvSlL12hJz3xiXrIQx6i7du3y1qra665Rrt379ZDHvIQfeSjH9OJJ5644uvcfPPN+rnHPFr33nuvHvSgB+mB556rb3zjG7r1llt08cWX6OOf+ISmpo7tl/GyF7xAH/jA+/Wc5z5X//xP/6Sf+umf1llnnaUbrr9eN954ozZu3KhPfPJTeshDHrLs817w/OfrX/7lA9q0aZMuvXSnGo0lfe1rX9PjHvc4ff3rX9dtt92mQ4d7S3t37dqln9jxID384Q/XJz/1H5KkAwcO6Iz7nq5araYLLvhJnbH9DHXabX3jG9/Q7bffru3bt+sLX7xCJ510Uvc8f/anr9Ib3vAGBUGgBz/4wTrrrLNkrdUtt9yi66+/XvPz8/rx7avv13is+iv4Rjl/xn1+5mc552e8f0md79ypcNd+2aWWaudtG+nXAwAAAIA8iQ81Fd22X5UzT1KwcVpTD7+fJOmhF16o733vpu9aax/keYilQUXmEIwZbUh055136vd///dVr9f1zn/652UhkST9xV++TmeffY7e855362Mf/agk6ayz7qdf+7Vf1+HDC/rsZz+r//zP/9Spp56q1772L/T5//yvVUMiSTrnnHP05Suv0q//+m9o7969+vjHPqYgCPSSl75UH/v4x485JOr39Kc/Xf/6b/+uSlDRJz/xCd1555164hOfpM99/vMrQiJJ+vs3v1kvfvEfaMOGDfr85z+nXbfdphf/wR/on991+bq/5vz8vP76jW/UE57wBO3dt1ef+uQndcUVV2jz5s3633/8x/riFV9aFhJJ0iv/5FX61Kf+Q0996lN199136+Mf/7iuuOIKRVGk5zz3ufrXf/23430pVqjVat3/xmEc52d+lnd+dpdKWNurzgQAAACAsrJ9d/qavxqz6rMxRlRkrpMx5oZzzz33/Gu+dq3voWSOq3j7xCc/qUc84pG+hwMsw/wcXrR3QeF3dyu8ZZ/sYlu1Hace/ZMAAAAAoKDi/UuK7jioyhknqHLKBtUv2i5JuuihF+qmm6jInCRKbQAAazL1iu8hAAAAAIBftd51Ec1+/CLIBAAsYxfb6R1JAX8mAAAAAADZUPU9gDxZWlrSlVd+WRdddPHY9jr07fvf+57e+MY3ruu5D3vYw/TMZz1rvAMqgE6no2uuubp7POr5M+7zZwnzc/RWmz/BdDp/rOXdRgAAAACIbe+2mlRndjodLS0teRxUORFkDsFaKeyEvocxVnffc7c+8IH3r/v5z3zWs/T2d7xDb3/HO8Y4qvwb97wp+rx0mJ/jcaT5Y6aLGYoDAAAAwHqZWt9KtTDq3qXtzOQRZGKZRzzikTp0eMH3MIBVMT8nwx5u9g4C2vABAAAAALKBIBMAsIyZSaswIyvbZmk5AAAAgJJzlZexlQzFHj7RxQEAsFzfH2YzW/c4EAAAAADIgEpffMZ6cq8IMgEAy8SH+paWV3i3EQAAAACQDSwtBwAs46owbRxLS9FRng0AAAAA5WCjOLmNqcr0hYpMAMCa6FoOAAAAoPRogpoZBJkAgGXsQqt731QrHkcCAAAAAEAPQSYAYBlTS8PL2Mq2Q7+DAQAAAADfXEFmnN5G8VrPxJgRZAIAlqumfxqslnUwBwAAAIBS6l4XsTembzT7GUK1WtXWbdsUBOS/WL8gCLR127Zlx3k6P4pttfkTNzvdYzPNnwkAAAAAGBQEgapVrpcmjVd8CFNTdZ177rm+h4GcqVQqY5034z4/im21+ROHsaxV8mZjxDuOAAAAAErOVWTa9PoojFWZqWlqqu5vTCWVydItY0xgjPlNY8wnjTF3GmPaxphFY8z3jDHvMsY87DjPf7kxxq7jvzeP6nsCgLzodSpnj0wAAAAAMK5rOXUe3mWuItMYc4Kkj0u6dOBDNUkPSP97ljHmDdbaP5r0+ACg6Gzc27jazPEOIwAAAAAgG7JYkflu9ULMj0h6pKRTJd1f0rMk7Uo/9ofGmOce59f6sqQNR/jvxcd5fgDIHXug0XunkXccAQAAACCRXh/ZkK7lvmSqItMYc46kJ6eHn7DWPm3gKTcbY74s6VuS5iT9rqR3HseXjKy1C+t9chiG2r17t0455RQaqmDd4jjWPffc0z0e9fwZ9/lRbKvNH7NpRlo8KEmyjc5anwoAAAAApdJdvWaSa6kwZCuuSctUkCnpgr7771vtCdbaHxpjrpL0WEkT7XDSarX1vZtu0kknnURQhHWLokjfu+mm7vGo58+4z49iW23+9DPzLC0HAAAAgEFRFKnVavseRumMPO0wxrywr1nOb63xHGOM+Uz6nP3GmPumH2r1Pe1ICxqj9PaeIzwHAHAM4r2LvocAAAAAANlSMb37EUvLfRl5kGmtfZukj6WHbzbGnLXK016kpKJSki6z1v44vf8tSW42/NJq5zfGnK7eHpqfPP4RS8aYijGmMopzAUDeBZumpTh9L6kVHfnJAAAAAFAGkZVsep0U00zAl3GtP32OpN1KGua8vz8kNMY8RNJfpIfvsdb+m/uYtfY2Se9KD59hjHm3MeYCY8ycMeYUY8zTJH1W0kZJN0l6xXGO8yeMMTdLakvqGGP2GGM+Zox5ujHGHO2TAaCQAtOriZ/iPR4AAAAAkNS7TgqIjHwZS5Bprd0j6dlKfsQPUxo4GmNmJH1AUl3SjyT991U+/XeUNPCJJf2WpG9KWpB0t6QPSTpB0l9Kuthau/c4h3qipLOVvA5G0hZJT5L0/yR92hhzwnGeHwByxx7u7fJh2G8VAAAAAKRaX5EHFZnejO0K1Vr7H5L+Lj18uTHmYZL+WtL5Sva4/A1r7eFVPq8t6fclvUq9Zeb9Nko6VdLm4xjebkmvl/RoSWdKmpJ0iqRflHRN+pzHSvqwMYareAClYq2Ve6vRWv5AAwAAAIBi263ItG224PJl3CHdSyV9R1JF0kclvTB9/M+ttV9Z7ROMMT+hZNn4n0n6sKSHSzpJ0umSfkNJZeYzJX3FGHP+sQzKWvsya+1LrbX/Za3dZa1tW2v3WGs/LGmnpA+mT31k+jUBoDSCubqse4eRTawBAAAAILk2Sgs9TJWaN1/G+spba1uSfk1SU8mybUm6StKrV3u+MWaLpP+UdF9J77bWPsNae6W19l5r7R3W2vcrWap+t6T7SHr3GMYcSnq+pKX0oV8f9dcAgCyzfcskzFTV40gAAAAAIBu4NsqGSUTIuyTd03f8L9batWpwn6de4LlqIx9r7W5Jb0kPL0wrOEfKWrtPSeAqST856vMDQJbZQ03fQwAAAACAbOnr72MbHX/jKLlJBJlvlnRG3/FrjDFnrvHcS9Lbe6y1Pz7COa/tu39My8vXwYWvm8d0fgDIJDM/1d28mr1fAAAAAECyzVCK0tVr9cqRn4yxGWuQaYz5ZSWdxyXptZL2KGnW8941muhMr/fUfffHtYHbtvT2wJjODwDZZHr/xJpplk8AAAAAgCrsi5kFY7tCNcbcV9I70sNPS3q5pK8qafrzcEn/Wyv3yrwrvT3FGHPfI1RlXth3f9doRtxjjDlF0qXp4Tfc4zMz0/rpCy9UtcqFPdavWq3qpy+8cNlxns6PYltt/rQPs7QcAAAAAPqZqUq3a7miWNVqVTMz663Hw6iMJU5Oqy3fq2RZ9l5Jz7KJj0l6e/q0PzHGXDTwqZ/vu/+qNc69TdLvpId71Rc0rnNs24wxa9YAG2Pqkt6pXnXo+9zHgiDQ/Py8jDGrfi6wGmOM5ufnu/+Nev6M+/wottXnj+n9ge5r/AMAAAAApRVZuQsl24pkjFEQUKU5aeN6xV8q6WfS+89JG/Q4L5Z0k5Jq0PcZY+b6PvZvkr6f3v9tY8y/G2MeZow5wRhzmjHm1yV9RdLW9Dl/nnYZ7zLGnGmMsel/l68ytl+R9H1jzJ8ZY37WGHO6MWaTMWZ7ev5rJD05fe5/SfrAMb0CAJBTZqYm2TTAJBgHAAAAANlW2C30MFPskenLyNegGmMulPSn6eE7rLUf7f+4tbaRBoZflXR/SX+jpFu5rLVtY8yTJH0i/dgvpf+t5o3W2r87xmHeT0lX9FU7o6c+IumZ1tpx7cEJANkU9f2zxz4wAAAAAJA0Re3QDNW3kV6hptWV75dUk/Q9JdWXK1hrv6FeiPhcY8zT+j72A0kXSPpdSZ9T0j28I2lJ0s2SLpd0qbX2D45xmB+S9AeS/q+kG5U0IAolHVZSKXq5pEdba59mrT14jF8DAHLLtsOjPwkAAAAASio+3PI9hNIaaUWmtXZR0gPX+dzXSXrdGh9bkvTW9L9hx3Crlnc1H/z4LklvHPa8ktRoNHXttdfqggsuoKEK1i0MQ1133XXd41HPn3GfH8W22vxRrdLbGzOiKB0AAAAA7GJbpprUA5qZmsIwVKNBo9RJI+0YQhzHWlxYkLU0v8D6WWu1uLCw7DhP50exrTZ/ljWMqrH3CwAAAACYmarU6RV6WGsVxxR+TBqbnwEAlmFpOQAAAAAMqPYVeYQEmL4QZAIAVupW9lLhCwAAAACytrsC0jY7ngdTXiwtBwAsFwTdPTKXLTMHAAAAgJKyS+1unYeZqVPy4QkVmQCA5fr3WQ0IMgEAAAAg2DjtewgQQSYAYBANowAAAABgTfZQw/cQSosgEwCwEmEmAAAAAHTZVii5Hj/TNa9jKTOCTADASi7HDPgzAQAAAACqBHIXSqbCdZIvvPIAAAAAAADAEZh6X7/smBVsvhBkAgC67Iol5fyBBgAAAIB+8f4l30MorerRnwKnUgm0afNmGUMXX6yfMUabNm9edpyn86PYVsyfyMpKsu4dRrqWAwAAAIDsUju5jayCzTMyxqjCEvOJI8gcwvT0tC644ALfw0DOVKvVsc6bcZ8fxTY4f2wnUrv/CQTjAAAAACAzPyXb6HSPq9WqpqenPY6onIiOAQAAAAAAgHWyi+2jPwljQZAJAOhxS8pX7JUJAAAAACXWf61Esx9vCDIBACtZ9sgEAAAAgK4wSm6tlZmt+R1LibFH5hCiONaBAwe0adMmGqpg3ay1OnjwYPd41PNn3OdHsQ3On43Tcx5HAwAAAAAZNV2TDja7h9ZaRXHscUDlRJA5hGajqW9dd50u3blTtRrpO9YnDEN967rrusejnj/jPj+KbXD+POzCi/wNBgAAAAByIN6zoPCck9RsNI/+ZIwUS8sBAF02TJeU88YiAAAAAPR00qXlsZXZSLdyXwgyAQA96bYENt0jk20KAAAAAEBSrSJJspJMhTjNF155AMDqaPQDAAAAAJKWh5c2YgmbLwSZAIAe14kPAAAAALAqe4i9MX0hyAQA9Lil5LFN/gMAAAAAyLbC5E5sZTawR6YvBJkAgFUQYgIAAACAY2ZqfQf+xlF2BJkAgNVV+RMBAAAAAIPsUsf3EEqLq1QAQFd3uQQFmQAAAACwkhW9BTwiyAQAdBlXhRlbKaQTHwAAAABI6l0fxbHMbN3vWEqMIBMAsLpaxfcIAAAAACAbprg+yoKq7wHkyfT0lB60Y4cqFSYv1q9SqehBO3YsO87T+VFsK+aPNXKLJEzADtYAAAAAMMgutVWtVDQ9PeV7KKVDkDmESqWiLVu2+B4GciYIgrHOm3GfH8U2OH+iuw5279uIpeUAAAAAIEmK0kYC6U0QBBQSecDScgBATzX9Q8wemQAAAADQ41asWSszRV2gLwSZAIBVmZma7yEAAAAAQDZU2HorCwgyAQA97dD3CAAAAAAg02yL6yZfqIUdQqvV0vXXX6/zzjuPfRCwblEU6cYbb+wej3r+jPv8KLbB+fOADacmd6yVbUdrfBYAAAAAlExsl91GUaRWq+VxQOVEkDmEMIy0b+9exXFMUIR1i+NY+/buXXY8yvkz7vOj2FbMn833kZGSDaxp9gMAAAAAkiRT7VvUXK0ojmOFIcUfk8bScgDAqsxc3fcQAAAAACAj+vbIpOjDG4JMAEDPYtv3CAAAAAAg26z1PYLSYmk5AKCnnm5LEFtZGv8AAAAAQMIu3yMTflCRCQDoCXrLJUyNvVYBAAAAQJJUSSM0a7VsmTkmiiATALC6OkEmAAAAAKxEVaYvBJkAgC57sOl7CAAAAAAArIogEwDQ5TqV2yiWXaDxDwAAAABI6q4mt+kemZbO5V4QZAIAekzfHpnzdY8DAQAAAIAMCdgXMwsIMgEAPX0d+EzAnwgAAAAAQHZUfQ8gT4LAaGp6WsaQwmP9jEnmTf9xns6PYhucP/ZQk/57AAAAAHAURkYBVZoTR5A5hJmZGV1yySW+h4GcqVarY5034z4/im1w/oS37FO00JZiq3ixJfqWAwAAAIB623Clq9iqQaCZmRmPAyon1g0CAFYVbJg++pMAAAAAoAxY/ZgJBJkAgC7biXoH/J0GAAAAAGQIQSYAoMsutmWtJPcfAAAAAKDHphdKUex3HCXFHplDsNaq0WhomoY/GIK1Vs1ms3s86vkz7vOj2AbnT3WuJh1sSrKyjY6/gQEAAABAhhjX2CfNL621spbqj0kjyBzC0lJD11x9tS7duVO1Ws33cJATYRjqmquv7h6Pev6M+/wotsH5c/HWB3Tvmw11H0MCAAAAgMwLo0hLSw3fwygdlpYDALqowgQAAACANbD40TuCTABAlw3jvj1fWCYBAAAAAF1W3eXktsMemT4QZAIAusxMvRtkLutgDgAAAADoFX7Qm8ILgkwAwKrMLHtkAgAAAEBXhfDSN4JMAECXPcRm1QAAAACwur4gk47lXhBkAgB6qpXeH+SQPV8AAAAAoCvq6ynAVlxeEGQCALrMVFUivwQAAACA1blCzAqRmg+86gCAVZl6xfcQAAAAACAzTI1rJN8IMgEAXfH+Rd9DAAAAAIDsi1jK5gNBJgCgy8zUZdM9X2zIni8AAAAA4NhOJMXp9RJBphdV3wPIk3q9rrPPOUeVCqXEWL9KpaKzzzln2XGezo9iWzF/9ljFtpUe8F4XAAAAACyXBJnVWlX1et3zWMqHIHMItVpVp59+uu9hIGeCIBjrvBn3+VFsg/Ons++Obq8fQ5AJAAAAAF1muhejBUGgWo1YbdK4SgUAdMUHG76HAAAAAACZZ9uh7yGUEkEmAKDLzNTdSgnZkD1fAAAAAMCxrVCilYBXBJkAgJ6KkdJmP6bGfqsAAAAA0GX77rMVlxcs5h9Cu93WzTffrLPOOouGKli3KIp0yy23dI9HPX/GfX4U2+D8OS3q+7NgjIcRAQAAAEA2mdneCrYoitRut/0OqIQIMofQ6YS64/bbtX37doIirFscx7rj9tu7x6OeP+M+P4ptcP6cardRqg8AAAAARxEvtNTpsE/mpHG9CgDoMvWqFHffYvQ7GAAAAADIENtoS3HaS4CtuLwgyAQA9BjT2/elRtE+AAAAAHRVK73rpYCtuHwgyAQAdNm4r1M5f5cBAAAAoMtMU+zhG0EmAKCnw3JyAAAAADgae7jpewilRJAJAOipVnp7vkTxkZ8LAAAAACViF9qSTdaWm9m659GUE0EmAKCnbzm5YfNqAAAAAOgyMzXfQyg9gkwAQA9LywEAAABgVaZGjOYbPwEAAAAAAABgCPZAw/cQSol2SwCAHmOkONnzxVpL43IAAAAASMX9e2TOT3keTTlRkQkA6DG96NJU+BMBAAAAAE5AeOkdFZlDmJub1c886lG+h4GcqdVqY5034z4/im1w/rSuuFn0KgcAAACAVQS9wo9qpaK5uVmPgyknym0AAAAAAACAIcQHm76HUEoEmQAAScmemJJko7Qm07BDJgAAAAA4drHV7SkQbGCZuQ8EmQCA1QUEmQAAAADgmA3TvodQegSZAAAAAAAAwBBsSHcBH2j2M4TFxSV98Qtf0KU7d6pWq/keDnKi0+noqiuv7B6Pev6M+/wotv75Y2Orh5pT1a3DtN6GBQAAAACZZa3U2b+oxcUl30MpHSoyAQCJdI/MbtvyCkvLAQAAAMCxjXZyJ4plNrJHpg8EmQAAAAAAAMBRmHnCS99YWj7AGHPDGh86e6IDAQAAAAAAQCbZRsf3EEqJikwAQCJ2m2KyOSYAAAAArGD7rpXakb9xlBgVmQOstQ9a7fG0UvP8CQ8HACYvDTRNhfe6AAAAAKDLhZexZZm5J1ylAgAAAAAAAEczU/M9gtIjyAQAJFhRDgAAAADrEh9q+B5CKRFkAgAkSTaK0zt+xwEAAAAAmRSlF0vWygREaj7wqgMAEia5sZYkEwAAAABWSK+VrJUMy8y9IMgEAKwUGN8jAAAAAIBMMXV6ZvvGT2AItVpVp51+ugLKhzGEIAh02umnLzvO0/lRbP3zxy62ZfabZGU5OSYAAAAArMkebKhWI1abNF7xIdTrdZ1zzjm+h4GcqVQqY5034z4/iq1//sT7l9Q5eKfC2Pb2fgEAAAAASJJsGKV3rKqzM6rX634HVEKUbgEAEt3l5ISYAAAAADDIVNMYzUqqVbyOpawIMgEAK/FHGQAAAACWYys37/gJAAASYex7BAAAAACQC/Zw0/cQSok9MofQ6YS6/fbbdZ/73IeGKli3OI515513do9HPX/GfX4UW//8ie5d1CmxkWJJncjvwAAAAAAga1zxRxzL1gJ1OqHf8ZQQQeYQ2u22fnjzzdq6dStBEdYtiiL98Oabu8ejnj/jPj+KrX/+xAtNbZk7U7LskQkAAAAAK9R7W3DFSnIiTBZpBwBgBTPF+1wAAAAAsIwxvfsxW3P5QJAJAEi0+UMMAAAAAOth2ywr94EgEwCQqKTvLsZWtsUfZQAAAABYJnJ7ZFqZOqvYfCDIBAAk3DIJKykwR3wqAAAAAJROLY3RaCvgDUEmAGAF9sgEAAAAgEG9gg+WlvtBkAkAkCTZRsf3EAAAAAAgwyjF9I2SGwCAJMnUK8mdOGaPTAAAAAAY5HLMOJYq1Ab6wKsOAFjBzNR8DwEAAAAAMsVUidF84ycAAEj0r5Ko0OwHAAAAANbkOphjoggyAQCSJNvq2yOTrV8AAAAAYDk7cIuJY4/MIczOzuiiiy9WtcrLhvWrVqu66OKLlx3n6fwotv75E91xUJU7DiuKrexi2/PIAAAAACBj3MI1a1UJKpqdnfE6nDIi8RiCMUYzM0xSDGfc84Z5iePRP3+i6ZZCs5A8vnHa57AAAAAAIHuC3hZcxhgZw5Zck8bScgCAJMm26VQOAAAAAMgugkwAgCTJhslm1dZaNq4GAAAAgEHp3pg2ZpNMXwgyAQCSJDOV7jZiJduiOhMAAAAAlqkQo/nGHplDaDQa+upXv6oLL7yQhipYtzAMde2113aPRz1/xn1+FFv//InuPqQLNm6XJAXzUz6HBQAAAACZFkaRlpYavodROqQdQ4hjq1azmSy7BNbJ2mTe9B/n6fwotv75Ex5YkDYyfwAAAADg6KysZUuuSaMmFgAgSTL1SnIntjT+AQAAAIBBrkk5e2R6Q5AJAEgE6V9l23cfAAAAAJAw7pqJINMXgkwAQKLvb7Gps/MIAAAAACBbCDIBAJIke7jlewgAAAAAkB8UZk4cQSYAIDFXl42tJCvb6PgeDQAAAABkinFbcNHjxxuCTADACma27nsIAAAAAJBRlGL6QpAJAEhEfW8r0uwHAAAAAFYyXCv5RJAJAEgsdfreWOQdRgAAAABYydK03COCTABAYq4uxUlVpm2EngcDAAAAABlkJcUkmb5UfQ8gT6rVik7askVBQP6L9QuCQCdt2bLsOE/nR7H1z59wIZAxRlaSmWOPTAAAAABYIV1ZboxRpVLxO5YSIsgcwtTUlHbs2OF7GMiZSqUy1nkz7vOj2PrnT3vhVsWLLVGLCQAAAABrqATpTUXTU1OeB1M+lG4BABK1Sm9rzP7GPwAAAACARBiru0kmm2VOHEEmAECSZOqVvj/IfscCAAAAAJnVvV6ig/mkEWQCAFYwU+z1AgAAAACDTJ1rJZ/YI3MIURRp7969OvHEE2mognWL41j33ntv93jU82fc50ex9c+f9q47tLk253lEAAAAAJB9cRwrDOkwMGkEmUNoNlu64frrdenOnQRFWLcoinTD9dd3j0c9f8Z9fhRb//wJ79mni7Y9QEaSbUV+BwYAAAAAGWTbkUy9otjGarVbvodTOqQdAIBE3/YuZpr3uQAAAABgVfQU8IYgEwCQaPdVYRo2rQYAAACAQWa65nsIpUaQCQCQJNmwL8i0vMUIAAAAAKuyA7eYGIJMAICk9J3FKPlLbMPY82gAAAAAIHtss9Mr/GAh28QRZAIAVjBT7JEJAAAAAIPMDEvLfSLIBABISt9ZBAAAAACsrb+fAEvLJ46SGwBAwhh1/xJHLC0HAAAAgBW4VvKKikwAgCTJ1CpSnAaZFf48AAAAAMAg2wqpxPSIK1UAgCTJ9r+zGLBrNQAAAAAMMhumfA+h1AgyAQAJlkgAAAAAwPpZSjMnjT0yhzA9M62HXHCBqlVeNqxftVrVQy64YNlxns6PYuufP+32Cao0jGKpt8QcAAAAANBlF9pSxagaVDQ9Pe17OKVD4jGEShBo8+bNvoeBnDHGjHXejPv8KLb++dOa36+4uZA8XqNgHwAAAAAGmbm6bLMjY4yCoOJ7OKXDlSoAIBFGvkcAAAAAAJlm+hujsrR84ggyAQA96R9iy3aZAAAAALCCtbbXtZwgc+IIMgEACWO6f5BNha7lAAAAADDINjq9ngIB102Txh6ZQ2g2m7ruuuu0Y8cOGqpg3cIw1PXXX989HvX8Gff5UWz986fzw9t17obTZKQk1AQAAAAALBNsmFK8v6EwitRstXwPp3RIO4YQRbEOHjiQlBED62St1cEDB5Yd5+n8KLb++dNZPCxtYP4AAAAAwNFZxWHoexClw9JyAEA3ALcRm2MCAAAAwFpsoyNZm2yPyUq2iSPIBACsxF4vAAAAALCCmWZxs08EmQAAAAAAAMB6VPqiNHbmmjiCTAAAf4ABAAAAYD1cx3Lb/T9MEEEmAEByTaLcH2WWlgMAAADACrYdJXfimD0yPSDIBAAAAAAAANbBzNZ8D6HUCDIBAL2KTAAAAADA+kRcR00aQSYAoLeknKXlAAAAALAm2wyTO7HluskDgkwAgKTlf4ANe70AAAAAwApmhqXlPlV9DyBPgiDQ3Pw8F/gYijFGc/Pzy47zdH4Um5s/ttVROD3LZtUAAAAAcAS9a24jrp4mjyBzCDMz07rwwgt9DwM5U61Wxzpvxn1+FJubP/HhpjrR7YruPKjY96AAAAAAIKNsnFwxVYNAM1PTnkdTPiwtBwB0KzFtzGbVAAAAALCmtFGqjS0r2jwgyAQALFfhjzEAAAAArMbU+xc3UwgyaQSZAACpE/keAQAAAADkCyvaJo49MocQx7EWFhY0NzdHQxWsm7VWi4uL3eNRz59xnx/F5uZPvNRQp7GkqSiWIv4YAwAAAMBqbDspArFRTH8BDwgyh9BoNPX1a6/VpTt3qlar+R4OciIMQ3392mu7x6OeP+M+P4rNzZ94qa3oln166PyZqvgeFAAAAABklJlOorQojtRsNz2PpnxYWg4AkKK+9xJrRJkAAAAAcFQsLZ84gkwAQG+P6tiyXyYAAAAArMUVgVi6lvtAkAkAkPj7CwAAAABHV01XsFGM6QVBJgBg2R9ht+cLAAAAAGBAfxWmJc2cNK5WAQC95eTWitZ7AAAAALAGF16SYXpBRSYAQKqmfw5iybbZIxMAAAAAVuUKMtkj0wuCTADAMmam5nsIAAAAAJBNQV+UxtLyiSPIBADINsPeAW8qAgAAAAAyiCATACBTTzvvxVZ2qeN3MAAAAACQVa4KM4pZWu4BQSYAYBmWlgMAAADA6ky1f2m5v3GUFV3LhzA1VdcDzz1XlUrF91CQI5VKRQ8899xlx3k6P4rNzZ/wln2Kg8MK9kRShfe4AAAAAOBIAhOoXqMIZNIIModQrVa1bds238NAzgRBMNZ5M+7zo9jc/AnbU4o6+xTec49sg6XlAAAAAHAkgTGqUkg0cZTdAACWNfgxNf40AAAAAMCqXNdylpV7wdUqAGB5FWadYn0AAAAAQPYQZAIAZNJueza2Uhh5Hg0AAAAAZJu1lGT6QNnNEFqttm666Sbd//73p6EK1i2KIv3gBz/oHo96/oz7/Cg2N3+iOw8q3n1IZ0RTqka8xwUAAAAAq6okRSBRFKvVob/ApHG1OoQwDHX37t2K49j3UJAjcRzr7t27u/+Nev6M+/woNjd/dt91l+7ev1fWWplZOu8BAAAAwJFYGyuKQt/DKB2CTACAFPWWRdiIJRIAAAAAcETp0nKzrHUqxo0gEwAgU0+3I4it1OZdRQAAAABYVZDmluyR6QVBJgBANuxtSWDmpjyOBAAAAACA1RFkAgCkVth7Q5F3FgEAAADgyNLLJiPD0vIJIsgEAEgztW6AaZt03gMAAACA1Zg0t7QxBSA+EGQCACSWlgMAAAAAMo4gEwAg22j7HgIAAAAA5EPfanK6lk8WQSYAQGauztJyAAAAAFgPa6U4WdVmu7tlYhIIMgEAy5eWz9Y9DgQAAAAAMo7+Pt5UfQ8gT4yRqjVeMgxv3POGeYnjUa1VZZuxgqDCe4kAAAAAcDSVNMg0RoEMRYITRPoxhNnZWe3c+XDfw0DO1Gq1sc6bcZ8fxebmT2fjnQp3H1L0gz1SK/Q9LAAAAADIrjBWVTXNTk2ztHzCSI0BALLtqHufpeUAAAAAcAQV4jRfeOUBALKLrf4jb+MAAAAAgKwz1V6cxtLyyeLFBgDIbJyW4rRreV91JgAAAABgOdsKe9dPslSCTBB7ZA7BWqnT6ahWq/keCnKm0+l0749j/oz7/Ci2TqejcLGpKAplJJlp5hAAAAAArMXUK5JEhOkBQeYQlpaWdNWVV+rSnTsJi7BunU5HV115Zfd41PNn3OdHsbn507nhLsWtSBfVTlfF96AAAAAAIMuCQGEUqtFqKDAsLZ8kXmwAgMxUVbKxJMmGLC0HAAAAgLXYZqe7tDy26YUUJoIgEwCQ7PGSMlMU6wMAAADAWsxMbxWkkYzHoZQOQSYAYDn2eQEAAACAtRnTvW4KTEC2NkG82AAAmVqluzSiewsAAAAAWMEutbtBJkvLJ4sgEwAg2+nbF7PGnwYAAAAAWIvZMNW7b1haPklcrQIAluP9RAAAAABYm5Vkk5LMQHQtnyQ6OgAApErQ2xuTP8MAAAAAsCa72JZNg8xYLC2fJC5XAQBS1Pvby17VAAAAALC2YON07z4VmRPFiw0ASKTvKHZvAQAAAAAr2CjmuskTgkwAQML9Ia7wpwEAAAAA1hRGva7lLC2fKPbIHEK9XtP2M7erUqn4HgpypFKpaPuZ25cd5+n8KDY3f9p7jOJ6Q0GbhnsAAAAAcCRmtq6g2VGtWlNVAdnaBPFiD6FWq+nMM8/yPQzkTBAEY5034z4/ii0IAm0/40y1b4sUBQuK7z7se0gAAAAAkGm2FSqQUa1SpSJzwlg/CABlN7i3S4WqTAAAAABYi6n2VkLa7iJzTAJBJgCUHX92AQAAAGD96r04rWpYWj5JBJkAUHZxuhIiThNNQ0UmAAAAAKzFLnW69yMbRx6HUjqkxkPodDq69dZbdMYZ2xUEZMBYnziOddttu7rHo54/4z4/ii2OY+269VZ17r5D0b5FnWbnCDIBAAAA4AjMXF3RQlPtsCPDBdREEWQOod3uaNetu3TaaacTFGHdoijSrlt7QeOo58+4z49iS+bPrQrv2aN4/5JO3XS27yEBAAAAQObFsVUnChXIcAE+QbzYAICEW1ke8IYiAAAAAKypla4mt1JE1/KJIsgEgJIbbFoOAAAAAFibma1171dNUDnCUzFiBJkAUHZR8gYigSYAAAAAHJ0Ne/19YktF5iQRZAJA2XX3pibJBAAAAICjqhCn+cIrDwBlF/XeTeQPMgAAAAAcmem7bgoMzX4miRcbAMrOVWTGtrvMHAAAAACwOtvpX1oecxE1QQSZAAAAAAAAwDqZqV6zn8AEZGsTxIsNAGXn3k20lqXlAAAAAHA0FGF6wxUrAJRdf3jJ0nIAAAAAOLJuw1TJytI1dYIIMgGg5Gwr7N4301WPIwEAAACAHKj24jTTn2pi7LhiHcLs7Kwu3blTtVrt6E8GUrVaTZfu3LnsOE/nR7HVajVd+rCdir5/t8Kpfaq0qcgEAAAAgCOKYlUrFc3Wp7SfisyJIsgcgjGERDg24543zEscj5oJZCpVqVKVrYZH/wQAAAAAKDFTqyS3yf+oyJwglpYDQMl1l5ZbK1PlzwIAAAAAHImlCNMbKjIBoOTMVPqnILaybSoyAQAAAOBITEABiC+88gBQcvGhZve+2TDlcSQAAAAAkAMsJveGiswhLC0t6corv6yLLrqYPQmxbp1OR9dcc3X3eNTzZ9znR7F1Oh195aZvKt59SNHtB/XTW++v6vYTfQ8LAAAAALLLGIVRpKVW8+jPxUgRZA7BWinssOwSwxv3vGFe4nh0FpuyUaQojmTm676HAwAAAADZFiQlmVbslTlpLC0HgJIz7o+wtVIcex4NAAAAAACrI8gEACSslcgxAQAAAODIAjbJ9IUgEwBKzjbTrQmsZKbZcQQAAAAAkE0EmQBQct3w0kq2wX6rAAAAAHAkppLGaWyROXEEmQBQcvZwq3ufZj8AAAAAgKwiyASAspury8bJW4m20fY8GAAAAAAAVkeQCQAlZw+3uksizBwVmQAAAACAbCLIBICSMzM1dZPMNm3LAQAAAADZRJAJACVnG53eJtV1/iwAAAAAwPrQ7WfSqr4HkCfValVbt21TEHChj/ULgkBbt21bdpyn86PYgiDQtpO3Kj7cVHTQyJiK7yEBAAAAQOaZIFA14Ppp0ggyhzA1Vde5557rexjImUqlMtZ5M+7zo9gqlYruf+p2xRtaipbmCMIBAAAAYB0qxqheqfkeRulwxQoAZRfFkk2WRJgqfxYAAAAA4GhMjWpMH7hiBYCyC0x3axcb0ewHAAAAAI7GdiLfQyilUi0tN8acIOkRkk6TtEnSXZJulvQVay1X7wDKqb8is16qPwsAAAAAcEzMNMvKfSjFFasx5kxJb5D0ZEn1VZ5ypzHmrZJeZ60N1zpPGIbavXu3TjnlFPaRw7rFcax77rmnezzq+TPu86PY4jjW3fv3KV5sKVo4oG2deUr1AQAAAOAookZLYURV5qQVPsg0xjxN0rslbTzC0+4j6dWSnmqMeZK19p7VntRqtfW9m27SSSedRFCEdYuiSN+76abu8ajnz7jPj2KLokjfv/1HihsdxXsXdMq5Z/geEgAAAABknp2uqh11fA+jdAodZBpjLpX0r5Km+h7+gqT/kLRf0tmSflPSqenHHirpI8aYn7XWNic4VADwK11arsj6HQcAAAAA5IBdIsT0obBBpjFmWstDzLakZ1lr/2XgeX8i6X2SnpE+dImkP5P0kgkNFQCyo0Y1LwAAAAAcjdmw2s6FGLciX7H+d0n37Tt+5WCIKUlp5eWvSfpO38O/Z4w5bczjA4DsiF3bcr/DAAAAAIA8sAtUZPowkYpMY8yspEdJOkPSiZLukfRla+1NR/icqqSdknYo6TC+X9I3JV1trT3ipbYxxkj6n30P3S7pr9d6vrW2bYx5iaRPpQ9NS7pM0iuO9HUAoGhMtcjvbwEAAADAaAQbqcj0YWRBpjHmcknPTA+/aK19VLq8+zWSnqtVmu0YYz4j6fnW2l19jxlJvyfpjyWdssqXutEY8zxr7ZVHGM5DJfVXVL7rSN3IU5+RdJuSsFWSflEEmQDK4sjvDwEAAAAA+sRLISvaPBhb6Y0xZoukr0h6sdbuGP44SV81xpyZfk5d0gcl/a1WDzEl6TxJnzPG/OwRvvwTB44/c7TxWmtjSZ/ve+hBblwAUFTdAnf3B9gYb2MBAAAAgLwI2CPTi3EtLa8oabRzgaSOpI9IukrSQUlnKtmT8uz0udskvUfSIyW9VdLT0se/rKS7+F1KlqM/RdIj0o9NS3qPMeZca+3iKl//IX33Q0nXrnPcV0l6dt/xgyXdus7PBYD8iQaCzIAgEwAAAACOpq9rORdREzSuIHOnkh/kDyQ9ZXAvTGPMayR9SNIT0oceYYz5K0nPkbQg6VettR8fOOcb0g7jr0qPT5f025L+fpWvf17f/TvShj7r8cOB4/MlfXSdnwsAOTSwFoKKTAAAAAA4KjNPRaYP41pabiQdkPTo1Rr6WGtbSkLLVt/Df5je/vIqIabzZ5K+3Xf8K2s87359929bz4DXeO79Vn0WABSF61Yex8ktFZkAAAAAcFS2lbRi4QpqssbZnva11trb1/qgtfYuSZ8bePjj1tpPrfb89HOspPf1PfRTaXfzLmPMjJZXmt67/iFr/8DxhiE+FwByx0bsTg0AAAAAwzLTNd9DKKVxLS2Xkn0vj+YbWt6Y573r/BxnWsmemzf3PTY/8Pz1LiuXpMbA8bJzzcxM66cvvFDV6jhfNhRNtVrVT1944bLjPJ0fxVYNKvrJcx6kePchxfuXmD8AAAAAsA4VazRdresgRZkTNa4r1l3W2rvX8bzB51y9js/ZPXC8eeB4euC4vY5zOq2B45n+gyAIND8/mJMCR2aMGeu8Gff5UWwmijU/M6uw1patWxn2yAQAAACAozK1igJjRI45WeNaWj4YNq5lsOP4esLPwc+ZGzgerMAcZvfVqYHjwQpNACiWeKBrOQAAAADg6NL+AsSYkzWuisxhlnN3DdFdvN/gnFkYOB6s0DySmYHjZeeKY6vFxcEcFQDyK15cVKfZUNRckm23VG3y/g0AAAAAHE3UbCi2VIRMWuE2Q7PWNowxoXrf2wlDfPrmgeOfN8bckN4/+/vf/55O3bb1eIcIAAAAAACAAths6oNFcRijcXYt9+mWvvtnDPF52weOOyMYCwAAAAAAAAqImszJKlxFZuq7ku6f3j/dGDO9zmXrZw8cP89a+1FJMsbcsHXTiee/9Cm/oR2nnqlqUBnleFFgYRzp+rtu7R6Pev6M+/woNuYPAAAAAAwvjCP95jtercahhdj3WMqkqEHmtyQ9Nb1flXShpC+v4/MuHTj+Tv9BpVbV3KaN2nTSSapWuNDH+oRRpLmle7vHo54/4z4/iq07f4JAZqamEx5wBvMHAAAAAI4ijCIFtaraNqTRwAQVNcj8pKRX9h0/TkcJMo0xgaTH9D30XWtt/xJ1VWamdZ+fv0Tn7NypWq02ssGi2Dqdju658sru8ajnz7jPj2IbnD/3Y/4AAAAAwFF1Oh1VXzWtpuLBptMYo6LukXmNpDv7jp9tjDlaaPs4Ld9P80MjHxUAAAAAAACAY1LIINNaayX9bd9Dp0t68VrPN8bUJL2+76GmpLePZ3QAAAAAAAAAhlXIIDP195Lu6Dv+c2PMrww+yRgzLekDkn6i7+G3WGtvH/P4AAAAAAAAAKxTUffIlLW2kQaXn5M0Jaku6V+MMc+X9ClJB5R0Kf9NSffp+9SvSXrFZEcLAAAAAAAA4EgKG2RKkrX2y8aYX5P0bknz6cM/m/63mq9LerK1lo5TAAAAAAAAQIYUeWm5JMla+0FJD1bSvKe9xtPuUtLl/GHW2rsnNTYAAAAAAAAA6zOyikxr7bMkPWvIz7lc0uVDfs6tksyQn3OLpKcbY06U9AglzX82SLpb0s2SrrTWxsOcEwAAAAAAAMDkFHpp+SBr7b2SPnKsn1+pBNq0ebOMGSpHRckZY7Rp8+Zlx3k6P4qN+QMAAAAAwzPGqFIp/ELnzClVkHm8pqendcEFF/geBnKmWq2Odd6M+/woNuYPAAAAAAyvWq1qenra9zBKh+gYAAAAAAAAQOYRZAIAAAAAAADIPIJMAAAAAAAAAJnHHplDiOJYBw4c0KZNm2iIgXWz1urgwYPd41HPn3GfH8XG/AEAAACA4VlrFcWx72GUDkHmEJqNpr513XW6dOdO1Wo138NBToRhqG9dd133eNTzZ9znR7ExfwAAAABgeGEYqtlo+h5G6bC0HAAAAAAAAEDmEWQCAAAAAAAAyDyCTAAAAAAAAACZR5AJAAAAAAAAIPMIMgEAAAAAAABkHkEmAAAAAAAAgMwjyAQAAAAAAACQeQSZAAAAAAAAADKPIBMAAAAAAABA5hFkAgAAAAAAAMi8qu8B5Mn09JQetGOHKpWK76EgRyqVih60Y8ey4zydH8XG/AEAAACA4VUqFU1PT/keRukQZA6hUqloy5YtvoeBnAmCYKzzZtznR7ExfwAAAABgeEEQUAjiAUvLAQAAAAAAAGQeQSYAAAAAAACAzCPIBAAAAAAAAJB57JE5hFarpeuvv17nnXce+yBg3aIo0o033tg9HvX8Gff5UWzMHwAAAAAYXhRFarVavodROgSZQwjDSPv27lUcx1zoY93iONa+vXuXHY9y/oz7/Cg25g8AAAAADC+OY4Vh5HsYpcPScgAAAAAAAACZR5AJAAAAAAAAIPMIMgEAAAAAAABkHkEmAAAAAAAAgMwjyAQAAAAAAACQeQSZAAAAAAAAADKPIBMAAADAMdm4YV4bN8zrvqefpgMHDqz6nDf+9V9r44Z5vfa1r5ns4AAAQOEQZAIAAAA4LgcPHtSb3/z3vocBAAAKjiATAAAAwDEzxmh6elpvf9vbtH//ft/DAQAABUaQOYQgMJqanpYxxvdQkCPGJPPG/Tfq+TPu86PYmD8AgOMVBIGe9exn69ChQ/r7v/tb38MBAGAijDEKAq6fJo0gcwgzMzO65JJLVK1WfQ8FOVKtVnXJJZd0/xv1/Bn3+VFszB8AwCi8+MV/oJmZGb3jHe/Qvn371v15S0tLet3r/lIXX/RQnXLyFp1+2n30+J9/nP7v//0/qz5/x4PO18YN85Kkd19+uR52ycU65eQtOufs++n3/8fvrblPZxiGeuc7/1GPefSjddp9TtUpJ2/Rzksfpre85S0Kw3Do7xcAgGq1qpmZGd/DKB2CTAAAAADHZdu2bfrt336ODh8+rL/72/VVZR4+fFhPePzP6zWvfrX27Nmjxz/+8br4kkv09a9/Xb/97GfrJS/5ozU/9xUvf7n+4A9erK3btumxj32srLV617vepV/5/35Z1tplz200GnraU5+iF7/oRbr55pt14UMfqp/92Udr9+7d+l8ve6l+49d/XXEcH9f3DwAAJoMgEwAAAMBxe9GLX6TZ2Vn9wz+8Q3v37Dnq8//0T1+lb37zm3rkIx+pb337O3rPe9+n//f/Pqgrr7xKJ598st7+trfpU5/61Kqf+6//+i/6yle+qg9/+CN6/wf+Rddc8zXd7+yzddVVV+mKK7647Ll//Mf/W1dccYWe/oxn6Nvf+Y4+8pGP6t/+/d913be+rcc97uf1yU9+Qu961z+P5DUAAADjRZAJAAAA4LidcspWPec5z9Xi4qLe9KY3HfG5i4uLeu973qMgCPTGN75JGzZs6H7sAQ98oP7oJS+RJL39bW9d9fNf/vJX6P4PeED3+KQtW/Sc336OJOnKK6/sPr5nzz169+WX6/TTT9fb3vZ2bdq0qfuxDRs26C1vfavq9br+6Z3vHP4bBgAAE0eQOQRrrRqNxorlKsCRuHnj/hv1/Bn3+VFszB8AwCi96EUv0tzcnP7pn96pe+65e83nXffNb6rRaOghF1ygBzzwgSs+/iu/8quSpK9+9aurLvt+9GMes+Kxc845R5J09+7d3ce+9KUvqdPp6Od+7udW3cds69atOvvss3XDDTeo0Wgc/RsEACBlreX6yQOCzCEsLTV0zdVXsyE4hhKGoa65+uruf6OeP+M+P4qN+QMAGKUtJ5+s5z3v+VpaWtIb3/jGNZ931+67JEnbzzhj1Y9v3rxZmzZtUqPR0P79+1d8/LTTTlvx2HzaBKjVancfu23XbZKkyy+/XBs3zK/634033ihr7apfBwCAtYRhqKUl3gSbNNrT/v/t3Xe8JFWZ+P/PM3dm2AFBkkoYYBDcRUmiKEFUzGt2FV0TK2Zw17irq64B/BrW9DNjYteAuGJawYSru4soCAoKCAgKksMqEiVOeH5/nGpudc3tdG/3dN87n/frVa/pqnvq1DPd1dWnTp0gSZIkaWhe/epXc9RRn+Xf/+3feM1rXjvrfCKi498WLeqvPUarNecee+zBbrvt3jXtBkuX9h+cJEkaCysyJUmSJA3NFltuyctffigf/OAH+OAHP8DWW229VprWtssuv3zGPG688UZuuOEGli1bxmabbTbrWLapWm7uu99+fOADH5x1PpIkaTLYtVySJEnSUP3DK1/JxhtvzOc/9zmuuvqqtf5+/732YtmyZZz5q19x4YUXrvX3Y4/9CgD77rtv360vZ/Kwhz2MqakpfnDCCaxcuXLW+UiSpMlgRaYkSZKkodpiiy14+aGHcscdd3D0F7+41t832mgjnn/wwaxZs4Z//MfXccstt9z1t9/97ne8/33vA+DQQw+bUxzbbLMNBx98MJdeeikveuEhM05AdNFFF3Hccd+a03EkSdK6YddySZIkSUP3yle+is98+tPcdNNNM/798MOP4PRf/IL//Z//YY/dd+OAAw7glltu5aSTfsztt9/OoYcdxuOf8IQ5x/He972fSy+7jOOOO44f/ehH7L77Hizfbjm33nIr519wPr+/6CKe+MQn8dSnPm3Ox5IkSaNlRaYkSZKkodtss8047BWv4L3/+q8z/n3jjTfme98/gY997KN88xvf4Hvf+x5Lly5lr7324iUvfSnPfOazhhLHsmXL+OY3/5Njjz2W//jyMZx99q8544zT2XLLLdluu+159rOfzTOecdBQjiVJkkYrMnPcMcwLEXHudtttf78jjzyS/R/yEJYsWTLukDRPrFy5klNOPvmu9WGfP6POXwub548kSZIkDW7lypXcf889ufzyy87LzF3HHc/6wjEyJUmSJEmSJE08KzIlSZIkSZIkTTwrMiVJkiRJkiRNPCf7GcDSpUvZaeedmZqaGncomkempqbYaeed29bnU/5a2Dx/JEmSJGlwU1NTLF26dNxhrHesyBzAkiWLWb58+bjD0DyzaNGikZ43o85fC5vnjyRJkiQNbtGiRSxZYrXaumbXckmSJEmSJEkTz4pMSZIkSZIkSRPPikxJkiRJkiRJE8/O/AO48847ufDCC9lxxx2dEEN9W716NRdffPFd68M+f0advxY2zx9JkiRJGtzq1au58847xx3GeseKzAGsXLmKK6+4gh122MEbffVtzZo1XHnFFXetD/v8GXX+Wtg8fyRJkiRpcGvWrGHlylXjDmO9Y9dySZIkSZIkSRPPikxJkiRJkiRJE8+KTEmSJEmSJEkTz4pMSZIkSZIkSRNv4ioyI+LuEfHoiHhzRHwrIq6MiKyWw4eQ/yG1/PpZLpn7/0qSJEmSJEnSXEzirOUfAV4w7iBqfj3uACRJkiRJkqT13cS1yKy5A/g58AlgzRDz/RKwcY/lH2rpjx7isSVJkiRJkiTNwiS2yPws8HHg7My8EyAiDh1W5pm5CvhztzQRcVD18kbg+GEdW5IkSZIkSdLsTFxFZmaePM7jR8T2wMOr1a9l5u3jjEeSJEmSJEnSCLqWR8RhtYly/q5DmoiI/6rSXB8R2w07jjl4HhDVa7uVS5IkSZIkSRMgMnP4mUYcDzwZuBnYMzMvbvz9dcAHq9VnZ+axPfJbBUwBR2Tm4UMPuP1Y5wH3BS4B7p3VGxQR5+6yyy73+/kvTh/l4SVJkiRJkjQPPPhBe3P++eefl5m7jjuW9cWoJvt5MXANZeKcYyJiqvWHiNgTeE+1+sVelZjrUkQ8kFKJCfClHEUtryRJkiRJkqSBjaQiMzP/CLwQSGA/4K0AEbEM+DKwFPg97bODT4KDa6/tVi5JkiRJkiRNiFG1yCQzTwA+Wq2+JSL2o3Qnvx+wGnh+Zt48quMPqmo1+pxq9bTM/O0445EkSZIkSZI0bdSzlv8z8Ehgd+B4YMtq+//LzJ+N+NiDeixwz+q1rTElSZIkSZKkCTLSiszMvCMingv8gulKzFOAd47yuLPU6la+EvjKTAluueVWfnziiez/kIewZMmSdReZ5rWVK1dyyskn37U+7PNn1PlrYfP8kSRJkqTBrVy5kltuuXXcYax3Rta1vOZS4A+19f/IzNXr4Lh9i4iNgadVq9/LzD+NMRxJkiRJkiRJDeuiIvPjwPa19XdFxIp1cNxBPANYVr3+4jgDkSRJkiRJkrS2kVZkRsSzgL+rVt8N/BHYBDg6ItZFJWq/Wt3Krwe+O85AJEmSJEmSJK1tZJWJEbEd8Olq9QfAW4AXV+sHAG8e1bEHERHLgQOr1a9m5h1jDEeSJEmSJEnSDEZSkVm1tjwa2BS4Fjgki28Dn6qSvT0iHjyK4w/oeUy/D3YrlyRJkiRJkibQqGYt/2fg4dXrF2fmNbW/vY7SAnIX4EsRsVdm3tL6Y0RsAtyvQ77LI2Lf2vpNmXlePUE1/ubF1eoXMvOQHrG2upVflJmn9EgrSZIkSZIkaQyGXpEZEXsDR1Srn87M4+t/z8zbIuJ5wKnAfYAPAy+tJXkA8L8dsn8x093TAX7MdLfw2cS6F7BrtXr0bPORJEmSJEmSNFpD7VoeERsBxwBLgAsorS/Xkpm/BN5arb4kIp42zDgGcHDt9ZfGFIMkSZIkSZKkHobaIrPqIv5XfaZ9L/DeGbafCMQcYrik3/0z83V0qGyVJEmSJEmSNDlGNmu5JEmSJEmSJA3LqCb7WZCWLFnMtsuXs2iR9b/q36JFi9h2+fK29fmUvxY2zx9JkiRJGtyiRYtYssRqtXXNd3wAS5cuZeeddx53GJpnpqamRnrejDp/LWyeP5IkSZI0uKmpKZYuXTruMNY7Nr2RJEmSJEmSNPGsyJQkSZIkSZI08azIlCRJkiRJkjTxHCNzACtXruKKK65gm222cUIM9W3NmjVcddVVd60P+/wZdf5a2Dx/JEmSJGlwa9asYeXKIrLLlgAAK8hJREFUVeMOY71jReYA7rzzTi668ELuda97eaOvvq1evZqLLrzwrvVhnz+jzl8Lm+ePJEmSJA1u9erV3HnnneMOY73j3aokSZIkSZKkiWdFpiRJkiRJkqSJZ0WmJEmSJEmSpIlnRaYkSZIkSZKkiWdFpiRJkiRJkqSJZ0WmJEmSJEmSpIlnRaYkSZIkSZKkiWdFpiRJkiRJkqSJZ0WmJEmSJEmSpIlnRaYkSZIkSZKkibd43AHMJxtuuIwH77MPixf7tql/ixcv5sH77NO2Pp/y18Lm+SNJkiRJg1u8eDEbbrhs3GGsd7xjHUBEsGyZJ6kGM+rzxvNSc+H5I0mSJEmDiwgiYtxhrHfsWi5JkiRJkiRp4lmRKUmSJEmSJGniWZEpSZIkSZIkaeI5RuYAbrvtNk499VT23ntvJ8RQ31atWsXpp59+1/qwz59R56+FzfNHkiRJkga3atUqbrvttnGHsd7xbnUAa9Ykd9x+O5k57lA0j2SW86a+Pp/y18Lm+SNJkiRJg8tM1qzx/mlds2u5JEmSJEmSpIlnRaYkSZIkSZKkiWdFpiRJkiRJkqSJZ0WmJEmSJEmSpIlnRaYkSZIkSZKkiWdFpiRJkiRJkqSJZ0WmJEmSJEmSpIlnRaYkSZIkSZKkiWdFpiRJkiRJkqSJt3jcAcwnixdPscWWW7JokfW/6t+iRYvYYsst29bnU/5a2Dx/JEmSJGlwixYtYvHiqXGHsd6xInMAG2ywAbvtttu4w9A8MzU1NdLzZtT5a2Hz/JEkSZKkwU1NTbHBBhuMO4z1jk1vJEmSJEmSJE08KzIlSZIkSZIkTTwrMiVJkiRJkiRNPMfIHMDq1au59tpr2XzzzZ0QQ31bs2YN11133V3rwz5/Rp2/FjbPH0mSJEka3Jo1a1i9evW4w1jvWJE5gNtvv4NzzzmH/R/yEG/01bfVq1dz7jnn3LU+7PNn1PlrYfP8kSRJkqTBrV69mttvv2PcYax3vFuVJEmSJEmSNPGsyJQkSZIkSZI08azIlCRJkiRJkjTxrMiUJEmSJEmSNPGsyJQkSZIkSZI08azIlCRJkiRJkjTxrMiUJEmSJEmSNPGsyJQkSZIkSZI08SIzxx3DvBARNy1evGTjrbfemg033JCIcUek+SITbr311rvWh33+jDp/LWyeP5IkSZI0uEy46KKLWLVq5c2Zucm441lfWJHZp4hYSWnBev64Y5G0Xtup+veisUYhaX3ntUjSuHkdkjQJdgHWZOaScQeyvlg87gDmkd8CZOau4w5E0vorIs4Fr0WSxstrkaRx8zokaRK0rkVadxwjU5IkSZIkSdLEsyJTkiRJkiRJ0sSzIlOSJEmSJEnSxLMiU5IkSZIkSdLEsyJTkiRJkiRJ0sSLzBx3DJIkSZIkSZLUlS0yJUmSJEmSJE08KzIlSZIkSZIkTTwrMiVJkiRJkiRNPCsyJUmSJEmSJE08KzIlSZIkSZIkTTwrMiVJkiRJkiRNPCsyJUmSJEmSJE28xeMOYJQiYldgD2AbYDVwJXB6Zl68juNYBOwP7ARsDdxYxfKTzLx+XcYiafJFxLbA3pTrxRbA7cBVwPnArzNz1RjDkzRkEbE3sAulvHIbpYxwSmZeM4S8dwT2Be4J/AVwDfD7Kv/Vc8h3GbArcD/gHlXeN1CuVT/PzCvnFjlERAB7Ucpy9wDWVPn/OjPPmWv+s4xpK0qZbltgWRXPbzLzjHHEIw1bRGwAPARYTimHBPAn4CLgl5l5w4D53ZNyndiO8j3ekFKuuZ5SrjkzM2+ZY8wjuVZExBSwc7UsB+4OLAVuAv4AnAn8NjPXzCV+ab6ovms7AbtRvtObALcC1wFnUb5zsy5brAsRcW/gAZTr2yaUctefgLOZ8PusiFgK7El5/zcHNqBcj64AzsjMy8cQ072BB1LKRVOUMuzZmXneSA+cmQtuAQ6ifJGyw3IycOA6iGMx8C/VhzlTHHcAXwdWjPs9c3GZr0uX73mv5Z+GcOxXzJDv4XPI7/nAKZQCeKe4/wwcB2wzx9gXAT+bIf8VC+1zcnGZzVJ9R3YFXgB8rPq+3No4Pw+c4zEOBS7scO6vAn4A7DGLfAN4LnBul+/WNcC7gWUD5Lsz8Cbgx1UZptt391fAi4BFs4j/blX56Q9d8j8PeNE6PB/2rD6PVR3iuRA4dNznrcvCW9bFtag6zi7Alyk3xZ2+d2uAXwIH9cjrScA3q+tMr9/524GvAHvNIuaRXCuA91DuF2/rI/7LgSOAjUd4DliGchnbAmxMKVN8pcd3LSkVmh8Eth7wGEsoDyNeCnwaOAO4s5H3ijn8H6aAw+heLkrgj8AHgM37zPeQOXw/txwg/m2AIykN4rrleQZw8Do6Lw6k3Ld2iuUsevxWzOn44/5iDPnNnAI+1+eJsxp4xwhjuRfwiz5juRF46rjfPxeX+biMq3BHeQo5U2H/8FnktT3wvwPGv/cc4391h3xXLKTPycVlNgvwDcpDg17n54GzzH9D4Pt9fgfuAF4+QN6bAN8e4Dt2AbBLH/m+ZJbf4Z8C2w4Q/y5VTP3m/11goxGfD4fSu+K2tXwP2HDc57DLwlhGfS2qjrEIeMcA53gCH++R51GzuFasYoAy1CivFXR+YNFtuQLYd0TnwWyuvYllKJc5LpRKzH4q9JvLn4C/6fMYp1EeaPTKc8Us/w/3AE4dMP7/Aw7oI+9D5vD97Ksik/Jg6IYB8/4BcLcRnhfvpHvDm/ry78zioXavZaF1Lf8Q5WRquRU4htLsfymwD/AMSo3/IuCtEXF9Zn5omEFU3a2Oo3QNbbkS+BKlW8YWwOOBh1V/2wT4SkQ8MjN/NsxYpPXMH4Cb+0x7/RyPdSTlx31OImIFcCKwQ23zlZSb4QsoTzY3onTjeBCli+jUHI+5A/CuueQxR+vyc5Jm44GU793QVcPNfBn469rm64GjKS2HNgYeDjyR0rJyKfDJiPhjZn6zR95LgO8AD61tvp1SGXIapVy0AvgbSgsvgL8EToiIfbN7V/a7NdZXAqdTWi1dQXmwc09K2eavmR6H/SHAf0fEAZl5bY/4t6O09rxnbfM1wFeB31Tr9wOeRXlgDPAE4NiIeGqOoDtbRBxEud5HtSkpFcUnAbdU8RwMbFr9/fHAlyLioLS7qeZuZNciuOt6dBTwwtrm24H/obT8/D/Kub8VpVXyI4DNBjzM7yiNO35X5Xcr5XpyH8r35S+rdFPA2yNiUWa+rUfc6+pacQflOvdryj3cDZTGMFtSWo89iemy4LbAD6tr3Vl95j8blqG0Lk1Rho6p+z3l+3cBcG31990p9SxbVmk2B74WEc/MzP/scYwHDy/cdlVX7P8C7l/bfAdwPKVy8zrK9Wh3Sq/ezas09wS+HxEPzszf0L+LBkjb8zoUEQdQynBLa5svr7ZdQPm/3ItSbnws02WvxwL/GRGPzarmcVgi4nWUlvAtK4GvAT+nPATaC3gO5aE9lN+XmymNaIZnXLX7I6gVfiLtNb/nAtvNkG5P2rt6rwZ2H3Is72/E8jVggxnSPZf2JtOXAX8x7vfSxWU+LY3v2iHr6JjPrh3zvEYMhw+Qz8aUH7zWvjdSWv50fGpF+YF9NbDTHOI/oUv8KxbK5+TiMtsFuKR2vt5OKZwdSalsrJ/LB84i779v5HESsNkM6R5Jexeim4F79sj7nY28z5rpO00p6P5zI+0JPfJ+TZXu7Or/sFbMtbS7UyoT6vkf3cd789PGPscwQ4uC6tr5tUbaN47gPLhX9b7Xr9GPmCHdZtXnWI/nFeM+j13m/zLKa1GVf/Oe5WjgXl3STwGPA57TI98XVkvHvGppn097V/lV9BhSY9TXCkrjmEcDS3uk23SGz+LnIzgPLEO5jGWpzvHW79+Hun03KRVXn2mcr9fRo+VhI/2fq+/3hykPZud0jwK8vpHHmcCOHdJuDBzbSP/DHvkfUk8/gvf/nEY8HwQWd0j7AMqD5Xr65w05nt0p9Wet/K+c6Zyg9DZs3mM+YaixjPLEX1cLpUB+du1NugW4d5f0+zc+gG8PMZbltDe/PgtY0iX9Gxsf8D+O+/10cZlPy7ou3FFaVLfGh7mtKujWYzh8gLyOrO13I/DgdRD/wfUfZ+DwuRYSJvFzcnGZy0LpZvlSylPlJbXthzTO5QMHzHcj2seMuwrYtEv6ZzeO97EuabekvQvqtfSoRGDtSoxHd0n7FOCZQPT5f92GMtZUPf8duqR/fCPtj+n+UGeK9nF+b2CA8ab6/D98vBHT33ZJuxlwdS3t1Yy4y7vLwl9GdS2q8tiX9vuh94zx/3lw4//zoS5pJ+paQWmx+qNGTHsO+f2xDOUyloXSWvHd9DlmZLXPMY1z9m090n+UMgbwrvXvMkO4R6F9TMxbmaGhWyP9YtrnWllDl3kJmtfiIb/3D2r8/4/vY58H097lu+tD6lnEVK9cXg3s1yXtTpR6uVb6M+mzDNnP0mp6Ot89ilI73PLRzPx9p8SZeQrl6VzLkyJi5yHFchjtza/fkJkru6T/AKUmu+XVQ4pD0mh8iDLWCpTWTxfOJpOI2IvS+rLlDZn58znG1uuY96DED6Vlx2GjPJ40X2Xm2zLzs5n5qx6/4YN6LtPdHAGOyC4zAGfmVyhdwlteEhHNLt4tz6C9C+r7M/P/esRzBKVLeMsbusRyfGZ+LavSaS+ZeRXw/zU2P7HLLn/XWH9DdumanaVr6D/XNt0deFk/sfUjIjamjAvacmpmHtslnusp72fLVpSKaGnWRngtAvgk090QTwHePOT8B3EM5eFLS7euphN1raiuiR9tbB5ZV1lpXcrMP2fmmzPzugF2a7WCbHlSj2O8KjO/kJnndvsuDyoi/oIyxETLd7LHrN5ZZiz/bD0bYI9hxTSgBzbWP9Vrh+pe8pe1TfcfVjARcR/ay3FfzS7DImbmRZQJ6lr2pPQ2GoqFUpH5N431o/rY57ON9acNJ5S2WC6ljMnQUfVl+Vxt03YRsXen9JLGJyIeS2k1AKW5/PvmkN0rmB5z7SJKV4xR+wilRSnAOzNzVpWwkmatXka4lTJWZi/18spf0D62Zt0jGutf75VxZv6ZMunQXXlExOad0s/CjxrrO3VJW4//isw8rWPKSmaeRBlzr+UZA8TWy+OBDWrrzXLjTI6htNRvaZZPpYkQEQ+h/Qb3Tf0+pBiFqvKiXia5R6e0TN61AspYdXXd4pcWtOpBZn1cyW6//aO0RWO93/ue3zXWh1kuGsQw4h9m7M0yTT/loma93NDKRQulIrNeM3xRVfvby08oLZJauj4p6EdE7Ajct7bpR30WCn7YWJ9zLJKGKyI2Aj5drSZlFuFZtY6oWlQ9p7bpmFHfQETEE2vHPJe5VcJKGlDVMuBRtU0/y8x+Jmzot4ywY+31LX2WhaAMzdOymFKBNyx/bqzPOGlJNUlivaXq2TOl66Ce9gERsXyAfbtpth7t+mAaoPo8T61tenT1uUuT5qW115dS7ovGbZPa6z/NlGBCrxXQHjt0iF9aj9R//0c2YVkPN9DeMrTfOJrp/jCUaAbXbAU7m/iHGXu9XHQbffxuVI1mLq5tGlo917yvyIyITSmDibac2iFpm8y8EzijtmkYTYb3bKz3FQvTMzwNMxZJw/VOymy/AEdl5k/nkNd+tP/I/O8c8uqp6iL5yWp1TpWwkmZtF9pnney3vHIZ7UPQdCoj1GcSvmGAuK5vrN9/gH172bGx3mlW9OYsyM2YummmbZbFZquez5WZeUWf+51Se70B0zMyS5PkMbXXJ46zNSbM2BikUxlrEq8VUGZEr5tLGVFaCFbUXnf67R+pzLyFMt5lS7/dmusPnVuTrI3DKY31R82YqqZ6eLp/bdNJQ4ynXv785QD3kvX/xw4R0XzwMyvzviKT9h89GGy8unprhc0iYqtxxJKZt1MG/G+5X6e0krp6XkScFBF/iIg7I+K6iPhtRBwbEYfO9sIZEfsAr6pW/4/2sZZmozl20tnVcXaIiMMj4pcR8aeIuC0iLo+IH0bE6yOi2cWgX+8BtqteH5WZJ8828CEZyeckTbhhlVf+KiJmKr/VuzQvGyDvZtphlkGe3ljvNJbSbY31scZfvb9/Vds0289qKPFIwxQR21Im42pplUE2iIjnR8T3I+KyiLgjIv4YEb+KiA9XZaFRxLMR8AWmh9u5jTIZ4kwm6loBEBH7UcYEbDkhM88dRt4dWIbSRIuIA4B71jZ1HEdxHaiP0bhbRLyiW+KIeBDw4tqmz2TmTZ3Sz7D/v0XEeRFxY3UNvSYizoiIj1ZDlPUtM8+ivdXjGyJihx67vYvpLulrWHus8lmJiK0pM9i3jL1ctBAqMu/dWL9sgH2baZt5jSuWucYhra8eDTyUMjbREsqT+/sAz6K0SLwsIt7UoRJgRhGxhDK+R2uf11aTOszF/Wuvb8vM6yLilZTxZN5OmZ10c8p4eMsp/6/3ARdHxGsGOVBE7E8ZjxOGUwk7DEP/nKR5YFhlhA0pE8k0/bH2erOqx8ps4hrKWFZVt836EBrX0rn1+Q2090xptuTsZhTxb037xI3jLFtKw3b/xvoVEbEncDpwNGUc3u0oLci3rNK/Gjg1Ir41jHF0I2KjiNitKtOcSykTQLnxfmlmXtxh1xsY87UiIqYiYouIODAijqTMmt7qZfN72itBRsEylCZdc+LAr44liuJzwHG19Y9HxJERsUs9UURsFRFvoJRTWuNj/5zBJ0F7EeXB9SaUa+i9gAcArwR+EBFnVWMU9+slTA9VcQ/gtIh4Sb2MFxGLImLviPg68Lravm/MzNMHjL+TSapzAxZGRWbzqdMgM2o1KyM2npBYlkTEBh1TSurmFuBySjeGZpP3uwPvBk6oxlnqxxuB3arXP8jM/xhCjPVB4G+OiH+hzHjZimkVpStpc4yljYEPRcQn+jlIRCylVMK2WjkMoxJ2WIb9OUmTbtTllfpwOcHsulDB2nEOLCKCcu3ZsLb53dWwPmupurXWZ9ncPSLuOVPaxnG2Ye2WrsNojTRJZUtp2JoT0WwPnMh0WQfKOX8la/8+P5VyI70NA4iI70REthbK+Hm/Bj4EtFoYnQM8KjOP6ZTPOK4VEbFlI/ZVTD+YOYxSmbiaUgm8TzXRyahZhtJEiojnAE+ubTqT9orEdaq6ZjwL+DDluxuU7+1vqlaTF0fEH4GrgfdSHkqspDwUeFTVPX2gQ1Lu3y5l5qEv9gBOjIhD+4z/t8BDmO7efi/KJDvXRcTVEXEJcDPwC6YnMbsKeE5mvn/A2LuZuHLRQqjIvFtj/fYZU82s2T2hmdd8jkVaX9xJedL3HGD7zLxbZm6fmVtTvkcPBb5E+2DPjwG+VN1sdxQR9wX+pVq9jemWjXO1ae315pTxN6H88LwA2DQzl2fmlpQC/vspheSWV0TEy/o4zluYLrgPqxJ2tkb2OUnzxKjLCD9orP9jH9e4p1DG7qwbRgHzrcDjauun0969ayb1+BcDr+3jOP/E2mXZYcRveU4L2aaN9XdX29YAHwHunZlbZObyavtzKZVmLTsDX4mIqSHFk8DnKZUGJ/aRfpKuFVAqLQ4DXpiZ1w4pzybLUJp4EbEr8JnaplWUFtZrxhQSUOZGyczXUh7W/Lj2p00oY3luWdt2GfC0zHxFZjYnLOzkCkol6IHA3TNzy8xckZmbUx4c/R3lwU3LYuATEfG0PuO/IDP3AQ5mevKeoPTO2YH2h8bHAw/KzK/0GXu/Jq5ctBAqMpuzQc74tL+DOxrrc31qNUmxSOuL5Zn5t5n5lcysF7RbP1w/zcyDKQOx31r789OBgzplWmtR1God/Y7M/P2QYq5fwBdX/15GeZL/xfrTv8y8LDPfQLmRqHtPNa7UjCJiN0prUig/IIfNPew5GcnnJM0jIy0jZOb/0D6o/f6UCooZRcRf0X7D0THvQUTEc4HDa5tuBJ6dmatm3uMuR9L+//yniOg4u2VEPJ3S3bVpGOUny3NayJo3kUuqf1+Yma+pd+vOzFurh6D70D7O2UMprZz6dVW1/0WUGWzrrXkCOAS4JCLeVfUm6WZdXytWMx37RZRK3Xo5ZQvKtfSCiHjM2rsPhWUoTbRqDMXv0n59GWbX5lmrul6/ljLxzcN7JN8e+G5E/FdE9NMF+nhgRWa+MTN/nJk31/+Ymddm5tHAA4FP1/60CPh0RPSs1IuIbSLiy5QHPr1aoD8F+F1EvKMaHm1YJq5ctBAqMpu1wb1+/Oqa3bebtcXzORZpvZCZf+ydCjLzBMq4JXVv67LLK5ie9e3XwAcHj66jmZ5ivazbrLiZ+VXKOC8tmwPPnyltNS7SUUzfnBzRZbypdWKEn5M0X6yLMsI/0D5+3Bsj4oSIeGxEbBplMo+/jIg3AqdRuiitbMTWVggfREQ8gVLQbrUAugN4emY2B3pfS2ZeQxkjuGUx8K2I+EQ19tNG1fKgiPgU8DVKObYZ76zjr7E8p4VspjLIVzLzi512yMyrWfu3+VUzpe2w/8syc+dquXdmbkFpBfU8ph/ALKOMR3dctxvwdX2tyMzra7HvnJnbUypr7gu8g9JNHsqYmydExAv6yXcQlqE0yapxc3/A9DARUCbJGea906xEmcX7O5RJb1qVgD8CnkYZD3spZZzZh1O6bLd6wD0GOD0iHtAt/8y8LjNXd0tTpVtJaVTyvdrmewIv7xH/AygTsj0HmKKUKT4A7EsZRmIpZUzj51F6v0BpoflW4DtDHK5w4spFC6Eis9nkt1lb3E2zNrjf5sPzIRZJDZl5LNNjjECZvW5FM11EbEeZ6RtKN52XVT9Aw9IsPJ+fmc1uoTP5UGP90R3SvYrSegKGXwk7cv1+TtI8M/IyQmb+lFIorheqH0e5wbieUhC9gHJ9u3v190Mp4621zGoc3Yh4JPANph+grAQOqlqK9ut9wL/X1qcoD5V+Qfk//5lybXg50xUTzdbmwxgH2PKcFrKZKvA+3GunzDyJ9vEpHxRzmCE7M/+UmV8G9qZUILT8Nb0r38Z6rcji/Mx8O2XMu1aPnVYrq6HMyjvL2CxDaZ2prgEnALvXNh/D+HuCtXwEeHxt/c2Z+ZjMPC4zr8nMlZl5Q2aelJkvAx7LdKXdZsA3+2k12Y9qvM7XNzY/eaa0ABGxBaUStjUL+Z8ovfden5mnZeZNVfxXVNfSfYFP1bJ4LF165gxo4spFC6Ei86bG+mYD7LtpY32uT/GHFcvKzGw2wZU0HN9srO83Q5pPMj120qcy89Qhx9C8VnSaybdNZv6aMsB8y1pPCSNiB6bH3FxDqYTt1aVzEvXzOUnzyTopr2Tmv1MqL8/vkee1wDOq9Bs3tg8kIg6gdK9qFWxXUQaa/84g+VSVAy+mPIzpNZD8WZQB8JtDfgxjjLpJKltKw9Y8v/9MqQDsR728MgXsOddgqjLKobRPWPbaiLh7h10m6VpB1ePlIEqZC0rrozcNI+85sAylkasq+L4PPKi2+evAC8Y9LibcNdfBS2ubjs/M93RKD3cN0/MvtU070KPV5CAy8zzay2f7dkn+ekqr0ZaXVveCnfJeDfw9ZYKlln+ouv3P1cSVixZCRWazu+T2A+y7Q2N9ruPfDSuWYY3DJ2ltFzTW28YaqSa/eGK1ejWjKYw2v+OXDbBvPe2WM/z9Q5QZ9wA+PYJK2HWl6+ckzUPDKiPcRpmptqPM/G/KoPZPBj5BGdz+HEq3o28CLwF2ysxvVjP+1rsI/WqAuIiI/ShdpVrXnTWUm5hvDJJPI/6PATsCL6RMYHEK8BvgZOALlP/X3lWBfrvG7gPF38HVtHejGmfZUhq25jl55QCVDpc21mcqhwysOv7Ha5s2okyc0Wu/cV8rWnH8CvhJbdMTxzzJjmUojVREbEgZE3P/2ubjgef209V6Hflbpoe6gfZrTDefpn0MyKcPLaKi/v3coMtDm2fXXl+Zmf/ZK+PqWnpkbdNSoOMYwgOYpDo3YHqSifnsvMb6zgPsu1Pt9fXVmCvDjuXHMyWsq8Zu2KZLPpKGpzkux4aN9frAzhsBZ/Qoizavo6+KiPrYle/MzM830pzbWB9k5rd62pma9dfjf0pEPLZHfps31k+MiHoLzr2aA1evI70+J2m+GVZ55fx+Kh2qG4nvVEs3ezTWfz5jqhlExIMoXcpaLToTeFHVxWlOMvMmynibn++RdNbxdzn2moi4gOnWZrP9rMAynSZP85ycbRkEBute2MuZjfW+vnfjvFY0nMn0RCKbUcpXfxryMfplGUojExHLgG8DD6tt/j7wzCEPxTVXzRbjfU08lJm3RMT5TF8zdh1qVDN/P2+sb6gqN+sVgGfQv+b/c87xZ+ZVEXED060rx14umvcVmZl5Q0RcxnStcF9N56sZ8R5Y29Sxme4Azmqs7wf8Wx/7PZj2z2IYsUia2b0a6926Fm1SLYPYjPbm9pvOkObMxnqzMrGbetpeBeRtB8i3pfnUbGoWeQzDIJ+TNB+cT3nC32r92G95ZXvav8vDLiM8svY6gf/uZ6eI2Isy9mbrGtkaT/gLww2vp3r8F/czsVCfzmL6Jmh5RCzvNiFbTb11yh3Ab4cUjzQUmXlzRFzE9M3lbMsgMNyKuuawWsMuf4zqWtEy6vgHYRlKI1FNHvMt2r9PP6RM7DfITNbrwkaN9UHGZqyPHT6UWbZr+vl+Dit2GF78ZzNdef3AiFjSZ8V1vVx0WfXwac4WQtdyaJ/9aaeIuHfHlNMeSvtTxIHGcZpJNUZKfcyDR/fZreAxjfU5xyKpowMa6+OYzftntP9o3b+fnSJiI+A+tU0LucviJHxO0tBk5u1AfeKb/SJi407pa0ZWRoiIRcBza5t+mJmX9LHf7pQbl/pDm7/PzKOGFVs/ImIn2iuEP9sp7Sx8r7Heq3U71edZH+/qv6vPXZo036693q6aVKIfezXWh1kO2bGx/n/DynjE14qWevyrGW/loWUoDV3VEOwbtP8e/i/w1An9rWtO6LXVAPvWx5Uc2gOb6j2sjyl6ZYfKwGHFDsOLv14uWkapT+uquvbWr41DK8MulIrM5ngBL50xVfc03xpOKG2x7ECPgm9ELKaM69JyBX02e5Y0mIi4B+3jjdwG/LSeJjM/nJnR78LaBe8jGmk+3Iyj6vL5rdqmR0dEPy0iDqL9Cf9aswFn5v0HjP+IRhY7NtLc0EdcQ9XP5yTNU/Uywoa0VyJ2Ui+v3EHpvjUsh9HeCrvn+FHV4Pk/YnoWTYBXZ+YnhxhXv/619vo22mcxnqvv0d7Cqp+y5fNob/nQczwraUy+3lh/Zq8dqor6+uy/l2fmhUOM6aDG+jDvh0Z5rWi9N/V7vl+Na7ITy1AaharO4itMzyMAZVzYJ2dms6v0pGhen5oPhmcUEfcBVtQ2DbNnxYuA+izoP5wpUfWeXlXbtG+fD79h7fqnYcU/jDq3oZWLFkpF5o8og9i3vDIimpULd4mI/Wn/wf5uZv6uQ9oVEZG15cQesXyS9oLv+yJiSZf0/0R7l7GPZGb2OIa03ouIJdWPar/pF1MGfq//CBw7xieIH6Y8sYdy4/vOzkkhIjahvdJxNWVg+7GIiEvq18Yu6eb75yQN05eBP9TW3x4Rm3ZKHBHPBvapbToqMwfpXtRRROwD1Gfv/E5mfrtT+mqf+1C6ntcnjnhdZn50GDENIiIOo73i422Z2bUFV0R8vlGmO7BT2mps4Hplx74R8awueW8GvK226Q/Af3SLRxqXzDwZqE8G+JbqHO7mCNqH25lxGIlqJuOBRMQjgRfUNp2fmc3xxGdl0GvFbOIHPgLUJ+xoVhQ3j2EZSvNGRExR7jn+prb5ZOAJmdnsxjxJTmisv7nPysD3NtZ/MFOiaqzQvkXErrQ/VIHuY/vW498QeEsfx9iBMnN5S9KhsrRKf2KjXLSiU9rM/C3tD9OfFREdZ12vekm/srbp18zQCGe2FkRFZvXE6821TRsB346I5ux0RMQewFeZ/r+vAf5liLFcTpkhtGUP4JhqPIlmLM+hvWLiSvqfTUta320LnB8RL+9V+K7dfNdbEtwKvH2E8XVVFdA/V9t0WEQcURUW2kTEVpTWQfWWU1+sflAm3bz+nKRhqioh6w8ttgaOm6kys7qx/3Rt0y30fuCxWUS8JSK26ZImIuIlwH8xfbN7HaV1Zre8V1C+n/UuS2/IzA91228QEbF/RLyoW0VCRNwtIt5Pe1nrZ8DQ4qh5B+1jTX0mIh4xQ0ybAcfR/t78vwm/wZP+qfZ6W+CEiFhrbO2IWBQRbwZeW9v8Jzp/515S3Rw/Zab7n0beSyPiVZSu7vX70tf32G+U14ofRsRHqnvGriJiu4j4Bu296y4DPtZr3z5ZhtJYRURQHur9bW3zqcDjh/VgdVQy8yfAL2qbdgK+FxHLZ0ofERtGxFG0V9jeBHymwyHeEBHHRcQjZ7p/q+Ub1YPQn9D+wOM7mdltYugPU+qq6sd7S6eHG1GG/fmvxjH+IzOv7HKMQb2pFtMi4OvVcZuxbE+5rtcnGnvzMFuqx0Jq/BcRnwBeUdt0C3AMZWKNJZRxiw6qXre8PjM/0CXPFbSPK/LjzDywRxwbUmYr37u2+UrgaMpYMpsBT2B6ZjsorTgfVT0hldRD47u5klI4PbPadhNlAq2tKeMEPZL2AvIq4GmZ+d0hxwGla/nhfe67MXAS7WNk/o7yJP/3lElBHgA8i/an6+cA+w2jABERh9NeyN2xzzHyLqFWsVp1U58p3Qom4HOSBhERTwfeN8OfNqa9NeJVrD37JJQKvm92yHsRZWiJJ9c2Xwd8EfgNpcvRgcCTgNb3KoG/zcyv9Yh7K+DqKv0ZlO/b74CbKROP3afKd/vabtcDj87MX/bI+98oXaJaVgOXdNtnBqdl5vO6HOPZlFaMd1CujacDl1NmSr4HZXy+x9NeSP9VFf91vQ4eEZ+nvdXXIzLzxB77PIvSna71WayhFM5/TKkkuB9wMO3jhR4P/M24upZq4RjltajK/62UCvuWWyhlkF9QvncrgGcA962lWQ08LjNnnBgsIl7DdGXhTUz/7l9VrS8BtqQ09ngsa08g9N7MfGOnmKtjjOxaERFnMj3R14WU9+JcynX6VkqDmR0ok7U+jPZyy03AYzPztB7HuATLUJoHIuKhlO9YXafrTTcP71ShVj3MeNUMf9qc9t/WSynnddPzOn3nokxMeBLt3bnvoPxOn0Z5KLMR5Xr0DNqHzQF4YWZ+vkPehzN9D/UHSivVX1ev/0y5Tv8l8Ne0z3EAZebuAzKzORZm8xjvor3BHpSHJd+izM1yO2XyoIcBj6P9GnAFsG+3iswovY3rdVI97wMj4vW0/y6tpDQUPI3y+7AXZeikeiXmJzLzH7rlO7DMXDALZey4L1IK8L2WNcC7+8hzRWO/E/uMZSvKTUQ/sdxEKfCO/T10cZkvywzfzX6XK4HHjDCOwwfcf2tKIbnf+H8K3HOI8R/eyH9Fn/tdUt9v0j8nF5dBFuCQWZ63reWQHvlvRHlq3k9edwCv6DPurQaM8yxgjz7z/vwc35OeZSjKuG6D5PdNYPMBPtfm/+HAPvf7e8qM8/3E9ANgo3Gfwy4LYxn1tag6xrspN5/95HcjpSVWt/xeM8tY/0wZb7ef92Vk1wpKReFs4j8b2KvPY1xS37dLuhWzjMUylMtQFsqD1bn+9idd7i9Y+15k0OXAHv+Hh1EqXwfJ8zbg0B75zjbu7zDAvRyDXaNby3nAffvI+8R+P6fGfu+h1Kf1E8sXgKlhn5sLomt5S2auzsy/ozR9PqdL0lMpT+SatdvDjOUaSgvQtwHXdEh2J+WHdc/M/M9RxSItUNcBR1KekvfT6uUi4J+BXTOz41gh61pmXk25VryB8qSxk0spLc4fkZl/6JJu0iyIz0kapixdjh9HqSDrNOvvGsoY4Ptk5pF9Zn0zpSfKVT3SnQO8GnhgZp7dZ97rwnnAdyn/j05WU2ZJfWJmPj37aIk5V5n5CUrrqx/R+Tr2e8rn+ddpl3LNI9X90MMprYw7nd+3UWb63i0ze0049m3KjffpzNx6qukKyph0983Mj/QV9GivFW+hNIy5vI+0SWmF9WLgAZn5qz6P0S/LUNIcZeZJwG7Au+hcL9NyK2Xor70y81M90v4PpS6nn/uyVZQH2E/JzCcNci9XXaP3p8wYP9MM53W/p9xTPjAzf9PvMQaVmW8CHk37WMtN5wDPyswXZJnodqgWVNfypojYjdJMeBvKj9lVwC8ys9NNw6jimKKcfDtTmv7eTPnR/sm6KIBLC11EbATsTnlyvRWltdNqSsuBa4Cf53DHBxmJahyavYFdKC0111B+HM/IIQ16P04L5XOShi0iHkTpurk1pcLgSuCU6kHHbPP8K0r3yG0p37UbKN+zs7LDBIeTohr/6QGUa+G9KMNs/JHSbf5nmXntGGPbBtiP8r4uq2L6TWb+ouuO0jxQO7+3oXTFvI7SvfrknMWEMdVkGLtRxqbbqspzJeV3/2rgzMzs9hC3V/4jvVZUw3XsSim3bA5sQOl+fyPlfTkzM2+ayzEGiMUylDRH1b3WfSnDet2D0v37Nsq17jzKd/qOjhl0znd5le92lO7pf0GpFL2BaoiKzLx1CPFvBDyQ0mV9M8o17ybKNeCMdV3PVcW0E+X+dVtK1/argLMzs1vDwrkfdyFXZEqSJEmSJElaGBZU13JJkiRJkiRJC5MVmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkiaeFZmSJEmSJEmSJp4VmZIkSZIkSZImnhWZkiRJkiRJkibe/w9qVMVwZUZkcQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ramsey_schedules[0].draw(label=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、一般に使用される実験的なトリックを適用します。既知の量だけパルスをオフレゾナンス(非共振)に駆動します。これを`detuning_MHz`と呼びます。測定されたラムゼー・シグナルは、`detuning_MHz`近くの周波数で少しのオフセットで共振を示すはずです。この小さなオフセットが、`rough_qubit_frequency`が量子ビット周波数からどれだけ離れているかを正確に示しています。" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# 実行設定\n", + "num_shots = 256\n", + "\n", + "detuning_MHz = 2 \n", + "ramsey_frequency = round(rough_qubit_frequency + detuning_MHz * MHz, 6) # need ramsey freq in Hz\n", + "ramsey_program = assemble(ramsey_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots,\n", + " schedule_los=[{drive_chan: ramsey_frequency}]*len(ramsey_schedules)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(ramsey_program)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "ramsey_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "ramsey_values = []\n", + "for i in range(len(times_us)):\n", + " ramsey_values.append(ramsey_results.get_memory(i)[qubit]*scale_factor)\n", + " \n", + "plt.scatter(times_us, np.real(ramsey_values), color='black')\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.title(\"Ramsey Experiment\", fontsize=15)\n", + "plt.xlabel('Delay between X90 pulses [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "データを正弦波に当てはめ、我々が関心のある情報-- つまり$\\Delta f$ -- を抽出します。" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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VVXRCXgLeAeoAu4AOldWpn1HFSS8A8Z2wE+A94C5AOeeC9Om+SNYgsh6pVBUVMRf7r+f79q14wZgQM+edrqdSLZuhQsugOuug3POgTfegLVr4aST4Pvv/ZYuo8jPz+ePQFfgl8BHzus8YFnbtgwTyTynqA+UlJSwe/v23AqsBR4BOokw58c/hhEj4PLL03vQE8nRkE5HvI7meubPVxVRve66xNRnUV2/XvXww1VB9eabVevqTPmzz6rm5KiOG6e6fbu/MmYQr9x4oyronR4H6N65uXpZq1b6JehraewUDRozLrtMFfRp0HP22ktLH3vMfLBokWrr1qoTJ/orYAwQxdHse6ce75EwpaCqWlSk2r696qefJq7ObGXzZtUDD1Rt1071iSd2/fxf/zKP34UX7lQWlpazdatqQYFu6tJF+/XsWR991KVLFwX0WmNA0gE2ui4xjB6tuv/+qrW1u352003m2X7++ZSL1RysUoiF1auNlp80KXF1ZitTp5rH69lno5/z29+ac373u9TJlan8/vfmXv7vfw2KRUQB7Qy6CfRBRymIiE+CZgCzZ5t7fffd9UXeUOAD8vP1mx49VPfbT/Xbb30UtHGsUoiVK65QbdVKdenSxNabbYwbp9qzZ+SRlEtdnepZZ6m2bau6cWPqZMs0li839/DMM3f5yLsO5x+gW0C725lCfPz4x6q77666YYOqRl63cETbtlorovqLX/gsbHSsUoiVL79U3X13rRwxwi4Caimff24U6/XXN33uzJnmMSwrS75cmUhdnerRR6t27BjR7OntsPo6JqRbW7e2z3NL+fxzY0247LL6omgLYP/VsaN5tt96yz95G8EqhWawYMIEVdARab5i0Tf+/GfzaH38cdPn1taaafappyZfrkzkySfNvb733qineE0br7dvrzUdOxqfj6X5/O535n4vW1Zf5Jrowo88UO3TR3XECB8Fjk40pRB1RbOIXNLCgKZpqlrdwmubTbwrmiPRPz+fNz/5hMXADzzl6bZi0TcGD4a2beGDD2I7/+qr4R//gHXrYI89kipaxjFhAsyeDZWVkBNDhPnrr5sFhA89ZEKFLbGzbRuEQjBkCLz4Yn1xtBXOXbp04draWq7dsIGR++3HlbffHqhQ92grmqOOwIG6Fhy1wNBodSbjSMZMQUT0UmeqfZhH81vnXGS8I9ET9tnHjKTu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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(times_us, np.real(ramsey_values),\n", + " lambda x, A, del_f_MHz, C, B: (\n", + " A * np.cos(2*np.pi*del_f_MHz*x - C) + B\n", + " ),\n", + " [5, 1./0.4, 0, 0.25]\n", + " )\n", + "\n", + "# オフレゾナス コンポーネント\n", + "_, del_f_MHz, _, _, = fit_params # 時間がusなので周波数はMHz\n", + "\n", + "plt.scatter(times_us, np.real(ramsey_values), color='black')\n", + "plt.plot(times_us, y_fit, color='red', label=f\"df = {del_f_MHz:.2f} MHz\")\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.xlabel('Delay between X90 pulses [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Ramsey Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、`del_f_MHz`が分かったので、量子ビット周波数の推定値をアップデートできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Our updated qubit frequency is now 4.974591 GHz. It used to be 4.974528 GHz\n" + ] + } + ], + "source": [ + "precise_qubit_freq = rough_qubit_frequency + (del_f_MHz - detuning_MHz) * MHz # get new freq in Hz\n", + "print(f\"Our updated qubit frequency is now {round(precise_qubit_freq/GHz, 6)} GHz. \"\n", + " f\"It used to be {round(rough_qubit_frequency / GHz, 6)} GHz\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.2 ハーン・エコーを使った$T_2$の測定 \n", + "\n", + "次に、我々の量子ビットのコヒーレンスタイム$T_2$を測定できます。この実験を行うために使われるパルスシークエンスは、ハーン・エコーとして知られていて、NMRコミュニティーに由来する用語です。ハーン・エコーの実験は上記のラムゼー実験にとてもよく似ていて、2つの$\\pi/2$パルスの間に$\\pi$パルスを追加します。時間$\\tau$における$\\pi$パルスは位相の累積を反転させ、時間$2\\tau$にエコーを生成します。時間$2\\tau$に最後の$\\pi/2$パルスを適用して測定を行います。\n", + "\n", + "ハーン・エコー実験における遅延時間がヒコーレンスタイム$T_2$です。" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "# T2実験のパラメーター\n", + "tau_max_us = 200\n", + "tau_step_us = 4\n", + "taus_us = np.arange(2, tau_max_us, tau_step_us)\n", + "# dtの単位へ変換\n", + "delay_times_dt = taus_us * us / dt\n", + "\n", + "# 以前の実験から得たpi_pulseとx90_pulse を使います" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "t2_schedules = []\n", + "for tau in delay_times_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T2 delay = {tau *dt/us} us\")\n", + " this_schedule |= Play(x90_pulse, drive_chan)\n", + " this_schedule |= Play(pi_pulse, drive_chan) << int(this_schedule.duration + tau)\n", + " this_schedule |= Play(x90_pulse, drive_chan) << int(this_schedule.duration + tau)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + " \n", + " t2_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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qWmSF1xwwbCjka69trKU8oL582vvffS/PyrHcfQfp5+mv/3tpt0+09XVpcsvu0y9vb0N3x9AtP77vz+iNWvW6P3VKeNz5szVBRd8V67r6tRTT1F398BI7+3bt2vjxo2DPk/bcPi24d//frckaa+9KiMxZa0+/JK3yvd9vfecj+i+R1btdr2tO7fr8j/+quH7AwAQKc+vm1rOeplRM3YCzus3xrxZ0v9KekDSkdba3rrffV/SqZJ+ZK09pfreiyXd0NbWple84pUyRrrjjju0fv16PfOZz9RVv/2dZs6cudt9Vq9erZcd91Jt3bpVhx12mA5ZskR///vf9fhjj+moo47W7//wB7W1tY3p73DaBz6gn/3sCp18yin68Y9+pGc/5znaf//9df/KlXrwwQc1depU/eHqa/TMZz5z0Oc+8P736+c//5mmTZumY45Zrt7eHt155516xSteobvvvltr167Vzl0D04vWrFmjZyw7TC94wQt09TV/lFRpvC/cd4EKhYKOOOJZWrhoocqlkv7+979r3bp1Wrhwoa7/yw2aOXNmrTH+hc9/Tl//+tflOI4OP/xw7b///rLW6rHHHtPKlSvV2dmpJ9Y1N+UTQHSCuuDII5+rcrmkxx9/XC960YtULru68ca/qqenR//+1rfqBz/4Ye0zrz7+Vbr55pt138r7tWjRoqbvee655+grX/6yTjrpJF1xxRVavHixDlu2TI8++qj+fvfdKhQK+sUv/1cvf/nLB33unHO+pK9+5Stqb2/X8he8QMYY3XXXXTrk4ENkrdUdd9y+W5qmTunUwoULtfL+gZ12910wX7t27dIznvEMHXjggbLW6r77Vmr16oc1Y8ZMXf+Xv2jx4oEdd3/0ox/qvz/yEXmep6VLl+qAAw5UoZDX2rVPaOXK+9Tf36+1T6xr+dR7AOP3619fqfe8+91asmSJbrzpb+ro6Kj97v996IO69NJL9e53v0cXfPe7kqQbbrhBrz/xdTr88MO13377VesW2oZ7ahte+4vfatY2yX14k5Rz9NW//Uzf/N8fyXEcLdv/EO239wJZa/X4+nV64LGHNbmjQ4/8781jygsAAMJUXvm0zLR25fedoRd8+C166OF/PWCtPSzudE0UE25EpjFmvqSLJZUkvaM+iFl1hqSHJZ1sjHlD9b1HJG33fV/XX3+d/vKXv2jvvffWued+uRawG87ixYt184pb9I53vFObN2/W73/3OzmOo7M+9jH97ve/H3NDtd6//du/6Re//F/lnJyu/sMf9NRTT+mEE16j666/freGqiR954ILdOaZH9GUKVN0/fXXac3atTrzIx/Rjy+5tOF7dnZ26hvnnafjjz9em7ds1jVXX62bbrpJ06dP1yfPPls3/e1mzZ07d9CIgs989nO65po/6sQTT9SGDRv0+9//XjfddJM8z9PJp5yiX/zil+POCwDha29v0+//cLXe/Ja36M4779T111+n+fPn65xzztVFF4WzDu5RRx2tq6/5o+bOnas//fGP+tdDD+nFL36xrr76mt2CmJL0yU+erS996RztM3++brrxRj34wAN61zvfpat++1sVi42PdPra/3xdb3zTm9TT06M///nPuu6665TP5/TBD35It95226AgpiSdfPIpuvGmv+ntb3+Hurq6dO21f9INN9ygnp5uveUt/67//f/+T9OmTRt3fgBoraeeekr/9V//pWKxqB/+6MeDgpiS9OWvfFUHHrhYl132E/3ut7+VJB100EHVst6tP//5z7QNG2gbzmmfOvABRzr7PR/SVV/9kV5zzHHauH2zrrntBq247y75vq+TXv1mXf6Zb407LwAACEV+IJTGeMzoTcgRmWNhjLl/yZIlS++48664kyJpoNf9D1dfrRe+8Ni4kwMg44YbgRO2YETmhRdepHe8852R3BMA0irpbUPvye1yH9ks91+bZEuuCsv2Hv1DAAAkUHnl0zJT25VfOEMvPOPftepfDzEiM0ITbkQmAAAAgIjVjZ0wneMfeQoAQGxyjMOME4FMAAAAAKHyu+p2auf5DwCQYsapC6Uxyzly+bgTkCY9PT1aseJmPe95R417R8l6/3roIZ133nkNnfv85z9f7znppJbdu9XK5bLuuOP22nGr8wpAvHbs2KEVKyqbLzRTvrds3qyzzz67oXMPPvhgnfmRj4w5jUlAXQhkVxTlOyttw/q88jZ16TnT9pOsld3Vv+cPAgCQYLbsybTl5XquenqHbruCsBHIbIK1klt2W37dDRs36Gc/u6Lh899z0km66OKLddHF4WysMV5h5BGAeC1atEhbtm7TLStWjKmMd3V3N1zPveAFL9CZH/mIPvnJs/XJTzYW/Ewi6kIgu8Iu31lqGwZ55bkDeWamtseVHAAAxq9usx8r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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t2_schedules[0].draw(label=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dsche/.local/lib/python3.8/site-packages/qiskit/compiler/assemble.py:320: RuntimeWarning: Dynamic rep rates not supported on this backend. rep_time will be used instead of rep_delay.\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "# 実行の設定\n", + "num_shots_per_point = 512\n", + "\n", + "t2_experiment = assemble(t2_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: precise_qubit_freq}]\n", + " * len(t2_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(t2_experiment)\n", + "# print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "t2_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "t2_values = []\n", + "for i in range(len(taus_us)):\n", + " t2_values.append(t2_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "plt.scatter(2*taus_us, np.real(t2_values), color='black')\n", + "plt.xlabel('Delay between X90 pulse and $\\pi$ pulse [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Hahn Echo Experiment', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fit_params, y_fit = fit_function(2*taus_us, np.real(t2_values),\n", + " lambda x, A, B, T2: (A * np.exp(-x / T2) + B),\n", + " [-3, 0, 100])\n", + "\n", + "_, _, T2 = fit_params\n", + "print()\n", + "\n", + "plt.scatter(2*taus_us, np.real(t2_values), color='black')\n", + "plt.plot(2*taus_us, y_fit, color='red', label=f\"T2 = {T2:.2f} us\")\n", + "plt.xlim(0, np.max(2*taus_us))\n", + "plt.xlabel('Delay between X90 pulse and $\\pi$ pulse [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Hahn Echo Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C. 動的デカップリング \n", + "\n", + "単一の$\\pi$パルスは位相の累積の反転による準静的ノイズを除去できます。このコンセプトは、$\\pi$パルスを何回も続けて適用することで準静的とは近似できないノイズに拡張することです。このテクニックは、動的デッカプリングとして一般に知られており、ノイズのさまざまな周波数をキャンセルし、量子ビットからより長いコヒーレンス時間を抽出するために使われます。" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total time ranges from 12.0 to 462.0 us\n" + ] + } + ], + "source": [ + "# 動的デカップリング実験のパラメーター\n", + "tau_us_min = 1\n", + "tau_us_max = 40\n", + "tau_step_us = 1.5\n", + "taus_us = np.arange(tau_us_min, tau_us_max, tau_step_us)\n", + "# dtの単位への変換\n", + "taus_dt = taus_us * us / dt\n", + "num_pi_pulses = 6 # 6つのpiパルスを適用\n", + "print(f\"Total time ranges from {2.*num_pi_pulses*taus_us[0]} to {2.*num_pi_pulses*taus_us[-1]} us\")" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "T2DD_schedules = []\n", + "for delay in taus_dt:\n", + " this_schedule = pulse.Schedule(name=f\"T2DD delay = {delay * dt/us} us\")\n", + " this_schedule |= Play(x90_pulse, drive_chan)\n", + " this_schedule |= Play(pi_pulse, drive_chan) << int(this_schedule.duration + delay)\n", + "\n", + " for _ in range(num_pi_pulses - 1):\n", + " this_schedule |= Play(pi_pulse, drive_chan) << int(this_schedule.duration + 2*delay)\n", + "\n", + " this_schedule |= Play(x90_pulse, drive_chan) << int(this_schedule.duration + delay)\n", + " this_schedule |= measure << int(this_schedule.duration)\n", + " \n", + " T2DD_schedules.append(this_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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jcBkSCYwiOnN9GPsyrrZz5slnS7px5KeYK29U5KMMWdK+pqkDxpjvmWtjd5+/JikwyS9x1r7l53XNCT9P0m/feedd+rGG2/QccdtUa1WTA7Y933ddFM37CJjSePDH/moFubndfTRRw98jkvH2Gq1dOONNxQeB/qjPiFv1CnkifqEvFGnkCfqUzZ///ev009/8hM94AEP0P/8z2d12OGHS5Iu+tGP9Nu//VS99KUv0cMf8Qgdd9xxK1533rnnateuXTr3vPP0tre9XVL72P74Wc/SF7/4Bb3mNa/WC1/4wsKvObfdeKOat98ib9e8jrHrxYAzYCW72JRvfS23WvJlGfU2QaVLZBpjZiUFIy7/IkhiSpK19gfGmPdI+jtJL5H00p7XnSHpLEl3SHpFz2taxpjzJD1179695le//JWOOebYwk4qnudp243dzkSRsaRxj3vcY+RzXDrGVqsVxjJtn3UVUJ+QN+oU8kR9Qt6oU8gT9Sm95eVlfeqTn5Qkve1tbw+TmJL0oAc/WOeee67e8Y536AMfeL/e8pa3hv926aWX6kc/+qEOP/xwvf71bwh/3mg09PZ3vENf/epX9KlPflKPf9zji7/mvGmbWnfskL93UUcdcDx5TCDCrJ+Vv39RzVZTNRl2wpqgqehNGGP+yxhjjTFv6/Nv9zHG7O/8d29JJ0laL2lJ0g/7vN13Ol/Pifz8SZ2vX7DWrhjPb629XdK87/u66qorUx3DuS94gQ48YKO+970L9PWvf12/9djH6qjNR+q4exyrZz7jD/WLa69d9Zo3vemNOvCAjfr0pz7V9z2f+9w/1aGHHBw7hq997Ws65ylP1n3vc28ddughus+9T9RvPfaxevOb39T3+d/4xjf0tN/9XR1/zy067NBDdOqvnaK//Zu/0a5duyStXI9z3759esUrXq6Ttt5Xhx92qE5/4K/rfe97n6LT8bOuxdP7mVxyySV66lPP0T2OPUbHHH2UznnKk3XxxReves2nP/UpHXjARr3pTW/s+55JY7roRz/SH/7BH+h+J5+kww49RCeecC894hEP1+te+1rt379/1fMvueQS/fGz/kj3PvEEHXrIwdp63/voxS96kW6++eZkB19y1CfqU96oU9SpPFGfqE95o05Rp/JEfcpen57z7D/WgQds1Gte/epVr7vuuut01OYjddTmI3X99dfr2muv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8536wuc/r/udcop+9atf6Sc//rFmZmb0wQ99WOvXd/ds2rhxo/78L/5Cb33LW/S433qsznroQ2WM0aWXXqr73ue+OuOMB+niiy/qG8uaNWvCWGZmZvTWt7xZr37V3+nXfu3XdMIJJ8haq8svv0LXX3+dDj74EP35X/xl+NqHnHmm/umd79Rfv+xletITn6iTTz5ZJ554ohozM7pp2026/PKfa2lpSU9+ylMyL+hdJtQn6lPeqFPUqTxRn6hPeaNOUafyRH3KVp8kaevWrXr9698QvvaJT3qSnvOc5+hjH/uYXvmKV+h973+/JOmaa67R2U96ku5///try5Ytstbq4osv1o4dO3T/+99fn/jkp/oexwc++EE95tGP0gc/8AFdcP75uu/WrfrJT36iG2+4QWeccYb+6Z3v0po1a4q/5rz4Yj3qAWdKnq/tu1YnjKOaraZe9eG36e//9Z26/4kn6x5HHK3lVlOXXXelbrlzh4478mj98eO7u6n/7iOeqGu2/VLv/n//qse85Bk65fj76p5HHStrrW7csV1X3XCdNqxbp2f1vAZwidkwq8bcstavWStmlk+W8yMyjTHHSPqwpGVJz7TWRm+7vlTSdZKea4z57c7Pfinp45IOkPQESb8l6VZJL5P0YGvtXf1+l7X2OrU3/PmY2rua/7YkX9LrJd1Yr9cynVAk6Xd+53f0n//1/1Sv1fXlL31Jt956q570pLP1zW99S/e///1XPf+973uf/uqvXqYDDjhA3/rWN7Xtppv0Vy97mT728Y/HXi9o48aN+qd3vlNPeMITtHPXTn3ly1/WBRdcoE2bNunvXvUqnX/B91btXPja1/29vvKVr+qcc87R7bffri9+8Yu64IIL5Hmenvu85+k///O/wueuWTOrL3zxS3ra7/2eLrnkEn3rW9/UMcccoze+8U36UOREGdfMzEz4Xz8PetCD9eWvfFVHHnmkvvbVr+oX116rRzziEfryl7+ixz72saue/3d/9yq94Q1v1NHHHKMLzj9fV191lZ71R8/S5z7/ec3ODi5TY8yKON729nfod5/2NM3Pz+sb3/iGvvnNb6rRqOvFL/5z/fBHP9KJJ5644vXPfe7zdP4F39MznvFM7d+/X1/96lf17W99S3Nz+/X0p/++/t//99866KCDUn1GZUV9oj7ljTpFncoT9Yn6lDfqFHUqT9Sn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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T2DD_schedules[0].draw(label=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "num_shots_per_point = 1024\n", + "\n", + "T2DD_experiment = assemble(T2DD_schedules,\n", + " backend=backend,\n", + " meas_level=1,\n", + " meas_return='avg',\n", + " shots=num_shots_per_point,\n", + " schedule_los=[{drive_chan: precise_qubit_freq}]\n", + " * len(T2DD_schedules))" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5f85cfa300f7d2001a1f7466\n", + "Job Status: job has successfully run\n" + ] + } + ], + "source": [ + "job = backend.run(T2DD_experiment)\n", + "print(job.job_id())\n", + "job_monitor(job)" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "T2DD_results = job.result(timeout=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "times_us = 2.*num_pi_pulses*taus_us\n", + "DD_values = []\n", + "for i in range(len(taus_us)):\n", + " DD_values.append(T2DD_results.get_memory(i)[qubit]*scale_factor)\n", + "\n", + "plt.scatter(times_us, np.real(DD_values), color='black')\n", + "plt.xlim(0, np.max(times_us))\n", + "plt.xlabel('Total time before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Dynamical Decoupling Experiment', fontsize=15)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "scrolled": false, + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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Rx11FHfccUdCGtyff/55mjVrRl5eHscffzwLFizY/RpOPPFEatSowdVXX13sOTNnzqRZs2YcfvjhXHvttYT7Tbtu3Tr+8pe/0KJFC44++mhefdWt5zV58uTdaZOXl0e1atUYM2ZM3K8jLuleUCIRW+vWrTVRcnJywi5ykpOTk7B7GJMOCxYsSHcUdrv77rv14YcfVlXVX3/9VWfOnKmqquvXr9fGjRvr/PnzVVX18ssv17fffltVVYuKivSxxx7Txo0b67Zt21TV/b+uWrVKVVU3bNigF110kV522WVxx2/dunW7H7/33nvarVs3VVXduHGjfvbZZ/rcc89p3759iz2nbdu2+uWXX2pRUZF2795d33///RLhFhQUaP/+/VVVdeXKlVq7du3dryVg9erVWrt2bd20aVPcryNYuPefkMWhgreMqFbKJAUFBWRlZRU7lpWVRUFBQZpiZEzF1qBBA1q1agVAzZo1adq0Kb/88kuJ60SE66+/nvr16/PBBx+UOF+jRg2ef/55xowZw5o1a+KKU61ae1bU3bRp0+46+z/96U8cf/zxVKtWfGno5cuXs379etq3b4+IcNlll4X95S8ibNiwAVVl48aNHHDAAVSpUrzT6OjRoznttNNKfA8BdOnSZfdUQb///juBOeXmz5/PscceS15eHs2bN2fx4sXxvHyggsytlEi9e7t17wcMGMDSpUvJzs6moKBg93FjKoTrroPZsxMbZl4ePPFEXEEsWbKEWbNm0a5du4jXtGrVikWLFnHmmSWX3a5VqxaNGjVi8eLFJcLo1KkTGzaUXML5kUce4eSTSw6nevbZZ3nsscfYvn07kyZNKjXev/zyCw0bNty937Bhw7AZ3NVXX03Pnj05+OCD2bBhA2+99RaVKhX/jT5y5EhuuOGGUu8X6vnnn6dfv3707t2b7du3s2tX6NL00bPMIYzevXtbZmBMim3cuJFevXrxxBNPFPvlHkrL6J8S6fxnn30WVXz69u1L3759efPNN7n//vt57bXXonp+OB9++CF5eXlMmjSJH374gVNOOYVOnTrtfr3Lly9n3rx5dOvWLapwO3ToQEFBAcuWLeOcc86hcePGccfVMgdj9kZx/sJPtB07dtCrVy969+7NOeecU+q1s2bN4qSTTgp7bsOGDSxZsoQmTZqUOBdtySHgwgsv5J///GepcTrkkEOK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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# データをフィッテイング\n", + "fit_func = lambda x, A, B, T2DD: (A * np.exp(-x / T2DD) + B)\n", + "fitparams, conv = curve_fit(fit_func, times_us, np.real(DD_values), [3.5, 0.8, 150])\n", + "\n", + "_, _, T2DD = fitparams\n", + "plt.scatter(times_us, np.real(DD_values), color='black')\n", + "plt.plot(times_us, fit_func(times_us, *fitparams), color='red', label=f\"T2DD = {T2DD:.2f} us\")\n", + "plt.xlim([0, np.max(times_us)])\n", + "plt.xlabel('Total time before measurement [$\\mu$s]', fontsize=15)\n", + "plt.ylabel('Measured Signal [a.u.]', fontsize=15)\n", + "plt.title('Dynamical Decoupling Experiment', fontsize=15)\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. References " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. H. Abraham, I. Y. Akhalwaya, G. Aleksandrowicz, T. Alexander, G. Alexandrowics, E. Arbel, A. Asfaw, C. Azaustre, P. Barkoutsos, G. Barron, L. Bello, Y. Ben-Haim, L. S. Bishop, S. Bosch, D. Bucher, CZ, F. Cabrera, P. Calpin, L. Capelluto, J. Carballo, C.-F. Chen, A. Chen, R. Chen, J. M. Chow, C. Claus, A. W. Cross, A. J. Cross, J. Cruz- Benito, C. Culver, A. D. C ́orcoles-Gonzales, S. Dague, M. Dartiailh, A. R. Davila, D. Ding, E. Dumitrescu, K. Dumon, I. Duran, P. Eendebak, D. Egger, M. Everitt, P. M. Fern ́andez, A. Frisch, A. Fuhrer, J. Gacon, Gadi, B. G. Gago, J. M. Gambetta, L. Garcia, S. Garion, Gawel-Kus, L. Gil, J. Gomez-Mosquera, S. de la Puente Gonz ́alez, D. Green- berg,J.A.Gunnels,I.Haide,I.Hamamura,V.Havlicek,J.Hellmers,L􏰀.Herok,H.Horii, C. Howington, W. Hu, S. Hu, H. Imai, T. Imamichi, R. Iten, T. Itoko, A. Javadi-Abhari, Jessica, K. Johns, N. Kanazawa, A. Karazeev, P. Kassebaum, V. Krishnan, K. Kr- sulich, G. Kus, R. LaRose, R. Lambert, J. Latone, S. Lawrence, P. Liu, P. B. Z. Mac, Y. Maeng, A. Malyshev, J. Marecek, M. Marques, D. Mathews, A. Matsuo, D. T. Mc- Clure, C. McGarry, D. McKay, S. Meesala, A. Mezzacapo, R. Midha, Z. Minev, P. Mu- rali, J. Mu ̈ggenburg, D. Nadlinger, G. Nannicini, P. Nation, Y. Naveh, Nick-Singstock, P. Niroula, H. Norlen, L. J. O’Riordan, S. Oud, D. Padilha, H. Paik, S. Perriello, A. Phan, M. Pistoia, A. Pozas-iKerstjens, V. Prutyanov, J. P ́erez, Quintiii, R. Raymond, R. M.-C. Redondo, M. Reuter, D. M. Rodr ́ıguez, M. Ryu, M. Sandberg, N. Sathaye, B. Schmitt, C. Schnabel, T. L. Scholten, E. Schoute, I. F. Sertage, Y. Shi, A. Silva, Y. Siraichi, S. Sivarajah, J. A. Smolin, M. Soeken, D. Steenken, M. Stypulkoski, H. Takahashi, C. Taylor, P. Taylour, S. Thomas, M. Tillet, M. Tod, E. de la Torre, K. Trabing, M. Treinish, TrishaPe, W. Turner, Y. Vaknin, C. R. Valcarce, F. Varchon, D. Vogt- Lee, C. Vuillot, J. Weaver, R. Wieczorek, J. A. Wildstrom, R. Wille, E. Winston, J. J. Woehr, S. Woerner, R. Woo, C. J. Wood, R. Wood, S. Wood, J. Wootton, D. Yeralin, J. Yu, L. Zdanski, Zoufalc, azulehner, drholmie, fanizzamarco, kanejess, klinvill, merav aharoni, ordmoj, tigerjack, yang.luh, and yotamvakninibm, “Qiskit: An open-source framework for quantum computing,” 2019.\n", + "2. D. C. McKay, T. Alexander, L. Bello, M. J. Biercuk, L. Bishop, J. Chen, J. M. Chow, A. D. C ́orcoles, D. Egger, S. Filipp, J. Gomez, M. Hush, A. Javadi-Abhari, D. Moreda, P. Nation, B. Paulovicks, E. Winston, C. J. Wood, J. Wootton, and J. M. Gambetta, “Qiskit backend specifications for OpenQASM and OpenPulse experiments,” 2018.\n", + "\n", + "**Note:** 'Qiskit Pulse' was formerly known as 'OpenPulse'." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.15.1',\n", + " 'qiskit-aer': '0.6.1',\n", + " 'qiskit-ignis': '0.4.0',\n", + " 'qiskit-ibmq-provider': '0.8.0',\n", + " 'qiskit-aqua': '0.7.5',\n", + " 'qiskit': '0.20.0'}" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.8.5" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "011201fa9fb24ada878b947ae21065d0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_88f44af3ba764e30917e06d11bd0e61a", + "placeholder": "​", + "style": "IPY_MODEL_1cc3f7e696b9480580dbb69a1a1c875f", + "value": "DONE" + } + }, + "01ec869794664d418bfb12c7099a1d53": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0f72b62626aa4e51bcf025d5f1a2cb68", + "IPY_MODEL_50345d70753a470a947c5f5fc33f2a2b", + "IPY_MODEL_8dea794fab6d41fcbe8eeb32f53c4ba6", + "IPY_MODEL_a8e98f753d904e7bb3f1b3b2651c93c5", + "IPY_MODEL_4a1a07fff50e4ab0a232b870159d2974" + ], + "layout": "IPY_MODEL_3da36a59b4f54fbb82d85f69861a2957" + } + }, + "020630d0284445e5acd18134faea737c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "03310adb8ec041598d5e800a733ff36c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "03e7709220724a10a3537fc2a20c8f09": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "047064091f944a0984c3df35acf9a02d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "055cceb7bc514bc18573cf96d253f8b6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "05e2777c12514cb7a7e16c1fddf5ab8e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0aa6cac7cc284819927fa6c59a6662ea", + "placeholder": "​", + "style": "IPY_MODEL_3ecbd8f19887438994b1c29022e35152", + "value": "-" + } + }, + "063d0cc064cb4888b82e0a1ba03b45cf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cff9cc5593124e04a0d579b5cd9a14d4", + "placeholder": "​", + "style": "IPY_MODEL_055cceb7bc514bc18573cf96d253f8b6", + "value": "5e8da92a2630d500117ba740" + } + }, + "066a066d529e45ef9984ae05095c24de": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "07d6a03c9d114516896eb11a64143bae": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a9e28cbab9544ad18c4916684cb741dc", + "placeholder": "​", + "style": "IPY_MODEL_3b2dce28bb9c4ffaa9c91aff94ab1e30", + "value": "-" + } + }, + "08bb887480ad40bc8d635d8e80baf729": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_95888b7f63834cfcbfb8000bbcf946b1", + "style": "IPY_MODEL_e524987583a94c80875ec5fe9e6d09b2", + "tooltip": "" + } + }, + "0aa6cac7cc284819927fa6c59a6662ea": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "0f72b62626aa4e51bcf025d5f1a2cb68": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_1e3c9bd1880e4a48814d7343fd451629", + "placeholder": "​", + "style": "IPY_MODEL_1b0e3fe395d34a6e85992594f405c05a", + "value": "
    Job ID
    " + } + }, + "115b1a66eb67479f994cba4bd339ec0c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_9813b9914a5d4a8da2f3f9b75d3502aa", + "style": "IPY_MODEL_46e18581d47f428499a71ffcd8c56216", + "tooltip": "" + } + }, + "13011652bfdf499d86bff474c3b987ba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2e9d6f536f124f78a3ef55c323606d51", + "placeholder": "​", + "style": "IPY_MODEL_1eea9ec7c7214dcea550f43e86d9ffd5", + "value": "-" + } + }, + "144dd837cf2d4671ae4191bb24588c73": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_83f1988660184b248dd7d5fbd56422a7", + "placeholder": "​", + "style": "IPY_MODEL_7955caab091844d5b63b628a060c9b82", + "value": "-" + } + }, + "174ecb899e4a4936a338610343ecc454": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "1965adf813fb4f55b3336fa46f339244": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "1b0e3fe395d34a6e85992594f405c05a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1b9be77fadec429fa76b75839ad6e3b7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "1c45ba42a4be49479ccd75602b335049": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_5e72e0e0ded0488c916c231fbaaf96fa", + "style": "IPY_MODEL_93fcb924e01242b3b8c32285a6cddd31", + "tooltip": "" + } + }, + "1cc3f7e696b9480580dbb69a1a1c875f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1d3e47ee143546d2bf4438bfc15a0e96": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "1e3c9bd1880e4a48814d7343fd451629": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "1eea9ec7c7214dcea550f43e86d9ffd5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2008ca40bd6d494a9b2cec3cf74be9d8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "21fd863fc07a49a6b62a6b67fef4fd6a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b36e8b0d41d8454bbbed2ecda774988e", + "IPY_MODEL_614077557d2b45839477b850e20d1a30", + "IPY_MODEL_d48fb765952246089e7669bd19d093d9", + "IPY_MODEL_e49030f74996407293afdb7982d97da7", + "IPY_MODEL_13011652bfdf499d86bff474c3b987ba", + "IPY_MODEL_63f32fa9b5bc4e1bb16f23ac51ceb956" + ], + "layout": "IPY_MODEL_29b8f0fbdf674433bcf6e133fdbb2a31" + } + }, + "227f899eafb44f7ca8c30e9d18318151": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dd0de57b5fab49d4badc14748dde4015", + "placeholder": "​", + "style": "IPY_MODEL_8b861f78fb04408583b6fc6011ff8ed0", + "value": "DONE" + } + }, + "23ecf7798ea645df9d251cdb6146f3dd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "24be1dfcd66243678469d1e1c8201b8a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8d5ec73167204056af6c15992a955b75", + "placeholder": "​", + "style": "IPY_MODEL_6698a2571f0544f6915a1ddab2b1dac0", + "value": "ibmq_armonk" + } + }, + "25650e1e229d419e9fbf5a0105145862": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "29b8f0fbdf674433bcf6e133fdbb2a31": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2ce6cb2f99744b99973e8532f30424b3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dac7f44f3881445d9f35acfedfa312c0", + "placeholder": "​", + "style": "IPY_MODEL_1d3e47ee143546d2bf4438bfc15a0e96", + "value": "DONE" + } + }, + "2e9d6f536f124f78a3ef55c323606d51": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "306bda312aaf403b9b8724a94fd1338d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8852f6045e20462d96ffd0eebd339912", + "placeholder": "​", + "style": "IPY_MODEL_65e3b25ef772479687c7ad37d974fbeb", + "value": "DONE" + } + }, + "3223d3f247884566acaafcf7e2d677c6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "GridBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "GridBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_90be792fcb7f433dac978cab231abf6d" + ], + "layout": "IPY_MODEL_1965adf813fb4f55b3336fa46f339244" + } + }, + "33f085959d224982a64c0052995a1f90": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3a923ce32bcb48b79cfd48f4b0ecc376": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "3b2dce28bb9c4ffaa9c91aff94ab1e30": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3cc468176ef74a448b4e0c938504a0ca": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d53fe1c99fb845209c1870da82e3afdd", + "placeholder": "​", + "style": "IPY_MODEL_861ac3cc2e9642b28950087a663298c7", + "value": "job has successfully run" + } + }, + "3d71df945e7d468382f53d3edddfe334": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "3da36a59b4f54fbb82d85f69861a2957": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 0px 0px 37px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "600px" + } + }, + "3dac0cafc040487aa38c3a56234c7443": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3db3cbe275a2478e9c4bcf791dde92d8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3ecbd8f19887438994b1c29022e35152": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "423b78adc97c424b977bb8dc2eb6dd28": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "4393e6c0eb9047c28ac77866b319b667": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "442d8456ee5e4cc799acb5a464839ed4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5a32ea3530504768a79ab0becfb46d64", + "placeholder": "​", + "style": "IPY_MODEL_6b210546dabc415ca5da2f6552b0a9a9", + "value": "5e8da87aecce7e0011fb14ab" + } + }, + "44d7ba63744546c8b4229103d16de1a6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "46e18581d47f428499a71ffcd8c56216": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "4931e2ddea7e40d5b70a5044f4730a3c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4a1a07fff50e4ab0a232b870159d2974": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4393e6c0eb9047c28ac77866b319b667", + "placeholder": "​", + "style": "IPY_MODEL_23ecf7798ea645df9d251cdb6146f3dd", + "value": "
    Message
    " + } + }, + "4a798c5e06664612b683f670d58581c2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4b7ebb62b7e44d068ab33c9373f575e5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "4fccaaf4fbe0489dbcedca7ca721954a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3a923ce32bcb48b79cfd48f4b0ecc376", + "placeholder": "​", + "style": "IPY_MODEL_98cb2b6db2c84c7f90e1e4d712341acd", + "value": "DONE" + } + }, + "50345d70753a470a947c5f5fc33f2a2b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_423b78adc97c424b977bb8dc2eb6dd28", + "placeholder": "​", + "style": "IPY_MODEL_6d1d186bc86147e891e11feb317ad8ba", + "value": "
    Backend
    " + } + }, + "51096ad6566743cd97c63392179c5730": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "51dec5aeae9f4b188945ffcd2bcdcd84": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_e4c85aab30904fcebdef1bad3470f4fa", + "IPY_MODEL_78ab404838cb4e9cb5d2b6f6a8637ee2", + "IPY_MODEL_a018243da0ae4c25b448c4708c9bfcc6", + "IPY_MODEL_86eca11debc242a1a11293b5913a1b20", + "IPY_MODEL_9b43aaf64fb741028fd9ab13afe5e9b3", + "IPY_MODEL_3cc468176ef74a448b4e0c938504a0ca" + ], + "layout": "IPY_MODEL_ddad2d785c884b83b85ebfc5666e9363" + } + }, + "545769b9de9142ce863762b60d4ec22e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "57599e1f7f8743199b9b9ddc3b4c3103": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_115b1a66eb67479f994cba4bd339ec0c", + "IPY_MODEL_8e62e3462bd44fcf8c70fac503ab2efc", + "IPY_MODEL_ddbccd1a8fbc4d8aaa8cc70eddc58458", + "IPY_MODEL_2ce6cb2f99744b99973e8532f30424b3", + "IPY_MODEL_07d6a03c9d114516896eb11a64143bae", + "IPY_MODEL_a6a78aafabd042e0943ca5ceeed1816d" + ], + "layout": "IPY_MODEL_ff514460de6b488e8449db1c71342575" + } + }, + "577237a98c6949dbb47cf78e621d7c05": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "59bdc3e0f67f404884449fddfb4528dc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "5a32ea3530504768a79ab0becfb46d64": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "5afcfe91a86343f582b61e6bac5aae40": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "5e72e0e0ded0488c916c231fbaaf96fa": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "60b7cac13c6c46668b4e4eb84f534daf": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "614077557d2b45839477b850e20d1a30": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_59bdc3e0f67f404884449fddfb4528dc", + "placeholder": "​", + "style": "IPY_MODEL_84b91d0f238d4a54be60a5765542280e", + "value": "5e8da9cc612e2d001200a8bc" + } + }, + "6177d2796fa24f7b8b4f72fd71194058": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "63f32fa9b5bc4e1bb16f23ac51ceb956": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cbb1a5e988b14f2ab1749be5e9783546", + "placeholder": "​", + "style": "IPY_MODEL_67c60c7d080c4abb993da9c12f72baed", + "value": "job has successfully run" + } + }, + "65e3b25ef772479687c7ad37d974fbeb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6698a2571f0544f6915a1ddab2b1dac0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "67c60c7d080c4abb993da9c12f72baed": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6b210546dabc415ca5da2f6552b0a9a9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6d1d186bc86147e891e11feb317ad8ba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "70331b7ff7e64e2fbe0bec5cd6bf4385": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "7062ae5aaa274e4b9e3ed52a8b199cb3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "71ed9f5e3b8b4607835382fdc0a458ae": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_734f49528d2c4897b12af8400614a0fd", + "style": "IPY_MODEL_03310adb8ec041598d5e800a733ff36c", + "tooltip": "" + } + }, + "728c634cd576475fa35c2ea861d68be0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "72bc4b4cb1434ff8b5a52344fe7502ab": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_577237a98c6949dbb47cf78e621d7c05", + "placeholder": "​", + "style": "IPY_MODEL_b2d2bab225e8413699e7e853ce977ddc", + "value": "job has successfully run" + } + }, + "734f49528d2c4897b12af8400614a0fd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "78ab404838cb4e9cb5d2b6f6a8637ee2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_91c42e8b01a8474e916d097e93b65c51", + "placeholder": "​", + "style": "IPY_MODEL_aa93967f3b284fe7a2ba3c3f3ab7b7ac", + "value": "5e8daa1f5c27d000137e95d9" + } + }, + "7955caab091844d5b63b628a060c9b82": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7d3d1ff62ad84b23bc6cbcc90a5583f5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "80878dccdf424b598f9d561956a5cdec": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "81ab9b8252384d40a007d2c4de0719d7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_03e7709220724a10a3537fc2a20c8f09", + "placeholder": "​", + "style": "IPY_MODEL_25650e1e229d419e9fbf5a0105145862", + "value": "job has successfully run" + } + }, + "81c9531bdfc64e1a94c0769650e74167": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "83f1988660184b248dd7d5fbd56422a7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "84b91d0f238d4a54be60a5765542280e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "854617f540e84df9ac46959f9baac598": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "861ac3cc2e9642b28950087a663298c7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "86eca11debc242a1a11293b5913a1b20": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7d3d1ff62ad84b23bc6cbcc90a5583f5", + "placeholder": "​", + "style": "IPY_MODEL_020630d0284445e5acd18134faea737c", + "value": "DONE" + } + }, + "8852f6045e20462d96ffd0eebd339912": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "88f44af3ba764e30917e06d11bd0e61a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "8b861f78fb04408583b6fc6011ff8ed0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8d482b1d15e8467c998c0c6914a31d01": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_1c45ba42a4be49479ccd75602b335049", + "IPY_MODEL_d51da4d0b53e4d98be09cf822297d462", + "IPY_MODEL_e333976dbc774b01bf3d8ba2bd7979c8", + "IPY_MODEL_306bda312aaf403b9b8724a94fd1338d", + "IPY_MODEL_9819244f83864a17954e96544895ae13", + "IPY_MODEL_de37220e6bd04806814339124954af3b" + ], + "layout": "IPY_MODEL_047064091f944a0984c3df35acf9a02d" + } + }, + "8d5ec73167204056af6c15992a955b75": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "8dea794fab6d41fcbe8eeb32f53c4ba6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_854617f540e84df9ac46959f9baac598", + "placeholder": "​", + "style": "IPY_MODEL_728c634cd576475fa35c2ea861d68be0", + "value": "
    Status
    " + } + }, + "8e62e3462bd44fcf8c70fac503ab2efc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ca57612b8807476aaae8dc97faedba29", + "placeholder": "​", + "style": "IPY_MODEL_33f085959d224982a64c0052995a1f90", + "value": "5e8da9792630d500117ba742" + } + }, + "90be792fcb7f433dac978cab231abf6d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "primary", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_ecd6592a2492436095aafd64404dee97", + "style": "IPY_MODEL_2008ca40bd6d494a9b2cec3cf74be9d8", + "tooltip": "" + } + }, + "90c8fa34680c4d109c6a5a0b2df2bed2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "91c42e8b01a8474e916d097e93b65c51": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "91c72f5190de409285ff0c8b64255938": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "921ea68efddf4e319a561e80dabe8124": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "93fcb924e01242b3b8c32285a6cddd31": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "9456f22608be43fa87c4c67491b87f3c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "94ca1b930a9b4ab9a0d5a6617e70b727": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "95888b7f63834cfcbfb8000bbcf946b1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "967d851960ff4c40b2452c27758cdc6a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "9813b9914a5d4a8da2f3f9b75d3502aa": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "9819244f83864a17954e96544895ae13": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b3a2d701b7ef4b71a7951fb20eff5357", + "placeholder": "​", + "style": "IPY_MODEL_44d7ba63744546c8b4229103d16de1a6", + "value": "-" + } + }, + "98a53cf4734845f192d07b773953ad4d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "98cb2b6db2c84c7f90e1e4d712341acd": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "9b43aaf64fb741028fd9ab13afe5e9b3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dcff908970d342b794c5e0581b5bfa59", + "placeholder": "​", + "style": "IPY_MODEL_98a53cf4734845f192d07b773953ad4d", + "value": "-" + } + }, + "9be94ceb017343d7b4882fd6dcd381b6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "a018243da0ae4c25b448c4708c9bfcc6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3d71df945e7d468382f53d3edddfe334", + "placeholder": "​", + "style": "IPY_MODEL_3db3cbe275a2478e9c4bcf791dde92d8", + "value": "ibmq_armonk" + } + }, + "a1c4866a200b41a8a15b7befbd0f651b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_51096ad6566743cd97c63392179c5730", + "placeholder": "​", + "style": "IPY_MODEL_7062ae5aaa274e4b9e3ed52a8b199cb3", + "value": "5e8da8ee52494600134924c1" + } + }, + "a3ecf01477ac4a32857045900162eb12": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a6a78aafabd042e0943ca5ceeed1816d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4a798c5e06664612b683f670d58581c2", + "placeholder": "​", + "style": "IPY_MODEL_fa64661a35884a39b18bf2495172968a", + "value": "job has successfully run" + } + }, + "a8e98f753d904e7bb3f1b3b2651c93c5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dd179444baca49da8a3189c801bb87e4", + "placeholder": "​", + "style": "IPY_MODEL_81c9531bdfc64e1a94c0769650e74167", + "value": "
    Queue
    " + } + }, + "a9e28cbab9544ad18c4916684cb741dc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "aa1644876a9949faa9319bf512a9d8b2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_967d851960ff4c40b2452c27758cdc6a", + "placeholder": "​", + "style": "IPY_MODEL_80878dccdf424b598f9d561956a5cdec", + "value": "-" + } + }, + "aa93967f3b284fe7a2ba3c3f3ab7b7ac": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b2d2bab225e8413699e7e853ce977ddc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b36e8b0d41d8454bbbed2ecda774988e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_4b7ebb62b7e44d068ab33c9373f575e5", + "style": "IPY_MODEL_1b9be77fadec429fa76b75839ad6e3b7", + "tooltip": "" + } + }, + "b397b9f6799f4c7e9cb89dc3dd5e25a9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "b3a2d701b7ef4b71a7951fb20eff5357": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "b4e8cf289d7f420d9f874ba5b2a54f74": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c21eee469b3b45b2b7baf2b1e908a9a7", + "placeholder": "​", + "style": "IPY_MODEL_e2bde985711749e8a01a962a8022be4b", + "value": "job has successfully run" + } + }, + "bd5b6b2c379f448ca923f07c5db43900": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_70331b7ff7e64e2fbe0bec5cd6bf4385", + "placeholder": "​", + "style": "IPY_MODEL_921ea68efddf4e319a561e80dabe8124", + "value": "ibmq_armonk" + } + }, + "c21eee469b3b45b2b7baf2b1e908a9a7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c2e9e129dedc4981a6cc7b81e458612b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "ca57612b8807476aaae8dc97faedba29": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "cb6f5a39649042b7af6390d7d1b0a21c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cbb1a5e988b14f2ab1749be5e9783546": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "cff9cc5593124e04a0d579b5cd9a14d4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "d2517c1bedaf494da740ff12e3bd66c9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_fde59b272595428992c3b13c2552e357", + "style": "IPY_MODEL_5afcfe91a86343f582b61e6bac5aae40", + "tooltip": "" + } + }, + "d433c6b6724e4f909e410b4e274c31bc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_08bb887480ad40bc8d635d8e80baf729", + "IPY_MODEL_a1c4866a200b41a8a15b7befbd0f651b", + "IPY_MODEL_f673de5cfc10463c85c87c0e1f7a19e4", + "IPY_MODEL_011201fa9fb24ada878b947ae21065d0", + "IPY_MODEL_aa1644876a9949faa9319bf512a9d8b2", + "IPY_MODEL_81ab9b8252384d40a007d2c4de0719d7" + ], + "layout": "IPY_MODEL_90c8fa34680c4d109c6a5a0b2df2bed2" + } + }, + "d48fb765952246089e7669bd19d093d9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_94ca1b930a9b4ab9a0d5a6617e70b727", + "placeholder": "​", + "style": "IPY_MODEL_60b7cac13c6c46668b4e4eb84f534daf", + "value": "ibmq_armonk" + } + }, + "d51da4d0b53e4d98be09cf822297d462": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b397b9f6799f4c7e9cb89dc3dd5e25a9", + "placeholder": "​", + "style": "IPY_MODEL_ee22b274166f454e930a50a605d57842", + "value": "5e8da839d464ef001144f8c2" + } + }, + "d53fe1c99fb845209c1870da82e3afdd": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": "scroll", + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "dac7f44f3881445d9f35acfedfa312c0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "dcff908970d342b794c5e0581b5bfa59": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "dd0de57b5fab49d4badc14748dde4015": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "dd179444baca49da8a3189c801bb87e4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "ddad2d785c884b83b85ebfc5666e9363": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ddbccd1a8fbc4d8aaa8cc70eddc58458": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9be94ceb017343d7b4882fd6dcd381b6", + "placeholder": "​", + "style": "IPY_MODEL_a3ecf01477ac4a32857045900162eb12", + "value": "ibmq_armonk" + } + }, + "de37220e6bd04806814339124954af3b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6177d2796fa24f7b8b4f72fd71194058", + "placeholder": "​", + "style": "IPY_MODEL_cb6f5a39649042b7af6390d7d1b0a21c", + "value": "job has successfully run" + } + }, + "e2bde985711749e8a01a962a8022be4b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e333976dbc774b01bf3d8ba2bd7979c8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9456f22608be43fa87c4c67491b87f3c", + "placeholder": "​", + "style": "IPY_MODEL_3dac0cafc040487aa38c3a56234c7443", + "value": "ibmq_armonk" + } + }, + "e49030f74996407293afdb7982d97da7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_174ecb899e4a4936a338610343ecc454", + "placeholder": "​", + "style": "IPY_MODEL_f93ae3c316cb4f358ea1226a0c708e7d", + "value": "DONE" + } + }, + "e4beb676670b4e5daa6d2f2b8127fd18": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "e4c85aab30904fcebdef1bad3470f4fa": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "", + "disabled": false, + "icon": "close", + "layout": "IPY_MODEL_c2e9e129dedc4981a6cc7b81e458612b", + "style": "IPY_MODEL_91c72f5190de409285ff0c8b64255938", + "tooltip": "" + } + }, + "e524987583a94c80875ec5fe9e6d09b2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": "white", + "font_weight": "" + } + }, + "e8af61d90a2f4490b660b5121c2c7d2e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_d2517c1bedaf494da740ff12e3bd66c9", + "IPY_MODEL_063d0cc064cb4888b82e0a1ba03b45cf", + "IPY_MODEL_bd5b6b2c379f448ca923f07c5db43900", + "IPY_MODEL_227f899eafb44f7ca8c30e9d18318151", + "IPY_MODEL_144dd837cf2d4671ae4191bb24588c73", + "IPY_MODEL_b4e8cf289d7f420d9f874ba5b2a54f74" + ], + "layout": "IPY_MODEL_066a066d529e45ef9984ae05095c24de" + } + }, + "ecd6592a2492436095aafd64404dee97": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": "right", + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 0px", + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "ee22b274166f454e930a50a605d57842": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f468f22ea30647bc8258fd7ecf84dfb1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_71ed9f5e3b8b4607835382fdc0a458ae", + "IPY_MODEL_442d8456ee5e4cc799acb5a464839ed4", + "IPY_MODEL_24be1dfcd66243678469d1e1c8201b8a", + "IPY_MODEL_4fccaaf4fbe0489dbcedca7ca721954a", + "IPY_MODEL_05e2777c12514cb7a7e16c1fddf5ab8e", + "IPY_MODEL_72bc4b4cb1434ff8b5a52344fe7502ab" + ], + "layout": "IPY_MODEL_545769b9de9142ce863762b60d4ec22e" + } + }, + "f673de5cfc10463c85c87c0e1f7a19e4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e4beb676670b4e5daa6d2f2b8127fd18", + "placeholder": "​", + "style": "IPY_MODEL_4931e2ddea7e40d5b70a5044f4730a3c", + "value": "ibmq_armonk" + } + }, + "f93ae3c316cb4f358ea1226a0c708e7d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fa64661a35884a39b18bf2495172968a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "fde59b272595428992c3b13c2552e357": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 5px 0px 0px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "32px" + } + }, + "ff514460de6b488e8449db1c71342575": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": "700px", + "min_height": null, + "min_width": "700px", + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/cliffords2.pickle b/translations/ja/ch-quantum-hardware/cliffords2.pickle new file mode 100644 index 0000000..4e30d0b Binary files /dev/null and b/translations/ja/ch-quantum-hardware/cliffords2.pickle differ diff --git a/translations/ja/ch-quantum-hardware/error-correction-repetition-code.ipynb b/translations/ja/ch-quantum-hardware/error-correction-repetition-code.ipynb new file mode 100644 index 0000000..a8b54ee --- /dev/null +++ b/translations/ja/ch-quantum-hardware/error-correction-repetition-code.ipynb @@ -0,0 +1,1526 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 反復符号による量子エラー訂正の導入" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 導入\n", + "\n", + "量子コンピューティングでは、量子ビットで情報を符号化する必要があります。過去数十年にわたって開発された量子アルゴリズムのほとんどは、これらの量子ビットが完全であると仮定しています。すなわち、量子ビットを任意の望んだ状態で準備でき、完全な精度で操作できるという仮定です。これらの仮定に従う量子ビットは、*論理量子ビット*として知られています。\n", + "\n", + "過去数十年で、より良い品質の量子ビットが常に開発され続け、量子ビットとして振る舞う物理系の発見においても大きな進歩を遂げています。ただし、欠陥を完全に取り除くことはできません。これらの量子ビットは、直接に論理量子ビットとして使うには不正確すぎます。代わりに、それらを*物理量子ビット*と呼びます。\n", + "\n", + "現段階の量子コンピューティングでは、物理量子ビットが不完全であっても、専用アルゴリズムを設計してエラー軽減効果を利用することで、利用しようとしています。ただし、将来のエラー耐性量子コンピューターの時代に向けて、物理量子ビットから論理量子ビットを構築する方法を見つなければいけません。これは、多数の物理量子ビットによって論理量子ビットを符号化する、量子エラー訂正のプロセスを通じて行われます。符号化を維持するため、物理量子ビットを高度にエンタングルしている回路に常に通します。補助自由度も絶えず測定され、エラーの兆候を検出し、その影響を除去できるようにします。本質的にはこの手順に小さな摂動を加えることによって、量子計算を実装するために必要な論理量子ビットに対する演算を実行します。 \n", + "\n", + "このプロセスには膨大な労力を必要とするため、エラー耐性量子コンピューターで実行されるほとんどの演算は、エラーの検出と訂正という目的での演算です。そのため、エラー耐性量子量子計算に向けた成果をベンチマークするとき、デバイスがエラー訂正をどの程度実行できるかに着目し続けなければなりません。\n", + "\n", + "この章では、エラー訂正の一例である反復符号を見ていきます。量子論理ビットではなく単なる論理*ビット*に物理量子ビットを符号化するという点で、本当の量子エラー訂正の例ではありませんが、これは量子エラー訂正符号のすべての基本概念を知るための簡単なガイドとして役立ちます。また、現在のプロトタイプデバイスでどのように実行できるかも確認します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 反復符号の導入" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### エラー訂正の基本\n", + "\n", + "エラー訂正の基本的な考え方は、量子情報でも古典情報でも同じです。まず、電話での会話という非常に簡単な例を考えてみましょう。誰かが、答えが「はい」か「いいえ」である質問をしてきた場合、あなたがどのように答えるかは、2つの要素に依存します。\n", + "\n", + "* 正しく理解されることがどの程度重要か? \n", + "* 接続がどどれだけ良好か?\n", + "\n", + "これらは両方とも確率を使ってパラメータ化ができます。最初に、最大許容エラー確率である$P_a$を使います。アイスクリームの味の好みを確認され、チョコレートと言ってバニラを渡されてもあまり気にしない場合、$P_a$はかなり高いと言えます。一方で、誰かの人生に関わる質問をされている場合、$P_a$ はずっと低くなります。\n", + "\n", + "次に接続不良により応答が文字化けする確率$p$を使います。簡単のため、文字化けした「yes」が単に無意味な文字列に聞こえるのではなく、「no」のように聞こえる場合を考えてみましょう。同様に、「no」は「yes」に変換されるとします。この場合、$p$は完全に誤解される確率です。\n", + "\n", + "接続が良かったり、質問が比較的重要でない場合は $p P_a $ になります。この場合では単なる「yes」か「no」という応答では不十分です。誤解される可能性が高すぎます。代わりに、もう少し複雑な構造で応答を符号化する必要があります。これにより、メッセージが歪曲する可能性があるにもかかわらず、受信者が意味を復号できるようになります。最も単純な方法は、多くの人が考えずに行う方法で、つまり単純に何度も応答を繰り返します。例えば、「yes」の代わりに、「yes、yes、yes」と言い、「no」の代わりに、「no、no、no」と言います。\n", + "\n", + "この場合、受信者が「yes、yes、yes」と聞くと、当然送信者が「yes」を意味すると結論付けます。受信者が「no、yes、yes」、「yes、no、yes」または「yes、yes、no」と聞いた場合、応答には否定性よりも肯定性があるため、おそらく同じことを結論付けるでしょう。この場合に誤解されるには、少なくとも2つの応答が文字化けする必要があります。この確率 $P$ は、$p$ 未満です。したがって、この方法で符号化するとメッセージが正く理解される可能性が高くなります。以下のコードのセルは、この例を示しています。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Probability of a single reply being garbled: 0.01\n", + "Probability of a the majority of three replies being garbled: 0.0003\n" + ] + } + ], + "source": [ + "p1 = 0.01\n", + "p3 = 3 * p1**2 * (1-p1) + p1**3 # probability of 2 or 3 errors\n", + "print('Probability of a single reply being garbled: {}'.format(p1))\n", + "print('Probability of a the majority of three replies being garbled: {:.4f}'.format(p3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$P" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit import QuantumRegister, ClassicalRegister\n", + "\n", + "cq = QuantumRegister(2,'code_qubit')\n", + "lq = QuantumRegister(1,'ancilla_qubit')\n", + "sb = ClassicalRegister(1,'syndrome_bit')\n", + "qc = QuantumCircuit(cq,lq,sb)\n", + "qc.cx(cq[0],lq[0])\n", + "qc.cx(cq[1],lq[0])\n", + "qc.measure(lq,sb)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここには3つの物理量子ビットがあります。そのうち2つは「符号(code)量子ビット」と呼ばれ、もう1つは「補助(ancilla)量子ビット」と呼ばれます。出力の1ビットが抽出され、それはシンドローム(syndrome)ビットと呼ばれます。補助量子ビットは常に状態 $\\left|0\\right\\rangle$ で初期化されます。ただし、符号量子ビットはさまざまな状態で初期化できます。入力が変わったときに出力に与える影響を確認するため、特定の状態の符号量子ビットを準備する回路`qc_init`を作成してから、回路`qc_init+qc`を実行します。\n", + "\n", + "まず、自明なケースとして`qc_init`は何もせず、符号量子ビットは最初から $\\left|00\\right\\rangle$ であるケースがあります。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_init = QuantumCircuit(cq)\n", + "\n", + "(qc_init+qc).draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results: {'0': 1024}\n" + ] + } + ], + "source": [ + "counts = execute( qc_init+qc, Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "print('Results:',counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果は、どの場合でも`'0'`です。\n", + "\n", + "それでは、初期状態が $\\left|11\\right\\rangle$ であるケースを試してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_init = QuantumCircuit(cq)\n", + "qc_init.x(cq)\n", + "\n", + "(qc_init+qc).draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results: {'0': 1024}\n" + ] + } + ], + "source": [ + "counts = execute(qc_init+qc, Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "print('Results:',counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このときも結果は常に`'0'`です。\n", + "量子力学の線形性を考えると、以下の例のように、$\\left|00\\right\\rangle$ と $\\left|11\\right\\rangle$ の任意の重ね合わせにも同様のことが期待できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_init = QuantumCircuit(cq)\n", + "qc_init.h(cq[0])\n", + "qc_init.cx(cq[0],cq[1])\n", + "\n", + "(qc_init+qc).draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results: {'0': 1024}\n" + ] + } + ], + "source": [ + "counts = execute(qc_init+qc, Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "print('Results:',counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "逆の結果は、$\\left|01\\right\\rangle$ や $\\left|10\\right\\rangle$、またはそれらの重ね合わせを初期状態として使うことで見つかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_init = QuantumCircuit(cq)\n", + "qc_init.h(cq[0])\n", + "qc_init.cx(cq[0],cq[1])\n", + "qc_init.x(cq[0])\n", + "\n", + "(qc_init+qc).draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results: {'1': 1024}\n" + ] + } + ], + "source": [ + "counts = execute(qc_init+qc, Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "print('Results:',counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この場合は、出力は常に`'1'`です。\n", + "\n", + "したがって、この測定は、複数の量子ビットの大局的性質について教えてくれます。具体的には、2つの符号量子ビットを調べ、それらの状態がz基底で同じか異なるかを判断します。$\\left|00\\right\\rangle$ と $\\left|11\\right\\rangle$ のように、z基底が同じ基底状態の場合 、測定値は単に`'0'`を返します。また、これらの重ね合わせに対しても同様です。これらの状態は決して区別されないため、このような重ね合わせは崩壊しません。\n", + "\n", + "同様に、z基底が異なる基底状態の場合、`1`を返します。これは、$\\left|01\\right\\rangle$ や $\\left|10\\right\\rangle$、またはそれらの重ね合わせで発生します。\n", + "\n", + "ここで、反復符号内の物理量子ビットのすべての組にこのような「シンドローム測定」を適用するとします。もしそれらの状態が $\\left|0\\right\\rangle$ の反復や $\\left|1\\right\\rangle$ の反復、またはそれらの重ね合わせによって記述される場合、すべてのシンドローム測定値は`0`を返します。この結果から、我々の作成した状態は実際に望んだ状態を反復したものに符号化されているとわかり、エラーが発生していないと推測できます。一方で、一部のシンドローム測定値が`1`を返す場合、それはエラーの証拠です。したがって、これらの測定結果を使用して、出力結果の復号方法を決定できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 量子反復符号\n", + "\n", + "これで、反復符号の量子版がどのように実装されているかを正確に理解するのに十分な知識を得ました。\n", + "\n", + "Ignisから必要なツールをインポートすることで、Qiskitで使用できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit.ignis.verification.topological_codes import RepetitionCode\n", + "from qiskit.ignis.verification.topological_codes import lookuptable_decoding\n", + "from qiskit.ignis.verification.topological_codes import GraphDecoder" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "論理量子ビットを符号化する物理量子ビットの数は自由に選択できます。\n", + "最終的な読み出し測定の前に、論理量子ビットを保存する間に適用するシンドローム測定の巡(round)数を選択することもできます。最小サイズの非自明なケースから始めましょう。3回の反復と1巡のシンドローム測定です。反復符号の回路は、Qiskit-Ignisの`RepetitionCode`オブジェクトを使用して自動的に作成できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "n = 3\n", + "T = 1\n", + "\n", + "code = RepetitionCode(n,T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これにより、符号量子ビットや補助量子ビットのレジスター名など、符号化のさまざまなプロパティを確認できます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`RepetitionCode`には、符号化を実装するための2つの量子回路が含まれます。\n", + "2種類の構築可能な論理ビット値に対応します。\n", + "以下に、それぞれ論理`0`と`1`を示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "code.circuit['0'].draw()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "code.circuit['1'].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらの回路には、2種類の物理量子ビットがあります。 まず、「符号量子ビット」があり、これは論理状態が符号化されるための3つの物理量子ビットです。他に「リンク(link)量子ビット」があり、シンドローム測定の補助量子ビットとして機能します。\n", + "\n", + "これらの回路でのシンドローム測定の1巡は、シンドローム測定2回のみで構成されています。 1つは符号量子ビット0と1を比較し、もう1つは符号量子ビット1と2を比較します。フルセットを作成するには、符号量子ビット0と2を比較するさらなる測定が必要と思うかもしれません。ただし、これら2つで十分です。これは、0と2が同じz基底状態を持っているかどうかに関する情報は、0と1を比較した情報と1と2を比較した情報から推測できるためです。実際、$n$ 量子ビットの場合、必要な情報を得るには量子ビットの隣接ペアに対する $n-1$ 回のシンドローム測定のみ必要になります。\n", + "\n", + "これらの回路をノイズなしでシミュレータで実行すると、非常に単純な結果が得られます。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical 0 : {'000 00': 1024} \n", + "\n", + "Logical 1 : {'111 00': 1024} \n", + "\n" + ] + } + ], + "source": [ + "def get_raw_results(code,noise_model=None):\n", + "\n", + " circuits = code.get_circuit_list()\n", + " raw_results = {}\n", + " for log in range(2):\n", + " job = execute( circuits[log], Aer.get_backend('qasm_simulator'), noise_model=noise_model)\n", + " raw_results[str(log)] = job.result().get_counts(str(log))\n", + " return raw_results\n", + "\n", + "raw_results = get_raw_results(code)\n", + "for log in raw_results:\n", + " print('Logical',log,':',raw_results[log],'\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでは、出力が2つの部分に分かれていることがわかります。右側の部分は、2つのシンドローム測定の結果を保持しています。左側の部分は、量子量子ビットの3つの最終測定の結果を保持しています。\n", + "\n", + "より多くの測定の巡数、たとえば $T=4$ の場合、右側にさらに多くのシンドローム測定の結果が連なります。" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical 0 : {'000 00 00 00 00': 1024} \n", + "\n", + "Logical 1 : {'111 00 00 00 00': 1024} \n", + "\n" + ] + } + ], + "source": [ + "code = RepetitionCode(n,4)\n", + "\n", + "raw_results = get_raw_results(code)\n", + "for log in raw_results:\n", + " print('Logical',log,':',raw_results[log],'\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "より多くの反復、たとえば $n=5$ の場合、各測定セットは大きくなります。左側の最終的な測定値は、$n$ 量子ビットです。 $T$巡のシンドロームの測定値は、それぞれ $n-1$ の可能な隣接ペアです。" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical 0 : {'00000 0000 0000 0000 0000': 1024} \n", + "\n", + "Logical 1 : {'11111 0000 0000 0000 0000': 1024} \n", + "\n" + ] + } + ], + "source": [ + "code = RepetitionCode(5,4)\n", + "\n", + "raw_results = get_raw_results(code)\n", + "for log in raw_results:\n", + " print('Logical',log,':',raw_results[log],'\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ルックアップ・テーブル復号\n", + "\n", + "次に、$n=3$、$T=1$ の例に戻って、ノイズのある場合を見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logical 0 : {'000 00': 648, '000 01': 71, '100 00': 51, '100 01': 5, '100 10': 7, '101 00': 3, '101 01': 1, '110 00': 5, '110 01': 5, '000 10': 56, '000 11': 8, '001 00': 73, '001 01': 5, '001 10': 4, '010 00': 47, '010 01': 26, '010 11': 1, '011 00': 5, '011 01': 2, '011 10': 1} \n", + "\n", + "Logical 1 : {'000 00': 1, '100 00': 2, '100 01': 5, '100 10': 1, '101 00': 45, '101 01': 17, '101 10': 2, '101 11': 18, '110 00': 55, '110 01': 26, '110 10': 8, '110 11': 2, '111 00': 613, '111 01': 58, '111 10': 64, '111 11': 7, '000 10': 1, '001 00': 1, '001 01': 2, '001 10': 3, '001 11': 3, '010 00': 4, '010 01': 3, '010 10': 1, '011 00': 53, '011 01': 9, '011 10': 20} \n", + "\n" + ] + } + ], + "source": [ + "code = RepetitionCode(3,1)\n", + "\n", + "noise_model = get_noise(0.05,0.05)\n", + "\n", + "raw_results = get_raw_results(code,noise_model)\n", + "for log in raw_results:\n", + " print('Logical',log,':',raw_results[log],'\\n')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、論理`0`を符号化する回路と論理`1`を符号化する回路の両方の結果を保持する辞書である`raw_results`を作成しました。\n", + "\n", + "ここで見られる結果に対して我々のタスクは、ノイズがなければ結果がどうあるべきかを判断することです。結果が`'000 00'`または`'111 00'`の場合、答えは明らかです。これらは、エラーが発生していない場合に、それぞれ論理`0`および論理`1`で見た結果ですそのものです。ノイズがある場合でも、前者は論理`0`の、後者は論理`1`の最も一般的な結果です。したがって、`'000 00'`のときは常に論理`0`の結果であり、同じく`'111 00'`のときは論理`1`の結果であると結論付けます。\n", + "\n", + "この作戦が最善ですが、それでも失敗する可能性があります。 通常、`'111 00'`は`0`の符号化でも稀に発生し、`'000 00'`は`1`の符号化でも稀に発生することに注意してください。この場合、判断に過失は無いですが、出力結果を誤って復号してしまいます。これらのケースでは、多数のエラーが相まって、反対の論理値のノイズのないケースであったように見えるため、修正が不可能になります。\n", + "\n", + "同様の手法を使って、他のすべての結果を復号できます。たとえば、結果` '001 00'`は、論理`1`よりも論理`0`の方がはるかに多く発生します。これは、前者の場合は単一の測定エラー(単一の`0`が誤って`1`であると誤って伝わる)によって引き起こされる可能性がありますが、後者では少なくとも2つのエラーが必要になるためです。したがって、` '001 00'`が表示されるたびに、論理`0`として復号できます。\n", + "\n", + "この作戦をすべての文字列に適用することは、いわゆる「ルックアップ・テーブル復号」の一種です。これは、考えられるすべての結果が分析され、最も可能性の高い値に決定されます。多くの量子ビットでは、取り得る結果の数が非常に多くなるため、すぐに手に負えなくなります。これらの場合、よりよいアルゴリズムを利用した復号器が必要です。ただし、ルックアップ・テーブル復号は、小規模の符号化を試すには適しています。\n", + "\n", + "Qiskitのツールを使用して、任意の符号のルックアップ・テーブル復号を実装できます。このためには、2つの結果セットが必要です。 1つは、実際に復号したい結果セットであり、その結果に対して、誤った復号の確率 $P$ を計算します。このためにすでに持っている `raw_results`を使用します。\n", + "\n", + "もう一方の結果セットは、ルックアップ・テーブルとして使用されるものです。取り得る結果ごとに適切な統計を取得するために、これは多数のサンプルに対して実行する必要があります。`shots = 10000`を使用します。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "circuits = code.get_circuit_list()\n", + "table_results = {}\n", + "for log in range(2):\n", + " job = execute( circuits[log], Aer.get_backend('qasm_simulator'), noise_model=noise_model, shots=10000 )\n", + " table_results[str(log)] = job.result().get_counts(str(log))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`table_results`と呼ばれるこのデータを使用して、Qiskitの`lookuptable_decoding`関数を使用できるようになりました。これは、 `raw_results`から各結果を取得し、` table_results`の情報で復号します。次に、復号が正しいかどうかを確認し、この情報を使い $P$ を計算します。" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "P = {'0': 0.0247, '1': 0.0217}\n" + ] + } + ], + "source": [ + "P = lookuptable_decoding(raw_results,table_results)\n", + "print('P =',P)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、 $P$ の値は $p_{meas}$ および $p_{gate}$ の値よりも低いため、ビット値を格納するための信頼性が向上しています。また、符号化された `1` の $P$ の値は`0` の値よりも高いことに注意してください。これは、`1` の符号化には `x` ゲートの適用が必要であり、これが追加のノイズ源であるためです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### グラフ理論での復号\n", + "\n", + "上記で検討した復号は、可能な限り最良の結果を生成し、符号の詳細を使う必要なく実現できます。ただし、これらの利点を上回る大きな欠点があります。符号のサイズが大きくなると、ルックアップ・テーブルが指数関数的に大きくなります。このため、復号は通常、符号の構造とその結果のシンドロームを考慮した、よりアルゴリズム的な方法で行われます。\n", + "\n", + "`topological_codes`の符号の場合、シンドロームの後処理を行うことで符号の構造が明らかになります。前述の形式を使用する代わりに、左側に符号量子ビットの最終測定値を、右側にシンドローム測定の各巡数の出力を配置し、別の形式に結果を書き換えるために符号オブジェクトの`process_results`メソッドを使用します。\n", + "\n", + "例えば、以下は辞書 `raw_results`に後処理を行った形式です。この場合は $n=3$ と $T=2$ です。分かりやすく、サンプルが50個以上の結果のみを示しています。" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Logical 0:\n", + "raw results {'000 00 00': 495, '000 10 00': 53}\n", + "processed results {'0 0 00 00 00': 495, '0 0 00 10 10': 53}\n", + "\n", + "Logical 1:\n", + "raw results {'111 00 00': 429, '111 00 10': 52, '111 01 00': 61, '111 10 00': 51}\n", + "processed results {'1 1 00 00 00': 429, '1 1 10 10 00': 52, '1 1 00 01 01': 61, '1 1 00 10 10': 51}\n" + ] + } + ], + "source": [ + "code = RepetitionCode(3,2)\n", + "\n", + "raw_results = get_raw_results(code,noise_model)\n", + "\n", + "results = code.process_results( raw_results )\n", + "\n", + "for log in ['0','1']:\n", + " print('\\nLogical ' + log + ':')\n", + " print('raw results ', {string:raw_results[log][string] for string in raw_results[log] if raw_results[log][string]>=50 })\n", + " print('processed results ', {string:results[log][string] for string in results[log] if results[log][string]>=50 })" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでは、`'000 00 00'`が`'0 0 00 00 00'`に変換され、`'111 00 00'`が`'1 1 00 00 00'`に変換されていることが分かります。\n", + "\n", + "これらの新しい文字列では、左端の`0 0`が論理`0`の論理読み出し値であり、左端の`1 1`が論理`1`の論理読み出し値です。符号量子ビットは(エラーがないとき)すべて等しいはずで、この読み出しには任意の符号量子ビットを使用できます。したがって、原理的にこの位置に単一の`0`または`1`を配置することが可能です。また、元の形式で結果を扱うこともでき、その場合は各量子ビットにつき1つで $n$ 桁の論理値を使用できます。代わりに、最初と最後の符号量子ビットから作られる、2桁の論理値を使用します。この理由は後で示されます。エラーがない場合、この2桁の論理値は同じ符号化されたビット値を表すため、常に等しくなります。\n", + "\n", + "論理値の後に、1巡目のシンドローム測定の $n-1$ 桁の結果が続きます。raw resultsでは論理値の後にT巡目の結果からT-1巡目の結果が続いていることに注意ししてください。`0`は対応する量子ビットの組が同じ値を持つことを意味し、`1`はそれらが互いに異なることを意味します。 $d$ 番目の符号量子ビットには $n-1$ 個の隣接可能な組があるため、$n-1$ 桁の結果があります。エラーがない場合、それらはすべて`0`になります。これは、元の形式におけるシンドロームの結果の最初のセットと全く同じです。\n", + "\n", + "次のブロックは、シンドロームの結果の次ラウンドです。ただし、これらの測定結果を直接表示するのではなく、1巡目と2巡目の間のシンドロームの変化を表示します。したがって、1巡目と2巡目のシンドローム測定結果のビット単位の`OR`です。エラーがない場合、それらはすべて`0`になります。\n", + "\n", + "後続のブロックはすべて同じ式に従いますが、最後のブロックにはコメントが必要です。これは、標準の方法(リンク量子ビット)を使って測定されません。代わりに、すべての符号量子ビットの最終読み取り測定値から計算されます。この場合も、シンドロームの変化として表示され、エラーがない場合はすべて`0`になります。他のシンドロームと同じ方法では実行されず、$T$ 巡回のシンドローム測定はカウントされないため、これはシンドローム測定の $T+1$ 番目のブロックです。\n", + "\n", + "次の例は、この規則をさらに細かく説明しています。\n", + "\n", + "**例1:** `0 0 0110 0000 0000`は、符号化された`0`の $n=5$、$T=2$ の反復符号を表します。このシンドロームは、1巡目の測定の前にエラーによって(おそらく)中間の符号量子ビットが反転されたことを示しています。これにより、回路の残りの部分で隣接する符号量子ビットの両方と一致しなくなります。1巡目のシンドロームで示されていますが、後巡のブロックは、もはや変化を表していないため、エラーは報告されません。他のエラーのセットもこのシンドロームを引き起こしている可能性がありますが、より複雑で、可能性がより低いはずです。\n", + "\n", + "**例2:** `0 0 0010 0010 0000`は、符号化された`0`の $n=5$、$T=2$ の反復符号を表します。ここで、シンドローム測定値のうちいずれかは、2巡目で2つの符号量子ビットの差を記述し、`1`になりました。次のラウンドでは同じ効果が見られなかったため、結果は`0`になりました。ただし、これは同じシンドローム測定の以前の結果と一致せず、シンドロームの変化を追跡するため、この変化は別の`1`になります。後巡の測定でも何も検出されませんが、これはもはや変化を表さないため、同じ位置に`0`が発生します。ほとんどの場合、最初の`1`につながる測定結果はエラーでした。\n", + "\n", + "**例3:** `0 1 0000 0001 0000`は、符号化された`0`の $n=5$、$T=2$ の反復符号を表します。シンドローム測定の2巡目の前に、一番下の符号量子ビットが反転します。これは、最後のビット列にあるため、単一のシンドローム測定によってのみ検出されます。同じ理由で、論理読み出しの1つも阻害します。\n", + "\n", + "これらのすべての例で、1つのエラーにより、文字列内のちょうど2文字がエラーなしの値から変更されることに注意してください。これは、 `topological_codes`でスタビライザーを表すために使用される規則を決定付ける特徴です。復号の問題が定義されるグラフを定義するために使用されます。\n", + "\n", + "具体的には、最初に論理`0`を符号化する回路を使用してグラフが構築されます。出力文字列のすべてのビット値は`0`になるはずです。これの多くのコピーを作成し、シミュレーターで作成して実行し、それぞれに異なる単一のパウリ演算子を挿入します。これは、各量子ビットおよびすべての回路の深さで3種類のパウリ演算子のそれぞれに対して行われます。これらの各回路からの出力を使用して、考えられる各単一エラーの影響を判断できます。回路にはClifford演算のみが含まれているため、シミュレーションを効率的に実行できます。\n", + "\n", + "いずれの場合も、エラーは(効果がない限り)正確に2文字を変更します。次に、出力文字列の各ビットがノードに対応するグラフが作成され、同じエラーの影響を受けるビットの組がエッジに対応します。\n", + "\n", + "特定の出力文字列を復号するプロセスでは通常、出力文字列にシンドロームのエラーが見つかった場合に、発生したエラーセットを推測するアルゴリズムが必要です。これは、出力の非自明なシンドロームビットに対応するノードのみを含む第二グラフを作成することで実行できます。次に、ノードの各ペアの間にエッジが配置され、対応する重みが元のグラフのそれらのノード間の最小パスの長さに等しくなります。シンドロームと一致する一連のエラーは、このグラフの完全マッチングを見つけることに対応します。発生した可能性が最も高い一連のエラーを推測するには、観測されたシンドロームと一致するエラーの数が可能な限り少ないものを見つけるのがよいでしょう。これは、グラフの最小重み完全マッチングに対応します。\n", + "\n", + "最小重み完全マッチングの使用は、反復符号と表面符号の標準的な復号手法であり、Qiskit Ignisで実装されています。また、色符号などの他の場合にも使用できますが、その場合はすべての符号およびノイズモデルの最も可能性の高いエラーセットの最適な近似値を見つけることができません。そのため、同じグラフに基づく他の復号手法を使用できます。Qiskit Ignisの`GraphDecoder`は、特定の符号についてこれらのグラフを計算し、それを分析するためのさまざまな方法を提供します。執筆時点では、最小重み完全マッチングのみが実装されています。\n", + "\n", + "表面コードなどのコードの場合、各単一エラーが出力文字列の2ビットのみの値を変更することは厳密には当てはまりません。たとえば、$\\sigma^y$ エラーは、通常は独立して復号される2つの異なるタイプのスタビライザーに対応する値のペアを反転させます。したがって、これらの符号の出力はこれを容認する方法で表示されます。そのようなシンドロームの分析は、異なるシンドロームタイプを表すため、複数の独立したグラフを対応づけて作成します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 反復符号ベンチマーキングの実行手順\n", + "\n", + "次に、実際のデバイスで反復符号の例を実行し、その結果をベンチマークとして使用します。最初に、手順を簡潔に要約します。この手順は、反復符号の例に適用されましたが、`topological_codes`の他のベンチマーク手順にも適用されます。実際、Qiskit Ignis全般にも適用されます。いずれの場合も、次の3段階のプロセスが適用されます。\n", + "\n", + "1. タスクが定義されます。 Qiskit Ignisは、実行する必要のある一連の回路を決定し、作成します。\n", + "2. 回路が実行されます。これは通常、Qiskitを使用して行われます。ただし、原則として、任意のサービスまたは実験機器をインターフェイスに使えます。\n", + "3. Qiskit Ignisを使用して、回路からの結果を処理し、特定のタスクに必要な出力を作成します。\n", + "\n", + "`topological_codes`の場合、ステップ1では量子エラー訂正符号のタイプとサイズを選択する必要があります。各符号タイプには専用のPythonクラスがあります。対応するオブジェクトは、`RepetitionCode`オブジェクトの`n`や`T`など、必要なパラメーターを与えることで初期化されます。結果のオブジェクトには、単純な論理量子ビット状態( $\\left|0\\right\\rangle$ や $\\left|1\\right\\rangle$ など)の符号化に対応する回路が含まれます。そして、単純な論理基底(通常は標準の $\\left|0\\right\\rangle$/$\\left|1\\right\\rangle$ 測定)での最終的な読み取りの前に、指定された巡数のエラー検出処理が実行されます。\n", + "\n", + "`topological_codes`の場合、ステップ3の主な処理は復号であり、エラー検出から取得した情報を使用して、最終的な読み取りのエラーを軽減することを目的としています。通常、復号に最適なアルゴリズムは符号によって異なります。ただし、多くの場合、同様の構造を持つ符号は同様の方法を使用します。\n", + "\n", + "`topological_codes`の目的は、すべての符号ですべての復号器を使用できるように実装された多様な復号方法を提供することです。これは、復号をグラフ理論の最小化問題として記述することができる符号に制限することによって実現します。このような符号のこの典型的な例は、トーラス符号と表面符号です。その性質は、2次元色符号とマッチング符号でも共有されます。これらはすべて、いわゆるトポロジカル量子エラー訂正符号の顕著な例であり、サブパッケージの名前につながりました。ただし、すべてのトポロジカル符号がこのような復号器と互換性があるわけではないことに注意してください。また、反復符号など、一部の非トポロジカル符号には互換性があります。\n", + "\n", + "復号は `GraphDecoder`クラスによって行われます。対応するオブジェクトは、復号が実行される符号オブジェクトを与えることで初期化されます。次に、これを使用して、復号の問題が定義されるグラフを決定します。その後、復号器オブジェクトのさまざまなメソッドを使用して結果を処理できます。\n", + "\n", + "以下では、反復符号に対して上記のアイデアを実践します。これを行うには、2つのブール変数、`step_2`と`step_3`を使用します。変数`step_2`はデバイスからデータを取得する際にどのプログラムを実行するかの決定に使われ、`step_3`は処理する結果データとして何を使うかの決定に使われます。\n", + "\n", + "両方ともデフォルトでfalseに設定されており、事前に収集および処理されたデータのみを使用して以下のすべてのプログラムのスニペットを実行できるようにします。ただし、新しいデータを取得するには、`step_2 = True`を使用するだけでよく、何かのデータに対して復号を実行するのは`step_3 = True`を使用するだけです。" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "step_2 = False\n", + "step_3 = False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "実際のデバイスのベンチマークを行うには、クラウド経由でそのデバイスにアクセスし、そのデバイスで実行するのに適した回路をコンパイルするために必要なツールを用意しなければいけません。これらは次のようにインポートされます。" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "from qiskit import IBMQ\n", + "from qiskit.compiler import transpile\n", + "from qiskit.transpiler import PassManager" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、回路の実行に使用されるバックエンドオブジェクトを作成できます。これは、デバイスを指定するための文字列を与えることにより行われます。ここでは、`'ibmq_16_melbourne'`が使用されます。これには、執筆時点で15個のアクティブな量子ビットがあります。また、 `'ibmq_rochester'`で指定される53量子ビット*Rochester*デバイスについても検討します。" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "device_name = 'ibmq_16_melbourne'\n", + "\n", + "if step_2 or step_3:\n", + " \n", + " IBMQ.load_account()\n", + " \n", + " for provider in IBMQ.providers():\n", + " for potential_backend in provider.backends():\n", + " if potential_backend.name()==device_name:\n", + " backend = potential_backend\n", + "\n", + " coupling_map = backend.configuration().coupling_map" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "実際のデバイスで回路を実行する場合、最初にトランスピレーション(transpilation)処理が実装されます。これにより、デバイスでの実装が回路のゲートからネイティブゲートセットに変更されます。場合によっては、対応するオイラー角による単一の量子ビット回転として各アダマールを表現するなど、これらの変更はかなり自明です。ただし、回路がデバイスの接続性を考慮しない場合、変更がより重大になりえます。たとえば、デバイスによって直接実装されていない制御NOTを回路が必要とするとします。その場合、追加の制御NOTゲートを使用して量子ビット状態を移動させるなどの手法で、元の制御NOTの効果を再現する必要があります。これは追加のノイズを導入するだけでなく、すでに存在するノイズの非局在化も発生させます。元の回路の単一の量子ビットエラーは、追加のトランスピレーションの作用の下で複数量子ビットのエラーになり得ます。したがって、量子エラー訂正回路を実行する場合、この非自明なトランスピレーションを防止する必要があります。\n", + "\n", + "反復符号のテストでは、量子ビットを1本の導線(line)に沿って効果的に並べる必要があります。必要とされる制御NOTゲートだけは、その導線上の隣接ノードの間に配置します。したがって、最初のタスクは、デバイスの結合マップを調べ、導線を見つけることです。\n", + "\n", + "![Fig. 1. The coupling map of the IBM Q Melbourne device.](images/melbourne.png)\n", + "\n", + "Melbourneの場合、15量子ビットすべてをカバーする導線を見つけることができます。以下の配列 `line`で指定されている選択肢は、最もエラーが発生しやすい`cx`ゲートを避けるように設計されています。 53量子ビットの*Rochester*デバイスの場合、53量子ビットすべてをカバーする単一の導線はありません。代わりに、43量子ビットをカバーする次の選択肢を使用できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if device_name=='ibmq_16_melbourne':\n", + " line = [13,14,0,1,2,12,11,3,4,10,9,5,6,8,7]\n", + "elif device_name=='ibmq_rochester':\n", + " line = [10,11,17,23,22,21,20,19,16,7,8,9,5]#,0,1,2,3,4,6,13,14,15,18,27,26,25,29,36,37,38,41,50,49,48,47,46,45,44,43,42,39,30,31]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "アクセスできる量子ビットの数がわかったので、実行する符号ごとに反復符号オブジェクトを作成できます。`n`の反復を含む符号は、 $n$符号量子ビットと$n-1$リンク量子ビットを使用するため、合計で $2n-1$ であることに注意してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "n_min = 3\n", + "n_max = int((len(line)+1)/2)\n", + "\n", + "code = {}\n", + "\n", + "for n in range(n_min,n_max+1):\n", + " code[n] = RepetitionCode(n,1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これらの符号をもとに回路を実行する前に、トランスパイラ(transpiler)がデバイス上のどの物理量子ビットを使用する必要があるかを確認しなければなりません。`line[0]`の量子ビットを最初の符号量子ビットとして使用し、`line[1]`の量子ビットを最初のリンク量子ビットとして使用するなどと確認することを意味します。これは次の関数によって実行され、反復符号オブジェクトと`line`をインプットとし、符号のどの量子ビットが導線のどの要素に対応するかを指定するPython辞書をアウトプットとします。" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "def get_initial_layout(code,line):\n", + " initial_layout = {}\n", + " for j in range(n):\n", + " initial_layout[code.code_qubit[j]] = line[2*j]\n", + " for j in range(n-1):\n", + " initial_layout[code.link_qubit[j]] = line[2*j+1]\n", + " return initial_layout" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、回路をトランスパイルして、デバイスで実際に実行される回路を作成できます。量子ビットの数を増やすことによって、トランスピレーションが実際に非自明な効果を生じないことを確認するためのチェックも行われます。さらに、コンパイルされた回路は単一のリストに集められ、同じバッチジョブですべてを一度に送信できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_2:\n", + " \n", + " circuits = []\n", + " for n in range(n_min,n_max+1):\n", + " initial_layout = get_initial_layout(code[n],line)\n", + " for log in ['0','1']:\n", + " circuits.append( transpile(code[n].circuit[log], backend=backend, initial_layout=initial_layout) )\n", + " num_cx = dict(circuits[-1].count_ops())['cx']\n", + " assert num_cx==2*(n-1), str(num_cx) + ' instead of ' + str(2*(n-1)) + ' cx gates for n = ' + str(n)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これで、ジョブを実行する準備ができました。前述のシミュレートされたジョブと同様に、この結果は辞書`raw_results`に格納されます。ただし、この場合、異なる符号サイズからの結果を保持するため辞書が拡張されます。これは、以下の`raw_results[n]`が、ある`n`に対して前述の辞書`raw_results`の1つと等価であることを意味します。" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_2:\n", + " \n", + " job = execute(circuits,backend,shots=8192)\n", + "\n", + " raw_results = {}\n", + " j = 0\n", + " for d in range(n_min,n_max+1):\n", + " raw_results[d] = {}\n", + " for log in ['0','1']:\n", + " raw_results[d][log] = job.result().get_counts(j)\n", + " j += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "データをファイルに保存しておくと便利です。これにより、ステップ3の処理を後で実行したり、繰り返したりできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_2: # save results\n", + " with open('results/raw_results_'+device_name+'.txt', 'w') as file:\n", + " file.write(str(raw_results))\n", + "elif step_3: # read results\n", + " with open('results/raw_results_'+device_name+'.txt', 'r') as file:\n", + " raw_results = eval(file.read())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上で見たように、復号処理では、シンドロームを正しい形式で表現するために、最初に結果を書き換える必要があります。そのため、各反復符号オブジェクト`code[n]`の`process_results`メソッドを使用して、`raw_results[n]`から結果の辞書`results[n]`を決定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_3:\n", + " results = {}\n", + " for n in range(n_min,n_max+1):\n", + " results[n] = code[n].process_results( raw_results[n] )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "復号では、各符号に`GraphDecoder`オブジェクトを設定する必要もあります。最後のセクションで説明したように、シンドロームに対応するグラフの構築がこれらの初期化に含まれます。" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_3:\n", + " dec = {}\n", + " for n in range(n_min,n_max+1):\n", + " dec[n] = GraphDecoder(code[n])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最後に、復号器オブジェクトを使用して結果を処理できます。ここでは、デフォルトのアルゴリズムである最小重み完全マッチングが使用されます。最終結果は、論理エラー確率の計算結果です。手順3を実行すると、次のスニペットも論理エラーの確率を保存します。それ以外の場合は、以前に保存された確率を読み込みます。" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_3:\n", + " \n", + " logical_prob_match = {}\n", + " for n in range(n_min,n_max+1):\n", + " logical_prob_match[n] = dec[n].get_logical_prob(results[n])\n", + " \n", + " with open('results/logical_prob_match_'+device_name+'.txt', 'w') as file:\n", + " file.write(str(logical_prob_match))\n", + " \n", + "else:\n", + " with open('results/logical_prob_match_'+device_name+'.txt', 'r') as file:\n", + " logical_prob_match = eval(file.read())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果の論理エラー確率は、次のようなy軸がログスケールのグラフに表示されます。論理エラー確率は、 $n$ の増加に伴って指数関数的に減衰すると予想されます。この場合、デバイスがこの量子エラー訂正の基本的検証と矛盾がないと言えます。そうでない場合は、量子ビットとゲートが十分に信頼できないことを意味します。\n", + "\n", + "幸運にも、IBM Qのプロトタイプデバイスの結果は通常、予想された指数関数的な減衰を示します。以下の結果では、小サイズの符号がこのルールの例外を表していることがわかります。コードのサイズを大きくすると、非常に低いまたは高いノイズの量子ビットのグループが使用される場合など、その他の逸脱も予想されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "x_axis = range(n_min,n_max+1)\n", + "P = { log: [logical_prob_match[n][log] for n in x_axis] for log in ['0', '1'] }\n", + "\n", + "ax = plt.gca()\n", + "plt.xlabel('Code distance, n')\n", + "plt.ylabel('ln(Logical error probability)')\n", + "ax.scatter( x_axis, P['0'], label=\"logical 0\")\n", + "ax.scatter( x_axis, P['1'], label=\"logical 1\")\n", + "ax.set_yscale('log')\n", + "ax.set_ylim(ymax=1.5*max(P['0']+P['1']),ymin=0.75*min(P['0']+P['1']))\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "私たちが得られる別の示唆は、結果を使用して、特定のエラープロセスが発生する可能性を判断することです。\n", + "\n", + "これを行うには、シンドロームグラフの各エッジが、回路内の特定の地点で特定の量子ビットに発生している特定のエラー形式を表している事実を使います。これは、隣接ノードの両方に対応するシンドローム値を変更する一意の単一エラーです。その結果、シンドロームの確率を推定するために結果を使って、エラーイベントの確率を推定することができます。具体的には、一次のオーダーでは以下が成り立ちます。\n", + "\n", + "$$\n", + "\\frac{p}{1-p} \\approx \\frac{C_{11}}{C_{00}}\n", + "$$\n", + "\n", + "ここで、$ p$ は特定のエッジに対応するエラー確率で、$C_{11}$ は値`1`を取るノードを両端にもつシンドローム値に対応し、$C_{00}$は値`0`を取るノードを両端にもつシンドローム値に対応します。\n", + "\n", + "復号器オブジェクトには、これらの比率を決定し、各エッジに重み $-\\ln(p/(1-p))$を割り当てるメソッド `weight_syndrome_graph`があります。この方法を採用し、重みを調べることにより、これらの確率を簡単に取得できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [], + "source": [ + "if step_3:\n", + "\n", + " dec[n_max].weight_syndrome_graph(results=results[n_max])\n", + "\n", + " probs = []\n", + " for edge in dec[n_max].S.edges:\n", + " ratio = np.exp(-dec[n_max].S.get_edge_data(edge[0],edge[1])['distance'])\n", + " probs.append( ratio/(1+ratio) )\n", + " \n", + " with open('results/probs_'+device_name+'.txt', 'w') as file:\n", + " file.write(str(probs))\n", + " \n", + "else:\n", + " \n", + " with open('results/probs_'+device_name+'.txt', 'r') as file:\n", + " probs = eval(file.read())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "完全なリストを表示するのではなく、平均値、標準偏差、最小値、最大値、四分位数を介して要約を取得できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'count': 29.0,\n", + " 'mean': 0.18570187935383514,\n", + " 'std': 0.12966061187100625,\n", + " 'min': 0.014967523298503253,\n", + " '25%': 0.05383187483426147,\n", + " '50%': 0.1799797775530839,\n", + " '75%': 0.2753350576063955,\n", + " 'max': 0.4345054945054945}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pd.Series(probs).describe().to_dict()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "デバイスのベンチマークでは、完全に等しいエラー確率のセットは生成されません。ただし、読み出しエラーと制御NOTゲートのエラー確率の比較は有用です。具体的には、`backend`オブジェクトを使用して、ベンチマークからこれらの値を取得できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "tags": [ + "uses-hardware" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'count': 15.0,\n", + " 'mean': 0.08386929848831581,\n", + " 'std': 0.06860851140104485,\n", + " 'min': 0.02134613228239715,\n", + " '25%': 0.050219500857068944,\n", + " '50%': 0.05460651866864599,\n", + " '75%': 0.09450000000000003,\n", + " 'max': 0.28}" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if step_3:\n", + "\n", + " gate_probs = []\n", + " for j,qubit in enumerate(line):\n", + " \n", + " gate_probs.append( backend.properties().readout_error(qubit) )\n", + " \n", + " cx1,cx2 = 0,0\n", + " if j>0:\n", + " gate_probs.append(backend.properties().gate_error('cx',[qubit,line[j-1]]) )\n", + " if j" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice\n", + "plot_histogram([noisy_counts, mitigated_counts], legend=['noisy', 'mitigated'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここでは、サンプルのほぼ$20\\%$が誤った状態にある結果を取得し、それを正確な本来の結果の表現に変えました。ただし、この例には、単純なノイズモデルを持つ2量子ビットしかありません。より多くの量子ビット、およびより複雑なノイズモデル、または実デバイスからのデータの場合、エラー軽減はより多くの課題を抱えています。もしかしたら、あなたがQiskitが使用する方法よりも優れた方法を見つけられるかもしれません!" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.6" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/measuring-quantum-volume.ipynb b/translations/ja/ch-quantum-hardware/measuring-quantum-volume.ipynb new file mode 100644 index 0000000..5c5615f --- /dev/null +++ b/translations/ja/ch-quantum-hardware/measuring-quantum-volume.ipynb @@ -0,0 +1,682 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子ボリュームの測定" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 前書き\n", + "\n", + "**量子ボリューム (QV)** は、適度なサイズで近い将来に実現されるの量子コンピューター(near-term quantum computers)で具体的なプロトコルを使って測定できる単一の数値のメトリックです。QVメソッドでは、その量子コンピューターが正常に実装できる最大のランダムな量子回路の幅(width)と深さ(depth)を定量化します。量子コンピューティングシステムが、より高い量子ボリュームを持つためには、操作の忠実度が高いこと、量子ビットの連結数が多いこと、ゲートセットのキャリブレーションがより正確にされていること、回路書き換えのツールチェインを持つことが必要となってきます。\n", + "\n", + "\n", + "## 量子ボリュームのプロトコル\n", + "\n", + "QVプロトコル([1]を参照)は、次のステップで構成されます:\n", + "\n", + "(最初にデモに関連するqiskitのクラスをインポートする必要があります。)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from IPython.display import clear_output\n", + "\n", + "#Import Qiskit classes\n", + "import qiskit\n", + "from qiskit import assemble, transpile\n", + "from qiskit.providers.aer.noise import NoiseModel\n", + "from qiskit.providers.aer.noise.errors.standard_errors import depolarizing_error, thermal_relaxation_error\n", + "\n", + "#QVの機能をインポート\n", + "import qiskit.ignis.verification.quantum_volume as qv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 1: QVシークエンスを生成する\n", + "\n", + "量子アルゴリズムが、2量子ビットのユニタリーゲートで作られた多項式サイズの量子回路として表現できることはよく知られています。したがって、モデルとなる回路は、量子ビットの番号がランダムな並びとなる$d$個の層(layer)で構成され、その後にランダムな($SU(4)$による)2量子ビットゲートが続きます。回路の幅$m$が奇数の場合、各層で1つの量子ビットがアイドルになります。\n", + "\n", + "より正確には、**深さ$d$** 、 **幅$m$** の **QV回路** は、$d$個の層のシーケンス$U = U^{(d)}...U^{(2)}U^{(1)}$ です:\n", + "\n", + "\n", + "$$ U^{(t)} = U^{(t)}_{\\pi_t(m'-1),\\pi_t(m)} \\otimes ... \\otimes U^{(t)}_{\\pi_t(1),\\pi_t(2)} $$\n", + "\n", + "\n", + "それぞれ時間が$t = 1 ... d$でラベルづけされ、$m' = 2 \\lfloor n/2 \\rfloor$の量子ビットに作用します。各層は、一様にランダムな順列$\\pi_t \\in S_m$($m$は$m$量子ビットを表す)を選択し、$SU(4)$のHaar測定から、量子ビット$a$および$b$に作用する各$U^{(t)}_{a,b}$をサンプリングすることによって指定されます。\n", + "\n", + "次の例では、Q0、Q1、Q3、Q5、Q7、Q10の6つの量子ビットがあります。 フルセットまでのサブセットを調べます(各ボリューム回路の深さは、サブセットの量子ビットの数と同じです)。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# qubit_lists: QV回路を生成するための量子ビットサブセットのリストのリスト\n", + "qubit_lists = [[0,1,3],[0,1,3,5],[0,1,3,5,7],[0,1,3,5,7,10]]\n", + "# ntrials: サブセットごとに作成するランダム回路の数\n", + "ntrials = 100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ボリュームシーケンスを生成します。 (実行に時間がかかりすぎないように)小さな例から始めます。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "qv_circs, qv_circs_nomeas = qv.qv_circuits(qubit_lists, ntrials)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "例として、最初のQVシーケンスに対応する回路を表示します。 理想的な回路は最初のn量子ビットで実行されることに注意してください(nはサブセット内の量子ビットの数です)。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#nomeasの最初の試行をtranspiler に通して回路を表示します\n", + "qv_circs_nomeas[0] = qiskit.compiler.transpile(qv_circs_nomeas[0], basis_gates=['u1','u2','u3','cx'])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ┌───────────────────────┐ ┌─────────────────────────┐ »\n", + "qr_0: ───┤ U3(1.626,-2.616,3.53) ├─────■──┤ U3(0.74089,-pi/2,-pi/2) ├──■──»\n", + " ┌──┴───────────────────────┴──┐ │ └─────────────────────────┘ │ »\n", + "qr_1: ┤ U3(1.2194,-0.082533,4.5009) ├──┼───────────────────────────────┼──»\n", + " └─┬──────────────────────────┬┘┌─┴─┐ ┌─────────────────┐ ┌─┴─┐»\n", + "qr_2: ──┤ U3(1.9217,-2.201,2.0955) ├─┤ X ├────┤ U2(-pi,-3.1208) ├────┤ X ├»\n", + " └──────────────────────────┘ └───┘ └─────────────────┘ └───┘»\n", + "cr_0: ════════════════════════════════════════════════════════════════════»\n", + " »\n", + "cr_1: ════════════════════════════════════════════════════════════════════»\n", + " »\n", + "cr_2: ════════════════════════════════════════════════════════════════════»\n", + " »\n", + "« ┌──────────────────────┐ ┌────────────────────────────┐ »\n", + "«qr_0: ┤ U3(0.5738,-pi,-pi/2) ├──■──┤ U3(1.2658,-3.2174,-1.0694) ├─────»\n", + "« └──────────────────────┘ │ └────────────────────────────┘ »\n", + "«qr_1: ──────────────────────────┼──────────────────────────────────■──»\n", + "« ┌──────────────┐ ┌─┴─┐┌───────────────────────────┐ ┌─┴─┐»\n", + "«qr_2: ────┤ U2(0,-3pi/2) ├────┤ X ├┤ U3(1.9604,-2.8021,1.0745) ├─┤ X ├»\n", + "« └──────────────┘ └───┘└───────────────────────────┘ └───┘»\n", + "«cr_0: ════════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_1: ════════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_2: ════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« »\n", + "«qr_0: ────────────────────────────────────────────────────────────»\n", + "« ┌────────────────────────┐ ┌──────────────────────┐ »\n", + "«qr_1: ┤ U3(0.7952,-pi/2,-pi/2) ├──■──┤ U3(0.20257,0,-3pi/2) ├──■──»\n", + "« └──┬─────────────────┬───┘┌─┴─┐└───┬──────────────┬───┘┌─┴─┐»\n", + "«qr_2: ───┤ U2(-pi,-3.0148) ├────┤ X ├────┤ U2(0,-3pi/2) ├────┤ X ├»\n", + "« └─────────────────┘ └───┘ └──────────────┘ └───┘»\n", + "«cr_0: ════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_1: ════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_2: ════════════════════════════════════════════════════════════»\n", + "« »\n", + "« ┌─────────────────────────┐ »\n", + "«qr_0: ────────────────────────────────■──┤ U3(0.80486,-pi/2,-pi/2) ├──■──»\n", + "« ┌───────────────────────────┐ ┌─┴─┐└───┬─────────────────┬───┘┌─┴─┐»\n", + "«qr_1: ┤ U3(1.7937,-2.2026,8.6088) ├─┤ X ├────┤ U2(-pi,-3.0236) ├────┤ X ├»\n", + "« ├───────────────────────────┴┐└───┘ └─────────────────┘ └───┘»\n", + "«qr_2: ┤ U3(1.1913,0.95012,0.10112) ├─────────────────────────────────────»\n", + "« └────────────────────────────┘ »\n", + "«cr_0: ═══════════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_1: ═══════════════════════════════════════════════════════════════════»\n", + "« »\n", + "«cr_2: ═══════════════════════════════════════════════════════════════════»\n", + "« »\n", + "« ┌────────────────────────┐ ┌───────────────────────────┐ \n", + "«qr_0: ┤ U3(0.024692,-pi,-pi/2) ├──■──┤ U3(1.2056,1.9936,-3.2384) ├─\n", + "« └────┬──────────────┬────┘┌─┴─┐├───────────────────────────┴┐\n", + "«qr_1: ─────┤ U2(0,-3pi/2) ├─────┤ X ├┤ U3(1.5572,0.17138,-5.7818) ├\n", + "« └──────────────┘ └───┘└────────────────────────────┘\n", + "«qr_2: ─────────────────────────────────────────────────────────────\n", + "« \n", + "«cr_0: ═════════════════════════════════════════════════════════════\n", + "« \n", + "«cr_1: ═════════════════════════════════════════════════════════════\n", + "« \n", + "«cr_2: ═════════════════════════════════════════════════════════════\n", + "« \n" + ] + } + ], + "source": [ + "qv_circs_nomeas[0][0].draw(fold=-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Step 2: ステップ 2: 理想的なQV回路をシミュレーションする\n", + "\n", + "量子ボリュームメソッドでは、各回路の理想的な出力がわかっている必要があるため、Aerの状態ベクトルシミュレーターを使用して理想的な結果を取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulating trial 0\n", + "Simulating trial 1\n", + "Simulating trial 2\n", + "Simulating trial 3\n", + "Simulating trial 4\n", + "Simulating trial 5\n", + "Simulating trial 6\n", + "Simulating trial 7\n", + "Simulating trial 8\n", + "Simulating trial 9\n", + "Simulating trial 10\n", + "Simulating trial 11\n", + "Simulating trial 12\n", + "Simulating trial 13\n", + "Simulating trial 14\n", + "Simulating trial 15\n", + "Simulating trial 16\n", + "Simulating trial 17\n", + "Simulating trial 18\n", + "Simulating trial 19\n", + "Simulating trial 20\n", + "Simulating trial 21\n", + "Simulating trial 22\n", + "Simulating trial 23\n", + "Simulating trial 24\n", + "Simulating trial 25\n", + "Simulating trial 26\n", + "Simulating trial 27\n", + "Simulating trial 28\n", + "Simulating trial 29\n", + "Simulating trial 30\n", + "Simulating trial 31\n", + "Simulating trial 32\n", + "Simulating trial 33\n", + "Simulating trial 34\n", + "Simulating trial 35\n", + "Simulating trial 36\n", + "Simulating trial 37\n", + "Simulating trial 38\n", + "Simulating trial 39\n", + "Simulating trial 40\n", + "Simulating trial 41\n", + "Simulating trial 42\n", + "Simulating trial 43\n", + "Simulating trial 44\n", + "Simulating trial 45\n", + "Simulating trial 46\n", + "Simulating trial 47\n", + "Simulating trial 48\n", + "Simulating trial 49\n" + ] + } + ], + "source": [ + "#ユニタリー行列はグローバルフェーズではidentity(単位行列)です\n", + "sv_sim = qiskit.Aer.get_backend('aer_simulator')\n", + "ideal_results = []\n", + "for trial in range(ntrials):\n", + " clear_output(wait=True)\n", + " for qc in qv_circs_nomeas[trial]:\n", + " qc.save_statevector()\n", + " result = qiskit.execute(qv_circs_nomeas[trial], backend=sv_sim).result()\n", + " ideal_results.append(result)\n", + " print(f'Simulated trial {trial+1}/{ntrials}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、この理想的な結果を量子ボリューム・フィッターにロードします。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "qv_fitter = qv.QVFitter(qubit_lists=qubit_lists)\n", + "qv_fitter.add_statevectors(ideal_results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 3: ヘビー・アウトプットの計算をする\n", + "\n", + "モデル回路$U$が実際に正常に実装された時を定義するには、*ヘビー・アウトプット* (heavy output)を生成する問題を使います。理想的な出力分布は$p_U(x) = |\\langle x|U|0 \\rangle|^2$です。ここで、$x \\in \\{0,1\\}^m$は観測可能なビット文字列です。\n", + "\n", + "昇順$p_0 \\leq p_1 \\leq \\dots \\leq p_{2^m-1}$でソートされた$p_U(x)$の範囲によって与えられる出力確率のセットを考えます。確率のセットの中央値は$p_{med} = (p_{2^{m-1}} + p_{2^{m-1}-1})/2$で、*ヘビー・アウトプット* は以下です。\n", + "\n", + "$\\hspace{15pt} H_U = \\{ x \\in \\{0,1\\}^m$ここで$ p_U(x)>p_{med} \\}.$\n", + "\n", + "重い出力生成する問題は、3分の2以上がヘビー・アウトプットの文字列のセットを生成することです。\n", + "\n", + "例として、さまざまな深さからのヘビー・アウトプットとその確率を出力します(試行回数0の場合):" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qv_depth_3_trial_0: ['001', '010', '101', '110']\n", + "qv_depth_4_trial_0: ['0000', '0001', '0010', '0011', '0111', '1010', '1101', '1110']\n", + "qv_depth_5_trial_0: ['00000', '00011', '00101', '01000', '01001', '10000', '10001', '10010', '10011', '10100', '10101', '10110', '11001', '11011', '11100', '11101']\n", + "qv_depth_6_trial_0: ['000000', '000100', '001000', '001001', '001011', '001100', '001111', '010000', '010010', '010100', '010101', '010111', '011000', '011001', '011010', '011011', '100000', '100001', '100010', '100100', '100101', '101100', '101101', '101111', '110001', '110011', '110101', '110110', '110111', '111001', '111011', '111100']\n" + ] + } + ], + "source": [ + "for qubit_list in qubit_lists:\n", + " l = len(qubit_list)\n", + " print ('qv_depth_'+str(l)+'_trial_0:', qv_fitter._heavy_outputs['qv_depth_'+str(l)+'_trial_0'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qv_depth_3_trial_0: 0.8767167718108534\n", + "qv_depth_4_trial_0: 0.7579879384625499\n", + "qv_depth_5_trial_0: 0.7494374821348169\n", + "qv_depth_6_trial_0: 0.8363454481453244\n" + ] + } + ], + "source": [ + "for qubit_list in qubit_lists:\n", + " l = len(qubit_list)\n", + " print ('qv_depth_'+str(l)+'_trial_0:', qv_fitter._heavy_output_prob_ideal['qv_depth_'+str(l)+'_trial_0'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 4: ノイズモデルを定義する\n", + "\n", + "シミュレーターのノイズモデルを定義します。減衰をシミュレートするために、CNOTおよびUゲートに脱分極エラー(depolarizing error)の確率を追加します。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "noise_model = NoiseModel()\n", + "p1Q = 0.002\n", + "p2Q = 0.02\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(p1Q, 1), 'u2')\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(2*p1Q, 1), 'u3')\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(p2Q, 2), 'cx')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskit Aerシミュレーター(ノイズモデルあり)またはIBMQプロバイダーを使用してQVシーケンスを実行し、exp_resultsのリストを取得することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running trial 0\n", + "Running trial 1\n", + "Running trial 2\n", + "Running trial 3\n", + "Running trial 4\n", + "Running trial 5\n", + "Running trial 6\n", + "Running trial 7\n", + "Running trial 8\n", + "Running trial 9\n", + "Running trial 10\n", + "Running trial 11\n", + "Running trial 12\n", + "Running trial 13\n", + "Running trial 14\n", + "Running trial 15\n", + "Running trial 16\n", + "Running trial 17\n", + "Running trial 18\n", + "Running trial 19\n", + "Running trial 20\n", + "Running trial 21\n", + "Running trial 22\n", + "Running trial 23\n", + "Running trial 24\n", + "Running trial 25\n", + "Running trial 26\n", + "Running trial 27\n", + "Running trial 28\n", + "Running trial 29\n", + "Running trial 30\n", + "Running trial 31\n", + "Running trial 32\n", + "Running trial 33\n", + "Running trial 34\n", + "Running trial 35\n", + "Running trial 36\n", + "Running trial 37\n", + "Running trial 38\n", + "Running trial 39\n", + "Running trial 40\n", + "Running trial 41\n", + "Running trial 42\n", + "Running trial 43\n", + "Running trial 44\n", + "Running trial 45\n", + "Running trial 46\n", + "Running trial 47\n", + "Running trial 48\n", + "Running trial 49\n" + ] + } + ], + "source": [ + "aer_sim = qiskit.Aer.get_backend('aer_simulator')\n", + "basis_gates = ['u1','u2','u3','cx'] # use U,CX for now\n", + "shots = 1024\n", + "exp_results = []\n", + "for trial in range(ntrials):\n", + " clear_output(wait=True)\n", + " t_qcs = transpile(qv_circs[trial], basis_gates=basis_gates, optimization_level=3)\n", + " qobj = assemble(t_qcs)\n", + " result = aer_sim.run(qobj, noise_model=noise_model, max_parallel_experiments=0).result()\n", + " exp_results.append(result)\n", + " print(f'Completed trial {trial+1}/{ntrials}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 5: 平均ゲート忠実度を計算する\n", + "\n", + "$m$-量子ビットの理想的なユニタリー$U$と実行された$U'$の間の*平均ゲート忠実度 (fidelity)* は次のとおりです:\n", + "\n", + "$$ F_{avg}(U,U') = \\frac{|Tr(U^{\\dagger}U')|^2/2^m+1}{2^m+1}$$\n", + "\n", + "モデル回路$U$の実装$U'$の観測された分布は$q_U(x)$であり、重い出力をサンプリングする確率は次のとおりです:\n", + "\n", + "$$ h_U = \\sum_{x \\in H_U} q_U(x)$$\n", + "\n", + "例として、さまざまな深さからの重い出力カウントを表示します(試行回数0の場合):" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "qv_depth_3_trial_0: 825\n", + "qv_depth_4_trial_0: 684\n", + "qv_depth_5_trial_0: 674\n", + "qv_depth_6_trial_0: 631\n" + ] + } + ], + "source": [ + "qv_fitter.add_data(exp_results)\n", + "for qubit_list in qubit_lists:\n", + " l = len(qubit_list)\n", + " #print (qv_fitter._heavy_output_counts)\n", + " print ('qv_depth_'+str(l)+'_trial_0:', qv_fitter._heavy_output_counts['qv_depth_'+str(l)+'_trial_0'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 6: 達成可能な深さを計算する\n", + "\n", + "ランダムに選択された深さ$d$のモデル回路を実装することによって重い出力を観測する確率は、次のとおりです:\n", + "\n", + "$$h_d = \\int_U h_U dU$$\n", + "\n", + "*達成可能な深さ* $d(m)$は、$h_d > 2/3$であると確信できる最大の$d$です。 言い換えると、\n", + "\n", + "$$ h_1,h_2,\\dots,h_{d(m)}>2/3 \\text{ and } h_{d(m+1)} \\leq 2/3$$\n", + "\n", + "次に、さまざまな試行で重い出力を変換し、グラフをプロットするための平均$h_d$と誤差を計算します。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 6))\n", + "ax = plt.gca()\n", + "\n", + "# plot_rb_dataを呼び出して重要なポイントをプロットします\n", + "qv_fitter.plot_qv_data(ax=ax, show_plt=False)\n", + "\n", + "# タイトルとラベルを追加\n", + "ax.set_title('Quantum Volume for up to %d Qubits \\n and %d Trials'%(len(qubit_lists[-1]), ntrials), fontsize=18)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 7: 量子ボリュームを計算する\n", + "\n", + "量子ボリュームは、モデル回路の幅と深さを同等な重要度で扱い、量子コンピューターが平均して正常に実装できる最大の正方形(つまり、$m = d$)のモデル回路を測定します。\n", + "\n", + "*量子ボリューム* $V_Q$は次のように定義されます\n", + "\n", + "$$\\log_2 V_Q = \\arg\\max_{m} \\min (m, d(m))$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それぞれの深さの統計をリストします。深さごとに、その深さに成功したかどうか、およびその信頼できる区間(confidence interval)をリストします。その深さが成功するためには、信頼できる区間が97.5%を超える必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Width/depth 3 greater than 2/3 (0.788105) with confidence 0.982193 (successful). Quantum volume 8\n", + "Width/depth 4 greater than 2/3 (0.711211) with confidence 0.756474 (unsuccessful).\n", + "Width/depth 5 greater than 2/3 (0.714434) with confidence 0.772706 (unsuccessful).\n", + "Width/depth 6 less than 2/3 (unsuccessful).\n" + ] + } + ], + "source": [ + "qv_success_list = qv_fitter.qv_success()\n", + "qv_list = qv_fitter.ydata\n", + "QV = 1\n", + "for qidx, qubit_list in enumerate(qubit_lists):\n", + " if qv_list[0][qidx]>2/3:\n", + " if qv_success_list[qidx][0]:\n", + " print(\"Width/depth %d greater than 2/3 (%f) with confidence %f (successful). Quantum volume %d\"%\n", + " (len(qubit_list),qv_list[0][qidx],qv_success_list[qidx][1],qv_fitter.quantum_volume()[qidx]))\n", + " QV = qv_fitter.quantum_volume()[qidx]\n", + " else:\n", + " print(\"Width/depth %d greater than 2/3 (%f) with confidence %f (unsuccessful).\"%\n", + " (len(qubit_list),qv_list[0][qidx],qv_success_list[qidx][1]))\n", + " else:\n", + " print(\"Width/depth %d less than 2/3 (unsuccessful).\"%len(qubit_list))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The Quantum Volume is: 8\n" + ] + } + ], + "source": [ + "print (\"The Quantum Volume is:\", QV) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 参考文献\n", + "\n", + "[1] Andrew W. Cross, Lev S. Bishop, Sarah Sheldon, Paul D. Nation, and Jay M. Gambetta, *Validating quantum computers using randomized model circuits*, Phys. Rev. A **100**, 032328 (2019). https://arxiv.org/pdf/1811.12926" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/randomized-benchmarking.ipynb b/translations/ja/ch-quantum-hardware/randomized-benchmarking.ipynb new file mode 100644 index 0000000..df95d51 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/randomized-benchmarking.ipynb @@ -0,0 +1,625 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ランダマイズド・ベンチマーキング" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + " \n", + "1. [導入](#intro) \n", + "2. [ランダマイズド・ベンチマーキングのプロトコル](#protocol) \n", + "3. [RBの直観的理解](#intuition) \n", + "4. [同時ランダマイズド・ベンチマーキング](#simultaneousrb) \n", + "5. [ゲートフィデリティーの予測](#predicted-gate-fidelity) \n", + "6. [参考文献](#references) \n", + "\n", + "## 1. 導入 \n", + "\n", + "量子情報プロセッサーを構築する上での主な課題の1つは、プロセストモグラフィーを介して発生する量子系へのノイズの完全な特徴評価はスケールできないことです。さらに、プロセストモグラフィーは、回転前および回転後のゲートノイズと測定ノイズ(SPAMエラー)に敏感です。ゲートセットトモグラフィーはこれらのエラーを考慮できますが、プロセストモグラフィーよりも更にスケールできません。完全なノイズの特徴評価ができると、適切なエラー訂正スキームの決定や、信頼できる量子情報伝送の可能性に繋がるので有用です。\n", + "\n", + "\n", + "大規模な系では完全なプロセストモグラフィーは不可能であるため、量子系に影響を与えるノイズを部分的に特徴づけるスケーラブルな手法への関心が高まっています。ランダム化技術を利用した単一のパラメータでクリフォードゲートのフルセットをベンチマークするための、(システムを構成する量子ビットの数$n$で)スケーラブルで強固なアルゴリズムが[1]で発表されました。量子ゲートのベンチマークにランダム化手法を用いる概念は、一般に **ランダマイズド・ベンチマーキング(RB)**と呼ばれます。\n", + "\n", + "\n", + "## 2. ランダマイズド・ベンチマーキングのプロトコル \n", + "\n", + "まず、デモのために関連するqiskitクラスをインポートします。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "#Import general libraries (needed for functions)\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from IPython import display\n", + "\n", + "#Import the RB Functions\n", + "import qiskit.ignis.verification.randomized_benchmarking as rb\n", + "\n", + "#Import Qiskit classes \n", + "import qiskit\n", + "from qiskit import assemble, transpile\n", + "from qiskit.providers.aer.noise import NoiseModel\n", + "from qiskit.providers.aer.noise.errors.standard_errors import depolarizing_error, thermal_relaxation_error" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "RBプロトコル([1,2]参照)は、以下のステップで構成されています。\n", + "\n", + "### ステップ1:RB配列の生成\n", + "\n", + "RB配列は、$n$量子ビット上のクリフォード群から一様に選ばれたランダムなクリフォード要素で構成されています。\n", + "これには量子ビットを初期状態に戻す反転要素を含みます。\n", + "\n", + "より正確には、それぞれの長さ$m$に対して、$K_m$のRB配列を選びます。\n", + "このような配列は、それぞれ $n$量子ビット上のクリフォード群から一様に選ばれた$m$のランダム要素$C_{i_j}$を含み、$m+1$の要素は次のように定義されます。$C_{i_{m+1}} = (C_{i_1}\\cdot ... \\cdot C_{i_m})^{-1}$. これはGottesmann-Knillの定理で効率よく求めることができます。\n", + "\n", + "例えば、2量子ビットのクリフォード回路の配列を以下に複数示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "#Generate RB circuits (2Q RB)\n", + "\n", + "#number of qubits\n", + "nQ = 2 \n", + "rb_opts = {}\n", + "#Number of Cliffords in the sequence\n", + "rb_opts['length_vector'] = [1, 10, 20, 50, 75, 100, 125, 150, 175, 200]\n", + "#Number of seeds (random sequences)\n", + "rb_opts['nseeds'] = 5\n", + "#Default pattern\n", + "rb_opts['rb_pattern'] = [[0, 1]]\n", + "\n", + "rb_circs, xdata = rb.randomized_benchmarking_seq(**rb_opts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一例として、1つ目のRB配列に対応する回路を表示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rb_circs[0][0].draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "各RB回路を表すユニタリー行列が(グローバル位相を含めて)恒等変換であることを確認できます。\n", + "これをAerユニタリーシミュレータを用いて再現します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a new circuit without the measurement\n", + "qregs = rb_circs[0][-1].qregs\n", + "cregs = rb_circs[0][-1].cregs\n", + "qc = qiskit.QuantumCircuit(*qregs, *cregs)\n", + "for i in rb_circs[0][-1][0:-nQ]:\n", + " qc.data.append(i)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \n", + "\\text{Unitary} = \\begin{bmatrix}\n", + "0.707(-1 + i) & 0 & 0 & 0 \\\\\n", + "0 & 0.707(-1 + i) & 0 & 0 \\\\\n", + "0 & 0 & 0.707(-1 + i) & 0 \\\\\n", + "0 & 0 & 0 & 0.707(-1 + i) \\\\\n", + "\\end{bmatrix}\n", + "$$\n", + "$" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The Unitary is an identity (with a global phase)\n", + "sim = qiskit.Aer.get_backend('aer_simulator')\n", + "basis_gates = ['u1','u2','u3','cx'] # use U,CX for now\n", + "qc.save_unitary()\n", + "unitary = sim.run(qc).result().get_unitary()\n", + "from qiskit.visualization import array_to_latex\n", + "array_to_latex(unitary, prefix=\"\\\\text{Unitary} = \")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ2: RB配列を(ノイズを入れて)実行\n", + "\n", + "RB配列は、Qiskit Aer Simulator(ノイズモデル版)かIBMQプロバイダを用いて実行し、結果のリストを得ることができます。\n", + "\n", + "前提として、各演算$C_{i_j}$は、$\\Lambda_{i_j,j}$で表されるエラーを持つことができ、各配列は以下の演算によってモデル化することができます。\n", + "\n", + "$$\\textit{S}_{\\textbf{i}_\\textbf{m}} = \\bigcirc_{j=1}^{m+1} (\\Lambda_{i_j,j} \\circ C_{i_j})$$\n", + "\n", + "\n", + "ここで${\\textbf{i}_\\textbf{m}} = (i_1,...,i_m)$で、$i_{m+1}$は${\\textbf{i}_\\textbf{m}}$によって一意に決定されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# Run on a noisy simulator\n", + "noise_model = NoiseModel()\n", + "\n", + "# Depolarizing error on the gates u2, u3 and cx (assuming the u1 is virtual-Z gate and no error)\n", + "p1Q = 0.002\n", + "p2Q = 0.01\n", + "\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(p1Q, 1), 'u2')\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(2 * p1Q, 1), 'u3')\n", + "noise_model.add_all_qubit_quantum_error(depolarizing_error(p2Q, 2), 'cx')\n", + "\n", + "backend = qiskit.Aer.get_backend('aer_simulator')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ3: 生存確率の統計を取る\n", + "\n", + "各々の$K_m$配列で生存確率 $Tr[E_\\psi \\textit{S}_{\\textbf{i}_\\textbf{m}}(\\rho_\\psi)]$\n", + "を測定します。\n", + "ここで、$\\rho_\\psi$は状態生成時のエラーを考慮した初期状態であり、$E_\\psi$は\n", + "測定エラーを考慮したPOVM要素です。\n", + "理想的(ノイズフリー)な場合には$\\rho_\\psi = E_\\psi = | \\psi {\\rangle} {\\langle} \\psi |$となります。\n", + "\n", + "実際には、正確な初期状態(全量子ビットが基底状態$ {|} 00...0 {\\rangle}$にある状態)へ戻る確率、もしくはいずれか1つの量子ビットが基底状態に戻る確率を測定することができます。相関測定ができない場合は、独立して量子ビットを測定した方が便利です。両方の測定は、*twirl*の特性に応じて、同じ減衰パラメータでフィットされます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Step 4: 配列のフィデリティー平均を求める\n", + "\n", + "$K_m$の配列のランダムな再現度を平均して,配列の**フィデリティー**平均を求めます.\n", + "\n", + "\n", + "$$F_{seq}(m,|\\psi{\\rangle}) = Tr[E_\\psi \\textit{S}_{K_m}(\\rho_\\psi)]$$\n", + "\n", + "\n", + "ここで\n", + "\n", + "\n", + "$$\\textit{S}_{K_m} = \\frac{1}{K_m} \\sum_{\\textbf{i}_\\textbf{m}} \\textit{S}_{\\textbf{i}_\\textbf{m}}$$\n", + "\n", + "\n", + "は配列の平均をとる演算です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ステップ 5: 結果のフィッティング\n", + "\n", + "様々な$m$でステップ1から4を繰り返して、配列のフィデリティー平均の結果をモデルにフィットさせます。\n", + "\n", + "\n", + "$$ \\textit{F}_{seq}^{(0)} \\big(m,{|}\\psi {\\rangle} \\big) = A_0 \\alpha^m +B_0$$\n", + "\n", + "\n", + "ここで、 $A_0$ と $B_0$ は、初期状態生成時のエラーと測定エラー、および\n", + "最終ゲートのエラーのエッジ効果を取り込みます。\n", + "\n", + "$\\alpha$は、平均エラー率$r$を決定します。これは、**クリフォード単位エラー(EPC)** とも呼ばれ、次の関係が成り立ちます。\n", + "\n", + "$$ r = 1-\\alpha-\\frac{1-\\alpha}{2^n} = \\frac{2^n-1}{2^n}(1-\\alpha)$$\n", + "\n", + "\n", + "(ここで、$n=nQ$は量子ビット数)。\n", + "\n", + "一例として、RB配列のそれぞれについて配列のフィデリティー平均を計算し、その結果を指数関数曲線に当てはめ、パラメータ$\\alpha$とEPCを計算します。\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Compiling seed 0\n", + "Simulating seed 0\n", + "After seed 0, alpha: 0.981127, EPC: 0.014155\n", + "Compiling seed 1\n", + "Simulating seed 1\n", + "After seed 1, alpha: 0.977603, EPC: 0.016798\n", + "Compiling seed 2\n", + "Simulating seed 2\n", + "After seed 2, alpha: 0.980842, EPC: 0.014369\n", + "Compiling seed 3\n", + "Simulating seed 3\n", + "After seed 3, alpha: 0.980397, EPC: 0.014702\n", + "Compiling seed 4\n", + "Simulating seed 4\n", + "After seed 4, alpha: 0.980321, EPC: 0.014759\n" + ] + } + ], + "source": [ + "# Create the RB fitter\n", + "backend = qiskit.Aer.get_backend('aer_simulator')\n", + "basis_gates = ['u1','u2','u3','cx'] \n", + "shots = 200\n", + "transpiled_circs_list = []\n", + "rb_fit = rb.RBFitter(None, xdata, rb_opts['rb_pattern'])\n", + "for rb_seed, rb_circ_seed in enumerate(rb_circs):\n", + " print(f'Compiling seed {rb_seed}')\n", + " new_rb_circ_seed = qiskit.compiler.transpile(rb_circ_seed, basis_gates=basis_gates)\n", + " transpiled_circs_list.append(new_rb_circ_seed)\n", + " print(f'Simulating seed {rb_seed}')\n", + " qobj = assemble(new_rb_circ_seed, shots=shots)\n", + " job = backend.run(qobj,\n", + " noise_model=noise_model,\n", + " max_parallel_experiments=0)\n", + " # Add data to the fitter\n", + " rb_fit.add_data(job.result())\n", + " print('After seed %d, alpha: %f, EPC: %f'%(rb_seed,rb_fit.fit[0]['params'][1], rb_fit.fit[0]['epc']))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 追加ステップ: 結果のプロット" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8, 6))\n", + "ax = plt.subplot(1, 1, 1)\n", + "\n", + "# Plot the essence by calling plot_rb_data\n", + "rb_fit.plot_rb_data(0, ax=ax, add_label=True, show_plt=False)\n", + " \n", + "# Add title and label\n", + "ax.set_title('%d Qubit RB'%(nQ), fontsize=18)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. RBの直観的理解 \n", + "\n", + "脱分極した量子チャンネルはパラメータ$\\alpha$を持っており、次のように動作します。確率$\\alpha$で状態は以前と変わらず、確率$1-\\alpha$で状態は完全に混合状態になります。すなわち、\n", + "\n", + "\n", + "\n", + "$$\\rho_f = \\alpha \\rho_i + \\frac{1-\\alpha}{2^n} * \\mathbf{I}$$\n", + "\n", + "\n", + "クリフォードゲートとは限らず、$m$ゲートの配列があるとします。ここでゲートのエラーチャンネルはパラメータ$\\alpha$を持つ脱分極チャンネルです($\\alpha$ は全てのゲートで共通)。このとき、確率$\\alpha^m$で状態は最後の配列で正しく、確率$1-\\alpha^m$で完全な混合状態になります。そのため、\n", + "\n", + "\n", + "$$\\rho_f^m = \\alpha^m \\rho_i + \\frac{1-\\alpha^m}{2^n} * \\mathbf{I}$$\n", + "\n", + "\n", + "\n", + "今、我々は基底状態から始めることに加え以下を仮定します。\n", + "配列全体として恒等変換になるとします。\n", + "配列の最後の状態を標準基底で測定するとします。\n", + "このとき、配列の最後での成功確率は次のように求まります。\n", + "\n", + "\n", + "\n", + "$$\\alpha^m + \\frac{1-\\alpha^m}{2^n} = \\frac{2^n-1}{2^n}\\alpha^m + \\frac{1}{2^n} = A_0\\alpha^m + B_0$$\n", + "\n", + "\n", + "\n", + "成功確率、言い換えるとフィデリティーは、$\\alpha$を底として配列の長さに応じ指数関数的に減衰します。\n", + "\n", + "直前の主張は、チャンネルが脱分極チャネル以外の場合には必ずしも正しいと言えません。しかし、ゲートが一様にランダム化されたクリフォードゲートである場合、チャネルから計算することができるいくつかのパラメータを用いると、各ゲートのノイズは脱分極チャネルであるかのように平均的に振る舞い、フィデリティーの指数関数的な減衰を得られるということが分かります。\n", + "\n", + "形式的には、量子チャネル$\\bar \\Lambda$の有限群$G$ (クリフォード群など)の平均をとることは、*twirl*とも呼ばれます。\n", + "\n", + "\n", + "$$ W_G(\\bar \\Lambda) \\frac{1}{|G|} \\sum_{u \\in G} U^{\\dagger} \\circ \\bar \\Lambda \\circ U$$\n", + "\n", + "\n", + "ユニタリー群上をtwirlすると、クリフォード群と全く同じ結果が得られます。クリフォード群は、ユニタリー群の*2-design*です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 同時ランダマイズド・ベンチマーキング \n", + "\n", + "\n", + "RBは、2つの方法で多量子ビット系のフィデリティー計算に対応できるように設計されています。第一に、$n$量子ビット空間全体でのRBは、$n$量子ビットクリフォード群から配列を構築することで実行できます。第二に、$n$量子ビット空間\n", + "は$n_i$量子ビットの集合と細分化することができ、$n_i$量子ビットRBは各部分集合で同時に実行可能です[4]。\n", + "どちらの方法も、$n$量子ビット空間におけるフィデリティーの指標を与えます。\n", + "\n", + "例えば、他の量子ビットが使われていなくても、CNOTゲートを定義する2量子ビットの部分集合に対して2Q RBを実行するのが一般的です。[4]で説明したように、このRBデータは、他の量子部分空間をtwirlしていないため、必ずしも指数関数的に減衰するとは限りません。すべての量子ビットが活性であるので、一定レベルのクロストークエラーも測定する同時RBによって部分空間はより厳密に特徴づけられます。\n", + "\n", + "同時RBの例(1量子RBと2量子RB)は以下にあります。 \n", + "https://github.com/Qiskit/qiskit-tutorials/blob/master/tutorials/noise/4_randomized_benchmarking.ipynb" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. ゲートフィデリティーの予測 \n", + "\n", + "使用されているゲート(ゲートセット)のエラーがわかれば、RB実験を行わなくてもEPCを予測することができます。この計算は、RB実験に続いてフィッティングを行うと正しいEPC値が得られることを確認するものです。まず、クリフォードあたりのゲートの数を数える必要があります。\n", + "\n", + "\n", + "まず、2量子ビットのクリフォードゲートエラー関数 ``calculate_2q_epc`` が、2量子クリフォードあたりのエラーを与えます。この関数は、使用されているゲートのエラーが脱分極していることを前提としています。そしてこの関数は[5]の補足部分で導出されています。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of u1 gates per Clifford: 0.254694\n", + "Number of u2 gates per Clifford: 1.282751\n", + "Number of u3 gates per Clifford: 0.180022\n", + "Number of cx gates per Clifford: 1.498253\n" + ] + } + ], + "source": [ + "# count the number of single and 2Q gates in the 2Q Cliffords\n", + "qubits = rb_opts['rb_pattern'][0]\n", + "\n", + "gate_per_cliff = rb.rb_utils.gates_per_clifford(\n", + " transpiled_circuits_list=transpiled_circs_list,\n", + " clifford_lengths=xdata[0],\n", + " basis=basis_gates,\n", + " qubits=qubits)\n", + "\n", + "for basis_gate in basis_gates:\n", + " print(\"Number of %s gates per Clifford: %f\"%(\n", + " basis_gate,\n", + " np.mean([gate_per_cliff[qubit][basis_gate] for qubit in qubits])))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted 2Q Error per Clifford: 1.508622e-02 (qasm simulator result: 1.475925e-02)\n" + ] + } + ], + "source": [ + "# convert from depolarizing error to epg (1Q)\n", + "epg_q0 = {'u1': 0, 'u2': p1Q/2, 'u3': 2 * p1Q/2}\n", + "epg_q1 = {'u1': 0, 'u2': p1Q/2, 'u3': 2 * p1Q/2}\n", + "\n", + "# convert from depolarizing error to epg (2Q)\n", + "epg_q01 = 3/4 * p2Q\n", + "\n", + "# calculate the predicted epc from underlying gate errors \n", + "pred_epc = rb.rb_utils.calculate_2q_epc(\n", + " gate_per_cliff=gate_per_cliff,\n", + " epg_2q=epg_q01,\n", + " qubit_pair=qubits,\n", + " list_epgs_1q=[epg_q0, epg_q1])\n", + "\n", + "print(\"Predicted 2Q Error per Clifford: %e (qasm simulator result: %e)\" % (pred_epc, rb_fit.fit[0]['epc']))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "一方、実験で得られたEPCから、使われたゲート(ゲートセット)のエラーを計算することができる。RB配列に含まれる各単一量子ビットゲートのエラーがわかっていることから、2量子ビットRB実験のEPCから2量子ビットゲートエラーを予測することができます。\n", + "\n", + "\n", + "2量子ビットゲートエラー関数 ``calculate_2q_epg`` は、2量子ビットゲートあたりのエラーの推定値を与えます。ここでは、脱分極エラーモデルを用いて1量子ビットのエラーを用意します。エラーモデルが不明な場合、それらのゲートのEPG(例えば [``u1``, ``u2``, ``u3``])はユーティリティ関数 ``calculate_1q_epg``を用いて、別の1量子RB実験で推定することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted 2Q Error per gate: 7.261899e-03 (gate error model: 7.500000e-03)\n" + ] + } + ], + "source": [ + "# use 2Q EPC from qasm simulator result and 1Q EPGs from depolarizing error model\n", + "pred_epg = rb.rb_utils.calculate_2q_epg(\n", + " gate_per_cliff=gate_per_cliff,\n", + " epc_2q=rb_fit.fit[0]['epc'],\n", + " qubit_pair=qubits,\n", + " list_epgs_1q=[epg_q0, epg_q1])\n", + "\n", + "print(\"Predicted 2Q Error per gate: %e (gate error model: %e)\" % (pred_epg, epg_q01))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "1. Easwar Magesan, J. M. Gambetta, and Joseph Emerson, *Robust randomized benchmarking of quantum processes*,\n", + "https://arxiv.org/pdf/1009.3639\n", + "\n", + "2. Easwar Magesan, Jay M. Gambetta, and Joseph Emerson, *Characterizing Quantum Gates via Randomized Benchmarking*,\n", + "https://arxiv.org/pdf/1109.6887\n", + "\n", + "3. A. D. C'orcoles, Jay M. Gambetta, Jerry M. Chow, John A. Smolin, Matthew Ware, J. D. Strand, B. L. T. Plourde, and M. Steffen, *Process verification of two-qubit quantum gates by randomized benchmarking*, https://arxiv.org/pdf/1210.7011\n", + "\n", + "4. Jay M. Gambetta, A. D. C´orcoles, S. T. Merkel, B. R. Johnson, John A. Smolin, Jerry M. Chow,\n", + "Colm A. Ryan, Chad Rigetti, S. Poletto, Thomas A. Ohki, Mark B. Ketchen, and M. Steffen,\n", + "*Characterization of addressability by simultaneous randomized benchmarking*, https://arxiv.org/pdf/1204.6308\n", + "\n", + "5. David C. McKay, Sarah Sheldon, John A. Smolin, Jerry M. Chow, and Jay M. Gambetta, *Three Qubit Randomized Benchmarking*, https://arxiv.org/pdf/1712.06550" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.8.5" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-quantum-hardware/results/gate_probs_ibmq_16_melbourne.txt b/translations/ja/ch-quantum-hardware/results/gate_probs_ibmq_16_melbourne.txt new file mode 100644 index 0000000..35f7b03 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/results/gate_probs_ibmq_16_melbourne.txt @@ -0,0 +1 @@ +[0.28, 0.05257745050866158, 0.024754852836277125, 0.02134613228239715, 0.05298022228501495, 0.1855, 0.06130623086961784, 0.128, 0.05460651866864599, 0.05460651866864599, 0.047861551205476305, 0.09750000000000003, 0.04500000000000004, 0.0605, 0.09150000000000003] \ No newline at end of file diff --git a/translations/ja/ch-quantum-hardware/results/logical_prob_match_ibmq_16_melbourne.txt b/translations/ja/ch-quantum-hardware/results/logical_prob_match_ibmq_16_melbourne.txt new file mode 100644 index 0000000..ee34e3e --- /dev/null +++ b/translations/ja/ch-quantum-hardware/results/logical_prob_match_ibmq_16_melbourne.txt @@ -0,0 +1 @@ +{3: {'0': 0.045166015625, '1': 0.1617431640625}, 4: {'0': 0.0330810546875, '1': 0.2373046875}, 5: {'0': 0.0360107421875, '1': 0.1519775390625}, 6: {'0': 0.0167236328125, '1': 0.101318359375}, 7: {'0': 0.0089111328125, '1': 0.0472412109375}, 8: {'0': 0.006103515625, '1': 0.0367431640625}} \ No newline at end of file diff --git a/translations/ja/ch-quantum-hardware/results/probs_ibmq_16_melbourne.txt b/translations/ja/ch-quantum-hardware/results/probs_ibmq_16_melbourne.txt new file mode 100644 index 0000000..45798d6 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/results/probs_ibmq_16_melbourne.txt @@ -0,0 +1 @@ +[0.040706228543403625, 0.12927756653992395, 0.15861571737563088, 0.15042467590523026, 0.1393181818181818, 0.1995880064087892, 0.43408443408443403, 0.2753350576063955, 0.2233187973376176, 0.22022318378501482, 0.23982603292948124, 0.2950021177467175, 0.28079789565979835, 0.22393992932862192, 0.3728337236533958, 0.2426666666666667, 0.4345054945054945, 0.4285404937202252, 0.2777516462841016, 0.02917911759535947, 0.11654526534859523, 0.1799797775530839, 0.047926132199912055, 0.014967523298503253, 0.018515818632453707, 0.07686567164179103, 0.043035432506096684, 0.05383187483426147, 0.03775203775203774] \ No newline at end of file diff --git a/translations/ja/ch-quantum-hardware/results/raw_results_ibmq_16_melbourne.txt b/translations/ja/ch-quantum-hardware/results/raw_results_ibmq_16_melbourne.txt new file mode 100644 index 0000000..3ac8dce --- /dev/null +++ b/translations/ja/ch-quantum-hardware/results/raw_results_ibmq_16_melbourne.txt @@ -0,0 +1 @@ +{3: {'0': {'101 01': 1, '100 10': 23, '001 00': 587, '011 10': 3, '010 11': 91, '110 01': 1, '101 10': 6, '001 11': 27, '010 00': 12, '000 01': 134, '101 11': 1, '011 11': 10, '010 10': 26, '011 00': 4, '000 11': 62, '001 10': 313, '000 10': 2215, '010 01': 29, '000 00': 4550, '101 00': 4, '011 01': 7, '100 00': 9, '001 01': 77}, '1': {'011 10': 109, '001 11': 3, '010 00': 97, '000 01': 2, '101 11': 85, '111 10': 1138, '011 00': 171, '111 00': 2640, '000 11': 3, '001 10': 8, '101 00': 181, '101 10': 102, '001 01': 2, '101 01': 39, '110 00': 1541, '100 10': 62, '110 11': 179, '001 00': 8, '100 01': 34, '110 01': 452, '010 11': 10, '110 10': 720, '011 11': 9, '010 10': 59, '111 01': 264, '000 10': 4, '100 11': 55, '010 01': 19, '000 00': 5, '011 01': 19, '100 00': 81, '111 11': 91}}, 4: {'0': {'1100 101': 4, '0100 100': 43, '1011 101': 1, '1100 011': 5, '0000 111': 156, '0000 001': 618, '0010 111': 23, '1010 001': 1, '1100 000': 5, '1001 101': 11, '0100 000': 32, '0101 000': 2, '0001 100': 78, '1100 001': 5, '0000 011': 535, '1100 110': 6, '1101 111': 2, '0110 101': 5, '1011 100': 1, '1000 110': 222, '0010 100': 4, '0101 101': 2, '1001 000': 21, '0010 110': 4, '1010 110': 4, '1101 010': 1, '0010 101': 12, '0011 011': 9, '1011 110': 1, '0000 100': 551, '0100 001': 12, '1001 111': 9, '0101 010': 7, '0010 001': 21, '0011 001': 4, '1101 000': 2, '0011 010': 3, '0001 010': 153, '0100 101': 14, '0101 111': 2, '1010 000': 1, '0001 001': 101, '0010 011': 55, '1010 101': 2, '1100 010': 4, '0001 101': 40, '0010 000': 15, '1000 101': 89, '1000 100': 268, '1010 011': 3, '0001 110': 58, '0001 000': 251, '0101 100': 6, '1001 011': 6, '0100 111': 5, '1001 110': 26, '1000 001': 45, '1010 010': 1, '0100 011': 14, '0110 011': 1, '0000 110': 421, '1100 100': 11, '1010 100': 3, '1101 100': 1, '1100 111': 2, '1001 001': 8, '0100 010': 48, '1001 100': 42, '0000 101': 207, '0011 000': 1, '0010 010': 15, '0101 110': 6, '0110 110': 1, '0001 011': 72, '0100 110': 36, '1010 111': 7, '0001 111': 17, '1011 111': 1, '1000 000': 153, '0011 101': 2, '0101 011': 5, '0000 010': 1412, '1000 010': 108, '1001 010': 16, '0000 000': 1900, '0111 111': 1, '0101 001': 4, '1000 011': 43, '1000 111': 65, '0011 111': 2}, '1': {'1111 100': 331, '0110 010': 138, '1110 001': 217, '1100 101': 3, '0100 100': 21, '1011 101': 13, '1100 011': 15, '0000 001': 1, '0010 111': 9, '1010 001': 22, '1100 000': 28, '0011 110': 15, '1001 101': 1, '0011 100': 31, '0100 000': 30, '0101 000': 46, '0111 011': 96, '1100 001': 10, '0001 100': 4, '1100 110': 9, '1101 111': 7, '0110 101': 154, '0111 100': 487, '1011 100': 9, '0110 111': 59, '0010 100': 28, '0101 101': 16, '1001 000': 3, '1110 110': 54, '1111 101': 111, '0010 110': 16, '1111 110': 79, '1010 110': 9, '1101 010': 39, '0010 101': 11, '0011 011': 7, '0110 100': 271, '0000 100': 2, '0100 001': 15, '1011 110': 16, '1001 111': 1, '0101 010': 35, '0010 001': 15, '0011 001': 20, '1101 000': 53, '0111 101': 162, '1101 101': 12, '0011 010': 38, '0111 001': 309, '0100 101': 10, '1111 000': 795, '0101 111': 8, '1110 101': 69, '1010 000': 39, '0001 001': 4, '0010 011': 12, '1010 101': 7, '1011 000': 68, '1100 010': 13, '1101 001': 30, '0010 000': 32, '1111 111': 37, '1000 100': 1, '0111 010': 179, '1010 011': 8, '0001 110': 2, '1110 000': 514, '0001 000': 3, '0101 100': 22, '1011 001': 25, '1001 011': 1, '0100 111': 10, '1000 001': 2, '1010 010': 14, '1111 010': 205, '0100 011': 9, '0110 011': 88, '1100 100': 4, '1010 100': 20, '1101 100': 18, '1101 011': 19, '1100 111': 7, '1111 011': 98, '0110 000': 421, '0100 010': 19, '1001 100': 1, '0000 101': 2, '1110 010': 162, '0110 001': 216, '0011 000': 53, '0010 010': 27, '0111 110': 122, '1110 100': 167, '0101 110': 20, '1101 110': 12, '0110 110': 115, '0111 000': 703, '0001 011': 2, '0100 110': 15, '1010 111': 9, '1011 011': 8, '1011 010': 32, '1011 111': 7, '1111 001': 342, '1000 000': 4, '0011 101': 13, '0101 011': 21, '0000 010': 4, '1000 010': 7, '1110 111': 31, '1001 010': 6, '0000 000': 2, '0111 111': 63, '1110 011': 98, '0101 001': 24, '1000 011': 1, '0011 111': 12}}, 5: {'0': {'01000 1101': 29, '01010 1011': 1, '10100 1010': 2, '01001 1110': 22, '11010 1110': 1, '01100 1111': 1, '00110 0101': 1, '10100 0100': 11, '11001 1111': 1, '11100 0010': 2, '01000 0001': 11, '00000 0111': 55, '00000 0001': 240, '00001 0111': 13, '00101 0001': 3, '00001 1110': 9, '11000 0000': 12, '00010 1000': 1, '01001 1000': 13, '11000 1000': 27, '11000 0111': 4, '10000 0000': 434, '01010 1110': 3, '01101 0100': 1, '10000 1011': 19, '00000 0011': 190, '00101 1100': 2, '00100 0110': 15, '10011 0001': 1, '10101 0011': 2, '00001 0100': 51, '01000 1110': 141, '00100 1000': 7, '00001 0110': 37, '11000 0110': 27, '11010 1101': 3, '00101 0110': 4, '01100 1110': 10, '10001 0111': 2, '00001 1011': 5, '11100 0100': 2, '01001 0011': 2, '10011 1010': 1, '11001 0111': 1, '11101 1110': 1, '01000 0010': 43, '01001 1100': 33, '10010 0000': 2, '10110 0101': 1, '00001 0001': 50, '10001 1101': 2, '00001 1001': 8, '00010 1010': 2, '01001 0001': 3, '01001 1010': 6, '10001 0101': 7, '10100 1111': 1, '00001 1010': 23, '00011 1001': 1, '10101 0110': 2, '10100 0001': 1, '00101 0000': 6, '10011 0111': 2, '01000 1010': 67, '10001 1001': 2, '00001 0011': 28, '10001 0011': 8, '01100 0000': 2, '01000 0110': 64, '00110 0010': 1, '11010 1100': 2, '00001 0000': 179, '01011 1110': 2, '10100 1100': 1, '11001 1101': 3, '10101 0010': 1, '11100 0000': 2, '00101 0011': 1, '11000 1111': 9, '00000 1110': 93, '01011 1111': 3, '01001 0000': 11, '01001 0010': 8, '10100 0111': 1, '01001 0111': 3, '11001 0100': 6, '10010 0011': 10, '11000 1101': 13, '11000 1110': 41, '00010 0111': 11, '10010 1100': 1, '10100 0010': 17, '11101 0110': 2, '00000 0110': 262, '01100 1011': 1, '11000 1010': 15, '11001 1010': 1, '11100 1110': 3, '10000 1000': 101, '00101 0100': 4, '01100 0100': 5, '01000 1100': 178, '00100 1001': 1, '01101 1010': 1, '00001 1000': 24, '00001 0010': 132, '10101 0100': 5, '01000 0100': 96, '01100 1000': 6, '00010 0110': 3, '01000 0101': 18, '01100 1100': 5, '01100 0010': 2, '01011 1101': 1, '10010 0100': 2, '10001 1000': 12, '01010 1101': 5, '00100 1010': 11, '00000 0000': 1286, '10001 1011': 2, '11101 1111': 1, '10000 1110': 22, '10100 0101': 1, '10010 0001': 2, '10100 0000': 12, '11001 0101': 2, '11011 0111': 1, '00100 0111': 6, '00001 1111': 3, '10010 1011': 2, '01001 1011': 1, '01000 0000': 48, '11010 0111': 1, '00110 0011': 1, '10001 0010': 44, '10001 1111': 2, '10011 0011': 2, '10000 0110': 95, '01100 0110': 4, '01000 1001': 9, '01100 1010': 2, '10100 1000': 2, '00001 1100': 16, '00010 0000': 9, '00000 1100': 111, '10000 0101': 15, '00011 1011': 2, '10010 0101': 3, '01001 0101': 4, '01100 1001': 1, '00011 0101': 2, '11100 0011': 1, '11100 1101': 2, '11000 0010': 19, '11000 0100': 36, '00010 1101': 1, '11100 0110': 1, '10001 0000': 66, '10001 1110': 4, '10000 0100': 94, '00110 1010': 2, '10000 1101': 10, '00001 0101': 15, '00101 1110': 2, '00000 0100': 347, '00010 0001': 12, '10110 0111': 1, '10001 1100': 10, '00000 1010': 149, '00010 0101': 5, '00010 1111': 1, '10000 1001': 16, '10100 0011': 6, '11001 1001': 1, '10010 1111': 3, '11000 1100': 50, '00000 1001': 41, '10000 1010': 69, '10001 0110': 12, '01000 1011': 4, '10010 1001': 7, '11000 0001': 1, '11000 0101': 1, '01000 0011': 11, '11001 1100': 14, '01010 1111': 3, '10000 0111': 15, '11001 1000': 5, '11100 1010': 3, '10100 1110': 1, '00100 0101': 2, '00000 1101': 19, '00100 0100': 28, '10111 0001': 1, '01000 1111': 27, '10011 0101': 1, '01001 1111': 6, '00000 1000': 208, '11110 0101': 1, '11100 1100': 4, '00100 1110': 4, '01011 1011': 1, '00100 0001': 3, '00101 0010': 7, '11001 0010': 1, '10010 1110': 1, '11000 0011': 5, '11001 0110': 5, '10100 0110': 12, '11000 1011': 2, '10000 0001': 92, '00010 0011': 28, '00011 0011': 3, '01001 0100': 11, '01001 0110': 11, '11001 0001': 2, '10001 1010': 8, '00110 0111': 1, '00011 0000': 1, '00010 0010': 6, '00100 1100': 5, '00000 0101': 71, '01000 0111': 13, '00011 0001': 1, '01001 1001': 1, '10101 1011': 1, '01001 1101': 7, '11001 0000': 3, '01010 1100': 1, '00010 1110': 1, '00000 1011': 38, '10001 0001': 16, '00101 0111': 1, '00000 1111': 14, '01000 1000': 84, '10000 0011': 60, '01010 0111': 2, '00100 0000': 26, '11000 1001': 5, '00001 1101': 1, '00000 0010': 1019, '00010 1011': 6, '00100 0010': 40, '11011 0001': 1, '10000 0010': 331, '10000 1100': 46, '10001 0100': 17, '00010 1001': 1, '10010 0010': 3, '11001 1110': 5, '00100 0011': 11, '10000 1111': 6}, '1': {'00111 1100': 63, '01111 1111': 1, '10100 1010': 10, '11010 1110': 1, '01100 1111': 2, '10101 1100': 14, '11010 1011': 3, '11101 0011': 11, '11100 0010': 18, '01111 1100': 38, '01110 0100': 27, '00101 0001': 3, '10101 1000': 23, '11110 0001': 129, '00010 1000': 9, '01101 0100': 9, '00110 0110': 16, '00101 1100': 5, '10110 0110': 41, '10011 0001': 8, '10101 0011': 8, '11111 1011': 25, '01111 1101': 8, '11010 0001': 3, '00111 1101': 28, '11010 0000': 14, '11101 0000': 22, '00101 0110': 2, '01001 0011': 1, '11100 0100': 7, '11011 1100': 3, '11111 0111': 10, '10011 1010': 7, '00011 0100': 3, '11100 1011': 3, '10010 0000': 11, '10110 0100': 95, '10110 0101': 51, '10001 1101': 2, '00010 1010': 7, '11101 0111': 1, '01001 1010': 2, '00011 1101': 3, '11110 1101': 17, '00110 1101': 22, '10001 0101': 1, '10100 1111': 5, '10110 1111': 29, '11011 1000': 15, '10101 0110': 9, '00011 1001': 2, '01100 0001': 5, '01101 0001': 2, '10100 0001': 3, '00101 0000': 4, '10011 0111': 3, '01000 1010': 1, '11110 1100': 28, '10001 0011': 1, '00101 0101': 2, '01010 0101': 2, '01011 1000': 6, '11111 0010': 102, '11010 0100': 2, '01100 0000': 6, '01100 0111': 1, '00101 1000': 7, '11011 0101': 11, '01110 0000': 109, '10011 1101': 4, '00001 0000': 2, '01011 1110': 2, '10100 1100': 18, '10101 1001': 6, '11110 1110': 14, '10101 0010': 10, '10110 0001': 54, '01101 1000': 7, '00101 0011': 3, '01010 0100': 3, '01110 1111': 5, '10110 0000': 127, '01001 0010': 1, '11001 0100': 1, '00010 0111': 1, '11101 0110': 6, '10111 0111': 25, '10011 1001': 8, '11111 0001': 186, '01100 0101': 1, '01100 1011': 1, '10111 1101': 78, '11100 1110': 1, '01010 0011': 1, '00101 0100': 7, '01100 0100': 3, '01101 1010': 4, '00011 1110': 4, '10101 0100': 9, '01100 1000': 3, '01111 1010': 25, '01010 1010': 6, '11101 1010': 4, '01100 0010': 6, '11011 0110': 10, '01110 1100': 29, '00000 0000': 2, '11101 1011': 4, '10111 1011': 28, '10000 1110': 3, '10111 0101': 66, '01000 0000': 1, '11111 1100': 69, '01011 1100': 2, '10111 1000': 284, '10001 1111': 2, '10011 0011': 1, '10000 0110': 2, '00110 0000': 42, '01101 0111': 2, '11111 0000': 386, '10010 0101': 9, '10011 1100': 13, '00011 1100': 3, '01111 0101': 16, '01101 1110': 2, '11111 0100': 109, '00111 1110': 13, '10001 0000': 1, '10000 0100': 2, '00101 1110': 6, '01110 0110': 9, '11010 1111': 1, '11101 1000': 6, '10110 1001': 81, '11100 1001': 5, '11011 1010': 7, '11110 1011': 13, '10010 1000': 6, '01010 1000': 3, '10011 1110': 12, '10100 0011': 8, '00111 0101': 25, '01011 0010': 6, '11100 0111': 4, '10001 0110': 3, '11010 1001': 5, '01110 0111': 5, '10101 1111': 4, '11000 0001': 2, '10101 1010': 6, '10111 0110': 43, '10000 0111': 2, '10010 1101': 4, '10100 1110': 5, '11011 1110': 2, '11111 1000': 201, '00111 1111': 7, '01101 1100': 4, '10111 0001': 76, '11111 0110': 38, '00111 0000': 59, '11110 0101': 26, '11010 0011': 9, '11100 1100': 1, '00100 1110': 2, '11011 1001': 5, '00100 0001': 2, '00101 0010': 4, '01101 0010': 3, '10010 1110': 8, '11000 0011': 1, '00111 1010': 25, '00010 0011': 1, '01110 1001': 37, '01101 0101': 1, '10010 0010': 8, '00111 1011': 17, '01111 1011': 13, '11100 1000': 1, '00010 0010': 1, '00100 1100': 1, '00111 0010': 27, '10111 0000': 207, '01000 0111': 1, '10011 0110': 9, '11001 0000': 3, '10101 0000': 14, '00010 1110': 1, '11100 0101': 3, '10001 0001': 1, '01110 0001': 53, '00101 0111': 2, '01110 1101': 20, '01000 1000': 1, '11110 0000': 215, '10010 0110': 4, '00100 0010': 2, '10111 0010': 45, '11011 0001': 9, '10000 0010': 1, '00011 1111': 2, '00111 0011': 14, '00010 1001': 2, '10101 0101': 8, '01100 0011': 5, '11111 1101': 22, '00100 0011': 1, '00011 0010': 3, '01010 1011': 1, '11011 0010': 18, '10011 1011': 7, '00110 0101': 21, '11101 1100': 2, '10100 0100': 6, '11010 0101': 1, '00010 0100': 2, '00101 1101': 1, '01110 1000': 64, '11000 0000': 1, '10000 0000': 1, '01011 0001': 2, '10110 1100': 143, '10000 1011': 1, '00110 1111': 3, '01110 1010': 16, '00011 0111': 5, '10101 1110': 12, '00100 1000': 1, '11110 1010': 24, '11010 1101': 3, '01100 1110': 1, '10011 0010': 15, '11101 0101': 1, '11001 0111': 1, '11101 1110': 3, '01000 0010': 1, '01111 0110': 14, '00100 1111': 1, '01011 0110': 3, '00001 1001': 1, '11010 1010': 3, '11111 1010': 48, '11110 0011': 57, '01111 1001': 43, '11101 0010': 16, '01011 0101': 1, '10001 1001': 1, '10101 1101': 10, '10111 0100': 181, '01000 0110': 1, '00110 0010': 20, '11010 1100': 6, '10010 0111': 4, '11111 1111': 4, '11110 0110': 25, '01111 0010': 33, '11010 0010': 16, '11100 0000': 16, '10110 0011': 29, '00010 1100': 3, '01110 0010': 21, '10100 0111': 2, '00101 1001': 3, '10010 0011': 3, '11011 0000': 30, '10010 1100': 11, '10100 0010': 6, '10100 1011': 4, '00110 0100': 41, '10110 1101': 58, '11010 0110': 9, '10100 1001': 11, '11000 1010': 1, '01111 1110': 10, '10011 1000': 13, '11100 0001': 11, '00110 1100': 29, '11110 0111': 16, '10110 0010': 44, '00100 1001': 2, '11110 1111': 8, '11101 0001': 11, '01011 0111': 1, '00111 0100': 64, '01010 0000': 8, '10011 0000': 18, '10111 1111': 24, '11101 1001': 8, '00010 0110': 3, '01111 0111': 13, '10110 1000': 148, '01111 0100': 66, '00101 1011': 4, '00101 1010': 4, '00101 1111': 3, '00111 1001': 46, '10010 0100': 5, '01010 1001': 5, '01101 0011': 3, '10111 1100': 228, '10001 1000': 2, '01010 1101': 1, '11111 1110': 17, '10111 0011': 31, '00100 1010': 3, '01110 0101': 11, '11011 1011': 7, '11101 1111': 2, '10011 1111': 3, '10100 0101': 2, '10010 0001': 3, '10100 0000': 8, '11011 0111': 4, '11111 1001': 67, '10111 1010': 65, '00100 0111': 3, '10010 1011': 4, '01111 0000': 164, '00111 0001': 36, '11010 0111': 3, '00110 0011': 8, '10101 0001': 3, '10101 0111': 2, '10110 1010': 55, '01100 1010': 2, '01111 0001': 71, '10100 1000': 7, '00010 0000': 3, '00100 1101': 1, '10000 0101': 1, '00110 0001': 31, '01100 1001': 3, '00011 0101': 2, '01101 1001': 1, '11011 1101': 4, '11100 0011': 8, '11100 1101': 1, '11011 0100': 7, '11000 0010': 2, '11000 0100': 1, '11110 1000': 103, '11100 0110': 3, '00111 0110': 26, '01110 0011': 19, '10001 1110': 1, '10011 0100': 16, '00110 1010': 16, '00010 0001': 1, '11010 1000': 7, '10110 0111': 21, '10100 1101': 1, '00110 1000': 63, '10001 1100': 1, '00010 0101': 2, '00111 1000': 113, '01110 1110': 7, '10010 1111': 2, '01011 1001': 4, '11111 0101': 36, '11001 1011': 1, '01000 1011': 2, '10010 1001': 8, '11110 1001': 59, '01011 1010': 2, '01000 0011': 1, '10110 1011': 35, '00110 1001': 26, '01010 1111': 2, '11001 1000': 3, '10111 1001': 109, '11100 1010': 6, '00100 0101': 1, '01010 0010': 6, '00100 0100': 5, '11110 0010': 86, '00011 1010': 3, '10011 0101': 3, '01101 0000': 14, '00000 1000': 2, '00100 1011': 1, '10111 1110': 64, '11101 0100': 5, '01001 0100': 1, '10100 0110': 3, '00011 0011': 1, '10010 1010': 6, '10001 1010': 4, '00110 0111': 4, '00110 1011': 8, '01101 1011': 1, '00011 0000': 8, '01011 0100': 5, '11001 0011': 2, '00011 0001': 1, '10101 1011': 6, '01110 1011': 12, '00110 1110': 18, '00011 0110': 4, '00011 1000': 3, '11011 0011': 4, '01111 0011': 24, '01010 0111': 2, '00100 0000': 1, '00010 1011': 3, '00111 0111': 2, '01011 0011': 4, '01111 1000': 79, '10000 1100': 2, '11111 0011': 62, '01011 0000': 20, '10110 1110': 34, '01010 0001': 1, '11110 0100': 65, '10000 1111': 1}}, 6: {'0': {'100100 00110': 1, '011000 00010': 10, '001101 01110': 1, '010011 01000': 1, '101000 01110': 1, '101000 10011': 1, '110000 01001': 1, '110000 11001': 7, '000000 10111': 9, '101001 11000': 2, '011101 11010': 1, '000101 01110': 2, '000000 00011': 90, '110000 01010': 4, '001001 10001': 1, '010000 01011': 38, '000100 01110': 7, '010000 11101': 14, '011010 01110': 1, '110001 11011': 1, '011011 01000': 1, '001000 10111': 4, '011001 11110': 3, '111001 11110': 1, '000100 10011': 1, '100000 11000': 18, '100100 11100': 1, '110100 01000': 1, '001001 00000': 4, '010100 01101': 3, '000001 01010': 25, '000000 10001': 32, '001000 11101': 6, '011001 01011': 2, '011000 11111': 7, '000011 01101': 1, '001010 01111': 1, '000001 11001': 2, '011000 10111': 3, '010001 01011': 10, '111000 01111': 1, '010010 10001': 1, '001010 11001': 2, '011000 00100': 36, '110010 11011': 2, '000100 10000': 2, '000001 00111': 6, '011000 01111': 9, '111000 10100': 2, '000110 00101': 1, '010011 01010': 1, '111000 00100': 1, '000100 01100': 14, '100010 11001': 2, '100001 10000': 2, '010100 00000': 7, '010010 11001': 1, '010101 01010': 1, '011001 11011': 1, '010101 11011': 1, '101100 10100': 2, '111000 11000': 7, '000000 00000': 566, '011010 00011': 1, '010001 01110': 17, '100000 10100': 15, '110000 00110': 1, '110000 10000': 45, '101001 10011': 1, '011001 10001': 1, '000100 00000': 15, '011000 01011': 9, '001000 11111': 3, '010010 01001': 2, '011001 00100': 5, '100100 10010': 1, '100000 00000': 16, '000001 11011': 1, '111000 11110': 9, '001001 11100': 3, '010001 10110': 3, '000001 11100': 4, '110001 11010': 5, '010100 11100': 4, '111001 10100': 1, '001000 10000': 20, '010100 01000': 7, '100100 00000': 1, '001101 01111': 1, '101100 11000': 1, '001001 11110': 1, '001010 00011': 1, '010000 01101': 16, '010010 10011': 4, '001000 01010': 18, '110001 10000': 6, '001101 11110': 1, '010000 10010': 54, '010001 11110': 6, '111000 01110': 2, '111100 11000': 1, '110000 11000': 22, '001001 01110': 3, '010000 10101': 5, '000001 00011': 14, '100000 01101': 1, '010100 01110': 7, '110000 10101': 5, '110100 11110': 2, '010000 00001': 78, '110001 01010': 2, '110000 00000': 9, '011001 01111': 1, '000100 00111': 2, '010010 00000': 4, '001001 10110': 4, '010000 00010': 260, '010011 11101': 1, '001100 10000': 2, '011001 11000': 2, '001000 10001': 1, '111001 11000': 2, '000010 10111': 1, '111000 11011': 1, '010000 01010': 213, '010100 00111': 1, '000100 01000': 6, '110000 11110': 6, '001001 00110': 3, '000000 11101': 7, '011001 10110': 2, '000000 00010': 421, '101000 00110': 1, '001000 00010': 26, '000011 10011': 1, '001000 10100': 29, '000001 01001': 7, '000010 00011': 18, '100000 01001': 3, '010100 11000': 5, '000100 01101': 1, '110001 10001': 3, '010001 10011': 1, '000001 00100': 17, '100000 10010': 37, '011100 01000': 1, '000000 00001': 126, '010000 01001': 73, '011000 00000': 22, '000000 11110': 14, '001100 01000': 2, '001000 00000': 30, '100010 11010': 1, '010100 00010': 9, '011000 00101': 4, '010000 10000': 57, '011000 10010': 14, '000100 00010': 17, '000000 11001': 11, '011001 01010': 4, '010101 00111': 1, '011011 10011': 1, '111000 11101': 2, '111010 11110': 1, '110000 10110': 3, '110001 11100': 1, '100000 00110': 4, '101000 00010': 1, '001010 11101': 1, '010010 01110': 1, '011000 01000': 44, '010100 11110': 1, '000100 00110': 6, '000011 00010': 1, '001101 01100': 1, '010001 11011': 1, '100100 10100': 1, '010101 00100': 3, '100000 00010': 10, '001001 01100': 6, '100001 11110': 1, '011000 00111': 3, '001010 01001': 1, '010001 10101': 2, '011100 10111': 1, '001000 01000': 35, '001001 11000': 2, '011100 11010': 3, '101001 00101': 1, '011001 01100': 13, '000010 01001': 4, '101001 11010': 1, '010001 00111': 5, '000101 00000': 4, '001001 10000': 1, '011000 00011': 3, '000001 00110': 18, '101001 01000': 1, '010001 00110': 4, '000010 11011': 3, '110000 00010': 6, '001001 00100': 6, '010000 00111': 12, '100000 00001': 3, '000010 01010': 1, '101010 01111': 1, '110000 10011': 1, '110100 11010': 4, '000000 11111': 1, '010000 11001': 17, '011100 11101': 2, '001000 10010': 16, '111000 10101': 1, '000110 00110': 1, '011001 00110': 5, '000000 11100': 20, '101000 10110': 2, '010000 01100': 97, '000011 00001': 1, '100000 11011': 5, '011000 10001': 3, '000001 10101': 2, '010100 00101': 2, '100000 00111': 1, '001100 00010': 1, '001000 11110': 29, '001001 10100': 2, '010100 00001': 1, '011100 10010': 1, '011101 00111': 2, '010011 00000': 1, '000000 00100': 157, '001010 01101': 1, '001000 11100': 33, '000001 00101': 2, '010000 11000': 93, '100001 10101': 3, '010001 01010': 36, '100001 00000': 1, '010100 01001': 2, '100101 11110': 1, '001100 11100': 1, '001011 01011': 1, '010000 00011': 54, '001100 11000': 1, '001001 10101': 2, '110100 11000': 1, '101000 11100': 16, '010001 10111': 1, '111001 11111': 1, '000100 11111': 1, '110001 11000': 3, '010000 01000': 319, '110001 11001': 1, '011100 01110': 2, '001100 10010': 1, '100000 10000': 60, '100001 01100': 1, '110000 01000': 13, '110100 11100': 1, '001100 01011': 1, '001000 00001': 7, '000001 10011': 4, '000100 10100': 4, '011100 11100': 2, '001001 01010': 3, '001000 11010': 10, '000011 00111': 1, '010000 00101': 28, '011100 11111': 1, '010100 00110': 8, '010000 11110': 33, '000000 00101': 26, '110100 10100': 1, '010000 10100': 24, '011010 11011': 2, '010001 00100': 12, '011000 01110': 73, '010001 00011': 11, '011001 10010': 3, '101001 10111': 1, '000000 01111': 5, '010001 10010': 12, '110000 11111': 2, '001000 00011': 1, '101000 10000': 3, '000101 00111': 1, '010011 01011': 2, '000001 01011': 3, '100000 01100': 3, '100000 01000': 4, '011001 10101': 1, '001001 00010': 4, '011001 10111': 2, '000101 00001': 1, '010001 11001': 4, '001000 01111': 9, '110000 11010': 23, '011101 11110': 1, '011100 00111': 2, '000100 00001': 5, '110010 10001': 1, '000000 00111': 22, '111000 11100': 15, '010000 00000': 384, '010000 11011': 11, '000001 01000': 27, '110000 11011': 7, '101000 10010': 1, '100100 01010': 1, '000000 10100': 43, '100100 00100': 3, '000001 10100': 7, '001001 11010': 3, '010100 00100': 10, '000001 11101': 1, '010101 01111': 2, '101100 00100': 1, '001000 10101': 5, '000000 11010': 36, '001101 11000': 1, '010010 00010': 3, '011001 01000': 3, '110000 10010': 28, '000010 10000': 1, '000100 01010': 6, '110001 01111': 1, '010001 01001': 18, '010100 00011': 3, '010010 10000': 2, '000101 00101': 1, '110011 10011': 1, '011000 11100': 48, '000000 10000': 128, '010011 00011': 1, '011000 10110': 21, '100100 10000': 2, '101001 11110': 3, '111000 11111': 2, '000010 10011': 3, '000101 00100': 4, '000000 01110': 64, '100001 01010': 2, '000100 10010': 3, '010010 11101': 1, '010000 11111': 7, '001100 10100': 1, '111010 11011': 1, '010001 11100': 6, '011000 11000': 25, '100000 10111': 3, '100001 10010': 5, '000101 00110': 2, '001100 11010': 3, '000101 00011': 1, '101000 11110': 6, '100000 00011': 1, '011000 00001': 4, '101000 11010': 1, '011001 11001': 2, '000001 11110': 4, '110101 11010': 1, '000100 00100': 22, '010000 10110': 16, '111000 01000': 2, '011011 11101': 1, '011000 01100': 109, '101000 01100': 1, '000101 01010': 1, '010001 01101': 7, '010001 11000': 8, '010100 10010': 2, '011100 00110': 1, '011110 11111': 1, '100000 00100': 4, '001000 11011': 4, '001000 01110': 38, '011000 11110': 46, '011001 01101': 9, '010010 00001': 5, '001000 00110': 42, '000100 01001': 2, '100101 11100': 1, '010001 10000': 13, '011110 01000': 1, '010001 11010': 8, '110010 01011': 1, '010000 11010': 50, '110000 01111': 1, '001000 00100': 61, '010001 00010': 44, '011100 00000': 1, '010101 01001': 1, '011001 11111': 2, '011001 00001': 1, '000000 01010': 146, '001001 01000': 3, '110000 00011': 1, '001000 01001': 9, '000101 10010': 1, '010010 11011': 2, '001100 01100': 3, '000000 01001': 54, '010000 10111': 3, '001000 10110': 16, '011000 11011': 3, '111100 11110': 1, '001000 00111': 9, '001001 01101': 1, '000000 01101': 15, '010100 11101': 1, '011010 01111': 2, '111001 11100': 2, '010110 01101': 1, '110000 11100': 7, '011000 11001': 7, '000010 00001': 6, '010000 10001': 9, '000010 10010': 1, '111000 10010': 3, '111000 10000': 4, '100010 10111': 1, '000001 00010': 56, '100000 11100': 4, '010001 00101': 7, '001010 10000': 1, '010100 11111': 1, '000001 01110': 3, '000000 01011': 34, '010001 01000': 36, '101000 11101': 2, '100000 10011': 10, '110000 11101': 1, '011000 00110': 23, '000010 00010': 5, '001010 10101': 1, '010100 10110': 2, '000110 00011': 1, '010010 01010': 1, '000001 10010': 16, '110010 10101': 1, '011000 11101': 14, '100000 10110': 7, '011100 10110': 1, '010001 01111': 1, '101000 10101': 1, '001100 00000': 1, '010001 00000': 50, '001000 01011': 5, '000001 10111': 3, '000010 00110': 1, '010000 00110': 60, '010010 10010': 1, '010000 00100': 106, '000010 01000': 1, '011000 10000': 12, '000000 10110': 21, '110001 10010': 3, '000000 11011': 5, '011001 00101': 2, '111000 01100': 2, '000010 01111': 3, '010010 11111': 1, '000100 10001': 1, '111000 11010': 2, '011101 00110': 1, '010000 11100': 42, '010011 00001': 1, '111001 10011': 1, '001000 11001': 3, '000000 10011': 14, '111100 10000': 1, '011000 11010': 24, '001001 00111': 3, '010100 01010': 8, '111000 00110': 2, '100000 11010': 11, '100000 11001': 9, '000001 01100': 11, '010010 01011': 8, '001010 00111': 2, '010010 00101': 2, '011001 11010': 1, '010000 01111': 13, '010101 00010': 2, '010001 11101': 3, '000000 00110': 98, '001101 00110': 1, '010101 01101': 1, '010010 00011': 10, '101001 11100': 2, '010010 01111': 1, '011010 10111': 1, '011000 10101': 10, '110010 10000': 1, '000000 11000': 45, '000000 10010': 79, '011001 10100': 5, '101000 10100': 3, '001110 11001': 1, '000100 00101': 1, '010001 01100': 11, '000010 11111': 1, '010001 10100': 4, '100000 01011': 2, '001000 11000': 17, '011010 00110': 1, '110010 10011': 1, '001001 11111': 1, '000010 00111': 4, '100000 10001': 8, '100001 11000': 3, '110000 10001': 6, '011001 01110': 11, '101001 01001': 1, '111000 11001': 2, '000010 01101': 1, '000001 00000': 84, '000000 01100': 86, '001000 00101': 7, '010000 01110': 63, '001100 00100': 2, '000001 01101': 2, '011001 00111': 2, '001000 01101': 12, '000000 10101': 9, '011100 01010': 5, '000001 00001': 20, '100000 11101': 2, '011001 01001': 3, '011100 01100': 5, '101001 01010': 1, '011000 01010': 37, '000001 01111': 1, '011000 01101': 16, '001001 01111': 3, '110000 01110': 1, '010000 10011': 9, '110000 10100': 6, '010100 01011': 3, '011000 01001': 7, '000100 01011': 1, '101000 01011': 1, '000100 00011': 2, '010100 01100': 7, '011001 11100': 8, '101000 11111': 1, '000101 00010': 2, '010010 01000': 2, '000001 11010': 2, '000000 01000': 256, '000010 01011': 13, '010001 00001': 12, '110001 00010': 1, '000100 10110': 4, '010100 10000': 2, '011000 10100': 22, '000001 10000': 20, '000100 11001': 1, '110000 01011': 1, '000001 10001': 2, '001010 11011': 3, '101000 11000': 4, '010101 00110': 2, '110100 01010': 1, '000101 01100': 1, '010001 10001': 4, '101001 10100': 2, '000001 10110': 2, '000001 11000': 5, '011101 10000': 1, '100000 11110': 2, '000010 00000': 3, '110001 00000': 1, '001000 01100': 77, '100100 11010': 1, '000101 10000': 1, '101100 11100': 2, '110000 01100': 4}, '1': {'111110 10110': 6, '010011 01000': 1, '001110 10011': 1, '010111 01101': 3, '101000 10011': 1, '000111 00100': 7, '101111 01111': 6, '011111 01110': 3, '000110 10100': 2, '000110 11101': 5, '110111 01110': 16, '101101 00110': 4, '000111 11101': 3, '000011 11101': 1, '100010 00100': 4, '001101 11111': 1, '011011 01000': 1, '110110 01100': 31, '110100 01001': 3, '010111 01000': 12, '010110 01000': 3, '110100 01000': 3, '110111 11110': 3, '000110 10000': 2, '101010 10001': 1, '101111 00110': 16, '100111 11010': 8, '011010 10000': 3, '001111 01100': 5, '110010 10100': 1, '001111 10010': 5, '111110 00001': 59, '101011 01010': 6, '110111 11010': 8, '101111 01101': 21, '010110 00110': 1, '010101 01100': 2, '111101 00010': 8, '010110 01011': 1, '101101 10010': 3, '111111 10011': 11, '100111 11001': 17, '101011 10100': 3, '000100 10000': 1, '110010 11011': 1, '001011 00000': 1, '101010 00110': 6, '100111 01011': 18, '010110 00000': 3, '101011 00001': 2, '001111 10001': 6, '111100 10100': 3, '001110 01110': 2, '100110 00100': 31, '110110 00110': 20, '110010 01111': 1, '100001 10000': 2, '001010 10100': 1, '000110 01000': 8, '110010 00010': 6, '111100 10110': 1, '111100 01111': 1, '010101 11011': 1, '111110 01000': 37, '110111 11011': 4, '101100 10100': 1, '000111 01100': 7, '111111 10010': 24, '001110 11011': 3, '110110 01111': 8, '010011 00100': 2, '100100 00101': 3, '111101 00000': 12, '100011 11101': 1, '100111 01000': 120, '111011 10101': 3, '101111 00100': 22, '011111 11010': 7, '111101 00110': 3, '111100 00000': 4, '000110 10111': 1, '100100 10010': 1, '100111 00111': 6, '111101 10101': 2, '100110 10110': 5, '111000 11110': 1, '110100 00000': 1, '100110 00111': 6, '111110 11010': 17, '101011 11010': 4, '011010 00001': 1, '101011 00011': 3, '110001 11010': 1, '111111 00001': 71, '000110 11110': 2, '100111 01100': 93, '111111 11100': 17, '100100 00000': 3, '101010 11001': 4, '001110 01001': 7, '010110 10110': 2, '111011 00100': 3, '101111 01010': 27, '101100 11000': 4, '110110 00001': 16, '110111 01010': 29, '010111 11111': 1, '100100 01101': 2, '110011 10100': 3, '111011 00101': 1, '001010 01110': 1, '001111 11000': 20, '111100 01001': 3, '101100 11110': 1, '111110 11100': 14, '111110 10001': 24, '011011 00000': 2, '000110 10010': 4, '001110 01100': 5, '000111 01001': 3, '100101 01101': 6, '010100 01110': 1, '100110 00000': 34, '100111 11011': 3, '111111 11011': 11, '011111 00101': 2, '011010 10010': 1, '110000 00000': 1, '110010 11010': 1, '000111 11011': 2, '010011 11101': 1, '111100 01000': 1, '001100 10000': 2, '101011 10110': 1, '111111 00011': 19, '101110 10101': 6, '010110 11011': 2, '111001 11000': 1, '111101 11011': 2, '100110 11001': 17, '111011 00000': 10, '111111 11111': 2, '100101 00100': 3, '011101 11000': 2, '100011 10000': 3, '100100 01111': 1, '110101 00011': 2, '110101 00110': 4, '010101 01110': 1, '001100 01000': 2, '111010 11010': 1, '100010 11010': 4, '010111 10010': 2, '111100 11010': 2, '100101 01100': 7, '100101 01011': 2, '011110 00000': 11, '111111 01110': 5, '000110 01110': 3, '111010 11000': 1, '000111 10110': 3, '011110 10010': 4, '001111 00011': 1, '100111 10010': 6, '101111 11011': 18, '101000 00010': 2, '001111 11111': 2, '101111 01000': 150, '100011 11010': 2, '101011 10000': 8, '100100 10100': 1, '100110 01000': 64, '110111 01011': 13, '101011 00111': 1, '011100 11010': 1, '111101 11110': 1, '010111 10101': 3, '011110 10101': 4, '111010 00100': 2, '101100 01110': 1, '110101 00100': 8, '001011 01000': 2, '000111 10100': 7, '110010 01001': 3, '110101 01010': 7, '101010 00001': 1, '010110 10000': 8, '101010 01111': 2, '001101 11011': 2, '110101 00111': 2, '001011 11010': 2, '011111 01001': 6, '110111 11001': 10, '100100 01110': 3, '000110 00110': 6, '110010 11111': 1, '001010 01000': 1, '000110 01001': 6, '011111 00010': 6, '001110 00011': 1, '011111 10101': 3, '100110 00010': 6, '001100 00010': 1, '100111 11111': 2, '010100 11010': 2, '111010 00110': 4, '100011 01111': 2, '100101 11010': 3, '010110 11000': 7, '111110 00101': 10, '110011 10010': 2, '011100 10100': 1, '110111 00001': 33, '111000 00000': 1, '000011 11000': 1, '000111 01110': 7, '101001 10010': 1, '100001 10101': 1, '111001 00000': 1, '101110 11000': 82, '110001 00100': 1, '100110 10001': 8, '101110 00111': 3, '111011 10011': 1, '101011 11100': 1, '010111 00110': 4, '001100 11000': 1, '111100 11111': 1, '111111 01011': 16, '100111 10101': 7, '101101 01010': 3, '001100 10010': 2, '110100 11100': 2, '101101 10011': 2, '100110 10010': 7, '110100 10000': 3, '110110 10100': 24, '010000 10100': 1, '110111 01001': 43, '101101 01011': 8, '110111 10110': 9, '110100 00110': 6, '011110 11000': 4, '100001 00111': 2, '110010 01101': 1, '010011 01011': 1, '100000 01000': 1, '100010 11110': 2, '001111 10011': 2, '001010 10010': 2, '001110 11100': 3, '111011 10110': 1, '010110 11100': 3, '100100 11101': 3, '111101 00101': 2, '101100 10010': 3, '111010 00001': 4, '100010 01111': 4, '101110 01101': 11, '110110 11111': 1, '111101 00100': 2, '011100 01111': 1, '011110 10111': 1, '110111 11111': 3, '111011 11010': 2, '100011 00111': 2, '101100 01001': 2, '111011 10000': 3, '111011 11000': 2, '100100 01010': 3, '010110 11001': 2, '110100 11111': 1, '100100 00100': 4, '100101 01111': 1, '100111 00000': 44, '001101 00000': 1, '001110 10000': 11, '110101 10011': 1, '101111 00111': 4, '001101 11100': 1, '110010 01100': 2, '111010 00011': 8, '111011 10001': 2, '100110 01111': 12, '001111 01101': 3, '101010 00100': 1, '110001 01100': 1, '100101 11011': 1, '110111 11100': 16, '100101 01010': 6, '111001 01000': 1, '111011 01001': 1, '011110 11010': 3, '111110 00100': 34, '001101 10101': 1, '011110 10011': 2, '000111 00000': 2, '101001 11110': 1, '110110 01110': 18, '110111 00010': 26, '111100 00100': 5, '111100 00111': 2, '101101 01001': 3, '111101 01100': 2, '100110 01100': 74, '110101 11001': 2, '000101 00110': 1, '111011 01010': 4, '101000 11010': 1, '111110 10100': 11, '111100 11101': 1, '010110 10100': 2, '111110 11110': 2, '100110 11111': 4, '111100 01010': 4, '000110 01100': 7, '101100 01011': 1, '001110 11010': 3, '000110 00010': 1, '110100 10001': 1, '100010 00110': 5, '101110 11100': 16, '011101 01001': 1, '110111 00000': 90, '001111 11100': 9, '010111 11000': 6, '101101 10100': 2, '100101 11100': 1, '011110 00110': 1, '110010 01011': 1, '011111 10011': 4, '110001 01110': 1, '010111 00001': 2, '101110 01110': 10, '100010 11111': 1, '101010 01101': 3, '101010 11101': 1, '101111 11110': 18, '011101 00011': 3, '110110 10000': 30, '110100 01110': 2, '100110 11000': 31, '110000 00011': 1, '110101 00101': 3, '100110 10111': 4, '110110 01101': 18, '101010 10101': 1, '110111 10001': 21, '110011 00011': 4, '111101 00111': 2, '001011 10001': 1, '111100 10011': 1, '110101 01110': 2, '110011 10101': 1, '101101 11110': 1, '110111 00011': 8, '010110 01101': 1, '001111 00101': 2, '110010 01000': 7, '111100 00011': 3, '111111 10100': 29, '010101 11101': 1, '110101 00000': 6, '111100 11100': 1, '101010 11000': 3, '100010 10001': 2, '101111 01110': 13, '101111 00010': 32, '100001 00001': 1, '001110 01000': 13, '000010 01100': 1, '101101 11001': 6, '110011 10111': 1, '001011 10000': 1, '110011 11010': 1, '100001 01011': 1, '101000 00000': 2, '100100 00111': 1, '001110 00101': 1, '000111 01101': 3, '011110 00001': 5, '101011 01001': 3, '000110 11111': 1, '101111 11010': 43, '101110 01001': 46, '111011 10100': 1, '110011 11100': 1, '110011 01000': 12, '001010 10101': 1, '000110 00011': 1, '001100 11110': 1, '111111 11001': 24, '110100 00111': 2, '011101 00101': 2, '101111 00011': 14, '110010 10101': 1, '111100 00001': 4, '000011 00101': 1, '011110 00101': 1, '101011 11111': 1, '101110 11101': 9, '100110 10101': 5, '010110 10001': 4, '101010 00011': 5, '101111 10100': 19, '111111 00000': 140, '101010 11100': 2, '101111 10001': 24, '110010 00001': 1, '110011 11000': 3, '100111 11100': 29, '101111 10101': 5, '001111 11010': 7, '010011 00001': 1, '101110 10100': 12, '010111 01111': 2, '101111 10000': 55, '000111 11001': 1, '011110 01110': 1, '100111 11110': 7, '000101 10101': 2, '100101 11001': 2, '111100 10000': 3, '111110 11000': 31, '010100 10011': 1, '111101 01001': 2, '000111 10010': 2, '111101 10011': 3, '001101 00010': 1, '011110 01001': 2, '100110 01010': 24, '100011 10001': 1, '101101 11011': 2, '100010 00010': 4, '101011 00010': 3, '100101 10111': 1, '110100 10011': 1, '111111 01111': 3, '011111 10100': 6, '010101 01101': 2, '101011 11001': 8, '100111 10110': 6, '001110 00001': 3, '100101 11111': 6, '101011 11110': 3, '010101 11000': 1, '101010 00010': 1, '110010 10000': 3, '100111 01001': 31, '010110 00101': 7, '001110 11001': 6, '011110 11001': 3, '110100 00101': 1, '110011 00101': 1, '100101 11000': 1, '111010 01010': 3, '111010 11101': 2, '110110 10010': 3, '011111 00110': 1, '111100 01101': 1, '001011 10011': 1, '101011 11011': 4, '110110 00100': 53, '101011 01100': 4, '010011 01100': 2, '010111 00100': 5, '011111 01100': 4, '100100 10001': 1, '110101 01000': 7, '110101 10001': 2, '000110 01010': 3, '100101 00110': 1, '101011 00100': 3, '011100 10011': 2, '110110 11101': 2, '100100 11111': 1, '000110 11001': 2, '101010 01001': 6, '110111 00100': 84, '010111 01010': 2, '100100 00001': 1, '111110 11001': 14, '110100 00001': 2, '111110 10111': 3, '100111 00101': 22, '100011 11011': 1, '110111 10011': 8, '111100 10001': 1, '000101 11010': 1, '111010 01011': 1, '110111 00101': 34, '001111 00010': 3, '011111 01101': 1, '110110 10101': 13, '011111 01010': 5, '100110 11100': 20, '101011 10010': 1, '101110 10010': 8, '010011 00110': 1, '001100 10001': 2, '010011 11010': 1, '111011 11100': 3, '001010 11011': 1, '101000 10111': 1, '110100 01010': 2, '011101 10000': 1, '010111 11101': 2, '010110 00011': 4, '110100 11001': 1, '000111 11000': 6, '111100 01100': 2, '100011 00101': 2, '100100 11010': 3, '111110 01110': 4, '100011 00000': 7, '100100 00110': 4, '001110 00010': 3, '000111 11100': 8, '110011 01111': 1, '101110 00000': 72, '111111 00110': 13, '011101 11010': 1, '011111 01000': 7, '111010 01001': 4, '111011 00010': 8, '100111 01110': 22, '011101 00001': 1, '101010 11110': 2, '100101 11101': 1, '100111 00011': 8, '101100 11010': 3, '001111 10111': 2, '111011 01110': 2, '101010 01000': 9, '100110 11110': 7, '110110 11001': 12, '010110 11010': 2, '111101 00001': 6, '110101 10110': 1, '100010 11011': 1, '100011 01100': 5, '101110 10011': 4, '101111 10011': 10, '100110 00011': 10, '010111 00010': 3, '101110 11001': 34, '101011 01011': 3, '110110 00011': 9, '110110 00000': 30, '011111 11101': 1, '100011 11001': 1, '110011 01100': 10, '111111 01100': 30, '000111 01111': 1, '010110 10101': 2, '101011 00101': 1, '111101 10000': 5, '001100 01110': 1, '110011 01101': 1, '010010 00111': 2, '101111 10010': 25, '100110 01001': 35, '011110 10001': 7, '000110 00101': 1, '000110 00100': 4, '110101 01001': 4, '000100 01100': 1, '100101 01110': 4, '110110 11110': 3, '111010 10001': 1, '011110 11101': 2, '111010 01000': 6, '000111 11010': 3, '101100 00011': 6, '101101 10001': 1, '110101 01100': 4, '110111 00111': 13, '110011 10110': 3, '100101 01001': 5, '111000 11000': 2, '101100 11011': 5, '100111 01010': 31, '100010 01001': 3, '100110 11011': 3, '110011 00100': 3, '110110 00111': 16, '110011 00000': 5, '110000 00110': 1, '010110 00111': 1, '101110 11011': 16, '010010 11000': 1, '101010 01100': 4, '001011 11000': 6, '010010 01001': 1, '110111 01111': 6, '100110 00001': 18, '110100 01011': 5, '101001 00100': 1, '110110 10111': 3, '101001 01100': 1, '101111 00000': 102, '101101 01111': 1, '101110 01000': 71, '001110 11000': 9, '100100 00010': 3, '100010 01110': 5, '101010 10010': 3, '111111 00100': 47, '101100 10011': 2, '111101 10100': 2, '110111 00110': 25, '001111 01011': 2, '111010 00010': 5, '011111 11011': 1, '101101 00011': 3, '111001 01001': 1, '110101 00010': 3, '110110 01011': 15, '101110 00011': 7, '001100 00001': 1, '100010 00101': 1, '101111 00101': 16, '001101 11110': 1, '111100 11001': 4, '101101 00001': 5, '011101 11001': 1, '111100 11000': 2, '110110 01000': 60, '110110 10001': 15, '010110 00001': 5, '010110 01100': 4, '110110 01001': 31, '000110 10101': 1, '110110 11011': 2, '011110 10000': 5, '110100 01101': 2, '111001 11001': 2, '011110 10100': 4, '100010 01100': 4, '101100 00111': 2, '011111 00100': 5, '111110 10010': 16, '101101 01101': 1, '010110 10111': 2, '101010 01010': 5, '011110 00011': 3, '101111 11000': 128, '111100 00010': 4, '100111 01111': 11, '100110 10100': 14, '100010 01011': 1, '111101 10001': 3, '000100 01101': 1, '111011 01011': 3, '110101 00001': 1, '010101 10110': 2, '100111 00010': 14, '000111 01000': 7, '100000 10010': 1, '010010 01100': 1, '101111 01001': 61, '111011 00011': 5, '000111 01010': 3, '111101 00011': 4, '111010 00000': 5, '100011 01010': 9, '011010 01010': 2, '111111 11110': 1, '110010 01010': 2, '001111 01010': 7, '100101 10100': 1, '001110 11110': 3, '111010 00111': 1, '010110 01001': 3, '101110 11010': 31, '011111 11001': 7, '011100 00001': 1, '011011 10011': 1, '001110 10010': 5, '100110 01011': 11, '100100 01000': 2, '011011 00010': 2, '100101 10000': 2, '010111 01011': 3, '100011 01110': 12, '001100 11101': 1, '000111 00010': 2, '110011 10000': 6, '100110 00101': 20, '101011 00000': 3, '110111 10010': 16, '100000 00010': 1, '010110 01010': 3, '010111 00000': 9, '101111 11101': 11, '101011 01110': 2, '100111 00110': 12, '110100 10111': 1, '111101 01000': 10, '001111 01111': 1, '011011 00011': 1, '111110 01100': 26, '101010 10100': 1, '110011 10001': 1, '000111 10111': 1, '110101 11110': 1, '100100 01011': 4, '101101 01110': 1, '111110 10000': 33, '101111 01100': 49, '001111 11001': 5, '110100 11010': 2, '101110 10000': 42, '011101 00000': 3, '011010 01000': 1, '100011 00011': 3, '000111 10001': 5, '111101 11000': 3, '100101 01000': 5, '110011 00111': 2, '111111 00101': 19, '110011 01010': 5, '001111 01000': 20, '111111 11000': 65, '011100 10010': 2, '011101 00111': 1, '110110 11000': 13, '110100 00010': 3, '101100 11001': 4, '110110 10011': 4, '100011 01101': 1, '111011 00001': 4, '010010 10110': 1, '111111 10101': 16, '110010 00000': 2, '111101 10010': 2, '010111 00011': 2, '111101 10110': 1, '100101 00010': 2, '101111 00001': 45, '010100 01001': 1, '001111 01001': 6, '010110 00010': 1, '111111 01000': 68, '100101 11110': 3, '011111 01011': 1, '111110 01001': 30, '100011 10010': 1, '100111 10000': 35, '111111 10001': 29, '110111 10101': 12, '100001 11100': 1, '111110 01111': 4, '011100 01110': 1, '111110 01010': 13, '001110 10100': 3, '111110 01011': 12, '111110 11011': 10, '001000 11010': 1, '101111 11100': 26, '011010 11111': 1, '011100 11111': 1, '110111 10100': 35, '101101 00100': 1, '110111 10000': 39, '100100 00011': 2, '101110 00110': 10, '011111 10010': 5, '111101 11100': 4, '110100 00100': 4, '110010 00100': 5, '111101 01010': 9, '000101 00001': 1, '001111 00100': 6, '110100 00011': 2, '101011 10001': 2, '000111 11111': 1, '001101 01011': 1, '100111 00100': 61, '101010 10011': 1, '011011 00100': 1, '000100 00001': 1, '110010 10001': 2, '101101 11101': 1, '101101 00111': 2, '100011 11111': 2, '001111 00001': 4, '011110 01101': 1, '110010 00111': 2, '100011 00110': 1, '001010 10011': 1, '001111 11011': 2, '011111 11100': 3, '110011 01110': 5, '110010 00110': 2, '110101 10000': 2, '110110 00101': 25, '001110 01011': 3, '000100 11010': 1, '000111 10000': 4, '101100 00100': 1, '101101 11000': 14, '001101 11000': 1, '000110 00001': 2, '000110 10001': 2, '011111 10001': 11, '100010 11100': 2, '010010 10000': 1, '110010 01110': 2, '100011 01001': 2, '110011 10011': 1, '100101 00000': 2, '111110 00011': 14, '001111 01110': 4, '101111 01011': 28, '000110 11000': 7, '111111 00010': 41, '111110 11101': 5, '111001 10000': 1, '011111 11000': 15, '000100 10010': 1, '100110 11010': 13, '010010 10111': 2, '011101 10001': 1, '000110 01011': 1, '100100 11011': 2, '110100 01100': 2, '010110 10011': 4, '001100 11010': 1, '010110 11111': 1, '010110 10010': 4, '101110 10001': 26, '110000 01101': 2, '000110 11010': 1, '110101 11100': 2, '111110 00010': 33, '110101 11010': 1, '101110 00101': 5, '011111 00000': 12, '101100 00010': 7, '011011 11101': 1, '111000 01000': 1, '111111 01001': 31, '110110 10110': 2, '111111 10000': 70, '111011 01000': 13, '100011 00010': 1, '111111 10110': 6, '010011 10100': 1, '111111 00111': 8, '101100 11111': 1, '101001 00110': 1, '110110 11010': 9, '110010 00101': 4, '110111 01101': 28, '100110 01101': 39, '110101 10100': 2, '101100 00000': 4, '011100 01001': 1, '100111 10100': 12, '001111 10000': 14, '111110 00000': 90, '111111 01010': 23, '011110 01000': 7, '101101 00101': 2, '010111 10011': 2, '000111 10101': 3, '001111 10100': 5, '101000 00100': 1, '111010 10000': 4, '000111 00110': 3, '010101 01001': 1, '111101 01011': 2, '110010 10010': 1, '101110 01011': 18, '111111 11010': 14, '110001 11110': 2, '001101 01001': 1, '110101 10010': 3, '100100 01001': 1, '111110 00111': 3, '110011 01011': 2, '000110 11100': 9, '100101 10001': 1, '010111 11010': 1, '110111 11000': 23, '100111 11101': 7, '001111 10110': 2, '000110 01101': 1, '101010 10111': 2, '111011 01101': 1, '111110 11111': 3, '001101 11001': 1, '000010 00001': 1, '101110 00010': 20, '011111 10000': 17, '101110 01111': 4, '011101 00100': 1, '100111 10111': 1, '011011 11000': 1, '110011 00001': 4, '010111 10000': 11, '111011 10010': 3, '100111 10001': 11, '100001 00010': 1, '100101 00111': 1, '100000 11111': 1, '000111 00001': 1, '100101 00101': 1, '100101 10010': 1, '101011 01000': 12, '001111 00000': 12, '101010 11010': 5, '001101 10001': 1, '101101 10000': 6, '001111 11101': 4, '010111 01100': 7, '101101 00000': 7, '101110 01100': 21, '001100 00000': 2, '010111 01110': 3, '110111 10111': 3, '001000 01011': 1, '111110 10011': 6, '100010 11000': 5, '001110 10101': 2, '100100 10011': 2, '110101 01011': 2, '100111 01101': 47, '101010 11011': 2, '110011 00010': 5, '100011 01000': 5, '011110 10110': 2, '110011 11111': 1, '100010 01000': 4, '100111 00001': 17, '110101 11000': 5, '101100 00001': 1, '101101 11010': 5, '101110 11110': 13, '100110 00110': 15, '101100 10110': 2, '101100 01000': 5, '100000 11010': 1, '100010 00111': 3, '001110 00000': 10, '001110 11101': 4, '111101 11010': 2, '110010 00011': 1, '100110 10011': 5, '101010 00000': 4, '100101 10110': 1, '101011 11000': 9, '010111 00101': 8, '011111 00001': 5, '101101 01000': 6, '101110 01010': 31, '001010 00010': 1, '110001 11111': 1, '001101 00110': 1, '100011 11000': 5, '111110 00110': 8, '011110 01100': 4, '101110 00001': 24, '011110 00010': 2, '001110 10001': 5, '111011 11001': 4, '110011 11110': 1, '100011 11110': 1, '110011 11101': 1, '100000 01111': 1, '111101 11001': 1, '001011 11111': 1, '110011 01001': 3, '010111 01001': 9, '101111 11111': 5, '111010 01111': 2, '111100 10111': 1, '100110 11101': 9, '010001 01100': 1, '110110 11100': 14, '100000 01011': 1, '100111 11000': 37, '001111 11110': 1, '000111 00101': 2, '101010 01011': 1, '101110 11111': 5, '111110 01101': 11, '110110 01010': 17, '100111 10011': 7, '111111 11101': 5, '011011 10000': 1, '100101 00001': 2, '011101 01000': 1, '011110 11011': 2, '111110 10101': 5, '101110 10111': 4, '111111 01101': 14, '101111 10111': 2, '111001 00010': 1, '101010 10000': 3, '101100 10000': 1, '110111 01000': 93, '000011 01010': 1, '010111 11001': 2, '001101 01000': 1, '110001 01000': 2, '100010 10100': 1, '010011 10110': 1, '101100 01100': 2, '110111 11101': 3, '010111 11100': 5, '101101 11111': 2, '011010 00010': 1, '101111 11001': 54, '110111 01100': 69, '001111 10101': 4, '100110 01110': 26, '101111 10110': 7, '101000 01011': 2, '010010 01000': 1, '101100 10001': 2, '010110 11101': 3, '100110 10000': 25, '101110 00100': 18, '101011 00110': 2, '001010 00110': 1, '111111 10111': 2, '000100 10110': 1, '110110 00010': 9, '011111 00011': 1, '100010 01010': 8, '101100 01010': 3, '000111 01011': 2, '010111 10100': 12, '101101 00010': 7, '100000 01010': 2, '100100 01100': 6, '111100 11011': 1, '111011 01100': 3, '110101 01111': 1, '111011 00110': 9, '010101 01000': 1, '101110 10110': 2, '100010 01101': 5, '010110 00100': 3, '111000 00011': 2, '101100 11100': 3}}, 7: {'0': {'0010001 100000': 2, '1010000 101001': 1, '0100000 000000': 10, '1001000 011010': 2, '0110000 011001': 2, '0110100 010000': 2, '0010100 001110': 5, '0010100 010011': 1, '0011000 001001': 7, '0011001 101111': 1, '1011010 001001': 1, '0000000 010111': 4, '0000001 010001': 6, '0011000 011001': 1, '1011000 110000': 1, '1001001 000001': 1, '0110010 010011': 2, '1101000 011001': 1, '0001001 010100': 5, '1010001 000000': 2, '0000000 000011': 74, '1010101 100100': 1, '1010000 110010': 2, '0110001 000100': 1, '0001001 011110': 2, '0111000 000110': 4, '0011000 001010': 22, '0001000 001011': 5, '1000000 000000': 21, '1111000 111100': 1, '0001000 011101': 8, '0100000 110110': 1, '0100000 110010': 1, '0010001 000100': 13, '0000001 010110': 4, '0001101 101000': 1, '0000100 010111': 1, '0000010 010011': 5, '1011001 001101': 1, '0110001 000010': 2, '1101000 101100': 1, '0010000 011000': 78, '0010001 010101': 2, '0011010 001000': 1, '0110000 001111': 1, '0001010 001101': 1, '0101000 011110': 4, '0000000 101010': 10, '0000000 010001': 20, '0000100 011101': 1, '0010001 011011': 1, '0010001 101100': 1, '0110000 000010': 8, '0110000 100010': 1, '1000000 000010': 24, '0000001 010101': 1, '0011001 010100': 2, '0000011 000000': 1, '0000011 000111': 1, '0010000 101110': 8, '0010101 000111': 1, '0000001 011000': 7, '0001001 010001': 1, '1000000 100001': 1, '1010000 110101': 1, '1001000 111100': 2, '0110000 011100': 9, '0101001 010100': 1, '0010001 111001': 1, '0110000 111110': 3, '1010000 000000': 20, '1110001 010000': 1, '0011001 101100': 1, '0100001 110000': 1, '0110000 110000': 4, '0010101 110100': 1, '0001100 000100': 1, '0011001 011011': 2, '0110000 111011': 1, '1000100 100000': 1, '0111000 111110': 1, '0101000 010010': 2, '0010011 001001': 2, '1011001 001010': 1, '0011100 000100': 1, '0011001 001111': 2, '0010001 011001': 6, '0010000 110000': 7, '0110000 010100': 8, '0100000 111100': 1, '1010001 100010': 2, '0011000 000001': 1, '0011101 010001': 1, '0110001 000000': 2, '1000101 000010': 1, '0110001 011000': 2, '0111010 001111': 1, '0010110 000011': 1, '0011001 000010': 2, '0100010 011001': 1, '0101000 011100': 6, '0110001 001000': 1, '1011000 011110': 2, '1001000 011001': 1, '1011000 001000': 4, '0010010 101001': 2, '0011100 011000': 2, '0100000 001100': 2, '0000000 000000': 503, '1000100 001100': 1, '0010001 001001': 10, '1000001 011000': 1, '0100000 011001': 5, '0110001 111000': 1, '1100000 010011': 1, '0001000 101110': 1, '0010000 010100': 18, '0011001 100000': 1, '0011000 000110': 14, '0001001 100100': 1, '0011000 010000': 11, '0111001 011001': 1, '0010010 000101': 2, '0010100 110011': 1, '1010001 001001': 1, '0000010 000000': 4, '1011000 001011': 2, '1010000 000110': 3, '0001001 011000': 3, '0011100 101010': 1, '0101100 010000': 2, '0010101 001100': 1, '1000001 010000': 1, '0001100 001011': 2, '0111000 000111': 1, '0001100 100100': 1, '0000001 100000': 6, '0011011 101111': 1, '0010010 010010': 1, '1000100 010110': 1, '0010000 000000': 340, '1011100 001000': 1, '0010011 000001': 1, '1010000 011010': 3, '0010011 010110': 1, '0011010 001011': 2, '0100101 001001': 1, '0111001 011000': 1, '0001001 010101': 1, '0010100 100100': 1, '0101001 010110': 1, '0001000 110110': 1, '0000000 111100': 2, '0111000 010011': 1, '0101000 000010': 1, '0011000 111010': 2, '0110000 110110': 1, '1000000 011000': 3, '0000100 010000': 5, '0000111 001001': 1, '1011001 101100': 1, '0010001 001110': 5, '0010010 000010': 2, '0011101 000010': 1, '0100000 001010': 6, '1010001 000101': 1, '0001000 001101': 5, '0001001 001101': 3, '1000000 001000': 15, '1001000 001000': 2, '0000100 001010': 8, '0001001 010011': 1, '0101001 001000': 1, '0101000 010110': 3, '0000110 000001': 1, '1011000 011000': 1, '0010001 000101': 7, '1001000 010010': 1, '0100000 011101': 2, '0011001 110100': 1, '0000101 001110': 3, '0001000 010010': 6, '1010000 001000': 19, '0011000 100110': 1, '0011100 001110': 4, '0100001 010010': 4, '1010101 001100': 1, '0010100 001101': 3, '0110001 001010': 1, '1010000 001011': 2, '1011000 011100': 4, '0011010 001111': 4, '0011000 011000': 14, '0001000 010101': 9, '0000000 100011': 4, '0010000 001101': 20, '1000000 111110': 1, '0001010 001110': 1, '0011000 010101': 4, '0011010 011110': 1, '0001000 000001': 6, '0011000 101010': 1, '0011000 000000': 12, '0011001 011010': 4, '0001010 100000': 1, '0010001 001100': 10, '0000010 000111': 2, '0101000 001111': 1, '0101000 110000': 2, '0111000 100110': 1, '0001000 000010': 17, '1011001 010101': 1, '0110000 101010': 3, '0101000 011101': 1, '0011100 111000': 1, '1010010 001011': 1, '0101001 001111': 1, '0110001 010100': 2, '0001000 001010': 24, '0001010 000111': 4, '0000010 001000': 3, '0011000 011110': 32, '1010000 110000': 1, '0010101 001010': 1, '0000100 100110': 1, '0000000 011101': 5, '0100000 000100': 4, '0000000 000010': 398, '0100000 110011': 1, '1000000 100100': 2, '0111001 101000': 1, '0010100 000110': 3, '0000100 000010': 11, '0010001 100100': 2, '0000100 010100': 2, '1010000 000101': 2, '1011000 011010': 4, '0000000 101001': 4, '1110000 010101': 1, '0100010 010001': 1, '0000001 000011': 7, '0001101 001100': 1, '0010001 001011': 7, '0010000 001001': 46, '0010010 100100': 1, '1000001 000000': 5, '1100000 010100': 1, '0010100 011001': 1, '0010001 110000': 1, '0111000 011010': 6, '0000101 000100': 2, '0000000 100100': 4, '0010100 000001': 1, '0010010 001111': 2, '0010000 010010': 44, '0101000 010101': 2, '0000000 000001': 91, '0001000 001001': 3, '0001100 000000': 1, '0001001 001100': 6, '0000000 011110': 14, '0100000 011110': 4, '0011000 110110': 3, '1001000 010110': 1, '0000100 000000': 6, '1000010 011110': 1, '0011101 100011': 1, '0011101 011010': 1, '0010001 011010': 8, '0010001 101010': 8, '0111000 110100': 1, '1010001 011010': 1, '0011001 001010': 4, '0001000 010000': 12, '0010010 101011': 1, '0100101 000010': 1, '0101001 011110': 1, '1110000 000010': 1, '0010001 011101': 1, '1110000 011100': 2, '0000010 000010': 4, '0110000 000101': 1, '1000001 101010': 1, '0000000 011001': 9, '1011001 011111': 1, '0111000 010110': 1, '1010001 101100': 1, '1100000 010110': 2, '0010101 001110': 2, '0011000 010110': 14, '1100001 000100': 1, '0010000 000110': 61, '0010011 001011': 3, '0010000 111010': 8, '0010010 001000': 1, '0011000 111100': 1, '0010100 000010': 6, '0111000 000101': 1, '0001001 001110': 1, '0001100 001000': 1, '0010010 110000': 1, '0001010 011110': 1, '0000010 000110': 1, '0010001 101110': 2, '0000001 100010': 6, '1010000 010000': 5, '0101000 101110': 1, '1000000 010110': 1, '1001000 000110': 1, '0111000 011111': 1, '1000000 100110': 1, '0101000 011000': 3, '0101000 011010': 2, '0000001 011001': 1, '0000010 010111': 2, '0010000 000010': 233, '0110001 001001': 1, '1010000 100011': 1, '1000000 110000': 1, '0011100 000101': 1, '0010000 111110': 2, '0000001 100100': 1, '0100011 011110': 1, '0110001 010000': 6, '0000101 001001': 1, '0000110 001010': 1, '0100010 010100': 1, '0000100 001000': 4, '0011010 010111': 2, '0000001 001001': 9, '1011100 011010': 1, '0110010 101011': 1, '1110000 111001': 1, '0010110 001110': 1, '0100010 011011': 1, '1010000 011100': 2, '1000000 011101': 1, '0000000 100110': 8, '0010100 101000': 1, '0010001 100001': 1, '0111001 011100': 2, '0011001 001001': 3, '0110000 111010': 3, '0010100 100000': 2, '0000001 011011': 1, '1001000 000100': 2, '0011000 000010': 10, '0010000 000101': 17, '0010010 001011': 7, '1110000 011000': 2, '0001000 000111': 11, '0010000 000001': 51, '0000001 001010': 15, '0011000 010011': 3, '0100000 010001': 6, '0000000 011111': 4, '0001000 011001': 2, '0001001 011010': 2, '1011000 001100': 6, '0110000 110010': 3, '0001101 001000': 1, '0100000 000011': 2, '0000100 010010': 6, '1101000 111000': 1, '0010010 001110': 1, '0010001 100011': 1, '0100000 001111': 1, '0000101 101010': 1, '0110001 010001': 1, '0011001 011111': 3, '0000101 001000': 1, '0000000 011100': 21, '0010100 010110': 1, '0001000 001100': 62, '0000001 100001': 4, '0010001 000011': 8, '1000000 001011': 2, '0010000 011011': 6, '0110000 001000': 14, '0000011 001001': 1, '0001010 000101': 2, '0100101 001010': 1, '0010000 000111': 14, '1010000 001001': 2, '0111000 010000': 1, '0110010 110011': 1, '0100000 010011': 8, '0011001 011110': 2, '0110000 001100': 3, '0000000 000100': 116, '1001000 110010': 1, '1100000 011010': 1, '0110001 111001': 1, '0100010 001011': 1, '0001001 010110': 1, '0000100 011100': 1, '1100000 010000': 3, '0110001 001110': 2, '0000000 100101': 1, '0110000 010111': 2, '0001000 011000': 10, '0011001 000000': 5, '0001000 101010': 2, '0010000 100000': 28, '0011000 000100': 20, '0100000 010110': 8, '0010001 000000': 37, '0011000 100100': 4, '1000000 011010': 5, '1011000 001110': 4, '0111000 001100': 4, '0010100 000111': 2, '0001000 000011': 7, '1010000 111010': 1, '0110100 000111': 1, '0101000 010000': 2, '0111000 011100': 8, '0000001 000100': 18, '0011001 011001': 1, '0000010 001111': 2, '0100100 011000': 1, '0011101 001110': 1, '0000010 011111': 1, '0010100 011100': 2, '1000001 000110': 1, '0011000 111000': 2, '0010000 111100': 6, '0001000 001000': 33, '0011000 111001': 1, '0111001 011110': 2, '0010000 010101': 1, '0100001 010111': 1, '0010000 101100': 11, '0010000 010000': 53, '1010000 011110': 3, '0011000 001000': 26, '0000110 001011': 1, '0000100 000001': 1, '0001001 011100': 5, '0000000 110011': 1, '0010100 001010': 9, '0101000 010100': 3, '1110000 001100': 1, '0010000 110001': 1, '0110000 011010': 20, '0110000 100000': 1, '0010011 010010': 1, '1100000 001000': 1, '0111000 011110': 4, '0011001 011100': 7, '0000100 011010': 1, '1011000 001111': 1, '0001000 000101': 9, '0000000 000101': 17, '0100001 000000': 1, '0001000 011110': 23, '1001000 011000': 1, '0001000 010100': 24, '0001000 100100': 1, '1001000 111010': 2, '0111000 010010': 3, '1010000 111011': 1, '0110000 010001': 7, '1001000 100000': 1, '0100100 001010': 1, '0010010 000011': 8, '0110000 101000': 2, '0000000 001111': 7, '0011000 011111': 8, '1000000 000110': 5, '0011001 001101': 3, '0000100 000011': 3, '1010000 111000': 3, '0010100 010000': 1, '0011001 000100': 3, '0000000 101011': 1, '0010000 001100': 77, '0010000 001000': 250, '0010001 011110': 3, '0000100 100010': 1, '0000010 100001': 1, '0011100 001010': 1, '0000100 001111': 1, '0010000 100011': 4, '0100001 111010': 1, '0000101 001010': 1, '0011000 011010': 11, '1110000 011010': 1, '1010000 101100': 1, '0010101 010011': 1, '0000010 000001': 3, '0000000 000111': 19, '0011100 011100': 2, '0001000 000000': 40, '0010001 001111': 3, '0001000 011011': 2, '0000000 101000': 3, '0011001 000111': 1, '0010100 010010': 1, '1011000 111110': 1, '0010001 100110': 1, '0000001 011100': 2, '0010010 001010': 2, '0000000 010100': 48, '0001011 011001': 1, '0011010 011111': 1, '0011001 101110': 2, '0011001 000110': 1, '0101001 001100': 1, '1000000 010100': 4, '0000000 110100': 3, '0101001 011100': 2, '0011001 001100': 9, '0010110 000100': 1, '0010101 000100': 1, '0011000 101100': 3, '0000000 011010': 36, '1010000 000011': 4, '0001001 000010': 3, '0001100 101000': 1, '0011000 010010': 11, '0100001 001001': 1, '0010001 011100': 4, '0000001 010000': 18, '0010100 001111': 1, '0000100 110111': 1, '0101000 101100': 1, '1011000 011101': 1, '0011000 101111': 2, '0000100 010011': 1, '0001001 010000': 3, '0011001 001110': 10, '1000001 010010': 1, '1000100 000110': 2, '0010001 101001': 1, '0110000 011110': 2, '0110001 010010': 4, '0111000 011101': 2, '1001000 101100': 2, '0100000 011000': 15, '0111000 110110': 1, '0000000 010000': 97, '0010010 100000': 1, '0101000 001010': 1, '1011000 100100': 1, '0010000 111101': 2, '1100000 110000': 1, '0000001 010011': 3, '0000000 001110': 58, '1010000 101010': 2, '0111000 001110': 2, '1010010 001001': 1, '0010000 101010': 23, '0001001 011101': 3, '0001000 011111': 5, '0100100 010010': 3, '0001001 000100': 8, '0110100 001000': 1, '0001000 111100': 1, '1001000 111110': 1, '1010000 010011': 2, '0001100 011000': 1, '0101000 011001': 2, '0111000 001111': 2, '0001001 000110': 7, '0010000 010111': 2, '1000000 001010': 10, '1000000 100000': 1, '0010000 110010': 8, '0000010 100011': 1, '0010010 011011': 1, '0010011 001100': 2, '0011010 001100': 1, '0100000 010111': 3, '0000001 010100': 6, '1110000 001110': 1, '0010000 000011': 39, '0010100 011010': 3, '0010100 011110': 1, '1010000 011000': 6, '0010000 001110': 72, '0001001 110010': 1, '0011000 001101': 13, '0110000 001010': 9, '0000000 111110': 1, '0001011 010100': 1, '0110000 110011': 3, '0000010 000100': 1, '1001100 011110': 1, '1000000 011100': 3, '1110001 000010': 1, '0001000 010110': 26, '0011100 001000': 1, '0100000 010000': 48, '0101000 000110': 1, '0100000 110000': 5, '0001100 001100': 3, '0010100 001100': 12, '0101000 101010': 1, '0011010 111111': 1, '0110001 010110': 1, '1010001 001000': 6, '0101000 000000': 1, '0110010 110001': 1, '0010001 100010': 2, '1010000 001110': 2, '0110100 001100': 1, '0010001 000110': 8, '0010000 000100': 89, '1010000 000100': 6, '1010000 001100': 6, '0000100 001110': 2, '0010100 100110': 1, '0001100 011110': 1, '1100000 011000': 2, '0110000 010000': 30, '0110001 110100': 1, '1000010 000011': 1, '1000001 001000': 2, '0101000 001100': 6, '0001001 000001': 2, '0000100 000110': 9, '1100000 000001': 1, '0100001 111000': 1, '0000010 001001': 2, '1000000 010011': 1, '1001000 001110': 4, '1010001 001011': 1, '1000000 001001': 1, '0110001 001011': 1, '1101000 010100': 2, '0011001 001011': 2, '0010100 001000': 4, '0110010 011010': 1, '0011001 011101': 1, '0100000 001001': 1, '0111001 111000': 1, '1000000 000111': 1, '0001000 011010': 10, '0011000 101110': 9, '0011000 001111': 5, '0110000 111100': 1, '1001000 011110': 1, '0010100 000100': 12, '0010100 010001': 1, '0110000 011101': 2, '0000100 000100': 18, '0100000 000110': 5, '1010000 011111': 2, '1010100 000110': 1, '0110000 000000': 9, '0011000 010111': 3, '0010000 100101': 1, '0110001 011010': 1, '0010000 110100': 2, '1010001 010101': 1, '0000000 001010': 149, '0011001 010010': 1, '0011000 000011': 7, '0010111 001011': 1, '0011011 001101': 1, '0011000 111110': 5, '0000000 001001': 44, '0001000 010111': 3, '0000100 010110': 2, '0001100 011011': 2, '0111001 010111': 1, '1000011 000110': 1, '1011000 101110': 1, '0000100 000111': 1, '0000000 001101': 21, '0010010 001001': 3, '0100000 011010': 11, '0001001 101110': 1, '0100000 010010': 22, '1010001 001010': 2, '0011110 010011': 1, '0111001 011111': 1, '1000000 000100': 13, '1010000 100001': 1, '1110000 110000': 1, '0011100 111100': 1, '0011001 001000': 5, '0000001 001110': 9, '0011000 011100': 53, '0000001 000001': 23, '0000001 010010': 13, '0001000 010001': 3, '0110100 000010': 1, '1010001 000010': 3, '0000110 000011': 1, '0001000 111111': 1, '0010001 010111': 1, '0010001 010001': 5, '0110000 010011': 6, '1110000 001010': 1, '0010000 100001': 8, '1011000 010110': 2, '0101001 011000': 2, '0000000 100010': 21, '0000001 001100': 12, '0110000 101100': 1, '1000000 000001': 7, '0010000 100010': 30, '0010000 011100': 31, '0011001 111010': 1, '0010000 101011': 6, '1010100 000010': 1, '0010100 000000': 9, '0000000 101110': 4, '0010000 011111': 7, '0010010 000111': 1, '0000000 001011': 21, '0001000 101000': 1, '0110100 010101': 1, '0110000 011111': 1, '0100000 000001': 3, '0110010 010110': 1, '0010000 010011': 8, '0011000 011101': 10, '0110000 010010': 25, '0001100 000110': 1, '1000000 011110': 1, '0110001 110011': 1, '0000001 000010': 56, '1011000 110100': 1, '0011001 111100': 1, '1000010 000001': 1, '0110000 110101': 1, '0001011 001111': 1, '0000011 000011': 2, '1010001 100000': 1, '1110000 010110': 1, '0001001 001010': 2, '0111000 111100': 2, '0000000 110010': 2, '0011001 010101': 1, '0000010 011110': 2, '1010000 001010': 16, '1010100 000011': 1, '0010000 010110': 25, '1010000 010100': 2, '0000001 011101': 1, '1000000 010101': 1, '0010100 010101': 1, '1110001 011000': 1, '0011000 110011': 2, '1001000 011100': 1, '1010001 010001': 1, '0011000 110100': 1, '0011101 011111': 1, '0100001 010000': 7, '0110000 000111': 1, '1000100 001010': 1, '0100000 000010': 17, '0110000 111001': 1, '0110000 011000': 24, '0000001 000110': 16, '0100000 110100': 1, '0001000 000110': 33, '1000001 000001': 3, '1010000 100101': 1, '0001000 000100': 41, '1000000 100010': 2, '0000001 001000': 33, '0000000 010110': 26, '1000001 000010': 2, '0010001 011000': 13, '0011000 110010': 1, '0000000 011011': 8, '1010010 000111': 1, '0010010 010011': 2, '0011000 000101': 7, '0011001 000001': 1, '0011100 001100': 3, '1001000 010100': 3, '0101000 111110': 1, '0110000 001101': 1, '0011001 111000': 2, '0000001 001111': 1, '0110101 010110': 1, '0000010 010001': 2, '0011100 011010': 2, '0110000 001001': 4, '0001000 011100': 35, '1110000 110010': 1, '1110000 010010': 3, '1100000 000110': 1, '0100001 011000': 4, '0010001 001000': 38, '0010011 100001': 1, '1101000 011000': 1, '0000000 010011': 11, '1010000 000010': 19, '0100011 010011': 1, '1000100 000000': 1, '0001100 011010': 2, '1000000 100011': 1, '0001010 010011': 1, '0100010 001101': 2, '0011100 000110': 3, '0010000 011010': 55, '0010001 000111': 5, '0010000 011001': 11, '0111000 110010': 1, '0010011 001010': 1, '0000000 101100': 1, '0001001 001011': 1, '0000101 000111': 2, '0010001 010110': 1, '0010101 000000': 1, '0001001 000101': 1, '0010001 000010': 36, '0001000 001111': 6, '0100000 001000': 6, '0000101 000010': 2, '0000101 001011': 1, '0010000 101001': 3, '0010000 101000': 27, '0000000 000110': 110, '0011010 010011': 1, '0100100 010011': 1, '1010000 000001': 5, '0010001 010000': 7, '0110000 010110': 3, '0001001 001111': 2, '1000000 010010': 3, '0010101 000010': 1, '0011001 010000': 1, '1001000 001100': 5, '0010000 101101': 2, '0000000 011000': 34, '0000000 010010': 88, '0010001 110111': 1, '0010000 001111': 15, '0101001 110110': 1, '0011001 010110': 3, '0011001 011000': 2, '0001000 101100': 3, '0110000 000001': 2, '0000010 111101': 1, '0000001 011010': 4, '0001000 110100': 1, '0010000 001011': 38, '1011000 111100': 2, '0010001 010010': 4, '0101001 001101': 1, '0100000 101100': 1, '0000100 011000': 1, '0000011 010011': 1, '0110000 101110': 1, '0110000 001110': 2, '0110100 010110': 1, '1000000 000011': 5, '1011000 000000': 3, '1010000 100010': 4, '0100001 010110': 1, '0100001 010001': 5, '0000001 000111': 2, '0010000 010001': 13, '0010010 010001': 2, '0010000 111000': 4, '1011000 010000': 2, '1010000 101000': 8, '0011000 010001': 2, '0100000 111000': 2, '1011000 000110': 1, '0000001 001101': 2, '0000000 100000': 22, '1001100 000100': 1, '0000000 001100': 84, '0000100 000101': 1, '1100000 010010': 2, '0001000 001110': 44, '0010010 011111': 3, '0100000 010100': 7, '0110001 110000': 2, '0000000 101101': 1, '0000000 010101': 8, '0010100 000011': 1, '0000000 100001': 6, '0111000 011000': 3, '0010000 011101': 8, '0100101 010010': 2, '1010000 001111': 2, '0010001 000001': 8, '0011000 101000': 6, '1110000 001000': 1, '0010001 010100': 6, '0000001 101000': 3, '0111000 001000': 1, '0111000 000100': 1, '0010100 101010': 1, '0011000 000111': 2, '0001100 001010': 3, '1000100 000010': 1, '0001100 001101': 1, '0001101 000010': 1, '0011000 001110': 54, '0010000 100110': 11, '0011010 000001': 1, '1010000 010010': 4, '0001000 010011': 2, '0011000 010100': 26, '0000010 001011': 5, '0100001 000100': 1, '0010100 001011': 3, '0011000 111101': 2, '0000010 000011': 24, '0100010 010111': 1, '0001010 001100': 1, '0000001 101001': 1, '0010000 111001': 1, '0000001 000101': 3, '0110000 011011': 5, '1010000 010111': 2, '0100000 011100': 5, '0100100 110001': 1, '0001001 001000': 2, '1000010 001011': 1, '1010000 100100': 2, '0000000 111010': 1, '0111000 001010': 2, '0110000 000011': 2, '0000000 001000': 192, '0000001 001011': 13, '1000000 001100': 7, '1111000 011110': 1, '0000101 000110': 2, '1000000 010000': 9, '0011000 100010': 2, '0100001 010011': 1, '0110000 111000': 4, '0010000 100100': 16, '0100100 000010': 1, '1011000 010010': 2, '1111000 011101': 1, '0001100 010100': 3, '0010001 001010': 27, '1010000 001101': 1, '0000000 110000': 6, '0011000 001011': 4, '0000000 110001': 3, '0010100 011000': 5, '0011000 100111': 1, '0110000 110111': 1, '0011000 101101': 3, '0011010 001010': 1, '0110111 011001': 1, '0100000 011011': 4, '0010100 110100': 1, '0010000 001010': 184, '1100001 000011': 1, '0000000 110110': 2, '0000000 111000': 2, '0101000 111010': 1, '0101001 111100': 1, '1001000 001010': 2, '0110100 001010': 1, '1010000 100000': 3, '0110000 110100': 2, '0010000 011110': 15, '0111000 010100': 2, '0000001 000000': 71, '0100101 010110': 1, '0011000 100000': 3, '1001001 011110': 2, '0010001 001101': 5, '0001101 000111': 1, '0000100 001100': 9, '0010010 011010': 2, '0011000 001100': 71, '0111001 011101': 1, '0110000 001011': 3}, '1': {'1000111 000111': 2, '1100101 001001': 2, '1111010 000111': 2, '1101111 100100': 1, '0010110 000110': 1, '1100011 010000': 4, '1110011 011110': 1, '0100110 000111': 1, '1101111 011000': 101, '1010011 111110': 1, '0100001 001100': 1, '1011010 001001': 1, '1011111 011010': 3, '1101011 011010': 4, '1101101 010000': 5, '1101000 011001': 1, '1111011 011001': 1, '1101110 011101': 6, '1010100 010001': 1, '1011110 001000': 7, '0000010 001110': 1, '0101010 000011': 1, '1110110 011111': 2, '1000111 000100': 7, '0111111 011100': 1, '1100110 000000': 29, '1100111 110000': 1, '1001110 111001': 2, '1011111 000100': 8, '1010110 000100': 7, '1100100 001010': 2, '0010111 100110': 1, '0100110 001110': 1, '1101110 001100': 16, '0111110 001110': 1, '0101011 010000': 2, '1111010 011110': 1, '1101100 011000': 4, '1001111 011100': 7, '1100110 010100': 20, '1000101 000100': 2, '1000110 011101': 4, '1001110 001010': 3, '1000111 010010': 1, '1111111 010111': 5, '0101100 000000': 1, '0111111 110001': 1, '1010111 010000': 10, '1110110 000101': 28, '1010111 001101': 2, '1010010 110010': 1, '1001110 111100': 1, '1100110 001111': 8, '1100110 001100': 48, '1110111 100010': 3, '1110100 001011': 2, '1001011 010000': 2, '1101010 010110': 1, '1111000 010000': 1, '1100110 110000': 1, '0100110 010100': 1, '0111111 000101': 3, '1101111 001001': 44, '1111110 001100': 23, '1011101 001001': 1, '1101110 101100': 1, '1001101 000011': 1, '1010101 010101': 1, '1111011 000011': 2, '1111111 001000': 87, '1001111 100100': 1, '0110011 100001': 2, '0100011 000010': 1, '1100010 001101': 2, '1001111 010011': 3, '1111001 011110': 1, '0101011 001001': 1, '0101011 010010': 1, '0101110 101100': 1, '1010111 110000': 2, '1011011 010010': 2, '1100001 001110': 1, '1111010 000001': 2, '1000101 001001': 2, '1010110 100000': 1, '1011110 111001': 3, '1110110 001111': 13, '1110010 011010': 1, '0101110 111010': 1, '1010011 011010': 1, '1111111 001011': 3, '0100111 000011': 2, '1100111 001111': 5, '1101111 011110': 5, '1100010 001010': 1, '1101110 010011': 10, '1110110 101101': 2, '1000110 001111': 3, '0101110 001000': 8, '1001110 010100': 5, '1011110 101001': 1, '1111001 000000': 1, '1111101 000011': 4, '0101111 001001': 1, '1011110 111101': 1, '0010111 100100': 2, '1011110 010100': 2, '1111100 110000': 1, '0101010 000100': 1, '1010110 110101': 1, '1011100 011011': 2, '0011110 000000': 1, '1110101 101100': 1, '1110110 010000': 33, '1101100 010001': 1, '1100110 000111': 6, '1000110 001110': 2, '1011110 011110': 1, '1010010 010000': 1, '1111110 100110': 2, '0110110 011111': 1, '1011111 111101': 3, '1101101 111011': 1, '1101100 000110': 1, '1101111 000111': 4, '1100101 000111': 1, '1011111 010000': 19, '1100010 000100': 1, '1100110 001101': 36, '1101011 010101': 1, '1101111 011100': 25, '1100100 011010': 2, '1101100 000000': 4, '1011111 110001': 2, '1100111 000111': 1, '1011111 110000': 4, '0000111 001001': 2, '1111110 100010': 1, '1111101 000010': 4, '0100100 001001': 1, '1001011 010001': 1, '0100111 000101': 2, '1011110 001001': 1, '0110111 000100': 5, '1000111 110101': 1, '0101111 101010': 1, '1001010 011011': 1, '1110111 010110': 11, '0010111 101010': 1, '1011111 010010': 7, '1100011 001000': 6, '0101111 011000': 12, '1011010 000110': 1, '1110110 000111': 10, '1111011 010100': 2, '0100110 011110': 1, '1010111 000101': 2, '1011111 111000': 3, '1110111 100001': 2, '1101010 000100': 2, '1111001 010010': 1, '0110111 000110': 2, '1101110 001111': 5, '1111110 010110': 5, '1110110 110000': 1, '0011111 010001': 1, '1010101 001100': 1, '1100110 010110': 5, '1111101 001010': 2, '1000111 001100': 17, '1110111 011110': 2, '1110110 000110': 13, '1101101 010111': 1, '0110110 010100': 2, '1111100 110011': 1, '1110010 001110': 3, '1011111 011001': 4, '1011011 010101': 2, '1101110 011100': 8, '1000111 101000': 1, '1101011 011000': 7, '1011101 010011': 1, '1001111 010000': 21, '1000110 010110': 1, '1101011 001011': 3, '1101100 001100': 1, '1100010 000010': 3, '1001100 000111': 2, '0001011 011011': 1, '1110111 010100': 28, '1110011 010100': 1, '0101011 001101': 1, '1000110 001000': 5, '1101110 000110': 5, '1110111 001000': 91, '1111110 010010': 20, '1110111 111110': 1, '1101010 000101': 1, '0000110 001001': 1, '1100111 001011': 11, '0110010 001010': 1, '1011111 001011': 2, '0111111 011000': 6, '1111100 011001': 2, '1101110 111110': 1, '1110111 101100': 2, '1111101 011001': 1, '1011110 010110': 2, '1100111 000000': 36, '1111110 011000': 32, '1111100 000001': 4, '0111111 001100': 5, '1111010 001100': 2, '1010110 001100': 8, '1110110 010010': 6, '1101011 000110': 3, '1111010 101010': 2, '1010101 100101': 2, '1011110 101010': 1, '1010111 010110': 3, '1000110 010001': 3, '1100011 000010': 1, '1101111 000110': 12, '1110000 001001': 1, '1010101 001001': 1, '0111110 010001': 2, '1001110 001111': 1, '1101010 011010': 4, '1110011 001000': 7, '1101110 011011': 10, '0001110 011000': 1, '1000010 001101': 1, '1000010 011110': 1, '1111011 011101': 1, '1011100 110001': 1, '1110110 001001': 27, '1000110 100100': 1, '1110110 011101': 4, '0100111 011100': 1, '1111010 101110': 1, '0001111 000000': 1, '1110011 011010': 1, '0110111 000000': 7, '0111110 001001': 3, '1000111 011010': 4, '1010111 001000': 8, '1011100 101011': 1, '1111100 000000': 7, '0110011 000100': 1, '1100001 100101': 1, '1011111 110011': 1, '0101110 001011': 1, '1111011 000110': 1, '1110010 000100': 3, '1111110 000011': 14, '1110110 101010': 2, '1000111 111101': 1, '1001011 011001': 1, '1010100 011000': 1, '1110101 100000': 1, '1000110 000010': 1, '1001111 000011': 2, '1111110 110000': 2, '0010111 101000': 1, '1011111 111100': 1, '1110010 000001': 5, '1111101 000001': 6, '1111101 111010': 1, '1110110 111011': 1, '1111110 110010': 1, '1001111 010010': 4, '1011110 011100': 2, '1111010 011010': 4, '0100111 011000': 3, '1101111 111100': 1, '0111111 100101': 1, '0110110 010010': 1, '1000101 010101': 1, '1001111 111000': 5, '0110010 000110': 1, '1100110 110100': 1, '1111101 010000': 3, '1100111 010110': 4, '1110010 000111': 1, '1010100 010111': 1, '0101101 001110': 1, '0111101 011010': 1, '1100011 000011': 1, '1111011 000010': 1, '0111111 010001': 1, '1001010 011000': 2, '1111011 000111': 1, '1101110 111100': 1, '1000111 000001': 4, '1100011 000000': 2, '1001111 010101': 3, '1000011 101011': 1, '1011101 001110': 1, '1100111 010111': 1, '1100110 001001': 16, '1100110 001110': 14, '1110100 010100': 2, '1010100 001000': 1, '1111110 001001': 22, '1010111 011110': 2, '1110111 100000': 1, '1011100 010000': 4, '1010111 111010': 1, '1111010 010000': 3, '1100100 001100': 2, '1100111 111111': 1, '0100110 001000': 5, '1010011 011101': 1, '1110101 001111': 4, '1100110 010011': 1, '1111101 001101': 3, '1000011 110010': 1, '1100011 011100': 2, '1111111 000001': 57, '1111100 011100': 1, '1111111 000111': 6, '1000111 011111': 1, '0100011 001100': 1, '0101110 101001': 1, '0110111 000101': 2, '1111111 011011': 7, '0100110 011000': 2, '1011011 100000': 1, '1101110 100110': 1, '1111100 001000': 3, '0001100 010001': 1, '1101011 001100': 2, '1111101 000000': 6, '1000111 011000': 8, '1100110 001010': 13, '1001111 001010': 2, '0110101 010101': 1, '0101011 000000': 1, '1010111 001011': 2, '1110101 000110': 2, '1110100 000101': 6, '1110110 010100': 11, '1001111 000100': 3, '1100111 001001': 28, '0110111 001100': 1, '1000101 001111': 1, '1000101 110100': 1, '0101011 001010': 1, '1000101 011110': 1, '1011110 000010': 5, '1111010 011000': 4, '1110110 001100': 49, '1011110 000111': 1, '1001011 001100': 1, '1011111 001000': 9, '1100011 011110': 2, '1000111 011100': 11, '0010111 011000': 1, '1010110 011110': 2, '1100111 001010': 19, '1001101 011011': 1, '1001111 000101': 2, '0111100 001000': 1, '1001111 001100': 7, '0110110 000100': 3, '0111111 001000': 5, '1010110 011011': 1, '0110010 111001': 1, '1101110 101111': 1, '0111110 010000': 3, '1111110 101010': 1, '0100101 000110': 1, '1100000 011011': 2, '0101010 100000': 1, '1000110 101100': 1, '0111110 100101': 1, '1011000 011111': 1, '1001110 000110': 2, '1110001 000001': 1, '1110110 110101': 1, '0100111 010101': 1, '0111101 001000': 1, '1010101 001000': 2, '0111110 101010': 1, '1100111 100110': 1, '1001011 000011': 1, '1100101 011010': 1, '1010100 000100': 1, '1101101 011011': 2, '1110101 101001': 1, '1110010 010001': 3, '0011010 011100': 1, '0111110 100011': 1, '1101100 011010': 1, '1111011 011110': 1, '1111111 100101': 3, '1001010 011010': 1, '1100101 010010': 2, '1011100 010110': 1, '1100011 010011': 1, '0101110 001100': 2, '1101110 000100': 19, '0110110 010000': 1, '1001111 000000': 8, '1100111 111000': 2, '1110110 001000': 43, '1111110 010100': 13, '0110111 000001': 3, '0110111 011110': 1, '0100111 010011': 1, '0101100 010100': 1, '1110110 000001': 18, '1001110 001001': 4, '1011111 101100': 1, '1110111 100101': 4, '0100111 001101': 5, '1101111 111000': 2, '1100110 101110': 2, '1000111 010101': 2, '1101100 010010': 1, '0001111 011000': 2, '1110010 001100': 1, '1101110 101001': 2, '1111100 011011': 1, '1000110 000100': 1, '1110101 001100': 3, '1110100 011011': 1, '1111111 011111': 1, '1101011 000011': 2, '1100101 010100': 1, '1001110 111000': 1, '1100110 010111': 1, '1100101 011110': 1, '1101100 001000': 4, '0110111 001110': 5, '0000111 011100': 2, '1000110 001001': 5, '0111110 001101': 1, '0100111 000000': 4, '1110101 010000': 2, '1010111 010011': 1, '1011110 111100': 1, '1101111 111110': 1, '1110101 011000': 3, '0110111 111000': 1, '1011111 100100': 1, '1000011 010110': 2, '1111111 010100': 21, '1111111 110010': 3, '0011101 000001': 1, '0011110 100100': 1, '1100101 011101': 1, '1000110 010100': 5, '1101010 001111': 3, '1111011 000000': 9, '0101111 111000': 1, '1111111 111000': 7, '0101110 110100': 1, '1101100 011100': 1, '1101111 010110': 3, '1111111 000011': 14, '1001100 001000': 3, '0000110 100000': 1, '1010110 001010': 3, '1100111 011100': 17, '1011110 100110': 1, '1011011 111010': 1, '1011110 111011': 1, '0000111 010000': 1, '1111100 011111': 2, '0110111 100100': 3, '1111110 011111': 2, '1110100 001111': 2, '1101111 010011': 11, '1000110 011100': 4, '1101111 010100': 10, '1001111 100010': 1, '1101001 001010': 1, '1000110 011001': 1, '0001111 011010': 1, '1100111 000001': 15, '1000101 010100': 1, '1100110 000100': 19, '1010111 011001': 4, '0011111 000100': 1, '1110111 000111': 14, '1011110 110011': 1, '1001111 011110': 2, '1000011 010111': 1, '1001010 000000': 1, '1000110 011111': 1, '1010010 001000': 2, '1001101 001011': 1, '1000010 110001': 1, '1101010 000001': 2, '0101010 011000': 1, '1110111 101101': 1, '1100011 001001': 7, '0101111 000000': 8, '1110110 011010': 8, '1001111 011011': 4, '1011110 100000': 1, '1011101 011000': 1, '1101101 011010': 4, '1010111 000000': 5, '0110111 110111': 1, '0111010 011100': 1, '1100101 000010': 2, '1001110 000010': 3, '1101011 000000': 5, '0110111 100010': 1, '0011111 010100': 1, '1101011 001001': 3, '0100111 000010': 1, '1010100 010000': 1, '1001100 011110': 1, '1010110 010101': 3, '1110010 001010': 4, '1001011 000000': 1, '1111111 101010': 1, '1001111 000001': 5, '1101011 011100': 2, '1111110 011110': 5, '1100100 011101': 1, '1110101 010100': 3, '1111010 000110': 3, '1101110 010111': 4, '1100010 010010': 2, '0111011 001010': 1, '1101010 001010': 4, '1110000 000111': 2, '1011110 110000': 6, '1110101 001110': 2, '0100100 001100': 1, '1100011 010100': 1, '1100110 100101': 1, '1101011 011110': 3, '1110101 000010': 1, '0101111 000010': 2, '0000111 111100': 1, '0111011 011000': 2, '1111110 000101': 14, '1111111 011101': 12, '1110111 010000': 51, '1010111 100001': 1, '1101111 001101': 12, '1011111 001110': 2, '0010100 001000': 1, '1101100 011011': 3, '0001000 011010': 1, '0101111 000001': 1, '1001011 011000': 1, '0010111 001110': 1, '1100111 001110': 22, '1011010 110000': 1, '1111110 001011': 14, '0101111 001010': 2, '1011111 000000': 14, '1100110 011010': 5, '1110111 000011': 4, '1101010 001001': 2, '1110110 001101': 16, '1001101 010010': 2, '1011101 010000': 1, '0001110 000000': 1, '1000110 001011': 3, '0101010 001011': 1, '1110011 000111': 3, '1011101 011011': 1, '1011111 001100': 5, '1101101 000001': 4, '1110111 000100': 61, '1100111 011111': 2, '1001111 110010': 1, '1100100 011011': 1, '1101101 011000': 8, '1111101 010101': 1, '1010111 000001': 5, '0000110 001100': 1, '0100111 001000': 6, '1111011 100111': 1, '0101110 011001': 2, '1001111 001001': 7, '1110110 110010': 1, '1001111 001000': 18, '1010111 011011': 1, '0101111 000101': 1, '1101111 111011': 1, '1000100 001110': 1, '0111111 101001': 1, '1000111 000110': 1, '1110111 111100': 1, '1101110 011010': 26, '1111101 000101': 4, '1101111 100000': 2, '1010110 011000': 7, '1101111 010000': 50, '1111110 010001': 28, '0110101 000110': 1, '1001111 010110': 1, '0110111 100000': 1, '0101111 001101': 1, '0110100 000010': 1, '0011110 011100': 1, '1011010 000000': 1, '1110100 001000': 4, '1100010 000110': 1, '1110110 001011': 12, '1010110 001101': 2, '1010100 010100': 2, '1110000 001010': 1, '1101111 011001': 40, '0110110 000000': 4, '0000111 001000': 2, '1011110 000011': 1, '1100010 000001': 5, '1101111 111101': 1, '1000101 001100': 1, '1011110 000001': 6, '1101101 001011': 2, '1110110 110111': 1, '0000111 000101': 3, '1101110 000101': 9, '1100001 001001': 1, '0111111 000001': 3, '1101011 100100': 1, '1111010 001011': 1, '1111100 001001': 2, '0001111 000001': 1, '1001110 001101': 1, '1010110 101000': 1, '1100110 010101': 2, '0101010 101011': 1, '1000111 001001': 1, '1100010 100001': 1, '1100101 000001': 3, '1011111 010100': 15, '1101101 000000': 5, '1101101 001001': 4, '1110000 000001': 1, '1111011 001000': 6, '1101010 010001': 1, '0111111 000000': 8, '1101110 011110': 6, '0101010 001010': 1, '1110000 010110': 1, '1110011 000100': 5, '1101101 010011': 2, '1101100 010100': 1, '1111110 110101': 1, '1001111 000010': 2, '1101110 010010': 9, '1110010 011111': 1, '1001111 001110': 2, '1011110 100010': 1, '1111110 000100': 13, '1000111 011101': 2, '1100010 000011': 2, '1101111 101000': 5, '1110110 101000': 5, '1111011 001011': 1, '1111110 011100': 12, '1111111 111101': 1, '1111111 011110': 2, '1110110 101011': 1, '1111011 000100': 3, '1111010 000011': 2, '1000100 001010': 1, '1010011 001000': 1, '1011111 101011': 1, '1011011 000000': 2, '1100111 010000': 23, '1111110 110001': 1, '0100111 010001': 2, '1110111 010011': 5, '0011111 100000': 2, '0111111 000010': 3, '1010010 000001': 1, '1111111 110001': 3, '1011110 010010': 2, '1111100 010011': 1, '1101110 001011': 12, '0111110 000000': 7, '1011111 011101': 1, '1100100 001111': 3, '1111110 011010': 4, '0110111 101001': 1, '1010011 011100': 1, '1110011 001111': 2, '1010111 000011': 1, '1110000 010010': 1, '1111010 010001': 1, '0010111 010100': 1, '0010111 110000': 1, '1110100 100100': 1, '1001101 000000': 2, '1110101 011001': 1, '1111100 000100': 1, '1101011 001110': 1, '0011110 010000': 1, '0011111 011000': 1, '1011110 011000': 10, '1101110 001001': 38, '1000110 011010': 1, '1100111 000110': 13, '1111011 000001': 4, '0100111 011101': 1, '1000111 000000': 3, '1100100 001101': 1, '1001110 010011': 1, '1000110 000000': 6, '1001111 011010': 1, '1000111 010000': 9, '1101100 001001': 1, '1110111 001010': 28, '1111001 000010': 1, '0110110 010110': 3, '0111110 100001': 2, '1011110 010011': 4, '1111000 101001': 1, '0111101 000011': 1, '1111111 010010': 19, '1110011 011000': 2, '1011100 001110': 1, '1001000 001011': 1, '0111111 010010': 1, '1010110 010010': 4, '0111111 010000': 3, '1111010 010100': 4, '1111101 010100': 2, '1101111 010101': 13, '1101010 000010': 3, '1001101 001101': 1, '0000111 011001': 1, '0001111 011001': 1, '1101111 010010': 13, '1110100 000000': 2, '1110110 011100': 7, '1111110 011001': 16, '0100111 011010': 1, '1100111 101110': 1, '1100100 011111': 1, '0101110 000011': 2, '0101111 000110': 1, '1100010 001111': 3, '1001101 000010': 1, '1011100 100001': 1, '0101110 101011': 1, '1111110 100001': 2, '0101110 010011': 1, '1110100 011100': 2, '1111111 101101': 2, '1101110 100011': 1, '1111101 001100': 2, '1111010 000000': 7, '1111110 001101': 11, '1010111 100110': 1, '1110111 101110': 2, '1001110 001011': 5, '1100110 011001': 5, '1100111 011010': 9, '1011111 001010': 3, '1111111 110110': 1, '1101111 000001': 36, '1001101 001001': 1, '0101111 010010': 1, '1110110 001110': 16, '1100011 011000': 2, '1110111 111000': 2, '1011011 100011': 1, '1111101 000110': 4, '1111101 000111': 1, '1001110 110011': 1, '1111110 000110': 11, '1110010 011100': 2, '1101110 101000': 3, '1110101 101011': 1, '0111010 011111': 1, '1100100 010110': 1, '1110000 001000': 1, '1101010 010000': 2, '1000111 001110': 2, '0111100 101011': 1, '0011111 011001': 1, '1011110 001011': 2, '1110100 010001': 3, '1001100 010011': 1, '0000010 111001': 1, '1111010 000100': 3, '0101100 011001': 1, '1100101 101010': 1, '0100010 010111': 1, '1110100 010010': 1, '1111111 101001': 2, '1111111 100001': 3, '1110101 000011': 2, '1110100 001010': 4, '1100110 111100': 1, '1001110 000100': 1, '0100110 101000': 1, '1000111 010100': 2, '0101111 010001': 3, '1100110 100000': 1, '1110111 011101': 7, '1111101 011100': 1, '1010101 010000': 2, '1110010 010011': 1, '1001110 000000': 7, '0100111 001001': 1, '0101011 011010': 1, '0101110 110011': 1, '1110001 011010': 1, '1010111 010001': 3, '1101110 111000': 2, '1001010 001011': 2, '1001011 000001': 1, '1110010 011101': 2, '1111110 100101': 1, '1101110 000001': 20, '1011110 110100': 2, '1110110 000000': 30, '1110110 010011': 11, '0101110 000000': 1, '0110010 001111': 1, '1000110 111101': 1, '0101101 010110': 1, '1001111 111101': 1, '1110100 101011': 1, '0101110 000010': 1, '1001111 011101': 2, '1010110 000001': 2, '1110100 011111': 1, '1011110 011010': 1, '1100010 010111': 1, '0100110 011100': 3, '1011111 000110': 3, '1101111 011111': 6, '0001110 111101': 1, '0100110 011101': 1, '1101011 000010': 4, '0001110 110000': 1, '1010111 000100': 6, '1001111 010100': 4, '1111011 110101': 1, '1001111 110000': 2, '0111110 010100': 1, '1011111 010001': 9, '0100111 111101': 2, '1101110 000000': 52, '1110010 001000': 4, '0101111 001000': 5, '1101100 001011': 2, '0110110 101100': 2, '1000101 011101': 1, '0100100 000000': 1, '1110111 001110': 14, '1111111 000110': 11, '1100100 001001': 2, '0000110 011111': 1, '1111100 000011': 2, '1110101 101111': 1, '0101111 101000': 1, '1111110 010111': 7, '0010111 000000': 2, '1110101 000100': 5, '1111011 001110': 1, '1010010 010111': 2, '1010111 000010': 2, '0111110 001010': 1, '1010111 101011': 1, '1010110 010000': 9, '1110110 100101': 2, '1111000 001011': 1, '0101110 001010': 1, '0111110 000010': 1, '0100110 000001': 1, '1111111 010001': 27, '0100110 001100': 3, '1111100 000110': 1, '1111111 100011': 1, '0111110 001000': 8, '1010111 001110': 4, '1001110 010110': 2, '1011111 011110': 1, '1011110 110001': 3, '1000111 011110': 2, '1101101 001100': 2, '1100100 000000': 1, '1110110 001010': 18, '1110111 011000': 32, '1111111 000000': 144, '1101011 000001': 2, '1011101 000001': 2, '1111111 011001': 23, '0010111 110011': 1, '1100010 000101': 2, '0111110 100010': 1, '1111111 001001': 39, '1010111 010100': 7, '1101010 011000': 5, '1100010 010000': 1, '0010111 011001': 1, '1000111 000010': 1, '1101110 100101': 1, '1101010 011100': 1, '1101011 001101': 1, '1101011 011001': 5, '0111110 000100': 4, '0101110 011010': 3, '1111111 001110': 7, '0110110 001101': 2, '1010111 000111': 1, '1110101 011100': 3, '1011101 111001': 1, '0100010 011010': 1, '1011100 010101': 1, '1110101 010011': 1, '1111111 100010': 3, '0011110 110000': 2, '0110101 000000': 1, '1101010 010010': 1, '0110111 011101': 1, '1000110 001101': 3, '1101101 001010': 5, '0010011 001001': 1, '0001111 010001': 1, '0100111 001100': 5, '1110111 001001': 53, '1100001 000001': 1, '1111100 000010': 3, '1100010 001000': 2, '1001111 011001': 10, '1111101 011011': 1, '1101000 000100': 1, '1110011 000011': 2, '1111111 000010': 36, '1110111 010111': 2, '1111111 001100': 20, '1110110 010110': 8, '1010011 010001': 1, '1111011 100100': 1, '1110011 000000': 6, '1100011 010001': 1, '0001011 011110': 1, '1100110 011100': 17, '1000100 001011': 2, '1111011 011000': 5, '0100110 101100': 2, '0011101 001000': 1, '1011010 010010': 1, '1111001 000111': 1, '1110111 000000': 64, '1011101 010010': 1, '1101101 010001': 2, '1001000 011011': 1, '1101111 001000': 100, '1100110 001011': 17, '1011110 101000': 2, '1101101 000011': 1, '1101111 001110': 5, '1111011 011010': 2, '1111110 001111': 5, '0010110 011011': 1, '0100000 001100': 1, '0100110 001010': 1, '1100010 000000': 5, '1100111 011001': 12, '0110111 010100': 6, '1101110 001010': 27, '0111110 011000': 3, '1001111 101001': 1, '0111110 000001': 4, '0111011 000001': 4, '0101011 000010': 1, '1010110 000110': 2, '1100101 001000': 5, '1111110 000010': 26, '0100101 000001': 1, '1010111 001001': 7, '0110111 011000': 2, '0101110 001001': 2, '1110010 001111': 2, '1000110 001100': 9, '1011111 000001': 3, '1111100 001011': 2, '1110111 001111': 11, '1000110 111111': 1, '1101111 000101': 12, '1111110 101001': 1, '0010111 001000': 2, '1011110 001010': 2, '1110111 010001': 27, '1010111 010010': 2, '1001110 010000': 8, '1011110 000000': 6, '1101111 001011': 18, '1100001 000010': 1, '1110100 001001': 4, '0000111 011000': 1, '1110110 101100': 1, '1010110 001001': 5, '1001010 010110': 1, '1011010 110111': 1, '1110111 101010': 1, '0111101 100011': 1, '1001100 001100': 1, '0101001 001000': 1, '1111100 001010': 1, '1011011 001000': 2, '1001011 010110': 1, '1110111 110001': 4, '1101011 010001': 3, '1101011 111010': 1, '1100111 000101': 25, '1101110 110100': 1, '1001101 011000': 5, '1111010 010011': 1, '1101010 001100': 1, '1110111 011111': 1, '1110110 110110': 1, '1111011 010110': 2, '0111111 111100': 2, '1010110 110011': 2, '1010000 001000': 1, '1110010 000110': 2, '0111000 011001': 1, '1100010 010100': 2, '0110110 101000': 2, '0111100 101000': 1, '1110101 001001': 6, '1101101 000111': 4, '1111011 011011': 2, '1111110 111100': 1, '1010010 011010': 1, '1100110 000011': 3, '0101111 100011': 1, '1000111 010111': 1, '1111111 110011': 1, '0110111 001101': 1, '1100010 011000': 1, '1100110 101111': 1, '1111111 100100': 1, '0001111 010000': 4, '1010010 010010': 1, '1110110 011011': 5, '1001111 011000': 31, '1101010 011011': 4, '1001110 011011': 3, '1101111 011010': 23, '0011110 010010': 1, '1010110 100101': 1, '1110100 001100': 3, '1010111 110100': 1, '0101110 010100': 1, '1110111 101111': 1, '1000101 011000': 1, '1000111 001000': 9, '0011111 010010': 3, '1101101 001101': 3, '1101111 110101': 1, '0111111 010100': 2, '1000110 101101': 1, '1100111 101100': 3, '1001010 100110': 1, '1100100 000100': 1, '1100110 000110': 8, '1100111 100101': 3, '1101111 001010': 26, '1110110 010001': 16, '1101010 001101': 1, '0010111 111000': 1, '1100111 001000': 80, '0111111 011010': 2, '1110111 000101': 35, '1111110 111010': 1, '1110110 011001': 10, '0110111 101000': 3, '1000110 011011': 3, '1100010 011011': 1, '1010011 001100': 1, '1101110 001110': 6, '1111110 010011': 6, '1011101 000110': 1, '1001101 001010': 1, '1101111 000100': 23, '1001110 011010': 3, '1001011 001001': 1, '1100010 001001': 2, '1100111 000011': 5, '0011101 000000': 1, '1001110 001110': 2, '1010110 111001': 1, '0110111 010000': 3, '0100110 010101': 1, '1111111 011010': 13, '1010101 011111': 1, '1100110 011000': 19, '1010010 010100': 1, '1100011 000110': 4, '1111111 010000': 74, '1101110 110001': 1, '1011111 101000': 1, '1111011 010010': 5, '0100111 101000': 2, '1101010 010011': 1, '1101110 011000': 65, '1010110 011111': 3, '1010010 010101': 1, '0111111 100000': 3, '1111110 100000': 5, '0110111 001000': 4, '1010110 000111': 2, '0000111 010010': 1, '1010111 110001': 1, '1110011 010000': 2, '0001100 001000': 1, '1111110 001000': 41, '1101101 010010': 6, '1001111 111100': 1, '0110111 011111': 1, '1011110 111000': 2, '1101111 110000': 2, '1011110 010000': 13, '1001111 001101': 1, '1101110 101110': 1, '1000111 010001': 1, '1111101 011010': 4, '1011111 011100': 9, '0101011 101000': 1, '1001100 011011': 1, '0110111 001001': 4, '1101111 101001': 1, '0100110 000011': 1, '0101100 001001': 1, '1110110 100001': 2, '1010110 010011': 2, '1100111 010100': 13, '1011100 111100': 1, '1100111 001101': 39, '1101011 010010': 5, '1111011 000101': 1, '0101110 010010': 2, '0001100 000111': 1, '0100111 001010': 1, '1110011 001001': 4, '1110110 100100': 5, '1010110 000101': 2, '1000111 001111': 1, '1001110 011001': 5, '0101010 011001': 1, '0101111 011001': 2, '1111011 011100': 2, '1011011 000001': 2, '1110001 001010': 1, '1011111 010111': 1, '1010111 110010': 1, '0100111 010010': 2, '0111101 101000': 1, '0010100 100000': 1, '1110101 111111': 1, '1001011 000100': 1, '1001110 000011': 1, '1010110 000011': 2, '1000110 110100': 3, '1100110 101100': 3, '1110110 010101': 8, '1110101 101101': 1, '1100100 000010': 1, '1101010 001000': 6, '1101010 011101': 2, '0010111 010000': 1, '1100111 011101': 8, '1110101 001010': 1, '1010110 001011': 2, '1010110 010110': 5, '1110100 000010': 2, '1100100 000001': 2, '1100010 001110': 2, '1101101 111100': 1, '1110011 001010': 7, '1010111 001100': 5, '0010100 010110': 1, '0011110 111000': 2, '1101101 000010': 4, '1110111 110000': 3, '1110110 010111': 3, '1101010 001011': 1, '1110111 011011': 6, '1011100 000001': 1, '1111010 010111': 1, '1010111 011000': 9, '0001110 010010': 1, '1110101 000111': 1, '1111010 001000': 1, '1100011 001100': 6, '1110100 101010': 1, '0010110 011001': 1, '1000101 011111': 1, '1110100 010011': 2, '1111111 000101': 17, '1010110 010100': 4, '1100111 101010': 1, '0011111 110101': 1, '1100110 010010': 7, '1100010 011101': 1, '1110101 010010': 1, '0111010 000000': 2, '0111110 011010': 1, '1101010 011001': 6, '1101010 000000': 4, '1110111 000110': 32, '1110011 101001': 1, '1011010 111011': 1, '1110010 000000': 1, '1111111 101000': 4, '1001011 011010': 1, '0111111 110000': 1, '1111101 010110': 1, '1101111 101010': 1, '0100111 100100': 1, '0010100 011100': 1, '1010101 000111': 2, '1100101 001111': 2, '1111111 001010': 13, '1101110 001101': 12, '1110110 000011': 9, '1101001 011011': 1, '1110011 001100': 4, '1010100 011100': 1, '1100011 001111': 2, '0001110 011100': 1, '0101110 000001': 4, '1111110 000111': 4, '0110110 011001': 1, '1011110 010101': 1, '1000110 011000': 4, '1100101 000100': 7, '1001110 001000': 11, '1100011 000100': 3, '1110111 010010': 10, '1001111 111001': 1, '0110110 100000': 2, '1110101 000101': 5, '1000111 000101': 1, '1101011 011011': 2, '1110101 001101': 3, '1100110 011101': 8, '1000111 111001': 1, '1100110 000001': 11, '1000011 001101': 1, '1110011 000101': 3, '1101111 110001': 2, '1100010 001100': 4, '1111111 011100': 14, '1110100 011101': 2, '0100010 001110': 1, '1011001 001000': 1, '1101011 001000': 5, '0111110 001011': 2, '1001100 001001': 1, '1111110 010000': 35, '0110110 000011': 1, '1001010 001000': 2, '1101100 010111': 1, '1001110 011101': 2, '0001110 010101': 1, '1100101 001011': 2, '1110010 000011': 4, '1010111 000110': 4, '1100110 010001': 7, '0101111 110100': 1, '1101011 010000': 1, '1100111 011000': 28, '1011110 011001': 1, '1100100 001000': 2, '1100111 011011': 1, '1111101 001000': 4, '1001110 000001': 5, '1101100 010011': 2, '1101100 010101': 1, '0101111 010011': 1, '1110011 011101': 2, '1110011 000110': 5, '0101100 011000': 1, '0110110 111000': 1, '1110100 000111': 2, '0001111 001101': 1, '1110101 000000': 6, '0010100 010010': 1, '0100110 101011': 1, '0111101 001001': 1, '1101110 011111': 6, '1000101 000001': 1, '1100011 001011': 1, '1101010 011111': 1, '1110101 011101': 2, '1000110 010000': 5, '1101101 001000': 6, '0110110 001100': 2, '1101100 000001': 3, '1110110 100010': 2, '1110111 011100': 22, '0101110 001110': 1, '1001111 010111': 1, '1110111 000010': 15, '1010111 111110': 1, '1101101 000100': 2, '0111110 101000': 1, '0000111 000100': 1, '1001111 101000': 4, '1010100 011111': 1, '1011010 001110': 1, '1101101 001111': 1, '1001110 011000': 7, '0101111 100001': 1, '1000010 111100': 1, '1010111 010101': 4, '1011111 010101': 3, '1101110 010110': 7, '1011100 010010': 1, '1100111 001100': 93, '0101111 000100': 1, '1101110 010001': 19, '0101110 111000': 1, '1101111 000011': 9, '0111111 011101': 2, '1001100 011010': 1, '1100011 000101': 2, '1101011 000111': 1, '0111110 000111': 2, '1000011 001110': 1, '0100111 101101': 1, '1100111 000010': 12, '0010110 111100': 1, '1101111 011101': 10, '1111110 001010': 14, '1101110 000010': 22, '1110010 011011': 1, '0101110 011000': 7, '1111101 000100': 1, '1110110 000100': 50, '1011100 111011': 1, '1100111 011110': 11, '1100100 011000': 2, '1010100 001011': 1, '1101110 010101': 7, '0100111 000001': 1, '1100001 001010': 2, '1100110 101010': 2, '1111101 010001': 1, '0100111 100000': 1, '1101110 011001': 32, '1110100 010000': 1, '1111111 001101': 10, '1101100 001111': 1, '1101110 010000': 30, '1100011 001110': 4, '0001110 110001': 1, '0110110 011100': 1, '1011111 001001': 6, '1000110 011110': 1, '1010011 011000': 2, '1000110 000011': 2, '0110100 001110': 1, '1001101 010000': 1, '1101010 000011': 1, '1111101 001001': 2, '0010111 010001': 1, '0111101 001100': 1, '1001101 011101': 1, '0011111 000010': 1, '1111111 001111': 5, '1110010 010101': 1, '0101110 000100': 4, '1101011 010111': 1, '0001111 100000': 1, '1000111 011001': 2, '1111011 001010': 1, '1100101 010000': 1, '1100110 111000': 1, '0111111 000100': 3, '1010111 101000': 2, '1110011 001101': 4, '0100110 100110': 1, '1100101 010101': 1, '1110011 010010': 5, '1110111 001011': 8, '0001110 000011': 1, '1110111 011001': 3, '1010111 100010': 1, '1110111 010101': 10, '1011101 001000': 1, '1100100 010101': 1, '1011100 001001': 1, '0011101 101000': 1, '0111100 000011': 1, '1011100 000100': 1, '1001110 111110': 1, '1100011 011001': 1, '1111100 011010': 1, '0110110 001010': 3, '1111101 001011': 5, '0101101 000000': 2, '1010100 001110': 1, '1100111 100111': 1, '1111011 100011': 1, '1011110 000100': 5, '1010110 001000': 11, '1110110 011110': 6, '1000111 001101': 5, '1100001 000110': 1, '1110011 001110': 1, '1101110 000111': 2, '1011111 000010': 3, '1100101 011000': 2, '1111110 101000': 2, '1101100 000010': 5, '1111111 100000': 10, '1110100 000001': 2, '0011111 000000': 4, '1100010 010011': 1, '0001111 001000': 1, '1110101 111100': 1, '0110101 000011': 1, '1111110 111000': 2, '0100111 000100': 1, '0100101 000011': 2, '1100111 000100': 43, '0011101 010000': 1, '0110110 001001': 3, '0110110 000111': 1, '1101010 011110': 3, '1010100 000110': 1, '1010110 100100': 2, '1111111 010110': 11, '0101111 001100': 3, '1001110 010101': 2, '1100101 001010': 6, '1101100 010000': 3, '0111110 100000': 3, '1110011 010111': 1, '1110100 110000': 1, '1001110 110000': 3, '1101111 101100': 2, '1010011 000001': 2, '0110011 100110': 1, '0011111 111010': 1, '1001110 011111': 1, '0110011 001101': 1, '1011011 011010': 4, '1110010 001011': 2, '1010010 011110': 1, '1011110 000110': 2, '1110011 011111': 1, '0011111 000111': 1, '1101011 010110': 3, '1010110 011100': 2, '1010001 001010': 1, '1010001 101101': 1, '0110010 000010': 1, '1100100 011100': 1, '0100101 000000': 1, '1000011 011010': 1, '0100111 001011': 2, '0000110 111001': 1, '0110111 110000': 1, '1010011 011001': 1, '0110010 001110': 1, '1111010 000101': 2, '1100100 000110': 2, '0110110 000101': 1, '0100111 000110': 2, '0111101 010000': 1, '1100100 000011': 1, '1010110 011010': 1, '1101011 011111': 3, '1011111 110100': 1, '1111111 010101': 11, '1011111 001101': 1, '1111010 011100': 1, '1000100 001000': 1, '1010111 111100': 3, '1000100 011000': 1, '1001101 011010': 1, '1111101 110000': 1, '0110011 100111': 1, '1110111 110011': 1, '1100100 001110': 1, '1100101 000000': 6, '0110101 100010': 1, '0100111 011110': 1, '1010110 001110': 1, '1100101 111011': 1, '1101110 000011': 12, '0000111 100000': 1, '0111110 000011': 1, '1011111 011011': 4, '1111110 001110': 6, '1101000 001101': 1, '1110011 000010': 3, '1111100 010010': 3, '0101111 010100': 1, '0110111 001010': 3, '1000000 001111': 1, '1100110 011110': 5, '1010110 011101': 5, '1101100 001010': 4, '1111100 100100': 1, '0100100 000101': 1, '1110111 100011': 1, '0111111 111000': 3, '1101101 011001': 1, '0010110 100000': 2, '0100111 100101': 1, '1000111 010110': 2, '1110011 000001': 1, '1110110 111100': 2, '1111011 001101': 1, '0110010 101000': 1, '0111010 010011': 1, '1000101 001101': 1, '1100011 001010': 3, '0000110 000000': 1, '0101101 011010': 1, '1110101 001011': 3, '0110110 101011': 1, '1111001 001000': 1, '1100101 001100': 9, '1010110 101001': 1, '0111111 001010': 2, '0110110 000001': 4, '1110101 011110': 1, '1100110 001000': 45, '1010111 011100': 7, '1111001 011010': 1, '1111100 101011': 1, '1100110 000101': 10, '1101111 000010': 16, '1110101 000001': 3, '1010110 010001': 5, '1101100 010110': 1, '1001011 001011': 1, '0110111 011100': 1, '1000010 010011': 1, '0110010 000000': 1, '0110011 101100': 1, '1111111 010011': 11, '0110111 000010': 2, '0111101 010111': 1, '1100110 011111': 4, '1100111 110100': 1, '1101000 001010': 2, '1101010 001110': 2, '1110111 001100': 65, '1001110 010010': 4, '0101111 100000': 1, '1111110 000001': 46, '1110010 101110': 2, '0111110 110000': 2, '1011001 010100': 1, '1011110 010001': 7, '1100111 010001': 9, '1011111 010110': 2, '1110101 010101': 1, '0111100 010110': 1, '1110011 100101': 1, '1011111 001111': 1, '1011111 010011': 3, '1000110 101010': 1, '1000100 110011': 1, '1010110 110100': 2, '1101110 010100': 10, '0010110 010110': 2, '1101010 010100': 1, '1100111 100000': 3, '1101100 000111': 1, '1011110 000101': 1, '1011011 010001': 1, '1000111 001010': 6, '1100001 011100': 2, '0110111 110011': 1, '0100111 010100': 1, '1101111 011011': 11, '1110101 001000': 3, '1111110 110100': 1, '1101111 001111': 4, '1010111 001010': 2, '1111100 001110': 4, '1101001 000011': 1, '0010111 001010': 1, '1100101 101000': 1, '1110110 000010': 16, '1101101 000101': 2, '1111011 010000': 5, '1111101 011000': 5, '0110110 001000': 2, '0110111 000111': 3, '1101111 000000': 81, '0111111 010110': 1, '0100110 011111': 1, '1110111 011010': 7, '0000111 010001': 1, '1111011 010101': 1, '0110110 110000': 1, '1000011 010100': 1, '1011111 011000': 11, '1000011 001100': 1, '1110111 101000': 4, '1010101 000001': 1, '1110011 010001': 2, '1111010 010101': 1, '1111101 011110': 1, '1101001 000001': 1, '0001011 101001': 1, '0111100 100010': 1, '0010011 011101': 1, '0011001 011000': 1, '0110111 101010': 1, '1011011 011001': 1, '1110100 001101': 1, '1001110 010001': 4, '1110110 101001': 1, '0101110 010000': 4, '1000101 001011': 1, '1111111 000100': 43, '1101111 001100': 32, '1101111 010001': 20, '0111100 010000': 1, '1110101 010001': 2, '0110101 001100': 1, '1111101 101010': 2, '0110111 100101': 1, '1000101 011001': 1, '1100101 001110': 5, '0101111 011010': 3, '1110111 100100': 5, '1111111 110000': 4, '1011111 100011': 1, '0101111 010000': 12, '0000110 000100': 1, '1011111 000101': 2, '0010110 010101': 1, '1000001 001001': 1, '1110110 011000': 18, '0100011 000101': 1, '1110100 000011': 2, '1111010 001110': 2, '1111100 010001': 1, '1000110 010101': 2, '1010111 011101': 2, '1101011 011101': 1, '0111111 011001': 2, '1010111 011010': 1, '0100101 001100': 1, '1000110 000110': 1, '1100101 001101': 3, '1110111 000001': 23, '1011100 010001': 1, '1001011 010100': 2, '0101110 010001': 1, '1011110 011011': 1, '1110100 001110': 2, '1011011 101010': 1, '1000111 011011': 1, '1101110 100010': 2, '1011111 100000': 2, '1110101 010110': 2, '0100011 001101': 1, '0111110 110001': 1, '1101010 101000': 1, '0010110 010001': 1, '0100110 001001': 3, '1101111 010111': 2, '0111110 011001': 1, '1111111 011000': 47, '0010111 000100': 1, '1100111 010010': 5, '1001111 010001': 7, '1010110 111110': 1, '1110010 100101': 1, '1111010 000010': 3, '0111111 000110': 2, '1110011 001011': 1, '1100110 010000': 17, '1111110 000000': 68, '0110011 011010': 1, '1110010 001101': 1, '0111100 000001': 1, '1100110 000010': 8, '1000110 101110': 1, '1100110 111010': 1, '1000011 001111': 1, '1110111 100110': 2, '1111001 000100': 1, '1100100 001011': 2, '1101110 001000': 79, '1001110 101000': 1, '1101011 001010': 6, '1100110 011011': 3, '0101110 100001': 1, '1010110 000000': 4, '0110100 001010': 1, '1101100 011001': 4, '1110100 000100': 2, '1100011 010111': 2, '1011001 000101': 1, '1100111 010101': 5, '1110010 010110': 2, '1110101 110000': 1, '1111110 011011': 3, '1010011 011111': 1, '1001111 000110': 2, '1110100 011010': 1, '0100110 001101': 2, '1011110 001100': 6, '1110111 001101': 24, '1111110 010101': 12, '0101100 000011': 1}}, 8: {'0': {'00011100 0111010': 1, '00100010 0011010': 1, '00010000 0000000': 252, '00011000 1000110': 1, '01000000 0001010': 9, '00010000 1001100': 1, '00001010 0010011': 1, '10000000 1000001': 8, '01000000 0001110': 1, '01010000 0101000': 5, '00010000 1000010': 6, '00010001 0000001': 19, '10011010 0010011': 1, '01001000 0000100': 5, '01011000 0001110': 3, '01111000 0000000': 1, '10010000 1000001': 1, '01000000 1000100': 1, '00011100 0000110': 1, '01010000 0011110': 4, '01010001 0001111': 1, '01000000 0000011': 3, '00000100 0001011': 1, '10000000 1010000': 9, '00000001 0001110': 10, '00010000 0110110': 2, '00010000 0110010': 3, '10000001 1001010': 2, '01000000 0000001': 4, '00001000 1000100': 2, '00001001 0011110': 2, '00000001 0010011': 2, '11000000 0111000': 1, '00001000 0011000': 13, '00001000 1010101': 2, '00001001 0011100': 5, '00010100 0011110': 3, '00000001 1010000': 1, '01010001 0001110': 1, '01011001 0101100': 1, '01011000 0001101': 2, '10010000 1000110': 1, '10110100 1010000': 1, '01000100 0001000': 1, '10010000 1001110': 2, '10000101 1000000': 1, '00011001 0011001': 1, '00011010 0111111': 1, '10000000 0001100': 3, '01000000 1010010': 1, '00011000 0111110': 1, '10011000 1001110': 1, '01000000 0000100': 12, '10000001 0000100': 1, '01010000 0101101': 1, '10011001 0011110': 1, '10010000 0101100': 1, '00000001 0010000': 14, '01000000 0100000': 2, '01000001 0001011': 1, '00011000 0101001': 1, '11110000 0001010': 1, '11000000 0110010': 1, '00100000 1010011': 1, '10011001 0001100': 1, '10011000 0000110': 2, '00011000 1000000': 1, '00000001 1001000': 3, '10000000 1001011': 1, '00111010 0010111': 1, '10010000 0111000': 1, '00010001 0011001': 3, '00111001 0011010': 1, '01110000 0010010': 1, '10100000 0011010': 1, '00000000 0000000': 450, '10000100 0000000': 1, '00000001 0011011': 1, '00001001 0000101': 2, '10001000 1000010': 2, '01010000 0001011': 3, '00101000 1010110': 1, '00101000 0000110': 1, '00100000 0110010': 2, '01000000 1100010': 2, '00110100 0011100': 1, '00100000 1010000': 2, '01100000 0000010': 1, '01010000 0101100': 2, '10000000 0010001': 1, '00000000 1100000': 2, '01011000 0011100': 2, '00001001 0010010': 2, '10000000 1011100': 1, '00001001 1010110': 1, '00001010 0001001': 1, '10010000 0111010': 1, '10011000 1000100': 2, '10001000 0001110': 2, '00101001 0010000': 1, '00100000 0011000': 8, '00000010 0010000': 1, '00001001 0010110': 3, '00110100 0011111': 1, '10011000 1011101': 1, '11000000 0101101': 1, '01000100 1010000': 1, '00100001 0010001': 2, '00000101 0001000': 1, '01000000 1100110': 1, '00111000 1011001': 1, '01010000 1010000': 2, '01011001 0001101': 1, '00001001 0000000': 1, '10010001 0001010': 1, '11000000 0010100': 2, '00010010 0001001': 1, '00110000 0011001': 5, '01000000 1100011': 1, '00010001 0010010': 4, '00010000 0001010': 205, '00010000 0100011': 3, '10010000 1001000': 13, '01010100 0101110': 1, '00100000 0001000': 9, '01010001 0001010': 5, '00011001 0001011': 2, '00001001 0001101': 1, '00010011 0011110': 1, '00011000 0101011': 1, '00100100 0010010': 1, '01000001 0011011': 1, '01010000 0100001': 2, '00010010 0011011': 1, '01010000 0000011': 2, '00010000 1010010': 2, '00011000 1001010': 1, '00010001 0100010': 2, '00101100 0011100': 2, '00110000 0111000': 2, '10000001 1000000': 4, '00100001 0000000': 1, '00001100 0011000': 3, '10110000 1110100': 1, '00110001 0011100': 4, '11001000 1000110': 1, '00010001 0000101': 4, '10001000 1011110': 1, '00010100 0110000': 1, '00000000 1110010': 1, '01011000 0010010': 2, '01011000 0010100': 2, '10000000 0001011': 1, '00010000 0111110': 1, '00000100 0000010': 7, '10010000 0001001': 2, '11000001 1000000': 1, '00110001 0000010': 2, '10000001 0011101': 1, '00011000 1010100': 1, '00010000 0100000': 22, '01111000 0100101': 1, '00000001 0001000': 19, '10001000 1100000': 1, '00001100 0011110': 1, '00010010 1010101': 1, '00011001 0001010': 4, '00010000 0000100': 67, '00000000 0011101': 10, '00010100 0001001': 1, '00000000 0000010': 360, '00011001 1010101': 1, '01000000 0000110': 8, '10000000 1000000': 26, '10010000 1000000': 12, '00010001 0010001': 2, '00000000 1000011': 4, '10011000 1011100': 3, '00110000 1000000': 1, '00100000 1000000': 1, '00010000 0101011': 2, '11000000 1101110': 1, '00011000 0100110': 1, '01010000 1100000': 4, '00000000 0100100': 3, '00001001 0001111': 1, '00111000 0001001': 1, '10011000 1100110': 1, '00000000 0000001': 71, '00000100 0001001': 1, '00010000 0001101': 11, '00010000 0011110': 28, '00111000 0101111': 1, '00000010 0000000': 1, '01000000 0000000': 30, '00100010 0010111': 2, '11001000 0000011': 1, '00010001 0000010': 36, '01000001 0010000': 1, '01000000 0000111': 1, '01010001 0000000': 4, '00010001 0011111': 2, '00000001 0000010': 42, '00110010 0010000': 1, '00011000 0000101': 2, '01000000 0000101': 1, '00000000 0011001': 9, '00011001 1000100': 1, '00011001 0100010': 1, '01000000 1110000': 1, '01010001 0101001': 1, '01011010 0100111': 1, '01011000 0000110': 1, '01101000 1011100': 1, '01000001 0001101': 1, '10011000 1101110': 1, '00000001 0000110': 15, '00000000 1100010': 2, '00110000 1010010': 1, '00100000 0010110': 4, '10011001 0000110': 1, '00001000 1111010': 1, '11010000 1011010': 1, '01000001 1100000': 1, '00001001 0010100': 1, '01011000 0001100': 5, '10000001 1011101': 1, '00010100 0011000': 3, '00000001 0010111': 1, '01010100 1100010': 1, '10010001 0010001': 1, '00010000 0111010': 2, '00011001 0001001': 3, '00011001 0000110': 4, '01010000 0000101': 3, '01011000 0111100': 3, '01010000 0100010': 4, '01000000 0001001': 2, '10000000 1011010': 1, '10111000 0000110': 1, '00000001 0100000': 3, '00110000 0101010': 2, '01110000 0011000': 2, '10011000 0000100': 1, '01010100 0001100': 1, '10000000 0001010': 4, '00000000 1001010': 5, '01011100 0111100': 1, '00000000 0011111': 3, '00100001 0011000': 1, '01000000 1000001': 1, '10000000 0010010': 2, '01001000 1110110': 1, '01010000 1100010': 6, '00010000 0000011': 42, '01010000 0001010': 8, '00001001 0001110': 2, '11110001 0011010': 1, '00001110 0010101': 1, '00010000 0001111': 14, '00000000 0011100': 20, '00000100 0001100': 8, '00100000 0001011': 1, '00100000 0110001': 1, '01011000 1101101': 1, '11010001 0000100': 1, '11010000 1000100': 1, '01100000 0001010': 1, '01100000 0010001': 1, '00110000 0010101': 2, '00101001 0011100': 4, '00001001 0111010': 1, '00110000 0011010': 20, '10000000 1001010': 7, '00010101 0011100': 1, '10010000 1100001': 1, '10001000 0011110': 2, '00110000 0010000': 20, '10000010 1001011': 1, '00000000 0100101': 1, '01010010 0011100': 1, '00001000 0100000': 3, '10010000 1011110': 1, '00011100 0001100': 1, '00011101 0000010': 1, '00000100 0000011': 1, '00010100 0001110': 4, '00011010 0000111': 1, '01100000 0001011': 1, '00000000 1000100': 3, '10000000 0000110': 1, '00011001 0111001': 1, '01110010 1101010': 1, '00010010 0011000': 1, '00110000 0001011': 1, '00110000 0011011': 1, '00001101 0011000': 1, '00011001 1001010': 1, '01000000 0001011': 2, '01000000 0011010': 1, '01011000 1001010': 1, '00010001 0000110': 7, '00000011 0010010': 1, '00001000 0010000': 7, '00001101 0011100': 1, '00000001 0010100': 2, '00000011 0001011': 1, '10001000 0010010': 1, '00011000 0010101': 2, '00011000 0100000': 1, '11000000 1010000': 2, '01000000 0010000': 8, '00110000 0001000': 5, '00000010 0101010': 1, '01001000 1001111': 1, '01010000 0001100': 4, '00000000 0000101': 21, '00010000 1000000': 9, '00000101 0000110': 2, '00000100 0011110': 1, '00010001 0011000': 13, '01010000 0001101': 3, '00000100 0010100': 3, '00010001 1001011': 1, '11010000 0110011': 1, '00100000 0011001': 2, '00010010 0001010': 2, '00011000 0010001': 1, '01000001 0001100': 1, '00011000 0101000': 2, '00010001 0011101': 1, '10100000 1001000': 1, '00111001 0001100': 1, '10011000 1001000': 2, '00000000 0101011': 1, '00001000 0001100': 70, '01101000 0111110': 1, '00100001 0010110': 1, '00110000 0110011': 1, '00111100 0000010': 1, '00001000 0001000': 18, '00001000 1011110': 1, '10001000 0000000': 1, '01010000 0100100': 2, '01000001 0000011': 1, '10000000 0000101': 1, '10001000 1111110': 1, '01010000 0110010': 1, '00000010 0001111': 2, '01011000 0001000': 2, '10001000 0011010': 1, '10000000 1010100': 1, '00111000 0011010': 5, '01010000 0011100': 2, '00001001 0011101': 3, '00010000 0101000': 14, '00000000 0000111': 21, '01000000 0110101': 1, '11000000 1001110': 2, '00011010 0011100': 1, '11100000 1010000': 1, '00000100 0000000': 9, '01111000 0011110': 1, '00000000 0101000': 3, '01000001 0000001': 2, '00001001 0001010': 3, '00000000 0010100': 29, '01011000 0101000': 2, '10001000 1000110': 1, '01010000 0001001': 1, '00100010 0010011': 3, '00001001 0000100': 6, '00110000 0010001': 3, '00010000 0111101': 1, '00111000 0000101': 1, '00100000 0010100': 13, '00110000 0001110': 3, '00000000 0110100': 1, '01001000 1001010': 1, '10101000 1011111': 1, '01010000 1001000': 3, '00110100 0010011': 1, '01110000 0011011': 1, '00000000 0011010': 26, '00001100 0010010': 1, '11010000 1010000': 1, '01110000 0001101': 1, '01101001 0001010': 1, '00000000 1010000': 2, '00000001 0001010': 19, '01001010 1111111': 1, '10010000 1001010': 10, '11000000 0011011': 1, '00110000 0000000': 9, '10010000 1001100': 7, '00100000 1010010': 2, '00011000 0011110': 31, '10010000 0000110': 4, '01100000 0110010': 1, '11010000 0101010': 2, '00000000 0010000': 122, '00001001 0010000': 1, '00010100 0001010': 7, '10000010 1010101': 1, '11010000 0000111': 1, '10001000 1001111': 1, '00000001 0100100': 1, '00100001 0100110': 1, '00101000 1110110': 1, '00011100 0001110': 5, '01101001 0110110': 1, '00101001 0001000': 1, '01001000 0001010': 1, '00010101 0011000': 1, '00011010 0001000': 1, '10100000 1001010': 1, '00110100 0010000': 1, '01110100 1011010': 1, '00100000 0001010': 1, '00001000 0000011': 5, '00010000 1011010': 2, '10000000 1001100': 3, '00110001 0111001': 1, '00011000 0001010': 21, '00110001 0011010': 1, '01000000 1100111': 1, '01000000 0010010': 4, '01001000 0111100': 1, '01010001 1001100': 1, '01011000 0001001': 1, '01001000 0010100': 4, '00110000 0010111': 1, '01011000 1100110': 2, '10011001 0001001': 1, '10110001 0010000': 2, '00111001 0001010': 1, '01010001 0110010': 1, '01010100 0001011': 1, '00000100 0010110': 3, '10011000 1111100': 1, '10011000 0001100': 1, '00010100 0000000': 9, '00110101 0001010': 1, '01010001 0100011': 1, '00101000 0001110': 1, '10000010 1011011': 1, '10100000 0010000': 3, '00001000 0000100': 36, '00000010 0011011': 1, '01001000 1001100': 1, '00010010 0001100': 1, '00011101 0001100': 1, '00000010 0001110': 2, '10010000 1011000': 3, '00110000 0110110': 2, '01000001 1000100': 1, '00110000 0011000': 23, '00100000 1001000': 1, '01011000 0010000': 1, '00010100 0001100': 6, '00110100 0011110': 1, '00000001 0001001': 5, '00110100 0010100': 1, '10001000 1000000': 2, '10010001 1001010': 1, '01011000 1011100': 1, '00010000 0001001': 44, '10100000 1010110': 1, '11010000 0000100': 1, '10000001 0000000': 1, '00000100 0011010': 1, '00100000 0010001': 4, '01011001 0001100': 1, '00011000 0011101': 10, '00110000 0111100': 5, '00011100 1000010': 1, '00010100 0100010': 1, '10000000 1101010': 1, '00000000 1011110': 1, '00011000 0000000': 4, '11010000 0100011': 1, '00011001 0101101': 1, '00001101 0001110': 1, '00011000 1011010': 1, '10100000 1000000': 1, '01000000 0011011': 1, '10010000 0001011': 1, '10000001 0010100': 1, '00000000 0001001': 38, '00011001 0110010': 1, '10001000 0001100': 4, '10010000 0011010': 1, '00010010 0101110': 1, '10100001 1000000': 1, '11011000 1011010': 1, '00010000 0011010': 49, '00010000 1001110': 2, '01010000 0111110': 3, '00111001 0011001': 1, '11011000 1010110': 1, '10010100 1011000': 1, '01000001 0001010': 3, '01010000 1000111': 1, '00010000 1101000': 4, '00010000 1110010': 1, '00001100 1001000': 1, '00000000 1001110': 2, '11001000 0111000': 1, '10011000 0001000': 1, '00000011 0000011': 1, '00110001 0000110': 1, '00011000 1011110': 2, '00110000 0110010': 5, '00111000 0001010': 2, '10000000 0001101': 1, '00001000 0100001': 1, '01010000 0000010': 15, '01010000 1101000': 1, '00110001 0000001': 1, '00000000 0100010': 7, '00000000 1001100': 4, '10001000 0001010': 1, '11000000 1100010': 1, '00000000 0101110': 1, '00001001 0000111': 4, '00000000 0001011': 28, '00010000 0000001': 42, '00011001 0010110': 3, '01000000 1100000': 1, '00010001 1011000': 1, '01010100 0000010': 1, '00001010 0011101': 1, '00001000 0010011': 3, '00010010 0000111': 3, '01010000 0000100': 4, '01011101 0011110': 1, '00011001 0010111': 1, '00000000 1000010': 15, '11000000 0000101': 1, '10110000 1010010': 3, '00110100 0010010': 1, '00000001 1000011': 1, '01010001 0001100': 1, '00010001 0011110': 3, '00111000 0010110': 6, '00000000 0110010': 2, '00000001 0011110': 3, '01000001 1001010': 1, '01010000 0100110': 1, '01100000 0011000': 2, '00000000 1011101': 1, '00001000 0010110': 15, '01011100 0001101': 1, '10010001 1001100': 1, '10011000 1000011': 1, '00000001 0011000': 2, '01000000 0001111': 1, '00010010 0001111': 1, '10000000 0000010': 11, '00000000 1000110': 2, '00010000 0110100': 3, '00011000 0011000': 14, '00000100 0000100': 7, '00000000 1001000': 5, '00000000 0010110': 26, '01111000 0011000': 1, '00000000 0011011': 8, '00110000 0101000': 1, '00001100 0000101': 1, '10010000 1010001': 1, '00011000 0001101': 17, '10001000 1010011': 1, '10000010 1000111': 1, '00000001 0010001': 9, '00011000 0001001': 6, '01000000 1101001': 2, '00111000 0010010': 1, '00110100 0011000': 1, '00000010 0011001': 1, '10011000 1011000': 1, '00010100 1000001': 1, '00001001 0011000': 1, '01110000 0011100': 1, '01110000 0110010': 1, '00100100 0010000': 2, '10010001 1010000': 2, '00000101 0010011': 1, '10010001 1001001': 1, '01110100 0011010': 1, '00001000 0011001': 1, '01001000 0000000': 1, '10000000 0000000': 15, '00011001 1011110': 1, '00010000 0001000': 265, '11000000 0101010': 1, '00010010 0010011': 1, '00011101 0001110': 1, '00101000 0000001': 1, '10010100 1001111': 1, '00100001 0000100': 1, '00011000 0010110': 10, '01001000 0010110': 1, '00000000 0011000': 33, '00000000 0010010': 86, '00010001 0001100': 13, '00000001 0000101': 4, '00100001 0010100': 2, '10010001 0001000': 1, '00000000 1011010': 2, '00011000 0101110': 4, '00011000 0001110': 50, '10110000 1111010': 1, '10001000 1000100': 5, '10100001 1010010': 1, '01010000 1100110': 1, '00111000 0010000': 1, '11010000 0100000': 1, '00010000 0111000': 6, '00011010 0000001': 1, '01000000 1000010': 1, '10010001 0000001': 1, '10010000 0010000': 2, '00110000 0011110': 4, '00000000 0100000': 9, '00000010 0000101': 2, '10111001 1001011': 1, '00010001 0101010': 1, '01010000 0010010': 9, '00010100 1001010': 1, '00010001 0100100': 1, '10010000 0001100': 1, '00010000 0011111': 1, '10010000 0110010': 1, '01000000 0011000': 2, '10010001 1000010': 1, '00010000 0000111': 7, '00100000 0111011': 1, '01010001 1000100': 1, '01010001 1100000': 3, '00000000 0010101': 5, '00111001 0011100': 2, '10001000 1011111': 1, '00000000 0100001': 1, '11100001 0110110': 1, '00101000 0001111': 1, '10010000 0000000': 12, '00110010 0010110': 1, '00111000 0001000': 1, '00001001 0000001': 1, '00111000 0011011': 1, '00000100 0010011': 1, '00001100 0010100': 1, '00000001 0001011': 6, '10000101 0010100': 1, '00010000 1000100': 4, '00010001 0010111': 1, '00111000 1111100': 1, '10100000 1001100': 1, '00010001 0001000': 43, '00010000 0011100': 21, '01010001 0010000': 1, '00000000 0111010': 1, '10010000 0000101': 1, '00010001 0001001': 13, '10000001 1000010': 4, '00011000 0000011': 1, '01000001 0000010': 2, '10010000 1000010': 18, '00000000 0001000': 153, '10010001 1000000': 2, '00000000 1001011': 1, '00100000 0001100': 2, '10010000 1101000': 2, '10011000 0011100': 2, '00011000 0111000': 1, '11010001 1100001': 1, '00011001 0001111': 2, '00000000 0110000': 2, '00111010 0011111': 1, '10101000 1010001': 1, '11010001 0101010': 1, '00101010 0000001': 1, '00011000 0110111': 1, '00110000 0001100': 4, '00011100 0111111': 1, '00010000 0011011': 7, '01010000 0011011': 1, '00000000 0111000': 3, '00000101 0010001': 1, '10001000 0001000': 3, '00011001 1000110': 1, '01011000 0000111': 1, '00001000 0011110': 35, '00011100 0010100': 2, '10010000 0011000': 1, '00010000 0110111': 1, '11010000 0010011': 1, '01001000 1100110': 1, '11010000 0100010': 1, '01010000 0011111': 1, '00110000 1010000': 1, '01010000 0001110': 2, '10010010 0000010': 2, '01000100 0000100': 1, '00000001 0110000': 1, '11000010 1001011': 1, '00001100 0001100': 3, '00010010 0000000': 3, '00001001 0000110': 1, '00010100 0000011': 1, '00010100 0001000': 8, '00100100 0011010': 2, '00010111 0000111': 1, '00011000 0011001': 7, '10110000 1001010': 1, '01010000 0100000': 4, '01100000 0000110': 1, '00011010 0101011': 1, '01001000 0011100': 4, '01100000 0010010': 1, '00000000 0010111': 6, '10000001 0100101': 1, '00011001 0010011': 1, '11001000 1100111': 1, '00000000 0000011': 67, '01010001 0000011': 1, '10011000 0101100': 1, '10011000 1010101': 1, '00011000 1000100': 1, '01000000 1101110': 1, '01011000 0011110': 2, '00001100 0001010': 1, '01011000 1000110': 1, '00100000 0000000': 9, '10101000 1010100': 2, '00110000 0100011': 1, '11010000 1001101': 1, '00000100 0011101': 1, '10000000 1000010': 15, '01100000 0001110': 1, '00011001 0010010': 1, '00111001 0011000': 1, '11010000 1000000': 3, '01000000 0001000': 13, '00000010 0010111': 1, '00011000 0001111': 12, '00000000 0101010': 5, '00000000 0010001': 16, '00010000 0001011': 33, '10110000 1011100': 1, '01000000 1001110': 1, '10010001 0000110': 1, '10010010 0000011': 1, '00001000 1011011': 1, '00011000 0000010': 10, '10001100 1000101': 1, '00110010 0000000': 1, '00011000 0100010': 2, '01010000 1011010': 1, '00100000 0000010': 9, '00000000 1010101': 1, '11000000 0010010': 1, '00000001 1000000': 1, '00110001 0010000': 5, '01010000 0111000': 5, '00001110 0001111': 1, '00000000 1011000': 3, '01000000 1000101': 1, '00111001 0010100': 2, '10010100 0000110': 1, '00010000 0100001': 8, '00011000 0011100': 41, '10010000 1011010': 2, '00011000 1011001': 1, '00101000 0000000': 1, '10011100 0001101': 1, '11001001 0000010': 1, '00100100 0100110': 1, '01010001 0010010': 1, '10010000 0000001': 1, '01000000 0101010': 1, '01011000 0011000': 4, '00010001 0011010': 6, '01100000 0011110': 1, '01010000 1101011': 1, '01010100 0001010': 1, '10010001 1011000': 1, '00010110 0001111': 1, '00000001 1000101': 1, '11000000 0000010': 2, '00011001 0011111': 4, '01010000 1000000': 1, '11000000 1011110': 1, '01000000 0010001': 2, '00110000 1011010': 1, '00110100 0000100': 1, '00000001 0001100': 11, '00001000 1011001': 1, '00011000 0010100': 13, '00000101 0000000': 3, '01001000 0000010': 1, '01010001 0100010': 2, '01111000 0111000': 1, '10010000 1100000': 2, '01110001 1010010': 1, '01000001 0001000': 1, '00100001 0110100': 1, '11000000 1001011': 1, '00010000 1010100': 1, '00110000 0110100': 3, '00010100 0011100': 1, '00011001 0010000': 3, '01010100 0100010': 1, '01000001 0000110': 2, '00001011 0011011': 1, '00010000 0001100': 75, '00010000 0011001': 9, '00011000 1111000': 1, '00110001 0000000': 2, '00110000 0010011': 4, '10010000 0011110': 2, '00110000 0001010': 12, '00001000 0010100': 17, '01000000 1010100': 1, '01010000 0000110': 6, '01011000 0001010': 1, '00010010 0001011': 8, '10001000 1001110': 2, '10010001 1001000': 1, '11000001 0110010': 1, '01000100 0011010': 1, '11010000 0000001': 1, '00000001 0000000': 69, '11000000 0000011': 1, '00011100 0000111': 1, '10100000 0011000': 2, '01010000 0000000': 15, '01000000 1110100': 1, '01010000 0011000': 7, '00010010 1000001': 1, '00001000 0000000': 27, '00010000 0000101': 10, '00101000 0011010': 2, '00010001 0000000': 49, '00010110 0000101': 1, '01010000 0010100': 2, '01110000 0011001': 1, '10000000 1010011': 1, '00010000 0101101': 1, '01010011 0001011': 1, '00010100 0000010': 5, '10010000 1010000': 2, '11000000 1001000': 2, '00011001 0011101': 2, '00010000 1101100': 1, '00001001 0000010': 1, '00001000 1001110': 1, '10010000 1001001': 4, '01010001 1101110': 1, '00000010 1000011': 1, '10101000 0010010': 1, '00111000 0000000': 1, '01010000 1001100': 1, '00010100 1001000': 1, '00110000 0110001': 2, '00000010 0001010': 1, '00010000 0100110': 3, '00010100 0010110': 2, '00000011 0000001': 1, '11010000 0000011': 1, '00010000 0011101': 3, '00000100 0010010': 2, '00101000 0001000': 2, '10001001 1010111': 1, '00110001 0010100': 2, '00110000 0111010': 2, '00010000 1001010': 1, '00110000 0101110': 1, '10010001 0001110': 1, '00010001 0000011': 8, '00110000 1010110': 1, '10001000 1011010': 1, '00111000 0011101': 1, '10000000 1000110': 6, '10010000 1100010': 3, '01000001 0010001': 1, '01011010 0011101': 1, '00110001 0011000': 3, '00000000 0100011': 2, '00001000 0001101': 7, '10110000 1001000': 1, '00000100 0000001': 2, '11000000 0000001': 1, '00001000 1001100': 4, '00010010 0000011': 5, '00010000 0100111': 2, '00000001 0000111': 4, '10001001 0000110': 1, '01100001 0001101': 1, '00001011 0000111': 1, '00010100 0001111': 1, '00000010 0010001': 2, '00011000 0101010': 1, '01011000 0000100': 1, '10011000 0100010': 1, '01010100 0100100': 1, '00011001 0011100': 5, '00000100 0001010': 2, '10010001 0011110': 1, '10000000 0000001': 3, '01010010 0001011': 1, '00000010 0000010': 3, '00101100 1011000': 1, '00101000 0000101': 1, '00101000 1011100': 1, '00000000 0101001': 2, '10001000 1011101': 1, '01001000 0111110': 1, '00001000 0001001': 4, '10010000 0000010': 9, '10000000 0100110': 1, '00110000 0010100': 6, '00110001 0011011': 2, '11010000 0010000': 1, '00000001 0001101': 1, '00011100 0011010': 1, '00001010 0000001': 1, '10000000 1001000': 12, '00001000 0010010': 8, '01010010 0000001': 3, '00000000 0011110': 11, '00100100 0010110': 1, '00000011 0000111': 1, '00110000 1110010': 1, '00110001 0001001': 1, '01100000 0110000': 1, '00001000 1101010': 1, '00000101 0000010': 4, '01010001 1101010': 1, '00000110 0000101': 1, '10000000 1000101': 2, '00101000 1011010': 1, '11000000 0100010': 1, '00101001 0010100': 1, '00000100 0010000': 1, '00111000 1011101': 1, '00110100 0110111': 1, '00110100 0011010': 1, '01000000 0100101': 1, '00111000 0011100': 16, '01000000 0001100': 5, '00000001 0011100': 1, '00100000 0010111': 1, '01000000 1000011': 1, '10000100 1000000': 1, '10000000 1001001': 1, '10010000 0100010': 1, '00011010 0001101': 1, '10000001 1010000': 1, '10010000 0001000': 9, '00011100 0010110': 2, '00110000 0010110': 7, '00111000 0011110': 7, '00001000 0000110': 31, '00001001 0001000': 5, '00100001 0010000': 5, '00001001 0110000': 1, '00101000 0010000': 5, '01000000 1001001': 1, '01010000 0110000': 2, '01100001 0011000': 1, '00010110 0001001': 1, '10001000 1001101': 1, '10011000 0101110': 1, '01100000 1011100': 1, '00010000 1011100': 1, '00010100 0011010': 5, '01000000 0101110': 1, '10000000 0000100': 4, '00010000 0001110': 49, '00001000 0000010': 19, '00100000 0110000': 3, '00001000 0111110': 1, '00000000 1100100': 1, '01010001 1101000': 1, '01010001 0000010': 3, '00010001 0010100': 5, '00110000 1001011': 1, '10110000 0011000': 1, '10010000 1010010': 1, '00100000 1010101': 1, '11000000 0100000': 2, '01010001 0010100': 1, '00010001 0011011': 3, '00101000 0011100': 7, '00000000 0100110': 4, '11010000 0011000': 1, '01110001 0001010': 1, '01011100 0011110': 1, '00011000 0111010': 1, '00111000 0111100': 1, '01011001 0110010': 1, '00010000 1000110': 2, '00001100 0000010': 2, '00001000 0000101': 5, '00110000 1011110': 1, '00001001 0001011': 1, '00111000 0011000': 4, '00000100 0000111': 1, '00001000 0000001': 2, '00011001 0101111': 1, '00010000 0010001': 15, '00010001 0000111': 1, '10010000 0101010': 1, '10010000 1001011': 1, '00101000 0010101': 1, '00100000 0111000': 1, '01000000 1010001': 1, '00000010 0010010': 2, '00110010 0010011': 1, '00010010 0001000': 2, '11011001 0001010': 1, '10010000 1000100': 2, '00001000 0011011': 2, '00110000 0100000': 1, '01011000 0000010': 2, '00001001 0101000': 1, '10110000 1000000': 1, '00011000 0001000': 31, '10110000 0000010': 1, '00000000 0110101': 1, '11000001 1000100': 1, '00001000 0000111': 3, '00101000 0001001': 1, '01000001 1000001': 1, '00010000 1001000': 11, '01000001 1100110': 1, '10110000 1010101': 1, '01010000 1001010': 1, '00010000 0010011': 12, '00100110 0010111': 1, '00011000 0001100': 51, '00000000 0000100': 120, '10000000 1011110': 1, '00010000 0010101': 3, '10010011 1000011': 1, '00010001 0001011': 9, '00110000 0100010': 2, '00011001 0001000': 4, '00011000 1001110': 2, '00111010 0010011': 1, '00101000 0010110': 6, '10010000 1110010': 1, '00111000 0111101': 1, '00010000 1100010': 2, '00011000 0010111': 4, '00000100 0011000': 2, '00010000 0010110': 14, '00110000 0000101': 1, '00001000 1000000': 2, '00100000 0011010': 10, '00010001 0101001': 1, '00001010 0000111': 1, '00011001 0110100': 1, '00110100 0010111': 1, '00010001 0101000': 2, '00011000 0101111': 2, '00011100 0011100': 1, '10010000 0000100': 2, '10000000 0010000': 2, '01000010 1000001': 1, '00100000 0011111': 1, '01011000 0111010': 1, '10011000 1011111': 1, '00001000 0111100': 1, '01000000 1000110': 1, '00100001 0000110': 2, '00000100 0001000': 4, '01110001 0010000': 1, '00001000 0010101': 3, '00010000 1010111': 1, '00110000 0000010': 9, '00001000 0101100': 1, '00101000 0011110': 3, '00001100 0001000': 1, '01010001 0001001': 1, '00000010 0000001': 2, '10111000 1011110': 1, '00011000 0011010': 13, '00010100 0010100': 1, '00110100 0001000': 1, '00111000 0001100': 8, '10000000 1010001': 1, '10001000 1001000': 3, '00010001 0001111': 4, '10000001 1011010': 2, '00010101 0001000': 2, '01010000 1101010': 3, '01010101 0011010': 1, '10001001 1001000': 1, '00000100 0000101': 4, '00010010 0000001': 3, '00000011 0010011': 2, '00011011 0011001': 1, '00011010 0001111': 3, '00011001 0011110': 7, '01111000 0010110': 1, '01000000 0100010': 2, '11010000 1001010': 3, '00011001 0000101': 2, '00010001 0010101': 1, '00011010 0011011': 1, '01100000 0011111': 1, '00000110 0001110': 1, '00110000 0000100': 3, '00000000 0001111': 6, '01110000 0011110': 1, '10001000 0000100': 4, '00100000 0000110': 2, '00000010 0000011': 15, '10001000 1011100': 2, '00011100 0000010': 1, '01001000 0001101': 1, '01010000 0111111': 1, '10010001 0000100': 1, '10010000 0001101': 2, '00010100 0000100': 3, '00010001 0001110': 7, '01110000 1110010': 1, '01000001 0000000': 4, '01000000 0000010': 19, '10111001 0010000': 1, '00010000 0100100': 6, '10111001 0011000': 1, '00010100 0000101': 2, '01100001 0000001': 1, '00010000 0101010': 11, '01000000 0001101': 1, '10001000 1001100': 4, '01101000 0011110': 1, '00101000 0011011': 1, '00000001 0000001': 13, '10111001 0011011': 1, '00001100 0011011': 1, '01010000 1000100': 2, '10110000 1011010': 2, '00010110 1000111': 1, '00000010 1010011': 1, '10011000 1001010': 2, '01011000 1000100': 2, '01110000 0110000': 2, '10001001 0000000': 1, '10011000 1001100': 6, '10011000 0111100': 1, '01010000 0010000': 3, '00101010 0011111': 1, '00000101 0000100': 4, '10010001 1001110': 1, '10100000 1101010': 1, '01110000 1000100': 1, '00000001 0011010': 5, '10110000 1011000': 1, '00110000 0000111': 1, '00000001 1000001': 1, '00000010 0010011': 3, '01010100 0111001': 1, '00010001 0110010': 2, '00010000 0011000': 64, '00010001 0111111': 1, '01000000 0010011': 1, '00110001 0111011': 1, '00110000 0110000': 2, '10000000 0000111': 1, '10110000 0010000': 1, '11010001 0001110': 1, '01011000 0111110': 2, '10000000 1000011': 5, '00110000 1001010': 2, '00000000 0001110': 44, '10000000 0001000': 9, '00100001 0010010': 1, '10100000 0000111': 1, '00000001 0010010': 9, '10000100 1000110': 2, '00011100 0000000': 1, '00000100 1000100': 1, '00011001 0001100': 7, '00101000 0010011': 1, '00011100 0001111': 2, '10000001 1011100': 1, '00001000 0010111': 6, '01010000 0101011': 1, '00010000 0010111': 1, '00100001 0011010': 3, '01010001 0001000': 5, '00111000 0001110': 1, '11110000 0110110': 1, '00000101 1010010': 1, '00010001 0010000': 11, '00101000 0011000': 2, '00001000 0001110': 34, '11000000 1000101': 1, '01111000 0011010': 2, '10011000 1011110': 2, '10101000 1011110': 1, '01110100 0010010': 1, '10010001 0001100': 1, '10000010 1010011': 3, '00000001 0000100': 15, '00100000 0011100': 3, '01001100 0001000': 1, '00010000 0010000': 56, '10001100 1000100': 1, '00010100 0000110': 3, '01000000 1010110': 1, '00010100 0000001': 1, '10011000 0011010': 1, '10010001 1011110': 1, '10110100 0111100': 1, '10100000 1010100': 1, '00101000 0001100': 1, '00010001 0110000': 1, '10011000 1010111': 1, '00011000 0010000': 3, '00010001 0100000': 3, '00010000 1001011': 3, '11010000 1001000': 2, '00011000 1011100': 3, '10010000 0100001': 1, '01000011 0000000': 1, '00100000 0010011': 10, '01010000 0001000': 14, '00100000 0001001': 1, '00010000 0101110': 2, '00011001 0011010': 3, '10010100 1001100': 1, '10011010 1001111': 1, '00000001 0010101': 2, '10000001 0101000': 1, '00010000 1101110': 2, '00011000 0111100': 2, '00111000 0010001': 1, '00001010 0000100': 1, '00010010 1000011': 1, '10000000 1011000': 2, '00100000 1000100': 1, '00010000 0000110': 68, '00100100 0010101': 1, '01011001 1101000': 1, '01011000 1101110': 1, '01011000 1011000': 1, '00000000 0001010': 113, '10010100 1000100': 1, '01001000 0000110': 2, '00000001 0110010': 1, '01010001 1000000': 2, '11010000 1000110': 1, '00100000 1010110': 1, '00010000 1011110': 2, '01010000 0000001': 5, '00010101 0001100': 2, '01110000 0011010': 2, '00010010 0001101': 3, '00000100 0010111': 1, '00011000 0101101': 3, '00101001 0011110': 1, '10110000 1010000': 3, '10000000 1001110': 3, '11010100 0001000': 1, '10000000 1101111': 1, '00000010 0000111': 3, '00000000 0001101': 9, '00010000 0010010': 38, '00010101 0000110': 3, '01011000 1101010': 2, '01011101 1101000': 1, '01011000 1000011': 1, '01101000 0010101': 1, '00100000 0000100': 2, '10010000 0001110': 2, '00011001 0000010': 2, '00000000 1000001': 4, '10010000 1000011': 1, '00000000 1010010': 4, '00011001 0001110': 8, '00011000 0100100': 2, '10110001 1110001': 1, '10000001 0000010': 1, '01010110 0001101': 1, '01010000 1001011': 2, '00111000 0101000': 1, '01000000 1001010': 3, '11011000 1001100': 1, '00100000 0000001': 2, '00011000 0101100': 5, '00001000 0011100': 28, '00001000 0011111': 4, '00000100 0101000': 1, '01010000 1000010': 3, '00010000 0101111': 3, '10000000 1010010': 1, '00011000 0011111': 5, '01010000 0101010': 2, '01011001 0100101': 1, '10010000 0001010': 9, '01111001 0001000': 1, '00010000 0100101': 3, '00011000 0010010': 4, '00100000 0011110': 6, '11110000 0101110': 1, '01011100 0001110': 1, '10111000 1001110': 1, '00011001 0000100': 6, '00100000 0001111': 1, '00100001 0000001': 2, '00101000 0001010': 1, '00101000 0010100': 7, '11001000 0001100': 1, '01010000 0011010': 1, '10000100 0001001': 1, '00010000 1010000': 5, '10011100 0001111': 1, '00000010 0001011': 2, '00011000 0000111': 2, '01100001 0010110': 1, '00010000 0000010': 187, '00000100 0000110': 8, '10000000 1000111': 1, '00001000 1011000': 1, '10011000 1000000': 1, '00011001 0000000': 1, '00100100 0010100': 2, '11010000 0101011': 1, '00010001 0000100': 14, '00010001 0001010': 23, '10000000 0100000': 1, '00010001 0011100': 5, '01100000 0010000': 3, '10010000 1011100': 1, '10010100 1000010': 2, '00010001 1001000': 1, '00010000 1011000': 1, '00110000 0000110': 4, '10111000 1011010': 1, '00001000 1001000': 1, '01000000 1111110': 1, '00001011 0000001': 1, '00000000 0010011': 16, '01101000 0000101': 1, '00010110 0101010': 1, '01000000 0010110': 3, '00101000 0000010': 1, '10000000 1000100': 4, '00110000 0000011': 1, '10011000 0010100': 1, '00100001 0110010': 2, '01001000 0011000': 1, '00010001 0001101': 6, '00011001 0001101': 4, '00100110 0011001': 1, '00110000 1011100': 2, '00001000 0011010': 11, '11000000 0000000': 2, '00000011 0001111': 2, '11001001 1000100': 1, '00000000 0101100': 1, '10010000 0011100': 1, '00111000 0001011': 1, '10000000 0000011': 2, '01011000 1001110': 1, '01010100 0001101': 1, '11000000 1001010': 1, '01000010 0000000': 1, '10001001 0001110': 1, '00000000 0000110': 91, '00010101 0010000': 2, '01000000 1111000': 2, '00110001 0011110': 1, '01000000 1001000': 1, '00011001 0010100': 2, '00100000 0010010': 23, '11000000 1101000': 1, '10010001 0000010': 2, '00111000 1010110': 1, '01000000 1101000': 1, '00001000 0001111': 3, '00010011 0000101': 1, '01011000 0011101': 1, '00110001 0100010': 1, '00010101 0000010': 2, '00000100 0101100': 1, '10010000 1010110': 1, '01011000 1101100': 1, '10001000 0000010': 3, '00001000 1010010': 1, '00001000 0001011': 2, '00101110 0000011': 1, '10010000 1010111': 1, '00000001 0101001': 1, '00011000 0000001': 3, '10000001 1000100': 1, '10000000 1011001': 2, '00010101 0010111': 1, '00100000 0000011': 2, '00011001 0100110': 1, '00010000 1010001': 1, '00000000 1000111': 1, '00001000 0010001': 2, '11010000 1101010': 1, '00010000 0101001': 7, '10110000 1110011': 1, '01100000 0011100': 1, '00000000 1001101': 4, '11000000 1000000': 1, '00000000 0001100': 68, '00110000 0010010': 16, '01000001 0000100': 1, '01010010 0000000': 1, '00010001 0010110': 2, '00000100 0001110': 4, '00010000 0010100': 16, '01001000 0011110': 1, '00110001 0011001': 1, '00111000 0111110': 1, '11010000 0001000': 2, '11010101 0010101': 1, '00010001 1000000': 2, '00000010 0001101': 1, '10000100 0000111': 1, '00111000 0000110': 1, '10000000 1001101': 1, '00001000 0011101': 8, '01101001 0010100': 1, '00001000 1010100': 1, '01100001 0010100': 1, '00011000 1001100': 3, '00001100 0001110': 2, '00101000 0010010': 4, '00000101 0001011': 1, '10000001 1000011': 1, '10100000 1010000': 3, '00000001 0000011': 11, '00000101 0001100': 1, '01011000 0011111': 1, '00000000 1101001': 1, '00010000 0100010': 22, '00010101 0100110': 1, '00011000 0011011': 2, '00011000 0000100': 21, '00110001 0100000': 1, '01010000 0010110': 1, '00100000 0001101': 1, '00010011 0001001': 1, '11000001 1101010': 1, '10000001 1000110': 1, '11010000 0100100': 2, '11010010 0001011': 1, '10110000 0010100': 1, '01001000 0001000': 1, '00100000 0010000': 40, '00111000 0010100': 1, '00000001 0010110': 5, '01011001 0101000': 1, '10011000 0101010': 1, '01111000 0010010': 1, '11011000 1000000': 1, '00000001 0011001': 1, '00100000 0000101': 1, '00110001 0110100': 1, '00000000 0110001': 2, '01000001 0100000': 1, '00010100 0001011': 1, '11010000 0000010': 2, '00001000 0001010': 14, '01010000 0011101': 2, '00001001 0001100': 4, '00110000 0111110': 1, '00011001 0011000': 5, '01010001 0000100': 2, '00101001 0001100': 1, '01100000 0000001': 1, '10001000 1010110': 1, '00100000 0001110': 1, '00110000 0011100': 8, '00000000 1000000': 22, '01000000 0111000': 1, '01000000 1110011': 1, '01010100 0000100': 1, '00100000 0101010': 1, '01010001 0011001': 2, '01000000 0010100': 3, '01111001 0011110': 1, '00011000 0000110': 13, '10110000 1001100': 1, '10000000 1010101': 1, '00011000 0001011': 3}, '1': {'01110111 0001100': 2, '10100111 1101100': 1, '11101101 0000001': 1, '01101111 0000010': 2, '11101111 1100100': 1, '11101100 0101111': 1, '00101101 0001001': 1, '01110001 0101010': 1, '10110010 0101101': 1, '11000111 0010110': 3, '11010110 1011010': 1, '11101101 0010100': 1, '10000011 0001101': 1, '01110111 0011100': 3, '01111111 0010110': 2, '11101011 0000101': 2, '10101111 0111000': 1, '11110111 0010001': 7, '11110111 1100110': 2, '10001110 1011000': 2, '10111110 0000000': 5, '00110111 0001100': 2, '10111111 0111000': 2, '11001111 0011111': 1, '11101111 0011101': 14, '01110110 0101000': 1, '11010111 1011000': 1, '11101101 0010001': 1, '11010110 0010110': 2, '11100010 0011110': 2, '10101111 1011001': 1, '10111010 0001001': 1, '10101111 0100001': 1, '10110111 1110000': 2, '11101101 0111010': 1, '00001111 1000001': 1, '11100111 0001000': 62, '01100111 0011100': 2, '11100110 1001111': 1, '11110111 1001100': 5, '11111010 0001011': 3, '01101111 0101000': 1, '01100111 0000000': 3, '10110110 0110110': 1, '11110111 1011001': 1, '01111111 0101001': 1, '11010110 0010000': 2, '01100110 1001100': 1, '11110111 1000101': 1, '01000110 0011100': 1, '11110010 1000111': 1, '11110101 0001100': 2, '01101111 0011101': 1, '10101111 0001000': 6, '11111110 0001101': 6, '11111101 0001111': 2, '01111001 0111010': 1, '10110111 0100000': 1, '11100100 0001100': 1, '11101110 0001011': 11, '11100101 0000110': 1, '11000111 0001000': 4, '01100111 1000000': 6, '10011100 1100010': 1, '10100111 1000000': 1, '01011011 0010010': 1, '00111100 0000000': 1, '11110100 0001111': 1, '11101010 0001000': 1, '10101111 0011000': 8, '11110110 1110010': 1, '11101010 0010100': 1, '01101100 1001000': 1, '11101100 1011010': 1, '01111110 0000111': 1, '10110111 0111000': 1, '10100110 0010110': 1, '11100110 0000010': 9, '11100111 0001001': 25, '01101110 1000010': 1, '00010110 0010000': 1, '01001110 0011001': 2, '11111110 1000101': 2, '11011111 1111010': 1, '11010111 0010100': 10, '11000111 0010001': 1, '10101011 0001001': 1, '11111111 0100011': 2, '10100011 0000100': 1, '01110011 0101011': 1, '10110110 0011100': 1, '11110111 0000101': 25, '11010111 0010001': 7, '10100100 0101111': 1, '01111110 0001100': 1, '11001111 0101101': 1, '11101010 0001001': 3, '11101101 0001100': 1, '11111110 1001000': 4, '01011100 0110010': 1, '11100011 0000000': 1, '10010100 1010100': 1, '01010111 0011100': 3, '11010001 0011111': 1, '11101111 1000100': 3, '11110100 0001101': 1, '11110011 0010100': 2, '11111110 0111110': 1, '01100010 0000000': 1, '11101101 0111110': 1, '11100011 0001110': 9, '11110101 0010100': 3, '01110101 0010001': 1, '11110110 0001100': 26, '11111110 0010001': 15, '01011111 0000000': 2, '10001101 0001001': 1, '11001110 1011000': 1, '11101111 0000110': 10, '10110111 1111110': 1, '11011110 0011111': 1, '01101110 0011001': 1, '10010111 0101011': 1, '11100111 0001111': 9, '01101111 0000001': 4, '11100111 0011111': 4, '11010111 0111101': 1, '11110010 0010111': 2, '10101010 0001111': 1, '11011100 0000010': 1, '11011111 0010001': 12, '11100100 0001111': 1, '01110110 0100101': 1, '01111101 0001001': 1, '11100110 0011100': 15, '11110111 0000001': 20, '11111100 0010110': 1, '11111110 0011000': 15, '11011110 0001000': 6, '01101100 0011010': 1, '01010110 0000100': 1, '00110110 0001100': 1, '11001011 0011010': 1, '11100010 0001001': 1, '11101010 0010101': 1, '11100100 0001000': 1, '11111010 0010011': 3, '11011011 0111110': 1, '11001101 0111001': 1, '11011111 0011101': 4, '10101110 1110010': 1, '11101010 0010011': 1, '11011111 0101011': 1, '00101111 1001011': 1, '01011111 0001001': 2, '11100011 0011010': 2, '00111111 0011000': 1, '11100100 0010011': 3, '01110010 1010001': 1, '10001111 0111000': 1, '11010110 0001111': 1, '11011111 0010011': 1, '11110101 0001011': 2, '00110111 1000110': 1, '01110111 0011110': 4, '11101110 1000111': 1, '10110110 1100010': 1, '10110111 0110010': 1, '11011111 1011000': 1, '10010111 0011100': 2, '10011111 0100110': 1, '01101111 0010011': 1, '10011101 0000100': 1, '10111110 0000010': 3, '11000110 0011010': 1, '11011011 0010010': 2, '11011111 0001101': 4, '00011101 1000110': 1, '01001111 0010100': 1, '10111111 0010010': 1, '11011110 0011110': 2, '11101110 1011100': 1, '10110010 0001001': 1, '11000111 0010101': 3, '11010110 0010101': 4, '11110100 0010001': 2, '01100111 1010111': 1, '01111101 0010111': 1, '10111111 0001011': 2, '11110110 0000110': 12, '11111110 0010010': 14, '10110110 0000100': 4, '11000111 0001100': 5, '11110111 0011100': 23, '10000111 0010101': 1, '11001110 1001001': 1, '00001110 1011110': 1, '11000110 0001001': 4, '11110011 0011101': 2, '11111001 0000000': 1, '10101101 1001000': 1, '10111111 0010000': 3, '11100110 0101000': 1, '11110111 0001001': 34, '01011110 0011101': 1, '10010110 0001100': 1, '11011111 1010111': 1, '11111100 0011010': 1, '00111111 0110000': 1, '11100110 0010100': 10, '11110110 0010100': 14, '11000111 0011011': 1, '11111110 0100010': 2, '11010101 0000011': 1, '11101111 0001111': 7, '10101111 1001100': 2, '01111110 1000011': 1, '11011111 0111010': 2, '10001111 0100000': 1, '11101100 0010000': 2, '11111111 0111001': 1, '01100010 0001000': 1, '10000100 0001011': 1, '11000110 0011100': 8, '11101000 0000010': 1, '11111010 0011001': 1, '11011100 0011011': 1, '11011111 0011111': 2, '11000111 0001110': 7, '11111110 1000000': 5, '11101110 1000011': 1, '11100111 0010010': 7, '10100111 0110010': 1, '11111111 0000110': 15, '11101110 0000010': 7, '11100111 0001011': 5, '11110110 0000111': 12, '11101101 0001110': 5, '11001010 1011000': 1, '01111011 0001000': 1, '11100101 0000001': 4, '11101011 0010000': 1, '11110110 0000000': 33, '11110110 1001000': 1, '10110110 0101111': 1, '10101110 0001011': 1, '10101110 1000010': 1, '01111100 0001011': 2, '11011100 0000001': 1, '11011111 0101001': 1, '01010111 0100100': 1, '01111111 1000001': 2, '01100111 0010011': 1, '10010110 1001000': 1, '01110110 0011100': 2, '11111111 0100101': 1, '11000111 0110011': 1, '11110010 0001111': 1, '11001111 0010111': 1, '01011111 0010000': 3, '11110100 0000001': 1, '11011010 0011011': 1, '11011110 1011000': 1, '01111110 0001000': 6, '01110101 0001010': 1, '00111110 0001000': 1, '10111111 0001000': 4, '11000110 0001100': 5, '11111001 0001000': 1, '10100111 0000000': 3, '10111011 0010000': 1, '10100111 0010000': 3, '01110110 1000101': 1, '11110110 1010011': 1, '11000111 0000110': 1, '11010111 0110001': 1, '11001101 0010100': 1, '11100010 0101000': 1, '11100111 0000110': 13, '11111111 0010101': 8, '11110100 0001001': 3, '01111110 0000010': 1, '11101001 0001010': 1, '01110110 0000111': 1, '10011110 1011100': 1, '01101011 0011000': 2, '01001110 0100001': 1, '11100110 0000011': 4, '11111110 0100101': 1, '01110101 0000001': 1, '01101110 0001111': 2, '11101111 0000111': 8, '10010110 0100100': 1, '10111111 0101100': 1, '00100100 0001101': 1, '01101011 0001010': 3, '10111011 0000010': 1, '01001110 0011010': 2, '01011110 0010101': 1, '01110100 0001011': 1, '11111110 0000100': 23, '01111110 1011000': 3, '11010110 0000111': 2, '11100111 0110000': 1, '11010110 0111101': 1, '11100100 0000110': 1, '11000100 0001101': 1, '00110111 0000100': 2, '01101111 1010001': 2, '01100111 0011010': 1, '01100110 0001000': 2, '11011111 0111011': 1, '11110011 1100110': 1, '11110110 0111001': 1, '11110111 1010000': 1, '11101111 0011000': 56, '11100110 0010010': 3, '00010110 0010100': 1, '11111101 0010000': 6, '00100111 0001001': 1, '10110101 0000111': 1, '11010110 0001001': 2, '11111000 0011100': 1, '11100001 0011000': 1, '11100111 1001101': 1, '11011110 0101111': 1, '01101011 0001000': 1, '10110111 0010100': 1, '01000111 0010100': 2, '11000111 0000010': 2, '11010110 1010001': 1, '11111110 1001011': 1, '10111100 0000011': 1, '11111110 0011100': 8, '11001110 0011000': 11, '10010111 1001100': 1, '10101111 1001011': 1, '00011111 0010011': 1, '11101101 0000101': 1, '11010110 1101010': 1, '01101110 0010000': 2, '01110011 1000100': 1, '11110110 0111000': 1, '10111111 1100100': 1, '11010110 0001011': 1, '11110110 1011000': 3, '01110111 1111001': 1, '11111101 0001100': 1, '10000111 0010100': 1, '11101110 0010000': 19, '10011111 0100010': 1, '11101111 1001010': 1, '01110111 0000001': 3, '11000110 0101100': 1, '11100110 0011010': 6, '11100010 1110100': 1, '10011010 0011010': 1, '01100111 0001000': 10, '10110110 0000101': 1, '11011011 0100110': 1, '11101011 0011010': 2, '11010110 0110011': 2, '11111111 1010101': 1, '01000110 0001000': 2, '11110110 1000011': 2, '11111011 0010111': 1, '10100110 0111011': 1, '11100110 0001100': 49, '10100111 0010100': 2, '11010110 0010010': 3, '01011110 0011110': 1, '11011111 1001111': 1, '11011110 0011011': 4, '01111111 0001101': 1, '01100011 0000111': 1, '11011110 0000001': 1, '01101110 0010001': 3, '01100101 0001110': 1, '01110111 1001010': 1, '10111101 1100001': 1, '11010111 0011101': 5, '11011111 1010101': 1, '11110011 0101100': 1, '11100110 0000100': 16, '01110110 0001000': 9, '11010110 1010000': 1, '01110111 1001001': 1, '11110111 1111000': 1, '10110110 1000100': 1, '10110111 0001001': 2, '01001110 0011000': 2, '11011111 0010101': 5, '11011110 0111010': 1, '11011110 1000000': 1, '11111011 0011000': 3, '11111110 0000001': 25, '01100010 0001110': 1, '11010111 0110010': 1, '11110001 0000000': 1, '00101110 1011000': 1, '11000111 0000101': 4, '01110110 0010110': 1, '11000111 0111011': 1, '01100111 0001110': 2, '01010111 0010100': 3, '01111111 1011001': 3, '01110100 0000000': 2, '10111101 0100010': 1, '11110111 0110100': 1, '01110101 1000100': 1, '10110111 0000001': 1, '11100010 0010110': 4, '11101101 0001111': 1, '11011011 0011101': 1, '01110110 0100001': 1, '10101110 1011110': 1, '11011110 0111001': 2, '11111011 0000100': 3, '01011110 0010000': 2, '11100101 0011001': 1, '11111110 0011110': 5, '11010110 0000001': 3, '01111110 0011110': 1, '10110111 1001001': 2, '11100110 0110111': 1, '01011111 1000001': 1, '01111111 1000100': 1, '10111000 0000000': 1, '11100110 1001100': 3, '11110111 0010100': 27, '01111110 0010001': 4, '01110111 1000101': 1, '11010100 0000110': 1, '01000111 0011000': 1, '11000110 0010000': 2, '11001110 0010010': 2, '01110110 0000010': 1, '11111111 0001010': 14, '10110110 0011001': 2, '01101111 0011110': 3, '11100111 0000000': 30, '11110010 0010010': 1, '11101100 0001101': 2, '11010010 0011000': 1, '11100011 0010100': 1, '11001010 0011110': 1, '10101101 0111011': 1, '10010110 0011001': 1, '10101111 1111000': 2, '11100110 1011111': 1, '10101111 0001111': 1, '11011110 0010011': 4, '00101110 1010000': 1, '01011110 1010000': 1, '11100011 0011000': 2, '11010111 0010110': 3, '01010111 0101001': 1, '11110010 0011111': 1, '11110101 0011110': 1, '10101111 1110000': 1, '11011110 1110001': 1, '00110110 1011000': 1, '11101111 0101001': 2, '11101100 0011000': 3, '01100110 0001011': 4, '10111111 0111010': 1, '00100010 0001110': 1, '01111101 0001101': 1, '11000110 0000100': 3, '01110110 0010111': 1, '11000110 0011111': 1, '11001100 0000000': 1, '11111110 0000000': 42, '11011010 0010010': 1, '11111011 0010010': 1, '11011110 0000000': 10, '11101110 1001010': 2, '11100111 0011001': 7, '01101110 0000001': 6, '11011100 0011000': 2, '10110110 0100100': 2, '01111111 1001000': 1, '01101010 1011101': 1, '01101111 0010010': 1, '11111100 0000000': 4, '01101111 1011000': 4, '11101110 0011010': 17, '10011111 0101000': 1, '11110111 0001010': 20, '11000100 0001100': 1, '01100110 0111011': 1, '10100001 0000111': 1, '11111111 0001100': 22, '11101100 0011001': 4, '11101101 0001000': 6, '11001111 0001101': 4, '10111010 0011000': 1, '01110110 0100110': 1, '10101110 0100111': 1, '01010110 0010110': 1, '01101110 0011100': 1, '01101110 0000000': 4, '11110011 0000111': 1, '10110111 0101000': 2, '10101110 0001000': 2, '11010110 0011110': 2, '10100110 0101110': 2, '10111111 1110000': 1, '00110111 0000101': 1, '01011101 0010011': 1, '01101011 0000010': 1, '10100110 0001010': 1, '11000011 0010010': 1, '01100101 1001101': 1, '01110111 1010100': 1, '11101111 0001100': 25, '00110111 1110110': 1, '11100010 0001000': 1, '11110101 0001001': 1, '11110111 0110000': 2, '10101111 0000010': 1, '10101110 0000010': 1, '01100101 1000111': 1, '10100110 0001001': 2, '11100011 1001010': 1, '00101111 0001111': 1, '11100111 1001111': 1, '10100011 0011010': 1, '11110110 0001001': 11, '01101011 1000011': 1, '11111110 0001110': 8, '01110010 1001111': 1, '01110100 1001100': 1, '10001110 0011111': 1, '11100110 0001010': 16, '01100110 0100000': 1, '11111111 0111100': 2, '11111111 0000101': 17, '11001111 0001010': 6, '11100010 0010011': 1, '11101110 0001100': 12, '01101010 0011100': 1, '01111111 1011101': 1, '01110111 0000110': 8, '11001111 0010100': 4, '01110110 1001110': 1, '10011100 0010010': 1, '11111111 0000100': 33, '11111110 0101101': 1, '00111111 0011010': 1, '11010011 0100101': 1, '11101111 0110010': 2, '01111101 0010101': 1, '11100100 0000001': 2, '11001101 0000010': 1, '11010010 1111111': 1, '10111111 1101010': 1, '01101011 0001100': 1, '11001110 0010101': 2, '01111111 0011000': 1, '11111111 1001111': 1, '00010110 1001101': 1, '11010011 0000000': 2, '01111111 0010010': 4, '01100110 0011100': 1, '11010100 1011101': 1, '11111010 0011010': 2, '11111011 0001001': 2, '11100110 0001011': 7, '11110101 0101001': 1, '01100111 1111100': 1, '11001111 0011110': 2, '10001100 0000001': 1, '11010111 0010000': 6, '11101010 0011111': 1, '10011111 0111000': 1, '11110110 0011011': 5, '11011111 0010100': 5, '11110110 0001110': 8, '11010110 0010100': 4, '11011110 0001011': 3, '01110110 1011011': 1, '11001111 0000000': 2, '11111010 1000110': 1, '11100110 0000110': 6, '01010101 0011000': 1, '11100111 1001011': 2, '11111101 0001110': 1, '00100110 0001111': 1, '11010110 0001000': 2, '10001110 0001000': 2, '10111110 0010001': 2, '01010111 0001000': 1, '10111110 1011011': 1, '01110110 1001000': 1, '11010101 0111110': 1, '01110101 0000101': 1, '11110100 0011110': 1, '11100110 1011011': 1, '10101011 0011000': 1, '01111110 1001010': 2, '11111111 1001101': 1, '11111001 0001010': 1, '00011010 0000001': 1, '01111101 1010000': 1, '11111100 0010011': 1, '11011110 0010000': 17, '11101111 0111110': 1, '10000111 1000000': 1, '10111010 0000000': 1, '01110111 0010011': 1, '11101100 0010110': 1, '01110111 1000110': 1, '11011010 0110101': 1, '10100110 0001011': 1, '11100111 0101000': 3, '11100100 0000011': 2, '10010011 0001010': 1, '10100101 0011000': 1, '10111111 0010011': 4, '11110100 1010100': 1, '11100100 1001000': 1, '11010110 0001010': 2, '11100101 0101101': 1, '11101111 0001000': 57, '11101111 0111010': 1, '01101111 0000100': 2, '10011111 1110000': 1, '11011111 0100001': 1, '01100111 0000011': 1, '11100010 0001100': 1, '11100010 0000010': 2, '01110110 0001100': 5, '10111111 0000101': 4, '10000111 0000000': 2, '11111111 0010001': 24, '11101110 0110011': 1, '11011101 0111011': 1, '01110110 0001110': 2, '01110111 1001101': 2, '11001110 0011011': 2, '11001110 0011111': 2, '10100110 0000100': 4, '11101110 0010010': 11, '01001110 0010011': 1, '11001111 1011010': 1, '11101000 0000001': 1, '01110110 0001011': 2, '11110110 0000101': 21, '11111111 0001111': 5, '01110100 1001001': 1, '11100111 0100101': 1, '10100111 0001001': 3, '01101111 1001001': 1, '01010110 0010101': 1, '01111110 0001010': 1, '01110011 1101010': 1, '11010010 0101011': 1, '01111111 0101011': 1, '11101000 0011111': 1, '11010101 0011010': 1, '11111010 0000000': 5, '11111101 0001001': 5, '11101100 0110111': 1, '11011111 0111001': 2, '11011011 0011001': 1, '10111111 1000000': 3, '11100110 1000101': 2, '11100110 0010111': 2, '11110011 0011110': 1, '11111111 0011110': 7, '11110110 1000111': 1, '11100000 0001111': 2, '11011100 0001000': 1, '01000111 1010011': 1, '10100101 0010011': 1, '10111111 0110000': 1, '11100111 0000100': 43, '01011011 0011000': 1, '11101100 0001000': 6, '01100111 0101010': 1, '00111011 1001110': 1, '11100110 0001001': 18, '10011110 1010010': 1, '11011110 0110011': 1, '11111110 1011000': 2, '11110100 0101000': 1, '11100011 0000110': 1, '11111101 0001011': 3, '11111110 0110100': 1, '01100011 1001001': 1, '11101111 1011011': 1, '11110011 0001111': 1, '10101110 0011011': 1, '10010111 0010001': 1, '11011111 0110100': 1, '01110110 0100100': 1, '11000111 0010100': 4, '01000110 1010100': 2, '11111110 0000110': 15, '10110011 0010001': 1, '11111111 1001100': 1, '01101110 1010100': 1, '00110110 0101100': 1, '11000111 0001001': 6, '01101111 0011000': 5, '10110111 1110101': 1, '01110110 0011010': 1, '01011100 0000001': 1, '11001110 0011101': 4, '11011110 0010100': 3, '01111110 0011000': 1, '11111101 0000010': 7, '10111010 0000110': 1, '10111111 1001000': 2, '11111011 0001010': 4, '11110110 0010011': 6, '01101101 0000001': 1, '11111011 0000001': 5, '01001110 1000010': 1, '01110110 0010001': 1, '01001111 0000000': 1, '10101111 0000101': 1, '01111110 0010100': 3, '01010111 0010111': 1, '11110110 0101001': 2, '01101110 0001101': 2, '10101111 0111100': 2, '11000010 0001001': 1, '01000110 1000000': 2, '11100111 0100100': 1, '11101111 0010100': 15, '11111111 0010010': 14, '10101010 0011000': 1, '11001110 0111001': 1, '11100100 0011110': 1, '11011101 0101001': 1, '01110110 0110100': 2, '11001010 0001110': 1, '01111111 0000000': 12, '10100111 1011100': 1, '11101001 0010001': 1, '11101100 0000001': 1, '11000111 0010000': 3, '11111111 0100000': 6, '11111011 0110011': 1, '01100111 1011001': 1, '11100111 0010100': 10, '10010111 0111010': 1, '11011101 0010010': 2, '11010111 0000011': 2, '11110110 1000100': 2, '01110111 0000100': 13, '01001111 0010000': 2, '01101111 0001000': 8, '01101111 0011010': 2, '01110111 1010010': 1, '01111110 0100000': 1, '11101011 0011000': 5, '11111110 1000001': 1, '10111110 0101101': 1, '11110010 0001010': 2, '11100110 0001110': 17, '10110101 0101100': 1, '10110110 1010001': 1, '01011110 0011011': 1, '11111011 0011001': 1, '11110110 0101100': 4, '10110100 0010000': 1, '00110111 0001010': 1, '01111110 0111100': 1, '11011110 0101000': 2, '11100011 0010001': 2, '11101110 1001000': 3, '11101101 0001010': 3, '11011010 0011001': 1, '11011111 0111100': 1, '10111111 0000001': 3, '11100110 0000001': 10, '10111110 0110010': 1, '01101111 0010001': 2, '10110110 1100011': 1, '11110011 0000100': 4, '01010111 0011000': 2, '11101111 0011111': 9, '11101101 0011101': 1, '11110101 1001111': 1, '01000110 0011101': 2, '11111010 0000011': 3, '11111111 0001101': 9, '10101111 0000001': 1, '00011110 0111100': 1, '00101111 0001010': 1, '11011111 0010000': 23, '11111111 0010110': 4, '11110011 0000001': 1, '10110110 0100010': 1, '01011111 1001001': 1, '11010111 0011100': 5, '10110110 0101010': 1, '00000111 0011110': 1, '10110110 0011000': 1, '11101110 1011101': 1, '10010110 0010111': 1, '11010110 1010100': 1, '11100010 0011100': 1, '00011101 1010001': 1, '10101111 1111011': 1, '10111111 0001010': 1, '11101111 0011011': 11, '11100101 0001110': 2, '01101111 1000111': 1, '11000110 1001110': 1, '10101011 0001010': 1, '11101000 0010111': 1, '11011110 1000100': 1, '11001010 0000000': 1, '11100101 0010000': 4, '11010110 0010001': 1, '01101111 1001000': 2, '11111111 0111000': 2, '11110111 0101000': 5, '11010101 0000110': 1, '01010111 0111110': 1, '01100111 0001001': 1, '11110010 0000011': 1, '11001110 0000001': 2, '10111001 0011110': 1, '11011111 0001110': 2, '01000011 1000010': 1, '10111111 0011010': 1, '00110111 1011010': 1, '11001111 0111110': 2, '11110111 0010011': 2, '11100011 0001100': 1, '11000111 1010101': 1, '11000110 0010011': 2, '11010110 0011111': 1, '10000111 0001000': 2, '11100101 0000010': 3, '10110110 0010010': 1, '11110111 0101010': 2, '11110111 0101101': 1, '01111110 1000010': 1, '11100111 1001000': 4, '11110100 0001110': 1, '01001011 0011001': 1, '11101110 0011101': 8, '11111100 0010111': 2, '01101101 1001111': 1, '10110111 0110000': 1, '10011011 0011000': 1, '11110111 0011010': 10, '11110101 0001111': 1, '01110011 1011010': 1, '11111011 0001100': 3, '11000110 0010110': 3, '01001101 0011011': 1, '10101111 0010000': 1, '10110110 1001001': 1, '11100010 0001101': 3, '11010011 0010111': 1, '10101111 0000110': 1, '11101010 0011100': 1, '10101110 1001000': 1, '11110110 1000001': 1, '01011110 0000000': 1, '10110110 1001100': 1, '11100111 1000000': 3, '11101010 0001110': 1, '11100110 0010000': 11, '01010111 0000001': 1, '01111111 0010011': 1, '11101010 0011010': 6, '11000111 0011000': 6, '11101110 0001000': 46, '11011110 0011010': 1, '01101111 1010100': 1, '11010111 0001010': 1, '00010110 0000001': 1, '11111111 1001000': 2, '01110110 0011110': 1, '01110111 0001001': 3, '10000101 0011110': 1, '11101111 1011001': 1, '11110111 0001111': 4, '00111111 0100000': 1, '10001110 0011010': 1, '11010111 0000110': 4, '10101111 0001100': 3, '11100100 0001101': 1, '11110111 0101110': 1, '11111111 1000100': 1, '11100100 0001001': 4, '01111111 0001000': 7, '10101111 0011110': 1, '11110111 0010010': 7, '00111111 0001000': 2, '00110111 1110000': 2, '11111000 1010111': 1, '01110110 1000111': 1, '11101010 0000101': 2, '11111110 0010000': 29, '10110110 0000010': 1, '10100011 0001100': 1, '11110110 0101010': 2, '11011100 0001010': 2, '00011111 0111000': 1, '11111100 0111101': 1, '00101110 1011010': 2, '10110100 0000111': 1, '11011010 1011000': 1, '11100011 0000010': 2, '11110100 0000000': 2, '11100110 0000111': 3, '11001111 0000100': 5, '11110010 0000000': 2, '01101111 1001010': 1, '01100010 0101000': 1, '01111110 1000001': 2, '01010110 0011000': 2, '11100011 0000101': 2, '11111011 1010010': 1, '11011111 1011100': 1, '11110110 0010010': 7, '00100111 0001100': 2, '11101100 0000011': 3, '01110110 0000001': 2, '11111111 1010110': 1, '11101110 0010110': 6, '11110100 0011100': 1, '01110010 0000010': 1, '11001111 0010000': 16, '10101111 0011010': 2, '10110111 1101001': 2, '01001110 1011100': 1, '01101011 0011001': 1, '11101011 0011111': 1, '11101111 0001011': 14, '01111110 0000100': 2, '01001010 0000010': 1, '11001100 0001000': 1, '11111101 0011101': 1, '10110111 0101010': 1, '11010101 0001011': 2, '11110111 1010101': 1, '11110011 0010110': 3, '01011110 0010011': 1, '10100111 0011000': 3, '11010011 0001000': 1, '11111010 0000100': 3, '11110011 0001101': 1, '10100111 0010001': 1, '11101100 0001010': 3, '01101110 0011111': 1, '01110111 1001000': 5, '11001111 0111000': 3, '00101110 0000001': 1, '01111011 0111010': 1, '10010111 0100011': 1, '10111111 0101001': 3, '11101001 0000011': 1, '11111110 0111101': 1, '11111010 0001100': 3, '00011100 0110001': 1, '11101010 1001010': 2, '10101110 0100101': 1, '10111110 1101100': 1, '01110110 1111011': 1, '11111010 1001111': 1, '11011111 0000100': 4, '10111101 0000001': 1, '11110001 0000111': 1, '10110111 0000100': 5, '11111011 0101110': 1, '11011111 0101111': 1, '11110101 0000101': 1, '01010111 1010110': 1, '01111111 0000100': 5, '10100111 1001101': 1, '11111100 0001100': 1, '11010110 1011000': 1, '11101100 1001010': 1, '11110110 0011001': 4, '11111110 0101111': 2, '11001101 0010110': 1, '11010110 0001100': 4, '11011110 0000100': 1, '11110011 0001010': 1, '10110111 1010100': 2, '11100101 0011010': 2, '01100101 0010110': 1, '01100110 0000100': 4, '01110111 0011010': 1, '01111111 0010100': 1, '11000101 1000001': 1, '10110111 0001101': 6, '11101110 0011011': 12, '11010110 0011001': 1, '11110110 1010000': 1, '10110110 0001000': 4, '11101111 1001101': 3, '11111011 0000000': 8, '11010100 0010000': 1, '11011111 0010111': 4, '11000111 0101011': 1, '10001101 0001000': 1, '01100111 0011000': 2, '11101111 1011000': 4, '10110110 1100001': 1, '10111101 0101111': 1, '11001011 0010001': 1, '11010111 0000001': 1, '11000111 0011100': 4, '11111111 0001011': 10, '01110110 1010000': 1, '11010111 0001000': 4, '11111111 1101001': 1, '11110100 0011010': 2, '10011111 0011111': 1, '11101111 0111111': 1, '11110011 0000010': 1, '10111111 0100011': 2, '11101110 0010101': 8, '11111110 0010100': 14, '01100111 0010100': 1, '10001111 0011001': 1, '11100101 0011011': 1, '01011111 1111010': 1, '11101111 0000100': 29, '10110010 0000100': 2, '11100101 1011100': 1, '11111111 1000000': 3, '11100110 0101100': 1, '10110110 0111000': 2, '10111011 0001000': 2, '01110110 0000000': 6, '11001111 0101000': 1, '11011101 0001010': 1, '10111110 0010010': 1, '11111101 0010001': 2, '10110111 0101011': 1, '11100101 0001101': 3, '11110110 0000100': 36, '00110110 0000001': 1, '10010111 0011000': 3, '11111110 1011100': 1, '01101111 0000101': 3, '10100111 0001111': 2, '11100100 1001011': 1, '11100111 1001010': 1, '10100110 0001100': 8, '10101011 1011010': 1, '11010111 0001001': 3, '11111010 0011101': 1, '10110101 0100010': 1, '00110111 0010001': 1, '11101100 0001110': 1, '01010110 0000000': 1, '01110111 0010001': 1, '10101110 0010001': 1, '11010101 0011000': 1, '11010110 0011000': 6, '11011110 0011001': 5, '11111101 0000011': 2, '11001000 0001010': 1, '11111111 0100100': 2, '10101110 0001110': 1, '01111010 1001000': 1, '11011101 0110100': 1, '11100100 0011111': 1, '11010110 0010011': 1, '01110110 0001101': 2, '01110110 0010100': 2, '11111111 1100010': 1, '11010110 0010111': 2, '01001110 0000000': 2, '01011011 0011100': 1, '01101010 1000001': 1, '01111111 1010000': 4, '01000110 0011011': 1, '01101011 1011011': 1, '11011101 0110101': 1, '01110111 0100100': 1, '11100111 0001010': 12, '01110100 0010110': 1, '11000110 0001110': 2, '11001110 0010001': 1, '11100111 0000010': 12, '11001110 0111110': 1, '11110111 0110001': 2, '11111111 0101110': 1, '11101010 0010010': 1, '01111111 0011101': 1, '01110100 0010010': 1, '01111111 1001010': 1, '11110011 0001110': 3, '00100110 0000101': 1, '10101111 0011001': 4, '11010111 0001101': 4, '11101110 0000011': 14, '10111110 0110001': 1, '11111111 0000010': 29, '10100111 0001110': 1, '10010110 0111100': 1, '11100110 0001101': 31, '11101010 0000011': 4, '01011111 1000000': 1, '01101111 1000000': 1, '10111110 0011001': 1, '10000111 0001101': 1, '11011111 0001001': 1, '11001111 0011011': 1, '11100100 0000100': 2, '11011110 0001010': 4, '01111111 0011110': 1, '10100110 0010001': 2, '10111010 0000011': 1, '11010111 0101100': 1, '11100110 1011101': 1, '11100111 0010111': 3, '11110110 0110001': 2, '11111111 0101101': 2, '11011111 0001111': 1, '11110101 0000010': 3, '11100100 0001010': 2, '01111110 0000011': 1, '11010111 0010010': 1, '11111101 0010101': 1, '10001110 0101000': 1, '01100010 0000011': 1, '01100111 0000100': 6, '10110110 1100110': 1, '11101110 0101111': 1, '11110111 0000011': 10, '10010110 0000000': 1, '11100100 0001110': 2, '11100111 0000101': 15, '01100111 0000110': 2, '11101100 0000000': 4, '11111010 0010001': 1, '10001110 0001001': 1, '01010111 0001001': 2, '01111110 0101000': 1, '01010011 0000100': 1, '11101111 1001000': 2, '01110111 0010100': 3, '01110011 0000100': 1, '10101110 1001010': 1, '10111110 0001011': 2, '11101110 0110101': 1, '10110110 1101100': 2, '01010111 1100000': 1, '10011111 0110100': 1, '11101100 1011111': 1, '11100010 0000111': 1, '11101101 0011000': 6, '01001111 0011001': 2, '11011111 0110000': 2, '10101111 1000101': 1, '11101101 0011010': 5, '00100110 1000100': 1, '11100111 0000111': 4, '11101011 0001010': 5, '11100110 0011101': 6, '01111111 1011010': 1, '10001101 0000000': 1, '10111110 0101000': 1, '01100110 0001100': 5, '10110111 0100110': 2, '11011111 0000001': 3, '11010111 1010000': 1, '11010011 0011010': 1, '00001011 1000010': 1, '10101110 0000100': 2, '01110110 0011111': 1, '11010100 0101011': 1, '11010101 0011100': 1, '11000110 0001101': 3, '11100110 0101001': 1, '11101010 0011011': 4, '11110111 1000011': 1, '10001110 0001111': 1, '11001111 0101001': 1, '11010111 0010011': 1, '01101110 0001000': 4, '11001100 0011010': 1, '00111110 1110000': 1, '11110110 0011000': 18, '11111111 1101101': 1, '11101111 1000010': 2, '01101100 1100110': 1, '01111101 1011000': 1, '01100111 0000001': 4, '10011111 0001010': 1, '00110110 0110000': 1, '11000111 1010000': 2, '11110100 1000110': 1, '11110111 1101101': 1, '10100111 0100000': 1, '11110111 0100100': 2, '01110111 0001101': 3, '11010110 0000010': 2, '01000110 0000101': 1, '01111100 0000010': 1, '11010110 1000000': 1, '11110110 0111100': 1, '10011111 0101001': 1, '01011111 0000010': 1, '11011111 0001000': 7, '10101110 0100010': 1, '11110100 0110110': 1, '10110111 1111000': 1, '01111011 0011111': 1, '11110010 0100110': 1, '11000111 0001101': 2, '11100110 0011111': 2, '01101010 0011011': 2, '11010110 0000100': 10, '11111101 0001010': 2, '01101110 1000100': 1, '10110111 0101110': 1, '01101011 0011010': 2, '11011011 0000110': 2, '11110011 0000011': 6, '11110101 0000100': 6, '11100001 0011100': 1, '11101100 0001011': 3, '10100101 0001111': 1, '10101110 0001001': 2, '11010110 0110100': 1, '11111011 0000011': 2, '11001110 0001010': 7, '10101110 0001010': 3, '11110011 0011111': 2, '01101110 0011000': 3, '11000001 0001100': 1, '11111001 0000100': 1, '10110101 0011001': 1, '10101110 1000001': 1, '01111110 1000111': 1, '00110111 0010100': 1, '01100111 0011001': 2, '10100111 0011001': 1, '11110010 0000010': 3, '00111010 0100010': 1, '11111110 0001100': 18, '11010010 0010100': 1, '00110110 0000111': 1, '11110101 1000100': 3, '11101110 0001111': 6, '11110111 1001101': 1, '11001110 0001001': 6, '01111111 0011001': 3, '11001111 0000001': 3, '01100111 0010010': 1, '11100010 0001011': 1, '01101111 1011101': 3, '01100110 1001111': 1, '01111111 0001010': 1, '11100010 0000100': 1, '10111111 0111011': 1, '11001011 0001010': 1, '11101110 1000010': 2, '11000111 0010011': 1, '11000101 0011001': 1, '11101110 0000101': 9, '10101110 0000000': 3, '01100111 0010101': 1, '11011111 0001010': 2, '10001111 0111100': 1, '10111111 0111110': 2, '01110111 1000000': 1, '01010111 0000100': 1, '11001010 0001010': 1, '10011111 1000100': 1, '01101111 0001111': 2, '10110110 0010000': 4, '01100111 1000100': 1, '11001111 0010101': 1, '01101100 0010000': 1, '10100011 0111011': 1, '01111110 1010000': 3, '11111010 0100011': 1, '11011111 0000010': 3, '11010110 0110001': 1, '11111010 0001000': 1, '11111110 0000111': 8, '10110011 0100110': 1, '11001111 0000111': 1, '11110111 0111000': 1, '11111110 1000011': 1, '11010110 0110110': 2, '11111111 0011010': 14, '11000010 0011010': 1, '11110100 0010000': 1, '10110111 1010101': 1, '11100111 1001100': 4, '01111110 1000000': 4, '11100111 1010100': 1, '11111101 0011000': 1, '11101001 0001110': 1, '10101111 0010010': 2, '11101110 0011000': 33, '11111011 0100000': 1, '01111110 0001110': 1, '11011110 0100000': 1, '01110111 1001111': 1, '01111110 1000100': 2, '11001110 0011110': 1, '11111111 0001000': 46, '01111110 0000001': 4, '11110111 0011000': 22, '11111101 1001110': 1, '11100101 1001101': 1, '00101011 0111100': 1, '11011111 0000110': 2, '11011010 0011100': 1, '11111111 1011000': 4, '01110101 0000100': 1, '10100100 1111111': 1, '11100011 0000100': 2, '01101010 0011010': 1, '01100111 1001101': 3, '11010110 0101000': 1, '11101111 0010111': 2, '11111111 0010000': 37, '01100110 1010000': 3, '11100101 0000101': 2, '11101111 0000000': 57, '10100111 0000011': 1, '00010111 0010001': 1, '11001101 0110000': 1, '11010111 0110100': 4, '10101111 1011011': 1, '11110010 0010110': 1, '11100111 1010001': 2, '01110111 0000101': 3, '01111111 0000001': 4, '11110100 0000110': 4, '11011101 0000011': 1, '11111101 0100100': 1, '10111111 0101000': 2, '10001010 0111101': 1, '01011111 1001000': 1, '10111110 0011000': 5, '11010110 0101111': 1, '11011111 0011001': 3, '11111111 0110011': 1, '10000111 0111110': 1, '10101111 0001110': 1, '01111111 0000010': 2, '01100110 0001110': 2, '10111111 0100100': 1, '10010111 0010100': 1, '11111111 0011101': 4, '10010111 1111100': 1, '11100101 0011000': 1, '11110010 0001001': 1, '11100111 1011000': 1, '01110011 0011000': 1, '11110110 0000010': 18, '01101110 0000100': 1, '01110110 0010000': 1, '10101101 0011100': 3, '10100110 0011001': 1, '11111110 0011010': 2, '11111111 1010100': 2, '11111110 0010011': 11, '11111110 0010110': 6, '01110110 1000110': 1, '11101110 0100001': 1, '01110101 0001101': 2, '11001111 1000111': 1, '11101111 1000101': 2, '11001101 0011001': 1, '11110101 0000110': 3, '01101111 1010000': 1, '01010111 1011000': 1, '10011010 0000000': 1, '01111011 1010100': 1, '00101111 1011010': 1, '11101011 0000011': 2, '10100111 0101000': 1, '10010110 0010001': 1, '10011111 0000011': 1, '10111110 0110000': 2, '11010111 1001101': 1, '11111101 0000000': 5, '11110110 0011110': 4, '11001101 0010000': 3, '11101111 1000000': 2, '01110110 0010010': 2, '01001111 1011001': 1, '10100110 1101100': 1, '11110010 0001000': 2, '11110010 0001110': 1, '11101111 0101100': 2, '11011110 0010101': 2, '01010110 0000001': 1, '11111100 0000100': 1, '11100110 1011001': 1, '11101100 0011011': 2, '11101111 0001001': 34, '11000110 0000101': 1, '00101010 1101101': 1, '10011011 0011011': 1, '11101101 0011110': 2, '11111110 0011111': 2, '00010100 1100000': 1, '11101111 1000001': 3, '11011011 0000001': 1, '11101101 0000100': 4, '11110111 0011101': 8, '01101111 0011001': 2, '10111111 1010011': 1, '11011111 0100101': 1, '11100011 0001010': 1, '01001111 0011000': 3, '11100111 0011011': 5, '01110101 0001001': 1, '11110111 1100100': 3, '11111111 0011000': 33, '01000111 1101100': 1, '10101110 0101011': 1, '11101011 0010110': 2, '00011110 0011001': 1, '11111100 0001010': 2, '11010011 0000101': 1, '11100111 0101100': 1, '01101100 1001001': 1, '01101110 1101110': 1, '01100111 0100100': 1, '11110010 0000100': 5, '11110111 0001101': 19, '10100111 0101111': 1, '10110011 0000010': 2, '01110100 0000100': 3, '11001010 0111100': 1, '11010101 0001000': 2, '11111111 0100010': 2, '11001010 0001001': 1, '01101110 0001001': 2, '11010111 0110000': 1, '01000111 0011011': 1, '10100011 0011011': 1, '11110111 0111110': 1, '11110111 1001000': 7, '10011110 0011000': 2, '11001111 0011001': 5, '11101001 0101011': 1, '11110010 1000100': 1, '11111111 1011011': 1, '11011111 0010010': 1, '11010110 0011101': 2, '11101101 0000010': 2, '11100101 0100100': 1, '11110110 0101000': 3, '11100111 0001110': 18, '01011111 0001000': 1, '11101010 0011001': 1, '11111011 0011110': 2, '11001110 1011100': 1, '10100100 0000000': 1, '11110110 0010101': 4, '00101111 0010100': 1, '01110101 1001010': 1, '01111111 0000110': 5, '11110100 0011000': 2, '01011110 0111001': 1, '00101110 0001000': 1, '11000011 0101010': 1, '10111111 0000010': 1, '01001100 1000111': 1, '11101110 0001110': 8, '11111101 0010100': 2, '11001011 0111110': 1, '01110110 1000010': 1, '11100100 0100100': 1, '11110111 0010111': 5, '11100111 0011000': 22, '11000011 0011010': 1, '11101110 0010111': 5, '01011110 0101011': 1, '11011110 0011000': 8, '11111101 0000110': 4, '11100110 0001000': 28, '11111010 0000110': 1, '11000110 0011001': 3, '11101110 0000001': 19, '11111110 0010101': 13, '11010111 0111100': 1, '01110111 0000011': 1, '11110111 1011101': 1, '11011111 0000101': 1, '11011110 1011110': 1, '11011110 0010001': 7, '01111111 0000011': 1, '11100110 0000000': 21, '11110100 0110011': 1, '10101110 0100001': 1, '11110111 0000100': 64, '01101101 1000101': 1, '10000111 1110001': 1, '11100100 0011001': 2, '11101110 1010001': 2, '10011111 0000101': 1, '11001111 0001011': 1, '11011111 0111000': 3, '01010111 0010110': 1, '10101111 1101000': 1, '01001110 0000101': 1, '11111111 1001010': 1, '10011110 1000000': 1, '11110110 0100110': 1, '11100110 1001000': 1, '00100111 1010000': 1, '01100111 1010100': 2, '01101110 0000010': 1, '00100110 0001101': 1, '01101110 0011110': 1, '10111110 1000011': 1, '11011100 0010001': 1, '00110111 0000110': 1, '01101011 0001001': 1, '11001111 0001100': 3, '11010110 0011011': 2, '11001010 0111000': 1, '11011110 1110000': 1, '01100111 1111110': 1, '11010110 1000110': 1, '10111011 0100100': 1, '11011110 1010011': 1, '01100010 0000101': 1, '11101101 0001001': 1, '11111111 1111000': 1, '11101011 0001001': 1, '00111110 0000001': 1, '11001110 0000101': 1, '11101010 0001111': 2, '10101111 0100000': 3, '11100010 0010000': 1, '11100110 0011001': 5, '11101110 0110001': 1, '01111111 1000000': 4, '11001111 0010001': 2, '11101011 0001110': 4, '01101111 0001011': 1, '11101010 0010111': 1, '01101111 1000101': 2, '01111100 0000000': 1, '00110110 0111001': 1, '10111111 0011001': 1, '01110111 1010011': 1, '10101010 0011010': 1, '11111110 0001011': 4, '01100111 0001111': 1, '11110111 0000010': 19, '11111110 0011001': 9, '11110110 1011100': 1, '11111111 0001110': 9, '11011101 0011111': 1, '00011111 0001001': 1, '01101110 1001110': 1, '11110011 0001000': 6, '10111100 0100110': 1, '11110110 0011101': 3, '11010111 0000111': 2, '10111111 0011000': 1, '01001101 0000010': 1, '11110000 0010010': 1, '11111111 0011111': 5, '00100101 0000100': 1, '01100101 0000010': 1, '11011111 1010000': 1, '01110111 0000000': 7, '11100100 0010100': 1, '01010111 0001101': 1, '10111110 0100001': 1, '10111111 0100010': 1, '11001111 0001110': 3, '01110101 1010000': 1, '11110110 0100100': 1, '11111111 0101001': 2, '11001110 0000111': 1, '11110111 0111001': 1, '11111111 0110000': 1, '11101111 0100000': 1, '10111011 0000011': 1, '01111110 1000101': 1, '01001110 0000001': 1, '11111110 1000110': 2, '01101011 1001100': 1, '11111100 0001101': 1, '11101110 0100011': 1, '11001110 0001011': 3, '10110011 0110111': 1, '01001111 0001100': 2, '11111101 0001000': 5, '01101111 0010000': 5, '10101111 1010000': 1, '11000100 0000110': 1, '10001111 0010000': 1, '01101010 1001100': 1, '11101010 0000010': 1, '00101110 0010000': 1, '01010010 1011011': 1, '11101100 0000101': 1, '11001101 0111010': 1, '10110111 0110100': 1, '10101111 1100110': 1, '11101111 0101000': 4, '11110101 0010111': 1, '11111101 1011011': 1, '01111111 0000101': 2, '11111111 0000001': 33, '10101100 0000000': 1, '11100101 0001010': 3, '11111110 0100011': 1, '01101110 1011000': 3, '01100111 0001010': 3, '01110111 1001100': 4, '00111110 0011100': 1, '01101110 0001010': 4, '11010110 0000000': 5, '11001010 0010001': 1, '10011011 0100101': 1, '11101101 0000110': 2, '11110001 0011010': 1, '11000110 0011110': 2, '11000110 0011000': 6, '11011100 0111100': 1, '01100110 0000000': 1, '11110111 0100000': 5, '11110110 0101011': 2, '11101100 0011100': 2, '11110111 0000000': 47, '00111110 1000000': 1, '10110111 0001111': 1, '11011101 0000000': 1, '11110111 0001000': 62, '11101110 0001010': 23, '11111010 0000010': 1, '11111100 0000001': 2, '11100111 0011110': 6, '01101110 1001000': 3, '01001100 0001010': 1, '11100110 1000110': 3, '01110111 0100101': 1, '10100011 0010100': 1, '01011100 0000010': 2, '10010111 0010010': 1, '10110110 0001010': 2, '00100111 0110100': 1, '01100011 0001000': 1, '11010011 0011110': 1, '11000110 0001000': 5, '11010110 0001101': 2, '10101101 0100110': 1, '11111110 0001000': 38, '11111100 1001011': 1, '10101111 0001010': 2, '00100111 1001100': 1, '11110111 0001100': 42, '01100111 0001011': 1, '10001110 0011001': 1, '11110101 0000011': 2, '11111111 0111010': 2, '10100111 1101001': 1, '11011101 0010000': 1, '01111111 0110001': 1, '01000111 0000000': 1, '11110011 0010101': 1, '11111110 0000011': 8, '11011111 1111001': 2, '11100111 1000010': 1, '01010111 1010100': 1, '11110011 0010000': 3, '11111111 0011001': 11, '00010111 0001100': 1, '00110110 1101001': 1, '11101101 0010010': 2, '11001110 0011100': 2, '10111111 0000100': 4, '01001110 1011010': 1, '01000101 1000110': 1, '01110110 1001010': 1, '10001111 0011000': 2, '01100100 1001111': 1, '01110110 0010011': 1, '10110111 0110011': 1, '10101111 1101001': 1, '11101101 0000000': 5, '11110101 0100100': 1, '11110110 0011010': 3, '11101011 0011110': 3, '01101110 0010110': 1, '10110011 0001001': 1, '11001111 0011010': 8, '01110111 1000011': 2, '01100110 0011000': 6, '11111110 0011101': 2, '10110111 0000000': 6, '10111110 1110001': 1, '10011111 0011000': 1, '10100111 0111101': 1, '11110100 1010110': 1, '11101111 0011001': 24, '10000111 0011001': 1, '10101110 0000111': 2, '10101111 1001001': 2, '11111010 0001010': 1, '10101110 0111111': 1, '11111010 0001110': 1, '11100011 0010010': 1, '11101100 0010101': 1, '11100111 0011101': 8, '10101010 0010000': 1, '11101011 0011100': 2, '11101011 0000001': 3, '10110110 1100000': 1, '11111000 0001001': 1, '11100001 0010101': 1, '01110110 1000100': 4, '11101101 0010011': 4, '10100110 1000001': 1, '10011111 0010000': 5, '01101111 1011100': 2, '11100111 1001110': 1, '01110110 1001001': 1, '10111111 1110001': 2, '11111010 1010010': 1, '11000100 0001110': 1, '11101010 0001011': 2, '01110101 0000010': 1, '01101111 1000001': 3, '01110110 0001001': 4, '01001111 0010001': 1, '11101010 0111100': 1, '11111110 0111000': 1, '10111111 0001110': 1, '11000000 0011011': 1, '11010110 0011100': 6, '11111010 0000101': 1, '11011011 0010011': 1, '11101011 0001000': 4, '10110101 1000110': 1, '00000110 0010110': 1, '01101101 0000011': 1, '10111111 1000110': 1, '11100111 0011100': 14, '11111110 1000010': 2, '11110110 0001010': 21, '11111011 1010000': 2, '01000110 0101000': 1, '01001111 1011000': 1, '11111100 1000010': 1, '11101011 0100000': 2, '11110110 1010001': 2, '01110111 0011101': 2, '11000010 0011111': 1, '11101111 0110000': 1, '10110111 0011100': 2, '11100010 0000001': 1, '01000110 0010111': 1, '10111111 0001001': 1, '11011110 0010111': 1, '11101110 1011000': 3, '01111110 0000110': 2, '10101111 0001011': 2, '11100101 0011111': 1, '01011111 0011000': 1, '10100011 1111000': 1, '10111111 0110101': 1, '01101110 1011100': 2, '11101011 0011011': 2, '11101110 0010100': 10, '11000111 0000001': 1, '10110110 1101101': 2, '11111011 0001000': 4, '01011110 0011000': 3, '11110110 1000110': 2, '01101111 0001001': 4, '10000111 0011000': 1, '10111111 1011000': 1, '01101111 0010101': 3, '11110000 0000010': 1, '11011010 0010111': 1, '11100111 0001101': 25, '11001110 0001100': 3, '11000111 0011110': 3, '11101010 1001001': 1, '11111101 1001010': 1, '10111111 0010001': 2, '11101100 0010100': 1, '11110111 0110110': 2, '10110111 0101111': 1, '11001010 0011010': 1, '11001111 0011000': 15, '01001110 0011011': 1, '11111110 1010000': 3, '11110111 0010101': 10, '01011101 0010010': 1, '01101111 0010110': 1, '01011010 1001001': 1, '10100111 0000101': 2, '11111111 0110100': 1, '01101111 1100000': 1, '11011111 1000100': 1, '10100110 0000101': 2, '10001111 0001100': 1, '00100011 0001011': 1, '11100110 0000101': 7, '00011110 0011000': 1, '11101111 0010101': 8, '11111101 0010111': 1, '01101110 1010011': 1, '11101111 0000101': 11, '10110111 0100010': 1, '10110101 0001100': 1, '10110101 0100000': 1, '11101011 1010110': 1, '11010111 0111001': 1, '11110101 0011100': 3, '11001110 0010111': 1, '10001110 0010010': 2, '10111110 1010000': 1, '11101111 0000001': 26, '11110100 0001100': 2, '11010100 0011110': 1, '11000111 0001010': 1, '00110111 1010000': 1, '10100111 1100000': 1, '10111110 0100000': 1, '11101111 1010001': 1, '11000111 0011111': 2, '11000111 0011101': 1, '01111101 0011110': 1, '10010110 0000100': 1, '10110111 0001000': 4, '11010110 0000011': 1, '11001000 1011011': 1, '11101101 0000111': 2, '01111110 0001001': 2, '11011100 0000011': 1, '11111111 1000010': 3, '00101111 1101001': 1, '11011110 0110001': 1, '11111101 0100010': 1, '11110110 0100000': 4, '11001111 1011000': 1, '11101011 0001100': 2, '01110110 1001111': 1, '11100111 0010110': 8, '11111111 1010010': 2, '10000011 0011100': 1, '11100101 0001001': 2, '10110110 0011010': 1, '01110100 0010111': 1, '11101101 0000011': 3, '11110110 0000001': 15, '10110111 0000010': 1, '10111110 0100100': 1, '11110110 0000011': 9, '11110011 0000101': 2, '01100101 0001000': 1, '10110100 1100010': 1, '11111011 0010110': 1, '11111111 0011011': 4, '00101111 1010100': 1, '11111010 0101000': 1, '11001101 0001111': 1, '11011110 1010000': 1, '10110110 0000110': 1, '10101111 0100010': 2, '01110111 0001010': 6, '11110111 1101000': 1, '00100111 0100010': 1, '01100110 1011000': 1, '01101110 0000110': 2, '11011000 0010001': 1, '11110111 1000000': 1, '01111010 0000010': 1, '10011101 0000110': 1, '01100110 1001110': 1, '01011110 1000001': 1, '11100010 0011011': 1, '11111111 0101111': 1, '11111110 0001010': 15, '11001011 0011100': 1, '11111110 0101110': 2, '11111111 0100001': 3, '10011110 1111001': 2, '11011111 1001000': 1, '01111111 0110000': 1, '11011111 0000000': 16, '11010111 0100110': 1, '11110011 0011010': 2, '01110111 0010010': 1, '10010111 0011010': 1, '01100111 0010001': 1, '01011011 0000001': 1, '10110110 0000111': 1, '01101011 1001000': 1, '01001111 0001101': 1, '01111011 1001100': 1, '11001110 0011010': 2, '01101101 1001011': 1, '11101110 0001001': 20, '01101011 1001010': 2, '10111011 0000000': 2, '00111110 0000100': 1, '11001110 0010011': 1, '11111101 0000001': 5, '01100111 1000010': 3, '11011111 0001100': 6, '10100111 0001000': 3, '00101111 0011000': 4, '11100100 1001100': 1, '11101011 1010100': 1, '11010101 0001100': 1, '10000101 0100111': 1, '11010111 0011011': 2, '01101101 0011010': 1, '11010110 0000101': 2, '11111101 0011010': 1, '11111101 0100000': 1, '11100011 0001011': 1, '11101100 0011111': 1, '11110100 0001000': 1, '11100111 0000011': 7, '11001010 0010101': 1, '11001110 0111100': 1, '11100100 0001011': 1, '11011111 1101010': 1, '11110111 1101100': 2, '10101101 0010000': 2, '10010111 0111101': 1, '01111101 1001001': 1, '11100000 0001000': 1, '11110111 0000110': 17, '11011110 0100001': 2, '11001010 0011000': 1, '11110111 0010000': 26, '01101110 0011101': 4, '11111110 0000101': 9, '11111110 0010111': 8, '11111000 0011011': 1, '11101111 0010001': 19, '11110111 0000111': 11, '11011110 0000101': 2, '10100111 0001010': 1, '10101110 0111001': 1, '10110111 0000110': 1, '11011111 1010100': 2, '11110110 0001111': 10, '10111110 0000001': 2, '11011110 0110000': 1, '10101011 0000010': 1, '11000110 0001010': 3, '10100110 0101100': 1, '11100011 0001111': 1, '11111110 1011010': 1, '00111101 0000000': 1, '10101110 0010110': 1, '11001111 0001000': 10, '11001110 0010000': 5, '11101100 1010001': 1, '11111010 0001001': 2, '01000110 0011000': 2, '11011011 0011000': 1, '10011110 1010001': 1, '11111011 0010100': 1, '10111110 1100001': 1, '01101110 1000011': 2, '10111011 0010111': 1, '10100110 0001101': 2, '10110110 1000001': 1, '11010010 0001010': 1, '11110011 0010010': 1, '01011111 0100101': 1, '01001110 1011000': 1, '11101110 1001100': 1, '01011111 0010100': 1, '10110011 0010011': 1, '01110011 0001100': 1, '11011110 0000110': 1, '11101111 1011101': 1, '11100101 0001000': 3, '10101111 1100000': 2, '11101111 0010010': 7, '01111011 0010000': 1, '11000111 0001011': 1, '11111011 0011010': 1, '10111111 0000000': 9, '11100110 1001001': 1, '01011111 1000100': 1, '01110111 0011000': 3, '10010110 0111000': 1, '01110001 1010000': 1, '11101011 0000010': 5, '11010110 0100011': 1, '10101111 0000000': 5, '10111110 1110000': 1, '11001110 0001111': 4, '11110111 0001011': 6, '11111011 0000111': 2, '11110100 0000011': 1, '11010111 0000101': 3, '11100110 0010011': 3, '11010111 0000000': 9, '11011111 0000011': 4, '11011111 0011011': 1, '11110110 0001011': 8, '10101111 0011100': 3, '10110111 0011010': 2, '11110011 0001011': 1, '11111000 0000000': 1, '11101111 0100001': 2, '11100011 0001101': 2, '11001111 1011101': 1, '10100110 0001111': 1, '10011110 0000101': 1, '10101110 1011001': 1, '11100001 0000000': 1, '01101100 0001000': 2, '11010111 0111010': 1, '11101110 1010110': 1, '01110010 0001010': 1, '11000100 0001000': 1, '10101101 0011000': 2, '10110111 0010000': 3, '11010111 0001111': 3, '11100101 0010110': 2, '11100111 0011010': 2, '11010111 0011001': 2, '10110011 0101000': 1, '11110111 1001011': 1, '11000010 0011001': 1, '10100111 0001100': 2, '11111100 0000110': 1, '10000111 0010001': 1, '11110100 0001010': 2, '11011111 0110110': 1, '01111110 0000000': 9, '11100110 1010010': 1, '00101110 0011000': 1, '11010111 1000101': 1, '11101100 0000010': 2, '11111101 0000111': 2, '10000110 1001110': 1, '10101101 0001010': 1, '11100111 1000100': 1, '11001110 0000011': 2, '00011110 1010110': 1, '01011110 1011001': 1, '10111110 0010000': 1, '11101110 1000001': 1, '11000111 0000100': 5, '11010100 0001010': 1, '10100110 0011011': 1, '10111110 1111101': 1, '11101010 0100010': 1, '10010110 0010000': 1, '11011001 0001111': 1, '11100010 0000000': 1, '11000111 0000000': 4, '01110110 1001100': 3, '11100111 0000001': 8, '00111111 1000000': 1, '11000110 0000000': 3, '11110101 0010011': 1, '10100111 0011101': 1, '11000110 0001111': 3, '11111101 0000101': 4, '00101110 0011001': 1, '10101100 1011010': 1, '11001111 1001100': 1, '11001011 0000001': 2, '10111100 0010001': 1, '01100110 0000001': 1, '01111110 1001001': 4, '00101110 0001011': 1, '01111110 0010010': 3, '11111010 0001101': 2, '10100110 1111110': 1, '01100111 0001101': 2, '11100111 0100001': 1, '11111101 0011001': 1, '11001111 0000011': 2, '11110010 0010100': 2, '11001110 0010110': 2, '10110100 0100111': 1, '11101010 0011110': 1, '11100110 0011011': 3, '11100011 0000011': 3, '11101110 0111101': 1, '11111111 1011100': 2, '01011011 0010100': 1, '11101010 0001101': 3, '11111101 0010010': 3, '01110101 0011110': 1, '10100110 0000001': 3, '11101110 1001001': 3, '11110111 0001110': 22, '11110010 0010000': 1, '11111111 1010001': 1, '10110111 1000010': 1, '11110110 0010110': 5, '11110110 0111101': 1, '11011011 0001000': 3, '11010111 0011110': 3, '11100111 0100000': 1, '11101111 1011100': 2, '11110100 0000010': 2, '01010101 0011111': 1, '01101110 0001110': 2, '11110111 0011111': 2, '01101110 0000011': 1, '01111111 0011011': 2, '11001111 1001010': 1, '11111011 0010001': 1, '01100011 1001111': 1, '10010111 1011100': 1, '10110111 1000110': 1, '11000110 0000001': 2, '01010111 0011001': 1, '10111010 1000111': 1, '01111111 1010011': 2, '01011110 0011100': 2, '11010111 1110110': 1, '11100101 0001111': 1, '11111100 0000010': 3, '11010111 1010010': 1, '11110011 1000110': 1, '01001110 1001000': 1, '11111111 0101000': 3, '01111111 1000010': 2, '01110110 1000000': 3, '11110110 0100101': 1, '10001110 0000100': 1, '11110010 0001100': 2, '01110110 0110101': 1, '01000111 0001001': 1, '11100111 0010001': 8, '10110110 0101000': 1, '01111111 0011100': 6, '10100111 1001011': 1, '10001111 1011000': 1, '01011110 0000001': 1, '10101110 0011101': 1, '11110111 1000100': 3, '10100101 0001010': 2, '11001110 0000010': 7, '11110111 0011110': 9, '11110111 1001110': 2, '01101111 0011100': 1, '10100111 0011100': 1, '01100101 1000100': 1, '11110101 0001000': 2, '11110011 0000000': 4, '11011110 0010110': 1, '11100011 0001001': 2, '10001011 0011000': 1, '10111111 0100110': 1, '11000011 0000010': 2, '11101110 0001101': 3, '11100011 0111100': 1, '11111011 0011100': 1, '11111111 0010011': 5, '01110111 0010000': 1, '11101011 0000100': 2, '11101111 1000110': 1, '11110010 0000101': 1, '11101101 0001011': 6, '11111111 0110001': 3, '10110111 0001110': 1, '00111110 0001100': 1, '01100111 0011011': 1, '11001011 0011000': 3, '11101110 0000110': 10, '11100100 0011101': 2, '00111110 0101001': 1, '10110111 0000101': 3, '11001110 0101000': 1, '01001100 0010111': 2, '01011110 0011111': 1, '11111101 0000100': 3, '01011111 1011110': 1, '11011101 0110000': 3, '10111010 0001010': 1, '10110011 0001010': 1, '11101110 0011001': 22, '01011110 0001001': 1, '10101110 0011000': 5, '01010110 0111000': 1, '11101111 0001101': 17, '01101111 1000110': 1, '11111010 0000111': 1, '10110110 0000000': 3, '01000110 1011000': 1, '11111111 0000000': 82, '11100111 0010000': 17, '11001111 0011101': 4, '10111111 0100000': 3, '10110110 0001100': 3, '11000110 0010100': 2, '11000111 1000010': 1, '11011110 0010010': 4, '01111010 0011001': 1, '11010100 0011100': 1, '11110110 0011100': 12, '01100111 0010000': 1, '11010111 0011000': 8, '10001111 1010100': 1, '11101100 0011101': 2, '11010111 0000100': 7, '11010111 0101110': 1, '11111110 1011101': 1, '11111110 1001010': 1, '11001110 1010101': 1, '11110100 0010110': 1, '00100110 0000010': 1, '11110101 0010001': 1, '10111110 1100000': 1, '10110100 1001001': 1, '00101110 1100001': 1, '10111111 0010110': 1, '00111110 1011010': 1, '01101011 0010010': 1, '01111110 0010000': 4, '10111101 1100000': 1, '01100110 0101101': 1, '11101101 1010001': 1, '11011111 1000001': 1, '10110111 0011101': 1, '10111011 0010010': 1, '11101010 0011000': 5, '11011111 0011100': 11, '11011111 0100000': 3, '01000100 0011100': 1, '01111111 0010000': 8, '10110111 0001010': 2, '11111110 0110101': 1, '10101110 0011010': 1, '11111100 1001010': 1, '11110100 0000111': 1, '01001111 0001000': 2, '11101101 0011001': 2, '01101110 1011010': 1, '11100111 0101001': 1, '11101111 0010011': 3, '01010110 1010110': 1, '01111111 0010001': 1, '11110010 0000110': 1, '10111111 1001100': 1, '10110011 0010000': 1, '10101010 0010010': 1, '10111111 0001100': 3, '11110100 1100000': 1, '11011111 1000000': 1, '01101000 0010100': 1, '10101110 0010000': 3, '10111110 0100011': 1, '01000100 0011001': 1, '01100101 1000010': 1, '01101111 0000011': 1, '11110111 0100101': 4, '11110011 0011100': 1, '10111111 1100010': 1, '11110110 0010111': 3, '11101111 1001100': 2, '10110100 0100100': 1, '11010001 0000010': 1, '01110110 0011011': 1, '01001101 0000101': 1, '11010111 0011111': 1, '11111100 0010100': 2, '11111110 0100000': 3, '11101110 0101000': 1, '11001010 0001100': 2, '11010110 0111000': 2, '11100001 0001010': 1, '11101111 1001001': 2, '10111011 0101001': 1, '11101010 0000100': 3, '01110111 0010101': 1, '11001110 0011001': 5, '01101011 0000100': 1, '11110011 1001010': 1, '11010011 0011111': 1, '01101011 0011011': 1, '00101100 0011001': 1, '10100111 0000111': 1, '11111101 0010011': 1, '01101111 1010111': 1, '11100110 0011110': 8, '11110011 0110110': 1, '01001110 1001110': 1, '01100110 1001000': 3, '01011111 0101111': 1, '11101011 0011001': 5, '10101100 0011010': 1, '10110110 1001000': 1, '11110110 0010001': 8, '11110111 0100111': 1, '11100111 0010101': 5, '11101111 1000011': 1, '11101111 0000010': 10, '10100111 1100111': 1, '11010010 0111010': 1, '11110110 0100111': 2, '11011010 0000001': 1, '10101100 0011011': 1, '10010111 0101101': 1, '11110100 0010011': 1, '01110110 0000100': 4, '01110101 0000110': 2, '10110110 0010100': 1, '01111110 0100011': 1, '01001111 1001000': 1, '10010111 1011010': 1, '01111101 1000111': 1, '01101111 1001100': 2, '00100111 0001000': 1, '11110111 0011001': 8, '10110110 1101000': 2, '01111111 1010001': 1, '11111111 1010000': 5, '10101001 0011000': 1, '11001110 0100011': 1, '01111111 1101010': 1, '10111111 0011100': 4, '10000100 0001010': 1, '01111110 1001110': 2, '00001110 0001101': 1, '10001111 0110000': 1, '00111111 0010000': 3, '11101011 1000001': 1, '11100011 0001000': 5, '11000111 0011010': 2, '11010111 0010101': 3, '00111110 1001000': 1, '10110110 0100000': 1, '11101111 0011010': 32, '11100011 0011001': 1, '01110100 0001110': 1, '11001100 0011110': 1, '01100111 0000010': 2, '11011111 0001011': 1, '11101110 0011111': 7, '10001111 0100110': 1, '00110110 1001000': 1, '10110111 0100100': 2, '11000111 0000011': 1, '01101111 0000000': 3, '01100110 1000110': 1, '11101110 1010000': 2, '11111011 0000110': 1, '00100111 0011000': 1, '11101011 0001011': 2, '11101110 0000100': 17, '11000110 0111101': 1, '00101110 0010010': 1, '10100010 0001100': 1, '10111110 0001010': 2, '01101111 0010111': 1, '11110110 0001000': 39, '11101111 0010000': 37, '11011111 0011000': 25, '11100010 1001001': 1, '11101111 0110001': 2, '11101100 0001001': 3, '01110111 0001011': 1, '11100101 1101100': 1, '11111110 0001111': 5, '11111111 0000111': 6, '01111111 0001110': 1, '00111011 0000100': 1, '11001111 0000010': 3, '11111100 0001011': 3, '01100100 0010011': 1, '01111101 0001010': 1, '11001110 0001110': 1, '11101101 0010000': 1, '11110110 1001110': 3, '11101111 1011110': 1, '11011110 1000111': 1, '01000110 0001101': 1, '01100111 1010110': 1, '11101111 0010110': 8, '11111100 0000011': 3, '11100010 1010110': 1, '01101111 0001110': 1, '10101110 0110100': 1, '11101110 0011110': 8, '01111110 1001000': 3, '11111011 0000010': 3, '11110110 1101001': 1, '10110011 0001011': 1, '11110110 0011111': 4, '11101111 0001010': 13, '01111111 0111110': 1, '11101110 0000000': 37, '11111110 1001111': 1, '11111110 0101100': 2, '01110110 0011000': 1, '11011110 0001001': 1, '11110011 0001001': 5, '01000110 0001110': 1, '11110011 0011000': 1, '11011011 0000000': 1, '10101110 1101111': 1, '10000111 0001100': 2, '11110100 0001011': 1, '01111110 1000110': 1, '10100110 0001110': 2, '10101101 0010010': 1, '10110111 0001100': 4, '11001010 0001000': 1, '11101011 0011101': 2, '10111111 0010100': 1, '00101110 0000100': 1, '10011110 0101000': 1, '11101110 0100010': 1, '10000010 0011111': 1, '10100111 0001101': 5, '11010011 0010011': 1, '11111100 0011000': 2, '01000111 0001000': 1, '00101110 0001100': 2, '00110111 0000111': 1, '10111110 1010111': 1, '11001011 0010000': 2, '01000100 1010100': 1, '11111111 0010100': 29, '11101010 0010001': 1, '11101111 0000011': 6, '11101101 0011100': 4, '01100110 0011110': 1, '01100111 0000101': 3, '11011101 0111000': 1, '11110101 0001010': 2, '11110111 1011000': 1, '10000110 1001011': 1, '00111111 0111000': 1, '11011111 0010110': 4, '11110110 0001101': 16, '11011101 0001110': 1, '11011111 1001011': 1, '01101111 0001101': 5, '11111110 0111001': 1, '01111111 1001001': 2, '10110101 0001111': 1, '01110111 0001000': 5, '11010010 0011110': 1, '01101111 1011001': 2, '10111000 1000001': 1, '11100101 0111000': 1, '11111010 0010010': 3, '11011110 0110010': 3, '10100111 1001001': 1, '10111111 1000010': 1, '01111111 1101001': 1, '11111110 0101001': 1, '11101110 1000000': 3, '11110100 0000100': 3, '01001110 1011001': 1, '01100110 1011010': 1, '01111110 0010011': 1, '10100111 0000100': 6, '11010100 0001000': 1, '01100111 1010001': 2, '11111010 0010000': 1, '11010111 0001100': 7, '11111100 0001000': 6, '10001111 0000000': 1, '11110011 0100010': 1, '00001110 1011001': 1, '11001110 0001000': 11, '11111110 0011011': 2, '01100111 1001100': 1, '10111111 0011101': 2, '01110110 0000110': 3, '11101011 1011010': 1, '01000110 1111111': 1, '11110001 0010000': 1, '10100111 0100111': 1, '11001110 0110000': 1, '11101010 0001010': 3, '11101111 1011010': 2, '11111101 1011110': 1, '11001111 0010010': 1, '11101110 1011001': 2, '11100011 0011011': 1, '11001111 0011100': 4, '11111111 1001011': 1, '11000101 0001100': 1, '11100110 0010110': 3, '01101110 1000000': 1, '11100010 0101010': 1, '11110110 1001011': 1, '10111110 1111000': 1, '10001111 0001000': 1, '00111111 0001110': 1, '11100110 1001110': 1, '01001111 0111000': 1, '10010110 0001000': 1, '10011111 0110000': 1, '11100110 1011000': 1, '11110101 0010110': 4, '11010011 0000110': 1, '10010010 0101010': 1, '11111011 0010000': 2, '11101101 0001101': 2, '01110111 1010111': 1, '10100111 0100010': 1, '10011110 0100101': 1, '11101011 0000000': 6, '10111100 0110001': 1, '11111010 0011110': 1, '10110111 0010101': 2, '01001101 0001100': 1, '11111110 0001001': 15, '11101110 1000101': 1, '11111101 1000000': 2, '11111110 1010001': 2, '11110110 0010000': 10, '10110111 1100110': 1, '11110101 0001101': 5, '10010111 0111001': 1, '01010110 1000011': 1, '11101111 0011100': 25, '00110100 0001010': 1, '01100110 1000000': 2, '01111110 0110110': 1, '10110010 0010010': 1, '10110110 0111001': 1, '11010111 0011010': 1, '11100111 0101110': 1, '11111101 0011011': 1, '11101111 0001110': 6, '11011111 0111110': 1, '11101110 0010011': 4, '11111110 1001110': 1, '01100110 0001101': 1, '01000101 0100000': 1, '11011010 0010001': 1, '01000110 1100011': 1, '01111010 0000101': 1, '11100101 1000011': 1, '11111111 1001001': 1, '11000111 0110101': 2, '11011110 0001101': 1, '11100111 1000111': 2, '10110101 0101110': 1, '00100111 0000101': 1, '11000110 0010010': 2, '11101011 0010010': 3, '11111110 0000010': 22, '11111110 1011001': 1, '10111001 0011010': 1, '11111100 0000101': 1, '01010111 0001100': 2, '11111111 1000001': 3, '10100111 0110000': 1, '11110101 0011001': 3, '11100101 0010011': 3, '10110111 1001000': 1, '01110111 0001110': 1, '11111110 0100110': 1, '01101111 0010100': 7, '11100101 0011100': 1, '11101101 1000101': 1, '11101010 0010000': 3, '11010011 0010101': 1, '11111111 0111011': 1, '01000110 1001110': 1, '01000111 0001100': 2, '10110110 0010001': 2, '01101110 0010111': 1, '11100010 0001110': 3, '11100011 0000111': 3, '11100110 0001111': 9, '11001010 0000100': 1, '10100010 0101000': 1, '11011001 0011010': 1, '10101111 0010101': 1, '01100111 1011101': 1, '10001111 0000100': 1, '11100110 0010101': 4, '11100111 0001100': 63, '00100111 0010001': 1, '11101111 0011110': 5, '11111111 0011100': 9, '11110011 0000110': 3, '11111111 0010111': 7, '01100110 0001111': 2, '10000011 0100001': 1, '01110100 0011011': 1, '10110110 1001111': 1, '11101110 0000111': 6, '01010111 1001010': 1, '10110111 1001110': 1, '11011111 0101000': 2, '11000100 0011110': 1, '01101110 1001011': 1, '11100110 0011000': 12, '10101101 0000100': 1, '01011111 0110001': 1, '11111111 0000011': 18, '01111111 0001100': 1, '10010111 0111000': 1, '01110010 1001100': 1, '11110111 1000110': 2, '11001111 0001001': 2, '01111101 0010000': 2, '11001110 0000000': 3, '01111111 1001011': 1, '10100111 0101010': 1, '11101110 0010001': 13, '00101110 1001100': 1, '11110111 0010110': 9, '01010110 0001110': 2, '00111110 0010001': 1, '01110111 1010000': 2, '11000111 0011001': 1, '11001110 0100001': 1, '11101100 1000100': 2, '11111110 0110010': 3, '11011111 1110000': 1, '11011010 0001010': 1, '11101110 0011100': 12, '01100011 1111011': 1, '00101110 0010001': 1, '11000101 0010100': 1, '10101111 0001001': 3, '11100101 0001100': 2, '01101111 0001010': 9, '11000010 0011100': 1, '11001110 1010001': 2, '11111111 0001001': 20, '01111010 1000000': 1, '10100110 0001000': 2, '11110111 1001001': 1, '10100100 0100110': 1, '11011110 0000010': 5, '10100110 0111101': 1, '10101011 1001110': 1, '11000100 0110100': 1, '11001110 0110001': 1, '10010110 0101111': 1, '11000110 0011101': 2, '11110110 1010010': 1, '11001110 0010100': 1, '01100110 1000111': 1, '11000110 0011011': 1, '11011110 0011100': 4, '10111110 0001000': 3, '01010111 1000100': 1, '11101010 0000001': 1, '00110111 0001000': 1, '00100111 0101000': 1, '10100110 0000110': 2, '01110111 1010110': 1, '11110111 1000001': 2, '01101110 1011001': 2, '11100110 0010001': 2, '01011111 0101000': 1, '11101011 1011111': 1, '11110011 0011011': 1, '01111111 1010100': 1, '00010111 1010111': 1, '11110010 0000111': 1, '10100110 0101000': 1, '01101110 1001010': 1, '11111111 0111110': 1, '01100111 0001100': 9, '10001111 0000011': 2, '01110011 0001010': 1, '11111011 1000000': 1}}} \ No newline at end of file diff --git a/translations/ja/ch-quantum-hardware/transmon-physics.ipynb b/translations/ja/ch-quantum-hardware/transmon-physics.ipynb new file mode 100644 index 0000000..9c97b15 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/transmon-physics.ipynb @@ -0,0 +1,415 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# トランズモン物理入門" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "# 目次\n", + "\n", + "1. [多準位量子系による量子ビット](#mlqsaq)\n", + "2. [量子回路のハミルトニアン](#hoqc)\n", + "3. [ハミルトニアンの量子化](#qth)\n", + "4. [量子化トランズモン](#tqt)\n", + "5. [トランズモンと量子調和振動子の比較](#cottatqho)\n", + "6. [量子ビットのドライブと回転波近似](#qdatrwa)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 多準位量子系による量子ビット \n", + "\n", + "量子ビットを研究することは、二準位量子系の物理を知ることです。純粋な二準位系の例としては、電子のスピン(またはスピン$1/2$の素粒子)があります。そのスピンは上または下になり、それぞれを $|0\\rangle$ と $|1\\rangle$ にラベル付けします。歴史的に、$|0\\rangle$ 状態をブロッホ球の\"北極\"にとるのは、磁場を$+\\hat{z}$ 方向にかけた時の、低い方のエネルギー状態になるからです。\n", + "\n", + "スピンとは異なる二準位系が、初期の超電導量子ビットとして発見されました。[クーパーペアボックス](https://arxiv.org/pdf/cond-mat/9904003v1.pdf)です。超電導に電気抵抗が無いのは、電子がクーパーペアを作るからです。クーパーペアは分解するためにエネルギーが必要で、(そしてそのエネルギーは低温では熱的に得られないため)効果的にお互いに引き付け合います。この状況は直感に反しています。電子は負に帯電しているため、本当は反発すべきです! しかしながら多くの物質系で、全体的な効果の結果実現する相互作用があります。つまり正電荷格子の中の電子の影響で、電子が引き付け合うことが起こると考えることができます。クーパーペアボックスは超電導のアイランドでできており、余分な $2e$ のペア電荷を持っている($|0\\rangle$)状態、または持っていない($|1\\rangle$)状態になります。それらの状態はトンネル接合の電圧で操作することが可能であり、\"ゲート\"電圧で状態を逆にすることができます。そのため実質的に二準位系になります。 \n", + "\n", + "電荷状態としてエンコードされた量子ビットはとりわけ *電荷ノイズ* に弱いです。クーパーペアボックスは事実そうですが、この点が研究者を苦しめます。ほとんどの量子システムは、原子のように、二準位系ではありません。天文学者が宇宙の組成を決めるのに使う特徴スペクトル線(エネルギー遷移)のように、原子は複数の準位を持っています。原子の基底状態と第一励起状態のように、2つの準位のみを分離しコントロールすることができて、はじめて量子ビットとみなすことができるのです。では他のタイプの超電導回路を量子ビットに使うのはどうでしょうか? クーパーペアボックスの電荷ノイズに対する解決策は、量子ビットをより高次のエネルギーレベルで設計することです。すなわちこれが[トランズモン](https://arxiv.org/pdf/cond-mat/0703002.pdf)です。(transmon: *transmission-line shunted plasma oscillation* ) 非調和性を犠牲にして、電荷ノイズを抑えます。(非調和性: $|0\\rangle \\to |1\\rangle$ と $|1\\rangle \\to |2\\rangle$ の遷移周波数の違い。[高エネルギー状態へのアクセス](./accessing_higher_energy_states.html)参照) ただし、量子ビットとしては基底状態と第一励起状態のみをとります。つまり量子状態は2つの超電導アイランド間のトンネル接合をクーパーペアが振動することによってエンコードされています。励起した $|1\\rangle$ 状態は $|0\\rangle$ の基底状態よりも高い周波数で振動します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 量子回路のハミルトニアン \n", + "\n", + "ハミルトニアンは系のポテンシャルエネルギーと運動エネルギーの合計に等しい関数です。これは古典力学ではまさにそのままですが、量子力学では変数を演算子に変換します。古典力学のポアソン括弧と量子力学の交換子を比べると、交換子が交換しないことがわかります。これはハイゼンベルグの不確定性原理により、同時に観測することができないことを意味しています。\n", + "\n", + "ではまずはじめに線形 $LC$ 回路を考えます。$L$ をインダクタンス、$C$ をキャパシタンスとして、ハミルトニアンは運動エネルギー(電荷 $Q$ で表される)とポテンシャルエネルギー(流束 $\\Phi$ で表される)の合計になります。\n", + "$$\n", + "\\mathcal{H} = \\frac{Q^2}{2C} + \\frac{\\Phi^2}{2L}\n", + "$$\n", + "\n", + "
    \n", + " クリックで展開:線形回路のブランチーフラックス法\n", + "\n", + "ハミルトニアンとラグランジュアンは大規模な物体のエネルギーを含む関数で、古典力学で歴史のあるものです。現在でも物体の\"量子化\"のためのテンプレートとなっており、それはトランズモンでも同じです。その方法はラグランジュアンを一般化座標で書き下すことです。大抵一般化座標には3次元空間の位置を使いますが、我々は(電圧の履歴で定義された)流束と呼ばれる量を使います。一般化座標の共役変数は算出され、我々のケースでは電荷になります。(たいていは運動量になります)ルジャンドル変換によって、ハミルトニアンは導出され、系のエネルギーの合計を与えます。回路のハミルトニアンは、ブランチーフラックス法でキャパシターとインダクターのエネルギーを考えることで見つかります。ブランチーフラックス法はそれ自身古典的なラグランジュアン力学をベースにしたものです。流束と電荷はそれぞれ電圧と電流を時間積分したものです。\n", + "$$\n", + "\\Phi(t) = \\int_{-\\infty}^t V(t')\\,dt' \\quad {\\rm and} \\quad Q(t) = \\int_{-\\infty}^t I(t')\\,dt' \n", + "$$\n", + "一般化座標の流束を $\\Phi$ とします。$V(t')$ と $I(t')$ は時刻 $t'$ においてトランズモンを流れる電圧と電流です。電気回路においては、電圧はポテンシャルエネルギー、電流は運動量のように働きます。時刻 $t$ における瞬間のエネルギーは次のようになります。\n", + "$$\n", + "E(t) = \\int_{-\\infty}^t V(t') I(t')\\,dt'.\n", + "$$\n", + "(キャパシタンス $C$ の)キャパシターと(インダクタンス $L$ の)インダクターの間における電圧と電流は、それぞれ $V=L dI/dt$ と $I = C dV/dt$ の関係になります。回路の中で、キャパシターは電荷を貯め、インダクターは流束(電流)を貯めます。我々は流束を\"座標系\"に選びました。インダクターは流束を貯めるので、ポテンシャルエネルギーは部分積分により、\n", + "$$\n", + "U_L(t) = \\int_{-\\infty}^t L\\frac{dI(t')}{dt'} I(t')\\, dt' = \\frac{1}{2} LI(t)^2 = \\frac{1}{2L}\\Phi^2\n", + "\\quad {\\rm because} \\quad\n", + "\\Phi(t) = \\int_{-\\infty}^t L \\frac{dI(t')}{dt'}\\,dt' = LI(t)\n", + "$$\n", + "同様に、電圧は流束の変化率で、運動エネルギーを与えます。\n", + "$$\n", + "\\tau_C(t) = \\int_{-\\infty}^t C\\frac{dV(t')}{dt'} V(t')\\, dt' = \\frac{1}{2} CV(t)^2 = \\frac{1}{2}C\\dot{\\Phi}^2 \\quad {\\rm where} \\quad \\dot{\\Phi} = \\frac{d\\Phi}{dt}\n", + "$$\n", + "これはラグランジュアン力学では時間微分で示すのが普通です。ラグランジュアンは運動エネルギーとポテンシャルエネルギーの差で定義され、次のようになります。\n", + "$$\n", + "\\mathcal{L} = \\tau_C - U_L = \\frac{1}{2L} \\Phi^2 - \\frac{1}{2} C \\dot{\\Phi}^2. \n", + "$$\n", + "オイラーラグランジュの方程式により運動が決まり、\n", + "$$\n", + "0 \\equiv \\frac{\\partial\\mathcal{L}}{\\partial\\Phi} - \\frac{d}{dt} \\left(\\frac{\\partial\\mathcal{L}}{\\partial\\dot{\\Phi}}\\right) \n", + "= \\frac{\\Phi}{L} + C\\ddot{\\Phi},\n", + "$$\n", + "これは $\\Phi$ と角周波数 $\\omega = 1/\\sqrt{LC}$ の調和振動です。(2つのドットは時間の二回微分を表す、$\\ddot{\\Phi} = d^2\\Phi/dt^2$)しかしながら、我々はハミルトニアン形式に移行し、それを量子化したいのです。流束 $\\Phi$ の共役座標は以下のように定義されます。\n", + "$$\n", + "\\frac{d\\mathcal{L}}{d\\dot{\\Phi}} = C \\dot{\\Phi} = CV \\equiv Q\n", + "$$\n", + "キャパシタンスの定義により、これは電荷に完全に一致します。そしてハミルトニアンはラグランジュアン $\\mathcal{H} = Q\\dot{\\Phi} - \\mathcal{L}$ から求まり、上記の方程式になります。\n", + "
    \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. ハミルトニアンの量子化 \n", + "\n", + "量子調和振動子(Quantum Harmonic Oscillator:QHO) は $LC$ 回路のハミルトニアンを量子化することで得られます。共役変数を演算子に置き換え、$Q \\to \\hat{Q}$, $\\Phi \\to \\hat{\\Phi}$ とすると量子化されたハミルトニアンは以下のようになります。\n", + "$$\n", + "\\hat{H} = \\frac{\\hat{Q}^2}{2C} + \\frac{\\hat{\\Phi}^2}{2L},\n", + "$$\n", + "\"ハット(^)\" はこれらが量子力学の演算子であることを思い出させます。古典力学のポアソン括弧と量子力学の交換子には次の対応があります。\n", + "$$\n", + "\\{A,B\\} = \\frac{\\delta A}{\\delta \\Phi} \\frac{\\delta B}{\\delta Q} - \\frac{\\delta B}{\\delta \\Phi} \\frac{\\delta A}{\\delta Q} \\Longleftrightarrow\n", + "\\frac{1}{i\\hbar} [\\hat{A},\\hat{B}] = \\frac{1}{i\\hbar}\\left(\\hat{A}\\hat{B} - \\hat{B}\\hat{A}\\right),\n", + "$$\n", + "ここで $\\delta$ は汎関数微分です。そして交換子は量子力学では、演算の順序が重要であることを表しています。変数/演算子をあてはめると以下になります。\n", + "$$\n", + "\\{\\Phi,Q\\} = \\frac{\\delta \\Phi}{\\delta \\Phi}\\frac{\\delta Q}{\\delta Q} - \\frac{\\delta Q}{\\delta \\Phi}\\frac{\\delta \\Phi}{\\delta Q} = 1-0=1 \\Longrightarrow [\\hat{\\Phi}, \\hat{Q}] = i\\hbar\n", + "$$\n", + "これは位置と運動量のように、電荷と流束もまたハイゼンベルグの不確定性原理 ($[\\hat{x},\\hat{p}] = i\\hbar$) に従うことを示唆します。それらは同時に観測することができず、同じ特徴を持って同様の方法で定義された、共役変数であることを意味します。この結果は超電導量子ビットの歴史において設計に影響を与え、異なるタイプの超電導量子ビットを作りました。\n", + "\n", + "この量子化されたハミルトニアンは、電荷 $\\hat{n} = \\hat{Q}/2e$ と位相 $\\hat{\\phi} = 2\\pi\\hat{\\Phi}/\\Phi_0$ によってよりフレンドリーな形に書けます。この時 $\\Phi_0 = h/2e$ は流束量子、演算子はそれぞれクーパーペア数とジョセフソン接合まわりの位相です。\n", + "そのため、量子化されたハミルトニアンは以下のようになります。\n", + "\n", + "$$ \\hat{H}_{\\rm QHO}= 4E_c\\hat{n}^2 + \\frac{1}{2} E_L \\hat{\\phi}^2,$$\n", + "\n", + "$E_c = e^2/2C$ は電荷エネルギー(係数4は電子単体ではなくクーパーペアのため)そして $E_L = (\\Phi_0/2\\pi)^2/L$ は誘導エネルギーです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + " クリックで展開:量子調和振動子\n", + "\n", + "上記のハミルトニアンは単純な調和振動を意味し、$\\hat{\\phi}$ を位置変数にとれば、生成消滅演算子を電荷と位相のゼロ点振動の観点で定義でき、\n", + "\n", + "$$ \\hat{n} = i n_{\\mathrm zpf}(\\hat{a} + \\hat{a}^\\dagger) \\quad \\mathrm{and} \\quad \n", + " \\hat{\\phi} = \\phi_{\\mathrm zpf}(\\hat{a} - \\hat{a}^\\dagger), \\qquad \\mathrm{where} \\quad \n", + " n_\\mathrm{zpf} = \\left( \\frac{E_L}{32E_c} \\right)^{1/4} \\quad \\mathrm{and} \\quad\n", + " \\phi_{\\mathrm{zpf}} = \\left(\\frac{2E_c}{E_L}\\right)^{1/4}.$$\n", + " \n", + "このハミルトニアンは調和振動のものであり、\n", + "\n", + "$$ H_{\\mathrm{QHO}} = \\hbar \\omega \\left( \\hat{a}^\\dagger \\hat{a} + \\frac{1}{2} \\right) \\qquad \\mathrm{with} \\qquad\n", + "\\omega = \\sqrt{8 E_L E_c}/\\hbar = 1/\\sqrt{LC}.$$ \n", + "\n", + "QHO のエネルギー間隔は古典的 $LC$ 回路の共振周波数 $\\omega=1/\\sqrt{LC}$ に一致することがわかります。\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + " クリックで展開:トランズモンのためのブランチーフラックス法\n", + "\n", + "線形回路の量子化については、ブランチ-フラックス法で一般的に議論されています。[VoolとDevoret](https://arxiv.org/abs/1610.03438) 参照。基本的に、これは回路におけるキルヒホッフの法則を強化したものです。すなわち、ノードの電流合計はゼロ、ループの電圧合計はゼロ、でなければなりません。これらのキルヒホッフの法則は回路の運動方程式を与えます。ジョセフソン接合の電流と流束の間には、ジョセフソン効果で与えられる特別な関係があります。\n", + "$$\n", + "I = I_0 \\sin\\left(2\\pi \\Phi/\\Phi_0\\right)\n", + "$$\n", + "$I_0$ は最大電流(臨界電流)で、超電導状態の間にジョセフソン接合を流れることができます。$\\Phi_0 = h/2e$ は流束量子です。キルヒホッフの電流法則を適用すると、ジョセフソン電流とトータルキャパシタンス($C = C_S + C_J$)の電流の和はゼロにならなければなりません。(ここで $C_S$ はシャントキャパシタ、$C_J$ はジョセフソン接合のキャパシタンス、また $C_S \\gg C_J$ です)これは運方程式を与えます。\n", + "$$\n", + "I_0 \\sin\\left(2\\pi \\Phi/\\Phi_0\\right) + C\\ddot{\\Phi} = 0.\n", + "$$\n", + "ラグランジュアンをオイラーラグランジュ方程式に代入して運動方程式を求める QHO のような典型的なケースとは異なり、変数 $\\Phi$ の運動方程式は既に求まっています。しかしハミルトニアンを量子化したいので、この運動方程式をラグランジュアンに変形し、ルジャンドル変換してハミルトニアンを見つけなければなりません。これは運動方程式を\"積分\"することで達成されます。\n", + "$$\n", + "0 = \\frac{\\partial\\mathcal{L}}{\\partial\\Phi} - \\frac{d}{dt}\\left(\\frac{\\partial\\mathcal{L}}{\\partial\\dot{\\Phi}}\\right) = I_0 \\sin\\left(2\\pi \\Phi/\\Phi_0\\right) + C\\ddot{\\Phi} \\Longrightarrow\n", + "\\frac{I_0 \\Phi_0}{2\\pi} \\cos\\left(2\\pi \\Phi/\\Phi_0\\right) + \\frac{C\\dot{\\Phi}^2}{2} = \\mathcal{L}\n", + "$$\n", + "さてラグランジュアンを見つけたので、共役変数 $Q = \\partial \\mathcal{L}/\\partial\\dot{\\Phi} = C\\dot{\\Phi}$ を算出することで、ハミルトニアンがわかります。これは結局 QHO のケースと同じになります。\n", + "$$\n", + "\\mathcal{H} = Q\\dot{\\Phi} - \\mathcal{L} = \\frac{Q^2}{2C} - \\frac{I_0 \\Phi_0}{2\\pi} \\cos\\left(2\\pi \\Phi/\\Phi_0\\right)\n", + "$$\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. 量子化トランズモン \n", + "\n", + "QHO と同じ変換をして、トランズモンハミルトニアンをよりお馴染みの形式に書き直すことができます。\n", + "$$\n", + "\\hat{H}_{\\rm tr} = 4E_c \\hat{n}^2 - E_J \\cos \\hat{\\phi},\n", + "$$\n", + "この時ジョセフソンエネルギー $E_J = I_0\\Phi_0/2\\pi$ によって QHO の誘導エネルギーを置き換えました。線形なインダクターの代わりにジョセフソン接合素子があるため、位相の形は QHO とは異なることに気をつけてください。しばしばゲートオフセット電荷のために $\\hat{n} \\to \\hat{n} - n_g$ とされますが、トランズモン型の場合は重要ではありません。さて、QHO と同様に量子化にすすみます。電荷と位相のゼロ点振動で生成消滅演算子を定義します。\n", + "$$ \\hat{n} = i n_{\\mathrm zpf}(\\hat{c} + \\hat{c}^\\dagger) \\quad \\mathrm{and} \\quad \n", + " \\hat{\\phi} = \\phi_{\\mathrm zpf}(\\hat{c} - \\hat{c}^\\dagger), \\qquad \\mathrm{where} \\quad \n", + " n_\\mathrm{zpf} = \\left( \\frac{E_J}{32E_c} \\right)^{1/4} \\quad \\mathrm{and} \\quad\n", + " \\phi_{\\mathrm{zpf}} = \\left(\\frac{2E_c}{E_J}\\right)^{1/4},\n", + "$$\n", + "ジョセフソンエネルギー $E_J$ で QHO の線形誘導エネルギー $E_L$ を置き換えました。ここで $\\hat{c} = \\sum_j \\sqrt{j+1} |j\\rangle\\langle j+1|$ をトランズモン消滅演算子に使い、均等なエネルギーモードの $\\hat{a}$ と区別します。トランズモンでは $E_J/E_c \\gg 1$ とするため、$\\phi \\ll 1$ であることに注意し、$\\cos \\hat{\\phi}$ をテイラー展開してハミルトニアンを近似します。\n", + "$$\n", + "H = 4E_c n_{zpf}^2 (\\hat{c} + \\hat{c}^\\dagger)^2 - E_J\\left(1 - \\frac{1}{2} E_J \\phi_{zpf}^2 (\\hat{c}-\\hat{c}^\\dagger)^2 + \\frac{1}{24} E_J\\phi_{zpf}^4(\\hat{c}-\\hat{c}^\\dagger)^4 + \\ldots \\right) \\\\\n", + " \\approx \\sqrt{8 E_c E_J} \\left(\\hat{c}^\\dagger \\hat{c} + \\frac{1}{2}\\right) - E_J - \\frac{E_c}{12}(\\hat{c}^\\dagger + \\hat{c})^4\n", + "$$\n", + "この時 $4E_c n_{\\rm zpf}^2 = (1/2)E_J\\phi_{zpf}^2 = \\sqrt{2E_cE_J}$ であることを使いました。トランズモン演算子 $\\hat{c}$ を展開し、 速い回転項(すなわち $\\hat{c}$ と $\\hat{c}^\\dagger$ の高次の項)を落とし、トランズモン動力学に影響のない定数項を無視、$\\omega_0 = \\sqrt{8 E_c E_J}$ とおいて、トランズモンの非調和性から $\\delta = -E_c$ とすると、\n", + "$$\n", + "\\hat{H}_{\\rm tr} = \\omega_0 \\hat{c}^\\dagger \\hat{c} + \\frac{\\delta}{2}((\\hat{c}^\\dagger \\hat{c})^2 + \\hat{c}^\\dagger \\hat{c})\n", + "= \\left(\\omega_0 + \\frac{\\delta}{2}\\right) \\hat{c}^\\dagger \\hat{c} + \\frac{\\delta}{2}(\\hat{c}^\\dagger \\hat{c})^2\n", + "$$\n", + "こうしてダフィング振動子のハミルトニアンを得ました。$\\omega \\equiv \\omega_0+\\delta$ と定義することで、$\\omega_{j+1}-\\omega_j = \\omega + \\delta j$ の非調和性から、トランズモンのエネルギーレベルがそれぞれ異なることがわかります。そして $\\omega$ はトランズモン量子ビット固有の \"周波数\"($\\omega_1-\\omega_0$遷移)と一致します。トランズモン演算子の定義 $\\hat{c}^\\dagger \\hat{c} = \\sum_j j |j\\rangle \\langle j|$ から、\n", + "$$\n", + "\\hat{H}_{\\rm tr} = \\omega \\hat{c}^\\dagger \\hat{c} + \\frac{\\delta}{2} \\hat{c}^\\dagger \\hat{c} (\\hat{c}^\\dagger \\hat{c} - 1)\n", + " = \\sum_j \\left(\\left(\\omega-\\frac{\\delta}{2}\\right)j + \\frac{\\delta}{2} j^2\\right) |j\\rangle\\langle j| \\equiv \\sum_j \\omega_j |j\\rangle \\langle j|\n", + "$$\n", + "そのため\n", + "$$\n", + "\\omega_j = \\left(\\omega-\\frac{\\delta}{2}\\right)j + \\frac{\\delta}{2} j^2\n", + "$$\n", + "これらがトランズモンのエネルギー準位になります。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. トランズモンと量子調和振動子の比較\n", + "\n", + "QHO は等間隔のエネルギー準位を持ちますが、トランズモンは異なります。そのためトランズモンは量子ビットとして使えます。ではここで [`QuTiP`](http://www.qutip.org) を使ってハミルトニアンを計算し、エネルギー準位の相違を見てみます。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "E_J = 20e9\n", + "w = 5e9\n", + "anharm = -300e6\n", + "\n", + "N_phis = 101\n", + "phis = np.linspace(-np.pi,np.pi,N_phis)\n", + "mid_idx = int((N_phis+1)/2)\n", + "\n", + "# potential energies of the QHO & transmon\n", + "U_QHO = 0.5*E_J*phis**2\n", + "U_QHO = U_QHO/w\n", + "U_transmon = (E_J-E_J*np.cos(phis))\n", + "U_transmon = U_transmon/w" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# import QuTiP, construct Hamiltonians, and solve for energies\n", + "\n", + "from qutip import destroy\n", + "N = 35\n", + "N_energies = 5\n", + "c = destroy(N)\n", + "H_QHO = w*c.dag()*c\n", + "E_QHO = H_QHO.eigenenergies()[0:N_energies]\n", + "H_transmon = w*c.dag()*c + (anharm/2)*(c.dag()*c)*(c.dag()*c - 1)\n", + "E_transmon = H_transmon.eigenenergies()[0:2*N_energies]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(1, 1, figsize=(6,6))\n", + "\n", + "axes.plot(phis, U_transmon, '-', color='orange', linewidth=3.0)\n", + "axes.plot(phis, U_QHO, '--', color='blue', linewidth=3.0)\n", + "\n", + "for eidx in range(1,N_energies):\n", + " delta_E_QHO = (E_QHO[eidx]-E_QHO[0])/w\n", + " delta_E_transmon = (E_transmon[2*eidx]-E_transmon[0])/w\n", + " QHO_lim_idx = min(np.where(U_QHO[int((N_phis+1)/2):N_phis] > delta_E_QHO)[0])\n", + " trans_lim_idx = min(np.where(U_transmon[int((N_phis+1)/2):N_phis] > delta_E_transmon)[0])\n", + " trans_label, = axes.plot([phis[mid_idx-trans_lim_idx-1], phis[mid_idx+trans_lim_idx-1]], \\\n", + " [delta_E_transmon, delta_E_transmon], '-', color='orange', linewidth=3.0)\n", + " qho_label, = axes.plot([phis[mid_idx-QHO_lim_idx-1], phis[mid_idx+QHO_lim_idx-1]], \\\n", + " [delta_E_QHO, delta_E_QHO], '--', color='blue', linewidth=3.0)\n", + " \n", + "axes.set_xlabel('Phase $\\phi$', fontsize=24)\n", + "axes.set_ylabel('Energy Levels / $\\hbar\\omega$', fontsize=24)\n", + "axes.set_ylim(-0.2,5)\n", + "\n", + "qho_label.set_label('QHO Energies')\n", + "trans_label.set_label('Transmon Energies')\n", + "axes.legend(loc=2, fontsize=14)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 量子ビットのドライブと回転波近似 \n", + "\n", + "電場 $\\vec{E}(t) = \\vec{E}_0 e^{-i\\omega_d t} + \\vec{E}_0^* e^{i\\omega_d t}$ でトランズモンをドライブすることによって、トランズモンとマイクロ波間で双極子相互作用をおこします。簡単のためトランズモンは量子ビットのみとみなし、ハミルトニアンは量子ビットハミルトニアン $\\hat{H}_0$ とドライブハミルトニアン $\\hat{H}_d$ の和とします。\n", + "$$\n", + "\\hat{H} = \\hat{H}_0 + \\hat{H}_d \\qquad {\\rm with} \\qquad \\hat{H}_0 = -\\frac{1}{2} \\hbar \\omega_q \\sigma^z,\n", + "$$\n", + "ここで $\\sigma^z$ はパウリ-$Z$ 行列です。またパウリ昇降演算子 $\\sigma^\\pm = (1/2)(\\sigma^x \\mp i\\sigma^y)$ は $\\sigma^+ |0\\rangle = |1\\rangle$ と $\\sigma^+ |1\\rangle = |0\\rangle$ となる効果があります。(この定義は *スピン* の代わりに *量子ビット* の昇降演算子を使っていることに注意。[セクション 1](#mlqsaq) の議論により、$|0\\rangle \\equiv |\\uparrow\\rangle$ と $|1\\rangle \\equiv |\\downarrow \\rangle$ のため、昇降演算子は逆になっている)さて、電場が量子ビットを励起、脱励起するため、双極子演算子を $\\vec{d} = \\vec{d}_0 \\sigma^+ + \\vec{d}_0^* \\sigma^-$ と定義します。双極子相互作用のドライブハミルトニアンは、\n", + "$$\n", + "\\hat{H}_d = -\\vec{d} \\cdot \\vec{E}(t) = -\\left(\\vec{d}_0 \\sigma^+ + \\vec{d}_0^* \\sigma^-\\right) \\cdot \\left(\\vec{E}_0 e^{-i\\omega_d t} + \\vec{E}_0^* e^{i\\omega_d t}\\right) = \n", + "-\\left(\\vec{d}_0 \\cdot \\vec{E}_0 e^{-i\\omega_d t} + \\vec{d}_0 \\cdot \\vec{E}_0^* e^{i\\omega_d t}\\right)\\sigma^+\n", + "-\\left(\\vec{d}_0^* \\cdot \\vec{E}_0 e^{-i\\omega_d t} + \\vec{d}_0^* \\cdot \\vec{E}_0^* e^{i\\omega_d t}\\right)\\sigma^-\\\\\n", + "\\equiv -\\hbar\\left(\\Omega e^{-i\\omega_d t} + \\tilde{\\Omega} e^{i\\omega_d t}\\right)\\sigma^+\n", + "-\\hbar\\left(\\tilde{\\Omega}^* e^{-i\\omega_d t} + \\Omega^* e^{i\\omega_d t}\\right)\\sigma^-\n", + "$$\n", + "ここで電場と双極子の強さを記述するため、$\\Omega = \\vec{d}_0 \\cdot \\vec{E}_0$ と $\\tilde{\\Omega} = \\vec{d}_0 \\cdot \\vec{E}_0^*$ の置き換えを行いました。次に相互作用描像 $\\hat{H}_{d,I} = U\\hat{H}_dU^\\dagger$ (簡単のため、キャンセルする項を省略)に移行します。ここで、\n", + "$$\n", + "U = e^{i\\hat{H}_0t/\\hbar} = e^{-i\\omega_q t \\sigma^z/2} = I\\cos(\\omega_q t/2) - i\\sigma^z\\sin(\\omega_q t/2)\n", + "$$\n", + "演算子の項を計算し \n", + "$$\n", + "\\left(I\\cos(\\omega_q t/2) - i\\sigma^z\\sin(\\omega_q t/2)\\right) \\sigma^+ \\left(I\\cos(\\omega_q t/2) + i\\sigma^z\\sin(\\omega_q t/2)\\right) = e^{i\\omega_q t} \\sigma^+ \\\\\n", + "\\left(I\\cos(\\omega_q t/2) - i\\sigma^z\\sin(\\omega_q t/2)\\right) \\sigma^- \\left(I\\cos(\\omega_q t/2) + i\\sigma^z\\sin(\\omega_q t/2)\\right) = e^{-i\\omega_q t} \\sigma^-\n", + "$$\n", + "変換されたハミルトニアンは\n", + "$$\n", + "\\hat{H}_{d,I} = U\\hat{H}_dU^\\dagger = -\\hbar\\left(\\Omega e^{-i\\omega_d t} + \\tilde{\\Omega} e^{i\\omega_d t}\\right)e^{i\\omega_q t} \\sigma^+ -\\hbar\\left(\\tilde{\\Omega}^* e^{-i\\omega_d t} + \\Omega^* e^{i\\omega_d t}\\right)e^{-i\\omega_q t} \\sigma^-\\\\\n", + "= -\\hbar\\left(\\Omega e^{-i\\Delta_q t} + \\tilde{\\Omega} e^{i(\\omega_q+\\omega_d) t}\\right) \\sigma^+ -\\hbar\\left(\\tilde{\\Omega}^* e^{-i(\\omega_q+\\omega_d) t} + \\Omega^* e^{i\\Delta_q t}\\right) \\sigma^-\n", + "$$\n", + "さてここで、回転波近似(Rotating Wave Approximation:RWA)を行います。$\\omega_q+\\omega_d$ が $\\Delta_q = \\omega_q-\\omega_d$ よりもずっと大きいため、指数関数の和になっている項は非常に早く振動し、事実上寄与は平均化できるので、それらの項をハミルトニアンから落とします。そして RWA 相互作用ハミルトニアンは次のようになります。\n", + "$$\n", + "\\hat{H}_{d,I}^{\\rm (RWA)} =-\\hbar\\Omega e^{-i\\Delta_q t} \\sigma^+ -\\hbar \\Omega^* e^{i\\Delta_q t} \\sigma^-\n", + "$$\n", + "シュレーディンガー描像に戻り\n", + "$$\n", + "\\hat{H}_{d}^{\\rm (RWA)} = U^\\dagger \\hat{H}_{d,I}^{\\rm (RWA)} U = -\\hbar\\Omega e^{-i\\omega_d t} \\sigma^+ -\\hbar\\Omega^* e^{i\\omega_d t} \\sigma^-\n", + "$$\n", + "量子ビットとドライブハミルトニアンの合計は次のようになります\n", + "$$\n", + "\\hat{H}^{\\rm (RWA)} = -\\frac{1}{2} \\hbar\\omega_q \\sigma^z -\\hbar\\Omega e^{-i\\omega_d t} \\sigma^+ -\\hbar\\Omega^* e^{i\\omega_d t} \\sigma^-.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$U_d = \\exp\\{-i\\omega_d t\\sigma^z/2\\}$ の変換によって、ドライブのフレームに移行するとハミルトニアンは次のようになります。\n", + "$$\n", + "\\hat{H}_{\\rm eff} = U_d \\hat{H}^{\\rm (RWA)} U_d^\\dagger - i\\hbar U_d \\dot{U}_d^\\dagger\n", + "$$\n", + "ここで $\\dot{U}_d = dU_d/dt$ は $U_d$ の時間微分です。そのため RWA でのドライブフレームは、\n", + "$$\n", + "\\hat{H}_{\\rm eff} = -\\frac{1}{2} \\hbar\\omega_q \\sigma^z -\\hbar\\Omega \\sigma^+ -\\hbar\\Omega^* \\sigma^- + \\frac{1}{2} \\hbar\\omega_d \\sigma^z = -\\frac{1}{2}\\hbar \\Delta_q \\sigma^z -\\hbar\\Omega \\sigma^+ -\\hbar\\Omega^* \\sigma^-\n", + "$$\n", + "ドライブは実数と仮定すると $\\Omega = \\Omega^*$ であり、シンプルにすると以下になります。\n", + "$$\n", + "\\hat{H}_{\\rm eff} = -\\frac{1}{2}\\hbar \\Delta_q \\sigma^z -\\hbar\\Omega \\sigma^x.\n", + "$$\n", + "これはドライブが量子ビットに共鳴するとき(すなわち $\\Delta_q = 0$)、ドライブは大きさ $\\Omega$ で $\\sigma^x$ の項によってブロッホ球上の $x$ 回転を起こします。この共鳴の効果についてはセクション [スペクトロスコピーによる量子ビットの共振周波数測定](./calibrating-qubits-openpulse.html#frequencysweep) を見てください。\n", + "共鳴から外れたドライブは、$\\sigma^z$ の効果により追加の $z$ 回転を持ちます。これらの振動は [ラムゼー実験](./calibrating-qubits-openpulse.html#ramsey) を見てください。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-quantum-hardware/transpiling-quantum-circuits.ipynb b/translations/ja/ch-quantum-hardware/transpiling-quantum-circuits.ipynb new file mode 100644 index 0000000..8951095 --- /dev/null +++ b/translations/ja/ch-quantum-hardware/transpiling-quantum-circuits.ipynb @@ -0,0 +1,1246 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T15:49:49.128196Z", + "start_time": "2019-07-16T15:49:49.125750Z" + } + }, + "source": [ + "# Transpiling Quantum Circuits" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this chapter we will investigate how quantum circuits are transformed when run on quantum devices. That we need to modify the circuits at all is a consequence of the limitations of current quantum computing hardware. Namely, the limited connectivity inherent in most quantum hardware, restricted gate sets, as well as environmental noise and gate errors, all conspire to limit the effective computational power on today's quantum devices. Fortunately, quantum circuit rewriting tool chains have been developed that directly address these issues, and return heavily optimized circuits mapped to targeted quantum devices. Here we will explore the IBM Qiskit 'transpiler' circuit rewriting framework." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T17:54:52.251525Z", + "start_time": "2019-07-16T17:54:52.247658Z" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from qiskit import *\n", + "from qiskit.tools.jupyter import *\n", + "from qiskit.providers.ibmq import least_busy\n", + "%matplotlib inline\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IBMQ.load_account()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Core Steps in Circuit Rewriting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we will see, rewriting quantum circuits to match hardware constraints and optimize for performance can be far from trivial. The flow of logic in the rewriting tool chain need not be linear, and can often have iterative sub-loops, conditional branches, and other complex behaviors. That being said, the basic building blocks follow the structure given below." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our goal in this section is to see what each of these \"passes\" does at a high-level, and then begin exploring their usage on a set of common circuits." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unrolling to Basis Gates" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When writing a quantum circuit you are free to use any quantum gate (unitary operator) that you like, along with a collection of non-gate operations such as qubit measurements and reset operations. However, when running a circuit on a real quantum device one no longer has this flexibility. Due to limitations in, for example, the physical interactions between qubits, difficulty in implementing multi-qubit gates, control electronics etc, a quantum computing device can only natively support a handful of quantum gates and non-gate operations. In the present case of IBM Q devices, the native gate set can be found by querying the devices themselves:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T17:20:59.864706Z", + "start_time": "2019-07-16T17:20:59.861248Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "provider = IBMQ.get_provider(group='open')\n", + "provider.backends(simulator=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T17:21:19.477209Z", + "start_time": "2019-07-16T17:21:19.471761Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['u1', 'u2', 'u3', 'cx', 'id']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "backend = least_busy(provider.backends(filters=lambda x: x.configuration().n_qubits >= 5 and not x.configuration().simulator and x.status().operational==True))\n", + "backend.configuration().basis_gates" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T17:21:52.409358Z", + "start_time": "2019-07-16T17:21:52.405613Z" + } + }, + "source": [ + "We see that the our device supports five native gates: three single-qubit gates (`u1`, `u2`, `u3`, and `id`) and one two-qubit entangling gate `cx`. In addition, the device supports qubit measurements (otherwise we can not read out an answer!). Although we have queried only a single device, all IBM Q devices support this gate set.\n", + "\n", + "The `u*` gates represent arbitrary single-qubit rotations of one, two, and three angles. The `u1` gates are single-parameter rotations that represent generalized phase gates of the form\n", + "\n", + "$$\n", + "U_{1}(\\lambda) = \\begin{bmatrix}\n", + "1 & 0 \\\\\n", + "0 & e^{i\\lambda}\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "This set includes common gates such as $Z$, $T$, $T^{\\dagger}$, $S$, and $S^{\\dagger}$. It turns out that these gates do not actually need to be performed on hardware, but instead, can be implemented in software as \"virtual gates\". These virtual gates are called \"frame changes\" and take zero time, and have no associated error; they are free gates on hardware.\n", + "\n", + "Two-angle rotations, $U_{2}(\\phi,\\lambda)$, are actually two frame changes with a single $X_{\\pi/2}$ gate in between them, and can be used to synthesize gates like the Hadamard ($U_{2}(0,\\pi)$) gate. As the only actual gate performed is the $X_{\\pi/2}$ gate, the error and gate time associated with any $U_{2}$ gate is the same as an $X_{\\pi/2}$ gate. Similarly, $U_{3}(\\theta,\\phi,\\lambda)$ gates are formed from three frame changes with two $X_{\\pi/2}$ gates in between them. The errors and gate times are twice those of a single $X_{\\pi/2}$. The identity gate, $id$, is straightforward, and is a placeholder gate with a fixed time-interval. \n", + "\n", + "The only entangling gate supported by the IBM Q devices is the CNOT gate (`cx`) that, in the computational basis, can be written as:\n", + "\n", + "$$\n", + "\\mathrm{CNOT}(0,1) = \\begin{bmatrix}\n", + "1 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 0 & 1 \\\\\n", + "0 & 0 & 1 & 0 \\\\\n", + "0 & 1 & 0 & 0\n", + "\\end{bmatrix}\n", + "$$,\n", + "\n", + "where we see that the matrix form follows from the specific bit-ordering convention used in Qiskit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Every quantum circuit run on a IBM Q device must be expressed using only these basis gates. For example, suppose one wants to run a simple phase estimation circuit:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T18:08:24.012244Z", + "start_time": "2019-07-16T18:08:23.834412Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(2, 'q')\n", + "cr = ClassicalRegister(1, 'c')\n", + "qc = QuantumCircuit(qr, cr)\n", + "\n", + "qc.h(qr[0])\n", + "qc.x(qr[1])\n", + "qc.cu1(np.pi/4, qr[0], qr[1])\n", + "qc.h(qr[0])\n", + "qc.measure(qr[0], cr[0])\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have $H$, $X$, and controlled-$U_{1}$ gates, all of which are not in our devices basis gate set, and must be expanded. We will see that this expansion is taken care of for you, but for now let us just rewrite the circuit in the basis gate set:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T18:39:07.353160Z", + "start_time": "2019-07-16T18:39:07.130830Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(2, 'q')\n", + "cr = ClassicalRegister(1, 'c')\n", + "qc_basis = QuantumCircuit(qr, cr)\n", + "\n", + "# Hadamard in U2 format\n", + "qc_basis.u2(0, np.pi, qr[0])\n", + "# X gate in U3 format\n", + "qc_basis.u3(np.pi, 0, np.pi, qr[1])\n", + "\n", + "# Decomposition for controlled-U1 with lambda=pi/4\n", + "qc_basis.u1(np.pi/8, qr[0]) \n", + "qc_basis.cx(qr[0], qr[1]) \n", + "qc_basis.u1(-np.pi/8, qr[1]) \n", + "qc_basis.cx(qr[0], qr[1])\n", + "qc_basis.u1(np.pi/8, qr[1])\n", + "\n", + "# Hadamard in U2 format\n", + "qc_basis.u2(0, np.pi, qr[0]) \n", + "\n", + "qc_basis.measure(qr[0], cr[0])\n", + "qc_basis.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A few things to highlight. One, the circuit has gotten longer with respect to the initial one. This can be verified by checking the depth of the circuits:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T18:09:31.690359Z", + "start_time": "2019-07-16T18:09:31.685832Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4 , 7\n" + ] + } + ], + "source": [ + "print(qc.depth(), ',', qc_basis.depth())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Second, although we had a single controlled gate, the fact that it was not in the basis set means that, when expanded, it requires more than a single `cx` gate to implement. All said, unrolling to the basis set of gates leads to an increase in the length of a quantum circuit and the number of gates. Both of these increases lead to more errors from the environment and gate errors, respectively, and further circuit rewriting steps must try to mitigate this effect through circuit optimizations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we will look at the particularly important example of a Toffoli, or controlled-controlled-not gate:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T18:22:00.558019Z", + "start_time": "2019-07-16T18:22:00.400606Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(3, 'q')\n", + "qc = QuantumCircuit(qr)\n", + "\n", + "qc.ccx(qr[0], qr[1], qr[2])\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a three-qubit gate, it should already be clear that this is not in the basis set of our devices. We have already seen that controlled gates not in the basis set are typically decomposed into multiple CNOT gates. This is doubly true for controlled gates with more than two qubits, where multiple CNOT gates are needed to implement the entangling across the multiple qubits. In our basis set, the Toffoli gate can be written as:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T18:40:07.866923Z", + "start_time": "2019-07-16T18:40:07.598417Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(3, 'q')\n", + "qc_basis = QuantumCircuit(qr)\n", + "\n", + "qc_basis.u2(0,np.pi, qr[2])\n", + "qc_basis.cx(qr[1], qr[2])\n", + "qc_basis.u1(-np.pi/4, qr[2])\n", + "qc_basis.cx(qr[0], qr[2])\n", + "qc_basis.u1(np.pi/4, qr[2])\n", + "qc_basis.cx(qr[1], qr[2])\n", + "qc_basis.u1(np.pi/4, qr[1])\n", + "qc_basis.u1(-np.pi/4, qr[2])\n", + "qc_basis.cx(qr[0], qr[2])\n", + "qc_basis.cx(qr[0], qr[1])\n", + "qc_basis.u1(np.pi/4, qr[2])\n", + "qc_basis.u1(np.pi/4, qr[0])\n", + "qc_basis.u1(-np.pi/4, qr[1])\n", + "qc_basis.u2(0,np.pi, qr[2])\n", + "qc_basis.cx(qr[0], qr[1])\n", + "qc_basis.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Therefore, for every Toffoli gate in a quantum circuit, the IBM Q hardware must execute six CNOT gates, and a handful of single-qubit gates. From this example, it should be clear that any algorithm that makes use of multiple Toffoli gates will end up as a circuit with large depth and with therefore be appreciably affected by noise and gate errors." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initial Layout" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T19:29:22.653101Z", + "start_time": "2019-07-16T19:29:22.362485Z" + } + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qr = QuantumRegister(5, 'q')\n", + "cr = ClassicalRegister(5, 'c')\n", + "qc = QuantumCircuit(qr, cr)\n", + "\n", + "qc.h(qr[0])\n", + "qc.cx(qr[0], qr[4])\n", + "qc.cx(qr[4], qr[3])\n", + "qc.cx(qr[3], qr[1])\n", + "qc.cx(qr[1], qr[2])\n", + "\n", + "qc.draw(output='mpl')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2019-07-16T16:31:21.089108Z", + "start_time": "2019-07-16T16:31:21.013574Z" + }, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit.visualization.gate_map import plot_gate_map\n", + "plot_gate_map(backend, plot_directed=True)" + ] + } + ], + "metadata": { + "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.7.4" + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "064f112f19594d7daa34278839e1e681": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "145px" + } + }, + "15a512a1335940f6b06c84b685d7c10d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_064f112f19594d7daa34278839e1e681", + "placeholder": "​", + "style": "IPY_MODEL_cf5b7e6af6ac45489aae3ba2ae2f444a", + "value": "
    Backend
    " + } + }, + "16b76b898ad24635b0db8c5b82ab7c59": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "295ed96248734a218fc2c2d54a71eb32": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": "0px 0px 0px 35px", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "600px" + } + }, + "2e0de791a2ea4eff874bc9dae69b147d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "GridBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "GridBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "GridBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_82d00aed21194790ad9affdfff851018" + ], + "layout": "IPY_MODEL_3e3563555aae43a9b19c56e731f6e0ee" + } + }, + "3496c7b4dadf4809916c11a9cd646f83": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_77a32489d4b241b8bc05b9258b66acdb", + "placeholder": "​", + "style": "IPY_MODEL_a555d38bfd004d3b8e92b9b4811a2c4a", + "value": "
    Job ID
    " + } + }, + "3e3563555aae43a9b19c56e731f6e0ee": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": "\n \". . . . right \"\n ", + "grid_template_columns": "20% 20% 20% 20% 20%", + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "4354ac67239c4756a7397d8c7e527d72": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e627d1f7f3d849ad8585b00c480f7e45", + "placeholder": "​", + "style": "IPY_MODEL_16b76b898ad24635b0db8c5b82ab7c59", + "value": "
    Message
    " + } + }, + "51238e8e08ee447d9d35ce606461b21c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "661c8823b7454a2b8b52f87746f7b26d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": "right", + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 0px", + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "66345442f47a4d76b427ff8746f1413b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "77a32489d4b241b8bc05b9258b66acdb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "190px" + } + }, + "82d00aed21194790ad9affdfff851018": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "primary", + "description": "Clear", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_661c8823b7454a2b8b52f87746f7b26d", + "style": "IPY_MODEL_51238e8e08ee447d9d35ce606461b21c", + "tooltip": "" + } + }, + "8aa25d0e52c04fc3b0e15fc7c0c8c91f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "70px" + } + }, + "a555d38bfd004d3b8e92b9b4811a2c4a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a5d249712a144a108e03337b35dcbf94": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8aa25d0e52c04fc3b0e15fc7c0c8c91f", + "placeholder": "​", + "style": "IPY_MODEL_f44c2521b3fb4d31b15c986cef6d60ba", + "value": "
    Queue
    " + } + }, + "b27a8d0aaf0940cbbec88621b54c3883": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_3496c7b4dadf4809916c11a9cd646f83", + "IPY_MODEL_15a512a1335940f6b06c84b685d7c10d", + "IPY_MODEL_c74c7c6bf3c2486b9691080266e6e9f6", + "IPY_MODEL_a5d249712a144a108e03337b35dcbf94", + "IPY_MODEL_4354ac67239c4756a7397d8c7e527d72" + ], + "layout": "IPY_MODEL_295ed96248734a218fc2c2d54a71eb32" + } + }, + "c74c7c6bf3c2486b9691080266e6e9f6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e420744b47f74042a89d13814fee3c5e", + "placeholder": "​", + "style": "IPY_MODEL_66345442f47a4d76b427ff8746f1413b", + "value": "
    Status
    " + } + }, + "cf5b7e6af6ac45489aae3ba2ae2f444a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e420744b47f74042a89d13814fee3c5e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "95px" + } + }, + "e627d1f7f3d849ad8585b00c480f7e45": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f44c2521b3fb4d31b15c986cef6d60ba": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/atoms-computation.ipynb b/translations/ja/ch-states/atoms-computation.ipynb new file mode 100644 index 0000000..f5c13c1 --- /dev/null +++ b/translations/ja/ch-states/atoms-computation.ipynb @@ -0,0 +1,850 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 計算の原子" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子コンピューターのプログラミングは、今では誰もが自宅から快適におこなうことができます。\n", + "\n", + "でも、何をどうやってつくるのでしょうか?そもそも量子プログラムとは?量子コンピューターとは何でしょうか?\n", + "\n", + "これらの疑問は、今日の標準のデジタルコンピューターと比較することで回答できます。残念ながら、ほとんどの人は実際にデジタルコンピューターの動作を理解していません。この記事では、まずはデジタルコンピューターの基本原則から見ていきます。その後、量子コンピューティングの話にスムーズに移行できるよう、量子コンピューティング上での計算を行うときと同じツールを使用して実行します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 目次\n", + "\n", + "1. [情報をビットに分割する](#bits) \n", + "2. [ダイアグラムを使った計算](#diagram) \n", + "3. [はじめての量子回路](#first-circuit) \n", + "4. [例:加算回路を作成する](#adder) \n", + " 4.1 [入力をエンコードする](#encoding) \n", + " 4.2 [足し算の仕方を思い出してみよう](#remembering-add) \n", + " 4.3 [Qiskitで足し算を行う](#adding-qiskit) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下は、このページのコードを使用するために必要なPythonのコードです。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, assemble, Aer\n", + "from qiskit.visualization import plot_histogram" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1. 情報をビットに分割する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "最初に知っておくべきことは、ビットの概念です。これらは、世界で最も単純なアルファベットになるように設計されています。 0と1の2文字だけで、あらゆる情報を表現できます。\n", + "\n", + "例えば数字もそのひとつです。ヨーロッパ言語では、通常、数字は0、1、2、3、4、5、6、7、8、9の10桁の文字列を使用して表されます。この数列の各数字は、10のべき乗が含まれる回数を表します。たとえば、9213と書くと、\n", + "\n", + "\n", + "$$ 9000 + 200 + 10 + 3 $$\n", + "\n", + "\n", + "\n", + "または、10の累乗を強調する方法で表現されます。\n", + "\n", + "\n", + "$$ (9\\times10^3) + (2\\times10^2) + (1\\times10^1) + (3\\times10^0) $$\n", + "\n", + "\n", + "通常、このシステムは数10に基づいて使用しますが、他の数に基づいたシステムも同様に簡単に使用できます。たとえば、2進数システムは2に基づいています。これは、2つの文字0と1を使用して、数値を2のべき乗の倍数として表現することを意味します。たとえば、9213は10001111111101になります。\n", + "\n", + "\n", + "$$ 9213 = (1 \\times 2^{13}) + (0 \\times 2^{12}) + (0 \\times 2^{11})+ (0 \\times 2^{10}) +(1 \\times 2^9) + (1 \\times 2^8) + (1 \\times 2^7) \\\\\\\\ \\,\\,\\, + (1 \\times 2^6) + (1 \\times 2^5) + (1 \\times 2^4) + (1 \\times 2^3) + (1 \\times 2^2) + (0 \\times 2^1) + (1 \\times 2^0) $$\n", + "\n", + "\n", + "ここでは、10、100、1000などではなく、2、4、8、16、32などの倍数として数値を表現しています。\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "430ebad5fb0c4de59a26b192fb51e0b2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='Toggle the bits below to change the binary number.'), Label(value='Think of a numb…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "34d5df2a36904d3ea77dfa9a59bd9f96", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTML(value='
    Binary   Decimal\\n 00000 = 0
    ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import binary_widget\n", + "binary_widget(nbits=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "バイナリ文字列として知られるこれらのビット文字列は、単なる数値以上のものを表すために使用できます。たとえば、ビットを使用してテキストを表現する方法があります。使用する任意の文字、数字、または句読点について、[この表](https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/network/conversion_table.html)を使用して、最大8ビットの対応するストリングを検索できます。変換コードは任意に定義されたものですが、広く合意された標準になっており、この記事をインターネット経由で送信するのにも使われています。\n", + "\n", + "このようにしてすべての情報はコンピューターで表現されています。数字、文字、画像、音声のいずれであっても、すべてバイナリ文字列の形で存在します。\n", + "\n", + "私たちの標準的なデジタルコンピューターのように、量子コンピューターはこの同じ基本的な考え方に基づいています。主な違いは、量子的に操作できるビットの変形である qubits を使用していることです。この教科書の残りの部分では、量子ビットとは何か、それらが何ができるか、どのようにそれを行うかを探ります。ただし、このセクションでは、量子についてはまったく話しません。そのため、量子ビットを通常のビットとして使用します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 練習問題\n", + "1. 好きな数字を考えて、2進法で書いてみてください。\n", + "2. $n$個のビットがあるとしたら、それは何種類の状態になるでしょうか?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2. ダイアグラムを使った計算\n", + "\n", + "量子ビットを使用する場合もビットを使用する場合も、入力を必要な出力に変換するためにそれらを操作する必要があります。少数のビット用の非常に単純なプログラムでは、このプロセスを「回路図」と呼ばれる図で表すと便利です。入力は左側にあり、出力は右側にあり、演算はその間の不可解な記号によって表されます。これらの演算に用いられる記号は、主に歴史的な背景から「ゲート」と呼ばれます。\n", + "\n", + "標準的なビットベースのコンピューターでの回路の例を次に示します。これが具体的に何を意味するかまではわからなくても、これらの回路がどのようなものか、イメージだけをもっていただければ大丈夫です。\n", + "\n", + "![image1](images/classical_circuit.png)\n", + "\n", + "量子コンピューターも基本的には同じ考え方ですが、入力、出力、および演算に使用する記号は異なる表現を使います。上記のビットベースのコンピューターで示した例と同じプロセスを表す量子回路を次に示します。\n", + "\n", + "![image2](images/quantum_circuit.png)\n", + "\n", + "このセクションの残りの部分では、回路の構築方法を説明します。最後に、上記の回路を作成する方法、それが何をするのか、なぜ有用なのかを理解します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3. はじめての量子回路" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子回路を作成するには3つのステップが必要です。最初に入力をエンコードし、次に実際の計算を行い、最後に出力を抽出します。最初の量子回路では、これらの最後の仕事に焦点を当てます。まず、8つの量子ビットと8つの出力を持つ回路を作成します。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "n = 8\n", + "n_q = n\n", + "n_b = n\n", + "qc_output = QuantumCircuit(n_q,n_b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`qc_output` と呼ばれるこの回路は、`QuantumCircuit`を使用してQiskitによって作成されます。数値`n_q`は、回路内の量子ビットの数を定義します。 `n_b`を使用して、最後に回路から抽出する出力ビット数を定義します。\n", + "\n", + "量子回路の出力の抽出は、「測定」と呼ばれる操作を使用して行われます。各測定は、特定の量子ビットに対して特定の出力ビットを出力として与えるように伝えます。次のコードは、8つの量子ビットのそれぞれに「測定」操作を適用します。量子ビットとビットは両方とも0から7までの数字でラベル付けされています(プログラマーがそうするのが好きなため)。コマンド`qc.measure(j,j)`は、回路`qc`に測定値を追加し、量子ビット`j`に出力をビット`j`に書き込むよう指示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "for j in range(n):\n", + " qc_output.measure(j,j)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それでは作成した回路の中身をみてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAG5CAYAAAD4VYzaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de1xUdeL/8fdwEVDwgqgo3lKQcGRQIJUuIpVJq6utm+stVyGXAte2zFZ/uW7f3TZJs1p1d10tTUxpN2+btVarrqJFmeYVIdE2Fy+YShqCqFzm94fKgtxGA2bgvJ6Px3k84Mw5M2/Gkc97PufMwWS1Wq0CAACG4mTvAAAAoP5RAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABuRi7wCoHyaTyS6Pa7Va7fK4AIDqMQMAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAoNYEBQXZOwIAwEYUAJTj5uamcePG6e2331ZGRoYKCgp09epVnT59Wh9++KFmzZqlTp06VdgvJiZGaWlp+tWvfmWH1ACAW2WycqUWQ6jpQkBOTk566qmn9Pzzz6tNmzbVbltcXKw1a9bomWeeUXZ2tmJiYvTmm2/KyclJv/71r/XKK6+UbsvLCwAcEzMAZZSUlGjevHkKCAiQu7u7QkJClJKSosDAQMXFxdk7Xp3x8/PT9u3b9frrr6tNmzbas2ePpkyZorCwMDVr1kxNmjRR165d9eijjyo5OVnFxcUaNWqUDh06pIULF1Y5+AMAHBczAGVMnDhR69ev16xZsxQWFqbU1FT9+c9/1tmzZ/WnP/1JTzzxhL0j3raqZgA6duyo7du364477tCpU6f0xBNP6IMPPqj2vvz8/LR48WINGTJEVqtVJpOpysGflxcAOCZmAK5LTk5WUlKSNmzYoGnTpikqKkozZ85URESEioqKFBYWJkn69ttv9dBDD6lp06YKCQnR3r177Zz89rm6umrDhg2644479MUXXyg4OLjGwV+STp48qbVr16qkpEQmk0klJSXasWNHPSQGANQWCsB1iYmJio6OVmRkZLn1/v7+cnV1VXBwsCQpPj5ed955p3JycjR58mQ9+uijKi4utkfkH+z5559Xnz599J///EeDBw/Wd999Z9N+ZY/5b9++XU5OTnrrrbfk7u5ex4kBALXGCuvx48etkqxLly6tcNvo0aOtvXv3tlqtVmtubq61SZMm1rNnz5be3qVLF+snn3xSa1kk1cvi7e1tLSgosFqtVmtkZKTN+8XExFiLi4utVqvV+txzz1nd3NysaWlpVqvVak1ISKi3/CwsLCwslS+2YgZA0okTJyRJvr6+5dYXFBQoJSWldPr/yJEjat26tXx8fEq3CQ4OVnp6ev2FrSWxsbFyd3fXxo0blZKSYtM+lZ3tf+XKFf3f//2fJCkhIaEOEwMAapOLvQM4ghsDemZmpn70ox+Vrp87d66ys7MVGhoqScrPz1fz5s3L7du8eXPl5eXVWhZrHZ00d/NJgD/5yU8kSUuWLLFp/+o+6vePf/xDZ8+eldlsVkBAgI4cOVJ6W139PACAH4YCIKlbt26yWCyaPXu2vL295efnpzVr1mjjxo2SVDoD0KxZM128eLHcvrm5ufL09Kz3zD+Es7OzevfuLUnavn17jdtXN/hLUlFRkVJTUzV8+HCFhYWVKwAAAMfEIQBduwjO6tWrZTabFR8fr5iYGPn4+Gjy5MlycXGRxWKRJAUEBOjcuXPKyckp3TctLU09e/a0V/Tb4ufnp6ZNm+rkyZM6f/58tdvWNPjfkJaWJkkKDAys9bwAgNrHdQCqMX78eO3fv18HDhwoXTdixAh17txZL7/8slauXKnZs2fryJEjcnZ2tmPSmpU9BNCsWTMNGTJEhYWFWr9+fZX7eHp6KjMzU+3bt6/xIj8Wi0W9evXSgQMHSsuAxCEAAHBUFIBqBAUFqX///nrrrbdK13377bd67LHH9MknnyggIEBJSUnq06ePHVPapqZLAVelZ8+eioqK0p///Ofb2p+XFwA4JgpAFfLy8tSiRQv98Y9/1JQpU+wd5we73QLwQ/HyAgDHRAEwCAoAAKAsTgIEAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIP4YkEHczufxZ8y59pcCX54eV+5rAEDDxwwAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAbnYOwBQHZPJVO+PabVa6/0xAaC+MQMAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA+JjgGg0fH19dddddyk4OFheXl66evWqMjMz9eWXX+qrr76qdJ8ZM2bo0qVLWrBgQT2nBQD7ogCgwRsyZIimTJmiwYMHV7lNenq6Fi1apDfffFOXL1+WdG3wT0xMVHFxsT7++GMdPny4viIDgN1RAMooKSnRa6+9psWLF+v48eMKDAzUggULFBcXp8jISC1ZssTeEVFG+/bt9de//lXDhg2TJBUUFOizzz7T3r17lZOTIw8PD/Xq1Ut33323evbsqYULF+qXv/ylYmJiFBkZqcTERJWUlCg2NpbBH4DhUADKiI2N1fr16zVr1iyFhYUpNTVVY8aM0dmzZzV16lR7x0MZZrNZmzdvlq+vry5cuKA//OEPWrZsmc6fP19hWxcXFw0fPly/+93vZDab9cknn8jJyUklJSWKiYnRihUr7PATAIB9cRLgdcnJyUpKStKGDRs0bdo0RUVFaebMmYqIiFBRUZHCwsIkSS+88IJ69uwpJycnrVmzxs6pjalLly6lg/+2bdvUq1cvvfrqq5UO/pJUVFSktWvXKiwsTDt27JCTk5OsVqv+9Kc/MfgDMCwKwHWJiYmKjo5WZGRkufX+/v5ydXVVcHCwJCkgIEDz589X37597RHT8Ewmk9566y35+vpq06ZNio6O1smTJ23a95lnntF9992nkpISmUwmPfbYY/L19a3jxADgmCgAkk6cOKG0tDSNHDmywm1ZWVkym81yc3OTJD322GMaNGiQ3N3d6ySLyWRymKVsJnvlu9mECRMUFRWlM2fOaMyYMbpy5YpNz+uNE/5uTPtv3LhR3t7eev311x3634CFhYXlVhdbUQB0rQBIqvBusKCgQCkpKaXT/7C/p59+WpL03HPPKScnx6Z9bh78V6xYoSeeeEKFhYUaOXKk/Pz86jIyADgkCoAkHx8fSVJmZma59XPnzlV2drZCQ0PrLYvVanWYpWwme+UrKzw8XCEhIfr222/1t7/9zabns7LBX7pW+tauXStnZ2dNnDjRYf8NWFhYWG51sRWfApDUrVs3WSwWzZ49W97e3vLz89OaNWu0ceNGSWIGwEHcfffdkqQPPvhAV69erXH7qgb/G9auXavRo0eX3i8AGAkzAJKcnJy0evVqmc1mxcfHKyYmRj4+Ppo8ebJcXFxksVjsHRGSevfuLUn68ssva9y2psG/7P306dOndoMCQAPADMB1PXr00NatW8utGz9+vIKCguTh4VG6rrCwUMXFxSopKVFhYaEuX74sNze3WzrxArfn7Nmz2rt3b40X7XnqqadqHPwl6dSpU9q/f79yc3PrIi4AODQKQDV2796t/v37l1v3i1/8QklJSZKkHTt2SJK++eYbde3atb7jGc706dM1ffr0GrfbvHmzsrOzNWPGjGo/53/lypXSWQUAMBoOAVQhLy9PmZmZFU4AXL58eYUTLhj8HUt6erp69OjBRX4AoBrMAFTB09NTxcXF9o6B25SXl2fvCADg0JgBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCCuAwCHdit/2UqSZsxZIkl6eXpcua8BAOUxAwAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBALvYOADQ2JpPJLo9rtVrt8rgAGiZmAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFADAAZhMJrVq1Ure3t5ycan507mRkZH1kApAY0YBAOykffv2mjVrllJSUpSbm6vvvvtOOTk5ysvL065du/Tqq6/qzjvvrLDf/PnztW3bNk2ZMsUOqQE0FhSAMkpKSjRv3jwFBATI3d1dISEhSklJUWBgoOLi4uwdD41E8+bNtXjxYmVlZen3v/+9BgwYIE9PT124cEHfffed3NzcFB4erqlTpyojI0MffPCBOnfuLOna4P/UU0/pypUr+vrrr+38kwBoyLgSYBmxsbFav369Zs2apbCwMKWmpmrMmDE6e/aspk6dau94aAT69u2rNWvWqFOnTiosLNTq1auVlJSknTt36ty5c5IkLy8vhYaGatSoURo/fryGDBmigwcP6tNPP9XDDz+sK1euaMSIEdq4caOdfxoADRkzANclJycrKSlJGzZs0LRp0xQVFaWZM2cqIiJCRUVFCgsL05UrVzRx4kT5+fmpZcuWuv/++5WRkWHv6Ggg+vfvry1btqhTp07auXOnLBaLfvazn+mf//xn6eAvSRcvXlRKSooSEhLUvXt3rV27Vs2bN9fDDz+swsJCBn8AtYICcF1iYqKio6MrnFzl7+8vV1dXBQcHq6ioSP7+/vriiy+Uk5OjBx98UKNGjbJTYjQkPj4+eu+99+Tp6alVq1bp3nvv1VdffVXjfmfOnNHJkydLv3dyclJ2dnZdRgVgEBQASSdOnFBaWppGjhxZ4basrCyZzWa5ubmpWbNm+s1vfiM/Pz85OztrypQpOnjwoC5fvmyH1GhI/vSnP6lt27baunWrJkyYoKKiIpv2K3vM//3335ezs7OWL18uV1fXOk4MoLGjAOhaAZAkX1/fcusLCgqUkpKisLCwSvdLTU1V165d5e7uXmtZTCaTwyxlMzliPkfNfLPg4GCNGjVK+fn5io2NVXFxsU2vhbKD/4gRIzR69GgdPXq09NCBI792WFhY7LfYigKga9OzkpSZmVlu/dy5c5Wdna3Q0NAK+5w/f16TJ0/WSy+9VC8Z0XAlJCRIkpYtW6Zjx47ZtM/Ng//GjRt16dIlzZkzR5I0efLkuooLwCAoAJK6desmi8Wi2bNna8WKFdqyZYvi4+O1bNkySaowA1BQUKBhw4Zp1KhRGjt2bK1msVqtDrOUzeSI+Rw1882GDh0qSXrzzTdteg1UNvjfkJycrEuXLikiIkLe3t4O+9phYWGx32IrCoCunVi1evVqmc1mxcfHKyYmRj4+Ppo8ebJcXFxksVhKty0qKtLPfvYzBQQE8O4fNWrXrp06duyo3NxcHTx4sMbtqxv8JenSpUvau3evJFU6MwUAtqIAXNejRw9t3bpV+fn5ysrK0osvvqiDBw8qKChIHh4epdtNmjRJJSUlWrJkiR3ToqHo1q2bJCkjI6PGZl7T4H9Denq6JKl79+61GxaAoXAhoGrs3r1b/fv3L/3+v//9r5KSkuTu7q6WLVuWrk9PTy+9UhtQ1qFDhxQZGamCgoJqt+vQoYNGjx5t00V+XnvtNSUnJ9v0MUIAqAoFoAp5eXnKzMwsPYFLkrp06XJLx1eA3Nxcbd++vcbtTp06paioKHXu3FkfffRRtdt+9dVXDP4AfjAKQBU8PT1t/rgWUBvS09NLp/cBoK5xDgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAAABgQBQAAAAMiAIAAIABUQAAADAgLgQE1LLbuVrkjDnX/rbEy9Pjyn0NAHWFGQAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADcrF3AACOwWQy1ftjWq3Wen9MANcwAwAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAAD4mOAAG6JyWTSXXfdpbvuuktms1lNmzbV5cuXlZGRod27d+vzzz9XcXFxuX2cnZ21YsUK7dy5UwsWLLBTcgBlUQAA2KRJkyZKSEhQQkKCAgICqtwuKytLixcv1vz585Wfny9nZ2e9/fbbGjNmjIYMGaK//e1vOnPmTD0mB1AZCkAZJSUleu2117R48WIdP35cgYGBWrBggeLi4hQZGaklS5bYOyJgF+Hh4Vq+fLnMZrMk6fjx49qyZYv27dunCxcuyMvLSxaLRVFRUfL399dLL72kSZMmlS5jxoxRbm6uoqOjGfwBB0EBKCM2Nlbr16/XrFmzFBYWptTUVI0ZM0Znz57V1KlT7R0PsIsf//jHWr16tdzc3HT48GFNnz5d77//vkpKSipsazKZ9OCDD2rOnDnq06ePNm3aJCcnJ+Xm5mrw4MH6/PPP7fATAKgMJwFel5ycrKSkJG3YsEHTpk1TVFSUZs6cqYiICBUVFSksLEySNG7cOLVr104tWrRQ37599dlnn9k5OVB37r333tLBf/Hixerdu7fee++9Sgd/6dqlfTdt2qSIiAilp6fLyclJVqtVL774IoM/4GAoANclJiYqOjpakZGR5db7+/vL1dVVwcHBkqSZM2fq+PHj+v777/XCCy/opz/9qT3iAnWuWbNmWrFihdzc3LRw4UI9+eSTunz5co37OTs766233lLPnj11+fJlmUwmPffcc/Lx8amH1ABsRQGQdOLECaWlpWnkyJEVbsvKypLZbJabm5skqWfPnmrSpImsVqtcXV11+vRpm34p2spkMjnMUjaTI+ZrLJkdJffNZs6cqTvuuEN79+61+RBY2RP+cnNzdf/992vLli1q27atXn75ZYd+vbOwNJbFVhQAXSsAkuTr61tufUFBgVJSUkqn/28YN26cPDw8NHjwYCUkJMjd3b3esgL1wd3dXXFxcZKkhIQEFRUV1bjPzYP/4MGD9dlnnyk+Pl7Stf833t7edZobgO0oAFLp1GRmZma59XPnzlV2drZCQ0PLrV+1apUuXryof/zjH+rfv3+tZrFarQ6zlM3kiPkaS2ZHyV3W0KFD1bp169LP9dekssH/xn5HjhzRhx9+KHd3d40ePdphX+8sLI1lsRUFQFK3bt1ksVg0e/ZsrVixQlu2bFF8fLyWLVsmSRVmACTJ1dVVw4cP1yuvvFKhOAAN3Y1iu2HDhhq3rW7wv+HG/fTr16/2wwK4LRQASU5OTlq9erXMZrPi4+MVExMjHx8fTZ48WS4uLrJYLFXue/XqVR07dqz+wgL1ICQkRJK0Z8+earezZfAvez837heA/XEdgOt69OihrVu3lls3fvx4BQUFycPDQ5KUk5Ojf//73xoyZIhcXFz0xhtv6NSpUxUOEQAN3Z49e1RYWKivv/662u3mz59f4+AvXTuZ9qOPPtJ///vfuogL4DZQAKqxe/fuCsf4Fy5cqEmTJsnJyUm9evXSP//5Tz7ehEZn+vTpNm33l7/8RQ899JB+/vOfV3uuwOnTp/Xwww/XVjwAtYACUIW8vDxlZmYqISGhdF3r1q21fft2O6YCHEt6erqCgoIq/PEfAI6PAlAFT09PfqkBNuD/CdAwcRIgAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAXEdAACSdEt/RUySZsxZIkl6eXpcua8BNAzMAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABiQi70DAMDtMplMdnlcq9Vql8cFahMzAAAAGBAFAAAAA6IAAABgQBQAAAAMiAIAAIABUQAAADAgCgAAQ2ndurXMZrN69uwpb2/varf18PDQiBEj6ikZUL8oAAAavf79+2v58uU6duyYzp07p7S0NB06dEg5OTn65ptv9NZbb6lfv37l9vHw8NB7772ntWvXKi4uzk7JgbpDASijpKRE8+bNU0BAgNzd3RUSEqKUlBQFBgbyCwBogPz9/ZWSkqLPPvtMEyZMUJcuXZSfn6/09HSlp6crPz9fXbt21cSJE/X5559r69at6t69e+ngP2jQIJ0+fVrbt2+3948C1DquBFhGbGys1q9fr1mzZiksLEypqakaM2aMzp49q6lTp9o7HoBbMHbsWL3xxhtq2rSpzp07pzfeeEPJyclKT09XSUmJJMnJyUlms1njxo3TpEmTNHDgQB04cEBff/21goODdfr0aUVFRemrr76y808D1D5mAK5LTk5WUlKSNmzYoGnTpikqKkozZ85URESEioqKFBYWVm77v//97zKZTFqzZo2dEgOoys9//nOtWrVKTZs21YoVK9SjRw89//zzSktLKx38pWuzfgcPHtSMGTMUEBCgd955R02bNlVwcLAuXLjA4I9GjQJwXWJioqKjoxUZGVluvb+/v1xdXRUcHFy67tKlS3rppZdkNpvrOyaAGlgsFr355puSpF//+teaMGGCzp8/X+N+ly9flo+PT+n3TZs2lbOzc53lBOyNAiDpxIkTSktL08iRIyvclpWVJbPZLDc3t9J1iYmJmjhxYrlfFgDsz9nZWcuXL5erq6sWLVqkV155xab9bj7m/+6776pJkyZavny5nJz4NYnGiVe2rhUASfL19S23vqCgQCkpKeWm/48dO6YNGzZoypQpdZLFZDI5zFI2kyPmayyZG2puR8h8sx//+Mfq06ePjh07pueee86m/3M3D/5RUVGaNGmSjh8/rvDwcP3oRz9y6P+nLCw3L7aiAEil7+QzMzPLrZ87d66ys7MVGhpaum7q1Kl68cUX5erqWq8ZAdQsISFBkvT6668rPz+/xu0rG/y/+uorXbx4UX/84x/L3SfQ2FAAJHXr1k0Wi0WzZ8/WihUrtGXLFsXHx2vZsmWSVDoD8O9//1u5ubkaNmxYnWWxWq0Os5TN5Ij5GkvmhprbETKX5ebmpoEDB6qkpEQrVqyo8f9aVYP/DUlJSZKk+++/v0Lht/dzz8JS3WIrCoCufRRo9erVMpvNio+PV0xMjHx8fDR58mS5uLjIYrFIkrZv367PP/9cPj4+8vHx0aeffqrY2FglJiba+ScAEBwcLFdXV2VkZOjChQvVblvT4C9JOTk5Onz4sNzc3DjhF40S1wG4rkePHtq6dWu5dePHj1dQUJA8PDwkXZv+nzRpUuntI0eOVExMjEaPHl2vWQFU1LlzZ0nS4cOHq93OlsH/hsOHDyswMFBdunTRvn37aj0zYE8UgGrs3r1b/fv3L/2+efPmat68een3bm5u8vb2LrcOgH18/PHHCgwM1OXLl6vdzs/PTyEhITZd5GfKlCl67rnnSk8UBhoTCkAV8vLylJmZWe0JQNu2bau/QACqlZ+fX+FE3socPXpUUVFRKikpqfEiP1lZWbUVD3A4FIAqeHp6qri42N4xANSB9PR0e0cA7I6TAAEAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyI6wAAaLBu5Q+f3DBjzpJy3788Pa624gANCjMAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABuRi7wAAYDQmk6neH9Nqtdb7Y8KxMQMAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAAEAj4+rqau8IaAC4DgAAOCgvLy9FR0crPDxcQUFBcnd3V35+vtLS0rRr1y59/PHHunLlSrl9WrZsqX/9619auXKlFixYYKfkaAgoAADgYHx9fTVr1iyNHz9eXl5eFW5/5JFHJEnnzp3T0qVLNXv2bOXm5qply5batGmTwsPD1apVK7355pu6dOlSfcdHA8EhgDJKSko0b948BQQEyN3dXSEhIUpJSVFgYKDi4uLsHQ+AAYwePVqHDh1SQkKCvLy8tGPHDv3ud7/TT3/6Uw0ePFijRo1SYmKi9uzZIx8fH02fPl1paWkaMWJE6eB/9OhRRUVFMfijWswAlBEbG6v169dr1qxZCgsLU2pqqsaMGaOzZ89q6tSp9o4HoJGbMWOGEhMTJUkfffSRpk2bpkOHDlXY7t1339Xzzz+vfv36af78+erXr5/WrFkjk8lUOvifOHGivuOjgWEG4Lrk5GQlJSVpw4YNmjZtmqKiojRz5kxFRESoqKhIYWFhkqSBAwfKw8NDnp6e8vT01MSJE+0bHECjEBMTo8TERJWUlOiXv/ylHn744UoH/7J27typIUOG6NSpUzKZTLJarfrd737H4A+bUACuS0xMVHR0tCIjI8ut9/f3l6urq4KDg0vXvf3228rLy1NeXp6WL19ez0kBNDZdunTR/PnzJUlxcXH685//bNN+LVu21EcffaQOHTrou+++k8lk0pw5c9SyZcu6jItGggIg6cSJE0pLS9PIkSMr3JaVlSWz2Sw3N7d6yWIymRxmKZvJEfM1lswNNXdDzFw2qz0z32zevHny8vLSu+++q6VLl9r0u6LsCX9Hjx5Vnz599Mknn6hDhw564YUXHOLnZLHPYisKgFQ6Xebr61tufUFBgVJSUkqn/2+Ij49X27ZtNWTIEB05cqTecgJofPz8/PSTn/xEhYWFevrpp23a5+bBPyoqSllZWZoyZYqka4cTmjZtWpex0QhQACT5+PhIkjIzM8utnzt3rrKzsxUaGlpu3bFjx3Ts2DGFhoZq2LBhKioqqrUsVqvVYZaymRwxX2PJ3FBzN8TMZbPaM3NZY8aMkbOzs9atW6fs7Owaf0dUNvjfeBOzb98+paamqkWLFho2bJjdf04W+yy2ogBI6tatm5ZSJoIAABndSURBVCwWi2bPnq0VK1Zoy5Ytio+P17JlyySp3AxA37591axZMzVt2lS///3vlZOTU6E4AICt+vbtK0n68MMPa9y2usH/hhv3c9ddd9V+WDQqFABJTk5OWr16tcxms+Lj4xUTEyMfHx9NnjxZLi4uslgsle53q8dbAOBmN04w3rt3b7Xb2TL4l72fsicuA5XhOgDX9ejRQ1u3bi23bvz48QoKCpKHh4ck6cKFC9q1a5cGDBggq9Wq2bNnq2XLlurRo4c9IgNoBNatW6f27dvX+NG9lStX1jj4S9Lhw4e1bNkyZWRk1EVcNCIUgGrs3r1b/fv3L/2+sLBQM2bMUGZmppo0aaJ+/fppw4YNcnHhaQRwe2bOnGnTdr/+9a/VqlUrjRo1qtqycPToUT3++OO1FQ+NGCNXFfLy8pSZmamEhITSdW3atNGXX35px1QAjCo9PV333HOPvWOgEaEAVMHT01PFxcX2jgEAQJ3gJEAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAAD4joAAFDPbuUvtknSjDlLJEkvT48r9zXwQzADAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAu9g4AAHB8JpPJLo9rtVrt8rhGwAwAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIiPAQIAap2rq6vMZrN8fHxktVp1/PhxHTlypMqP9fn5+WnQoEFavnx5/QY1MAoAAKBWuLm5aeTIkYqLi1Pfvn3l5uZW7vaLFy9qy5YtWrRokTZt2lRaBvz8/LR161YFBATo6tWrSk5Otkd8w+EQQBklJSWaN2+eAgIC5O7urpCQEKWkpCgwMFBxcXH2jgcADmvQoEHKzMzU22+/rfvuu09ubm46fPiwNm/erH//+986ceKEvLy89Mgjj+jjjz/WZ599pjvvvLPc4P/ll1/qww8/tPePYhjMAJQRGxur9evXa9asWQoLC1NqaqrGjBmjs2fPaurUqfaOBwAO6eWXX9b06dMlSQcPHtT8+fO1evVq5ebmltuuQ4cOmjBhgn75y1+qX79+2rt3ry5cuCBfX199+eWXGjRokM6fP2+PH8GQmAG4Ljk5WUlJSdqwYYOmTZumqKgozZw5UxERESoqKlJYWJika5elfOGFF9S+fXs1b95cDz74oJ2TA4D9vPrqq5o+fboKCws1Y8YM9enTR0uXLq0w+EvSqVOnlJiYqKCgIL3zzjtyd3eXr6+vvvnmGwZ/O2AG4LrExERFR0crMjKy3Hp/f3+5uroqODhY0rUX+969e7Vv3z75+Pho//799ogLAHY3YsQITZ06VVevXtUjjzxi8/S9l5eXwsPDS7/39fVVmzZtKAD1jBkASSdOnFBaWppGjhxZ4basrCyZzWa5ubmpuLhYr7/+upYsWaJ27drJ2dlZoaGhdkgMAPbVsmVLLVq0SJL0zDPP2Dz433zM/5133pGHh4eWLl1al3FRCQqArhUA6VoLLaugoEApKSml0/9ZWVkymUxauHCh2rRpo169eukf//hHrWYxmUwOs5TN5Ij5Gkvmhpq7IWYum7UhZrbnc32zxx9/XG3bttWOHTtKi0BNbh78Bw0apISEBJ05c0b33nuv7rvvvgb57+Noi60oAJJ8fHwkSZmZmeXWz507V9nZ2aXv8k+dOqWTJ0+qoKBAJ06c0KJFizRhwgQdO3asviMDgF3Fx8dLunYCoC1/sreywf/8+fO6cOGC/vrXv5a7T9QPCoCkbt26yWKxaPbs2VqxYoW2bNmi+Ph4LVu2TJJKZwCaNm0qSfrNb34jNzc33XfffYqMjNS2bdtqLYvVanWYpWwmR8zXWDI31NwNMXPZrA0xsz2f67K6dOmi7t2769y5c/roo49q/L1W1eB/w4oVKyRJDzzwQIP893G0xVYUAElOTk5avXq1zGaz4uPjFRMTIx8fH02ePFkuLi6yWCySpICAALm6uto5LQDY1403Rbt27VJJSUm129Y0+EvS119/rZycHLVt21YdO3ass9wojwJwXY8ePbR161bl5+crKytLL774og4ePKigoCB5eHhIkjw9PTV8+HAlJiaqsLBQn3/+ubZv366BAwfaNzwA1CM/Pz9J1wbumrarafC/4ejRo5KuXSsA9YOPAVZj9+7d6t+/f7l1ixYt0sSJE9WqVSv5+flp+fLl6tq1q30CAoAd/OUvf1FSUpKKi4ur3a558+Zq0aKFTRf5GTx4sIqLi5Wfn1/bcVEFCkAV8vLylJmZqYSEhHLrfXx89MEHH9gpFQDYX3FxcaUX+rlZRkaGBgwYoDNnztT4Gf/vv/++tuLBRhSAKnh6etbYbgEA1Tt8+LC9I6AKnAMAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAAABgQFwHAABQo1v5IzOSNGPOEknSy9Pjyn0Nx8EMAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAgAG52DsAAAB1xWQy1ftjWq3Wen/M28EMAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAFAAAAAyIAgAAwG1q0aKFvSPcNq4DAAAwPH9/fw0fPlzh4eEKCAhQkyZNdPHiRR04cEA7d+7UunXrlJubW26fwMBAbd26VXPmzNH8+fPtlPz2UQAAAIYVGhqq2bNna/DgwZXefvfdd+vJJ5/UwoULlZSUpN/+9rf67rvvFBgYqG3btsnX11dDhw7VwoULVVJSUs/pfxgOAZRRUlKiefPmKSAgQO7u7goJCVFKSooCAwMVFxdn73gAgFri5OSkF198UTt37tTgwYNVUFCgpKQkPf744+rXr58sFouioqL07LPPauvWrfL09NTkyZN16NAhxcXFlQ7+mzdv1rBhwxrc4C8xA1BObGys1q9fr1mzZiksLEypqakaM2aMzp49q6lTp9o7HgCgFjg7O2vlypUaPXq0SkpK9Prrr+vFF1/U+fPnK2y7bds2vfbaazKbzfrLX/6iAQMG6K9//atMJlPp4F9QUGCHn+KHowBcl5ycrKSkJG3btk2RkZGSpKioKO3Zs0fr1q1TWFiYsrKy1LNnz9J9rFarLl26pN27dyssLMxe0QEAt+CVV17R6NGj9f333+uRRx7Rtm3batzn0KFDeuKJJ7Rr1y55enrKarXqtddea7CDv8QhgFKJiYmKjo4uHfxv8Pf3l6urq4KDg9W5c2fl5eWVLu+88446d+6s0NBQO6UGANyKAQMG6JlnnlFhYaGGDBli0+Av/e+EP09PT33zzTcymUxatGiRvLy86jZwHaIASDpx4oTS0tI0cuTICrdlZWXJbDbLzc2twm2rVq3S2LFja/WvTZlMJodZymZyxHyNJXNDzd0QM5fN2hAzN6Tn2lEy32zBggWSpJdeekmffvpphdsrU/aEv82bN8tisWjXrl3q0qWLnnvuOYd7TdmKAqBrBUCSfH19y60vKChQSkpKpdP7Fy9e1Pvvv69x48bVS0YAwA9zzz33KCQkRN9++60SExNt2ufmwX/YsGHKy8vTs88+K0n6xS9+IVdX17qMXWcoAJJ8fHwkSZmZmeXWz507V9nZ2ZVO8a9bt04BAQHq1atXrWaxWq0Os5TN5Ij5Gkvmhpq7IWYum7UhZm5Iz7WjZC5rzJgxkqSlS5fq6tWrFV4LN6ts8L9xzH/Hjh06dOiQfH19NXDgQId6TdmKkwAldevWTRaLRbNnz5a3t7f8/Py0Zs0abdy4UZIqnQFYtWoV7/4BoAEJDw+XJG3evLnGbasb/G/YvHmzzGazwsPDtWnTpjrJXJeYAdC1z4OuXr1aZrNZ8fHxiomJkY+PjyZPniwXFxdZLJZy258+fVrbtm0rbZMAAMdnNpslSfv37692O1sGf0nat29fufttaJgBuK5Hjx7aunVruXXjx49XUFCQPDw8yq3/29/+prvvvludOnWqz4gAgB9gzpw58vDw0IULF6rcxmQy6e9//3uNg78k7d69W3/4wx9qLBSOigJQjd27d6t///4V1q9atYorAwJAA/OHP/yhxm2sVqvGjh2r3/zmN3r88cer/Zx/Wlqa0tLSajNivaIAVCEvL0+ZmZlKSEiocNuuXbvskAgAUB/S09M1duxYe8eocxSAKnh6eqq4uNjeMQAAqBOcBAgAgAFRAAAAMCAKAAAABkQBAADAgCgAAAAYEAUAAAADogAAAGBAXAcAANBo3cpfx5OkGXOWSJJenh5X7uvGiBkAAAAMiAIAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAAABgQBQAAAAMiAIAAIABUQAAADAgCgAAAAZEAQAAwIAoAAAAGBAFAAAAA6IAAABgQBQA2Ow/h9PUp08f9e7dW3fffbcyMjKq3Hbbtm0ym83y9/fXpEmTVFxcXI9Jb8+UKVPUsWNHubi42DuKzY4fP64HHnhAQUFB6tWrl/7f//t/9o5ks0GDBikkJEQWi0WPPvqocnNz7R3JZgkJCQ3qddK1a1eZzWb17t1bvXv31sGDB+0dqUb5+fmaMGGCAgMDdeedd2rx4sX2jlSjU6dOlT7HvXv3lq+vr37yk5/YO1aVKACw2UfrVio5OVn79u3TxIkT9dvf/rbS7UpKSjRp0iStXr1aR48eVW5urlauXFnPaW/dqFGj9OWXX9o7xi1xcXHRnDlzlJGRoT179ig1NVXvvfeevWPZZM2aNdq/f78OHDigzp0767XXXrN3JJvs2LFD+fn59o5xyz7++GPt27dP+/btU3BwsL3j1OjZZ5+V2WzW4cOHlZGR4dAD6Q0dOnQofY737dunXr16aeTIkfaOVSUKAGxmMplK36V9//33at++faXb7dq1Sx06dFDPnj0lSY8//rjWrl1bbzlv17333qt27drZO8Ytad++vcLDwyVJTZo0kcViUVZWlp1T2aZFixaSrhXG/Px8mUwmOyeq2ZUrVzRjxgzNmzfP3lEatYsXL+r999/X1KlTJV373dO2bVs7p7o12dnZ2r17tx555BF7R6mSyWq1Wu0dAo5h574Mfb43vfT77DM5kqT2bVsr+0yO/vv1Yb3/zptycXWRh0dTpacdUKtWrSrcz9q1a7Vu3TqtWrVKkpSRkaGxY8dq7969tZ750uUreuvdD1V0/RDDzZlvfH3DkKj+8u/qV+19uri4qKioqNazlrX1s7068NV/Sr+vLnf7tq31syEDa7zPnJwc9e7dW5s2bdKdd95Z65nPf39Rb6//l278xqjpuf7ZkIHlvq/MsGHD9Pnnn6tnz5764IMP5OnpWeu539+Sqv9kZZd+fyPrDWUz+nfx05D7+1d5XzNnzlT37t0VGxtbp6+Tk9+e05qNKaXfV/dcm0zShBGD1aJ51c9d165d1apVK1mtVg0dOlQvvPCCXF1dazWz1WrVu//cqtNnz9eYWZJCgrprYP/eld7X/v37NXHiRPXr109ffPGFOnfurPnz56tLly61mlmSMr85oQ+37Sz9vrrcri4uiv3Zw3J3a1Lj/b766qs6ePCgli9fXuuZawszACgVEtRduXn5yj6TU+6XZPaZHJUUF+uL7f/S6LipenJ6ooYNf6TK481Wq7Xcu7m67JhN3d3UvUuHSjOX/Tr7TI6cnZzUrUuHOstyK/qYA3Tuuws25Q7r1aPG+7ty5YoeffRRPf3003Uy+EtSqxZeat+mtU2ZW3g1q3Hwl6QNGzbo9OnTioiIqLNjvOHBgTp99rsKuW+4sf7bs98pPLjq5/rAgQPauXOnYmJi6iRnWR3atpZXMw+bnuuOvm2qHfyla4ct9u7dq08//VRfffVVncxgmEwmhZp72JQ55/z3CjUHVHlfhYWF2rdvn0aMGKE9e/Zo2LBhio2NrfXMkuR//XeCLbkDuvrZNPhL0sqVK/XYY4/VbthaRgFAKXe3Jnrovrsqve3b7OO6crlAPm3bq3OHdnpq8pNKTU2tdNtOnTqVm4Y+fvy4OnbsWCeZJSmqf295NfOocbuhD0TIyUGmmVs291Rkv8rf/ZRl7tFV3WsoLcXFxRo3bpz69OmjZ599trYiVmpwZF81ca3+5DcnJ5OGRFX9Lrri9k6aOHFinb1Tat+2te6yBNa4Xb8+QWrXxrvK2z/99FOlp6frjjvuUNeuXVVcXKyuXbvWycmLJpNJQ+6v+fXq1sRVg+4Lr/H+OnXqJElq1qyZJk2aVOX/3R8q4I6OCvLvXON2A/v3VnOvZlXe3qlTJ3l7e+uhhx6SJI0ePbrOzs9xcnLSjx+IqHG75p7NFNkvxKb7TE9P15kzZ3T//ff/0Hh1igKAcu6yBMq3kl+CXs1b6buzp3Xx+/P68QMR2rx5c+kx/puFh4fr5MmTSk+/djhh6dKlGjFiRJ1ldnNrosED+la7jeXObura0bfOMtyOAf1C1KKaX4LOzk760cCaB9K4uDh5eXnp1Vdfrc14lWru2VRREX2q3SYi1Kw2rVtWu01ubq6ys/83Lb927VqZzeZayViZh+67S25Nqp7ydndrogfvqX4gjY+P16lTp3Ts2DEdO3ZMzs7OOnbsmJo3b17bcSVJ7XxaqV+fyv+P3XD/3aHyata02m3y8/NLS0pxcbHWrl0ri8VSazlvNiQqQs5OVQ8tLZt76r67qn/8du3aqVevXtq9e7ckadOmTXX6+ujWuYN69bij2m0eHthXTap5DZX19ttva9y4cXKq5nlwBI6dDvXOyclJQytpw57NWygyeoTeW7lIQx8epPfff19z586VVHGK39nZWW+88YYeffRRde/eXZ6enho/fnyd5g4N7qEO7SqfcnZxdtbDA/vVeB9PPPGEOnbsqOLiYnXs2FGTJ0+u7ZjlNHF1UXRk1cXl3vBgtW5V/eDy6aefatmyZdq9e3fpRzQXLFhQ21Er5GpZxZRzU3c3PXBPWI338f3332vYsGEKDg6WxWLRvn37NH/+/NqOWsqzmYceuDu0ytsfvCdMzZq619nj364H7w2rcsrZu6WX7gnrVeN9fPvttxowYIAsFossFousVqtmzpxZ21FL+Xi3UERY1YP1wwP7ybWGWSRJWrRokaZMmSKLxaJXX31Vb775Zm3GrJgrqp+cnSsfEju1b6OQnv423Y/VatU777zj8NP/EicBogor1n2s9CP/LbfO1dVF0yb9rMLxxrTMb5T6ZZrG/PgBeXlW/26kLn1zPFuLk9+vsD4qoo8GD6j80Ia9lVitWvT2ezqefabces+mHpoWN8rm44317UDG10resKXC+uGD7lFEaN29U/shioqK9frS1cq5UH7K3se7hZ6OfVQuzs52Sla9T3Yf1AdbPquw/rGfDKrxXau9FFy+oleW/E2XCq6UW9/Fr52eHDfMYT/x8eG2nUrZub/C+vjHhquLX8P6hJAtmAG4Be+9956GDh2qtm3bys3NTV26dNHYsWMbxEU1btWPovpXmMaL7BdSYfAvsVq15dM9ys27pKZ2fgd1R6f2Cg7sVm6dl2fTKs80dgROJlOlxx8fui/cYQd/SQqu5JBK29at1Ld3kJ0S1czFxVk/quTchKH3Rzjs4C9JEX3MauPdoty6bp3byxzQ1T6BbODh7lbp+UQ/fuBuhx38pWtvFjxvOp8oJKh7oxz8JQqATYqKijR69Gg98sgj2r9/v0aMGKFf/epX6tOnj9auXauTJ0/aO2Kt82nVQveE/296sYVXMw3oW/EEmPQjx5R9JkcP3B1a7XG/+vLwwL7lfplHD+hb7bFfR9DZr516l5le9G3jrXAbTlqzJ5PJpKEPRKjsr/KhD1R/7NcR9Azoom6d/3dSZUDXjgrs1smOiWrm7OykIff/rySadK20OPJAKkl3hdypdj7/+5hwaK8e6ti+jR0T1czdrYkGlykuLi62HT5sqDgEYIMnn3xSixcv1i9+8Qu9/vrratbsfyduHT9+XC1btpSXl1etPNaMOUtq5X4AAMb08vQ4m7ZrOBeztpMdO3Zo8eLFio6O1uLFiyu07hsfrwEAoCFhBqAGP/3pT7Vu3Trt27dPISG2fQa0MSkpKVHO+dwKH+sqsVq1cPk6FRYV6ZnHRzrc1O+3586Xm35sCK4WFinvUoG8W9TObFJ9aYjPdV5+gUwmk0Oe+V+dhvhcf3chV17Nmtp05r8jaYjP9a2iANSgefPmat26tb755pt6eTwOAQAAfghbDwE41ts2B3PhwgVdvHhRXbt2tXcUAABqFTMA1Th//ry8vb3Vs2dPHTp0yN5xHEZa5jdauX6TRg2NUp9qrucNAHBczABUo1WrVurevbsyMjK0efPmCrcfPnzYDqns68bn/n28W8gS1N3ecQAAt6lhnZVhB7Nnz9aoUaMUHR2t4cOHy9/fX2fOnFFqaqp69uyp9evX2ztivcq/VCBnJycNcJDP/QMAbg+HAGzw8ccf65VXXtGuXbt0+fJltW3bVn379tXTTz+t++67z97x6p3VapVVcpi/rAcAuHUUAAAADIg5XAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwIAoAAAAGRAEAAMCAKAAAABgQBQAAAAOiAAAAYEAUAAAADIgCAACAAVEAAAAwoP8PWLU5MzbwweUAAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_output.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットは常に出力が ```0```となるよう初期化されます。上記の回路は量子ビットに対して何の操作もしませんので、これらを測定したときに得られる結果もまた```0```です。これは回路を何度も実行し、結果をヒストグラムにプロットすることで確認できます。各量子ビットからの結果は、0番目から各量子ビットにわたって常に00000000であることがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim = Aer.get_backend('aer_simulator') # this is the simulator we'll use\n", + "qobj = assemble(qc_output) # this turns the circuit into an object our backend can run\n", + "result = sim.run(qobj).result() # we run the experiment and get the result from that experiment\n", + "# from the results, we get a dictionary containing the number of times (counts)\n", + "# each result appeared\n", + "counts = result.get_counts()\n", + "# and display it on a histogram\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "何回も実行して結果をヒストグラムとして表示する理由は、量子コンピューターの計算結果にランダム性が存在するためです。この場合は、何も量子的な計算を行っていないため、```00000000```の結果を確実に出力します。\n", + "\n", + "この結果は、量子コンピューターの振る舞いを再現する古典コンピューターである量子シミュレーターから得られていることに注意してください。シミュレーションは少数の量子ビットに対してのみ可能ですが、それでも最初の量子回路を設計する際には非常に便利なツールです。実際の量子デバイスで実行するには ```Aer.get_backend('qasm_simulator')```を使用したいデバイスのバックエンドオブジェクトに置き換えるだけです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. 例:加算回路を作成する\n", + "#### 4.1 入力をエンコードする\n", + "\n", + "次に、異なるバイナリ文字列を入力としてエンコードする方法を見てみましょう。このためには、NOTゲートと呼ばれるものが必要です。これは、コンピューターで実行できる最も基本的な操作です。ビット値を単純に反転します: ```0```は```1```になり、```1```は```0```になります。量子ビットの場合、NOTの仕事をする ```x```と呼ばれる操作です。\n", + "\n", + "以下では、エンコードのジョブ専用の新しい回路を作成し、`qc_encode`と呼びます。ここでは量子ビットの数のみを指定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_encode = QuantumCircuit(n)\n", + "qc_encode.x(7)\n", + "qc_encode.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果の抽出は、以前つくった`qc_output`回路を使用して実行できます。 `qc_encode + qc_output`で2つの回路をつなぎあわせれば、最後に追加された出力を抽出することができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi0AAAG5CAYAAABC9gS6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deVxVdeL/8fdlR3FDcsMtFBSRi4IZOhqRuaVpi6RmTm6haM6UOT9tzJrJxFzaF9NWndRvuZvjtLiAqVnibjrSZmhRuSuCC9z7+wNhQAWuBRw++no+Hp/HA8895943R7i8+ZwFm9PpdAoAAKCCc7M6AAAAgCsoLQAAwAiUFgAAYARKCwAAMAKlBQAAGIHSAgAAjEBpAQAARqC0AAAAI1BaAACAESgtAADACJQWAABgBEoLAAAwAqUFAAAYgdICAACMQGkBAABGoLQAAAAjUFoAAIARKC0AAMAIlBYAAGAESgsAADACpQUAABiB0gIAAIxAaQEAAEagtAAAACNQWgAAgBEoLQAAwAiUFgAAYAQPqwMAxbHZbOX+mk6ns9xfEwBQMmZaAACAESgtAADACJQWAABgBEoLAAAwAqUFAAAYgdICAACMQGnBda1WrVry9/e3OgYAwAWUFlwTWrZsqalTpyopKUlHjx7V+fPnlZGRoW3btunNN99U9+7dL7vnS61atbRu3TqtWbOG4gIABrA5uZMWKrCSbi4XFhamV155RbGxsSU+1/fff69x48Zp0aJF+YWlRYsW2r17tzp16qTDhw9L4uZyAFBRMdNSgMPh0IwZMxQcHCwfHx9FREQoOTlZzZo1U3x8vNXxcInHHntM27ZtU2xsrE6dOqXXXntNd9xxh+rWrSsvLy9Vq1ZNHTp00IQJE/TDDz8oKChICxcu1NKlS5WcnHzFwgIAqLiYaSlg0KBBWrp0qSZOnKioqCht2rRJr732mg4fPqxXX31Vw4cPtzridaeomZYpU6Zo/PjxkqQ33nhD48aN06lTp4p8Hjc3Nz300EN67rnnVLlyZUnS119/rdjY2MsKC98SAFAxMdNy0fz58zVnzhytWLFCY8eOVWxsrCZMmKB27dopOztbUVFRkqRff/1VXbp0UaVKlRQREaHt27dbnPz6M2jQII0fP14XLlxQXFycEhISii0sUu4s2tKlS5Wenp6/LDU1lRkWADAIpeWiKVOmqFu3boqJiSm0vGnTpvL09FR4eLgkKSEhQc2bN9fRo0c1atQo9enTRzk5OVZEvi7Vr19fL774oiRp+PDhWrRokUvb5Z3D0rRpU+3fv19nzpzR3XffrXvvvbcs4wIASpMTzoMHDzolOd9+++3LHuvXr5+zVatWTqfT6Tx16pTTy8vLefjw4fzHGzVq5NywYUOpZZHEKGa8/vrrTqfT6Vy2bJnL29SqVcv59ddfO51Op3PXrl3OG264wTlixAin0+l0fvvtt06bzWb558VgMBjX83AVMy2SDh06JEmqU6dOoeVZWVlKTk7OPzT0zTffqGbNmgoICMhfJzw8XHv37i2/sNexqlWrauDAgZKkxx9/3KVtirpKaPbs2Tpw4ICaNGmirl27lmVsAEAp8bA6QEWQV0JSU1N1xx135C+fNm2a0tPTFRkZKUk6c+aMqlatWmjbqlWrKiMjo9SyODkJtJCCJ+Lefvvt8vPz04YNG7Rv374Sty3usmaHw6G33npLzzzzjO6++259/PHH+dvxfwAAFROlRVJQUJDsdrsSExPl7++vwMBALVq0SKtWrZKk/JmWypUr6/Tp04W2PXXqlPz8/Mo98/Uo7/8hOTm5xHWLKyx51q9fX+h5AQAVG4eHlHs57MKFCxUWFqaEhAQNHjxYAQEBGjVqlDw8PGS32yVJwcHBOnLkiI4ePZq/7Z49e9SiRQurol9XQkJCJOXu8+K4UlgKPk+zZs1KPywAoNQx03JRSEiI1q1bV2jZwIEDFRoaKl9fX0lSlSpV1KNHD02aNEnPPvus3n//fdlsNkVHR1sR+brzwgsvaNmyZdq4cWOx640cOdKlG8edPHlSf/7zn5WZmVkWcQEApYybyxUjNDRU0dHRevfdd/OX/frrr3rggQe0YcMGBQcHa86cOWrdurWFKa9tJd3Gv6htJk6cqJkzZ/6u+7DwLQEAFROlpQgZGRmqVq2aXnzxRY0ePdrqONet31Na/ii+JQCgYqK0oEKjtAAA8nAiLgAAMAKlBQAAGIHSAgAAjEBpAQAARqC0AAAAI1BaAACAESgtAADACNzGHxXa1d4zZfzU2ZKkZ8fFF/oYAGA+ZloAAIARKC0AAMAIlBYAAGAESgsAADACpQUAABiB0gIAAIxAaQEAAEagtAAAACNQWgAAgBEoLQAAwAiUFgAAYARKCwAAMAKlBQAAGIHSAgAAjEBpAQAARvCwOgBwrbHZbJa8rtPptOR1AaC8MNMCAACMQGkBAABGoLQAAAAjUFoAAIARKC0AAMAIlBYAAGAELnkGLOTl5aWIiAi1adNGgYGBstlsOnLkiLZt26atW7cqIyPjsm2CgoL04osvatCgQTp27JgFqQHAGpQWwAKBgYEaPXq0hg4dqoCAgCuuk5mZqfnz5+ull17Snj17JOUWlqSkJDVo0ECJiYkaMWJEecYGAEtxeKgAh8OhGTNmKDg4WD4+PoqIiFBycrKaNWum+Ph4q+PhGjFs2DDt3btX48aNU0BAgPbv36+5c+dq4sSJmjBhgt544w2lpKSoUqVKGjZsmLZv365JkyapefPm+YVlw4YNGjt2rNWfCgCUK2ZaChgyZIiWLl2qiRMnKioqSps2bVL//v11+PBhjRkzxup4MJybm5tmz56toUOHSpKWL1+uxMREffXVV1dcPzg4WI8++qiGDx+uJ554QmPHjpWPj482bNig7t27X/HQEQBcy5hpuWj+/PmaM2eOVqxYobFjxyo2NlYTJkxQu3btlJ2draioKEnSU089pRYtWsjNzU2LFi2yODVM8tJLL2no0KHKzMzU/fffr7vuuqvIwiJJ33zzjUaOHKl+/fopOztbPj4+OnHihO68804KC4DrEqXloilTpqhbt26KiYkptLxp06by9PRUeHi4pNzffl966SW1bdvWipgwVM+ePfXwww/r7Nmz6t69uxYsWODSdkFBQXruuefk4eGhc+fOqXr16kpISCjjtABQMVFaJB06dEh79uxRXFzcZY+lpaUpLCxM3t7ekqQHHnhAnTt3lo+PT5lksdlsjD8wCu5Hq/bppby9vfXGG29Ikh5//HGtX7/epa+FgifdbtiwQX369JEk/eMf/9CNN97I1w6DwbhmhqsoLcotLZJUp06dQsuzsrKUnJycf2gI+D3i4uIUGBionTt36uWXX3Zpm0sLS/fu3bVy5UrNmzdPXl5ezLYAuC5RWqT8S05TU1MLLZ82bZrS09MVGRlZblmcTifjD4yC+9GqfXqpYcOGSZJefvllORyOEr8GrlRY8s5hefHFFyXlnjTu5lb429fqfc9gMBi/d7iKq4eU+0PCbrcrMTFR/v7+CgwM1KJFi7Rq1SpJYqYFv5u7u3v++U9Lliwpcf3iCoskpaSk6Mcff1SjRo0UEhKi//73v2WWHQAqGmZalHsp6sKFCxUWFqaEhAQNHjxYAQEBGjVqlDw8PGS3262OCEM1b95cvr6++u6773TixIli1y2psOTZunWrJKl169ZlkhkAKipmWi4KCQnRunXrCi0bOHCgQkND5evrm7/swoULysnJkcPh0IULF3T27Fl5e3tf1YlEuH64u7try5Yt2rt3b7Hr1alTx6XCIknbtm1To0aNdO7cubKIDAAVFqWlGCkpKYqOji607KGHHtKcOXMkSZ9//rkk6YcfflDjxo3LOx4MsGvXLpcuj//tt9+0evVqBQcHl3jjuMmTJ2vy5MmlGRMAjMDhoSJkZGQoNTX1spNw33vvvctOIKKw4I9yOBwaNmyYunbtyo3jAKAIzLQUwc/PTzk5OVbHwHXE4XAoMzPT6hgAUGEx0wIAAIxAaQEAAEagtAAAACNQWgAAgBEoLQAAwAiUFgAAYARKCwAAMAL3aQFK2dX8xdI846fOliQ9Oy6+0McAgP9hpgUAABiB0gIAAIxAaQEAAEagtAAAACNQWgAAgBEoLQAAwAiUFgAAYARKCwAAMAKlBQAAGIHSAgAAjEBpAQAARqC0AAAAI1BaAACAESgtAADACJQWAABgBA+rAwCoGGw2W7m/ptPpLPfXBGAuZloAAIARKC0AAMAIlBYAAGAESgsAADACpQUAABiB0gIAAIxAaQHwu1WqVEk1a9ZU5cqVS1w3PDxc/v7+5ZAKwLWK0gLAZe7u7urdu7c++OADff/99zpz5oyOHDmijIwMpaWlacmSJerXr588PT0LbdeqVSslJSVpzZo1ql69ukXpAZiO0lKAw+HQjBkzFBwcLB8fH0VERCg5OVnNmjVTfHy81fEAS/Xu3Vvff/+9li1bpvvuu0833nijzp07pyNHjigrK0sNGjTQ3XffrQULFujgwYMaOHCgpNzCsmbNGvn7++vHH3/UmTNnLP5MAJiK0lLAkCFDNGnSJA0fPlz/+c9/dN9996l///76/vvvFRUVZXU8wBJeXl569913tWzZMjVs2FCpqakaM2aMWrZsqcqVK+uGG25Q5cqV1bx5c40cOVK7du1S7dq1NXfuXK1duza/sCxfvlxxcXG6cOGC1Z8SAENxG/+L5s+frzlz5igpKUkxMTGSpNjYWG3btk1LlixRVFSUzp07p+HDh+uzzz7TmTNnFBkZqddee02hoaEWpwfKhqenpxYvXqyePXsqMzNT48eP16uvvnrZ7fedTqf279+v/fv3a+bMmXrwwQf1yiuvKDY2VpK0cuVKCguAP4yZloumTJmibt265ReWPE2bNpWnp6fCw8OVnZ2tpk2b6quvvtLRo0d1++23q2/fvhYlBsre5MmT1bNnTx05ckR/+tOf9Morr7j094J27typnJyc/H8fP36cwgLgD6O0SDp06JD27NmjuLi4yx5LS0tTWFiYvL29VblyZT3xxBMKDAyUu7u7Ro8erd27d+vs2bMWpAbKVnR0tB577DHl5OTozjvv1I4dO1zaLu8clurVq2vNmjXKysrSwIED1aNHjzJODOBaR2lRbmmRpDp16hRanpWVpeTk5CLPZ9m0aZMaN24sHx+fUstis9kYf2AU3I8m7dOKkPtSTz/9tNzc3DR9+nRt3rzZpa/fgifdLl++XN27d9cTTzwhSXrmmWf4emcwGFccrqK0SAoICJAkpaamFlo+bdo0paenKzIy8rJtjh8/rlGjRmny5MnlkhEoT8HBwercubMyMzM1depUl7a5tLDkncPy6quv6vDhw2rVqpXat29fxskBXMsoLZKCgoJkt9uVmJiouXPnas2aNUpISNA777wjSZfNtGRlZalXr17q27ev7r///lLN4nQ6GX9gFNyPJu3TipC7oLxDOYsWLdKJEydK/LotqrBI0vnz5zV37txCz2vS/w2DwSj74SpKiyQ3NzctXLhQYWFhSkhI0ODBgxUQEKBRo0bJw8NDdrs9f93s7Gzdd999Cg4OZpYF16y8or5x48YS1y2usOTJex5uHQDgj+CS54tCQkK0bt26QssGDhyo0NBQ+fr65i8bNmyYHA6HZs+eXd4RgXLTpEkTSdLevXuLXc+VwlLweYKCgko/LIDrBqWlGCkpKYqOjs7/948//qg5c+bIx8en0K3I9+7dq4YNG1oRESgTCQkJCggI0O7du4td78EHH3TpxnFpaWnq3LmzTp48WRZxAVwnKC1FyMjIUGpqqkaOHJm/rFGjRld17A0w1c6dO11ab8yYMfrmm2/05ptvFnsflqysLK1evbq04gG4TlFaiuDn51fo5lgALud0OvX6669bHQPAdYITcQEAgBEoLQAAwAiUFgAAYARKCwAAMAKlBQAAGIHSAgAAjEBpAQAARqC0AAAAI3BzOQCSdNV3ex4/Nffvbz07Lr7QxwBQVphpAQAARqC0AAAAI1BaAACAESgtAADACJQWAABgBEoLAAAwAqUFAAAYgdICAACMQGkBAABGoLQAAAAjUFoAAIARKC0AAMAIlBYAAGAESgsAADACpQUAABjBw+oAAPB72Ww2S17X6XRa8rrA9Y6ZFgAAYARKCwAAMAKlBQAAGIHSAgAAjEBpAQAARqC0AAAAI3DJM4DrQu3atdWhQwdFRUWpbt26cjqd+uWXX7R161Zt2LBBv/7662XbxMbGatKkSerVq5eOHTtmQWoABVFaAFzT2rZtq7/97W+666675OFx5be87OxsLV26VNOnT9eWLVsk5RaWlStXqlKlShoxYoQSExPLMzaAK6C0FOBwOPT8889r1qxZOnjwoJo1a6aXX35Z8fHxiomJ0ezZs62OCMBFPj4+SkxM1F//+le5ubnpwoUL+uSTT7Rlyxb98MMPkqQbb7xRbdu21W233aa4uDjde++9ev7557V69WotWbJElSpV0ltvvaUpU6ZY/NkAkCgthQwZMkRLly7VxIkTFRUVpU2bNql///46fPiwxowZY3U8AC6qUqWKVq1apQ4dOig7O1szZszQiy++qPT09CuuX69ePT366KN69NFHNXbsWD366KNyd3fXW2+9pfj4eO6AC1QQlJaL5s+frzlz5igpKUkxMTGScqeHt23bpiVLligqKkqSNGDAAK1evVpnz55Vs2bN9NJLL6ldu3ZWRgdQgJubm5YvX64OHTooLS1N99xzj7Zu3VrsNj///LP+9re/6fvvv9err74qd3d3/fTTTxoxYgSFBahAuHrooilTpqhbt275hSVP06ZN5enpqfDwcEnShAkTdPDgQZ08eVJPPfWU7r33XiviAijCY489ptjYWP3888+KiYkpsbDkiY2N1YwZM+Tm5qbMzEwFBgbqL3/5SxmnBXA1KC2SDh06pD179iguLu6yx9LS0hQWFiZvb29JUosWLeTl5SWn0ylPT0/98ssvOnv2bKllsdlsjD8wCu5Hk/apibkrQuZL1atXT08//bQkafDgwTpw4IBL33cFT7p96623dN9990mSJk+erDp16vB9ymCU8XAVpUW5pUXSZW9OWVlZSk5Ozj80lGfAgAHy9fVV165dNXLkSPn4+JRbVgBFi4+Pl4+PjxYtWqRPP/3U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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_encode + qc_output\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "こうしてふたつの回路を組み合わせて実行して結果を表示させることができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFrCAYAAACzANLuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAfoklEQVR4nO3de5hddX3v8feXhIg0QSTIJRkohqDYBAQdFHS41UYET1Ghh0u1MYIgWEGktsp5BI1HsQeVgq3KpSoEqaWiCLVcUltCLITEJDYK2IRaQIGQGAlEBQLE7/ljrcTNZGby28lk9p7Z79fz7Gf2+q3f+u3v+mc+z7r9VmQmkiRp07ZpdQGSJA0XhqYkSYUMTUmSChmakiQVMjQlSSo0utUFtNLOO++ce+21V6vLkCS1kUWLFq3KzJf1ta6jQ3OvvfZi4cKFrS5DktRGIuKh/tZ5elaSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpjUCnnHIKu+yyC1OnTu1zfWZy9tlnM3nyZPbff38WL168Yd3VV1/NPvvswz777MPVV1+9oX3RokXst99+TJ48mbPPPpvM3Or7IbUbQ1MagWbMmMGtt97a7/pbbrmF+++/n/vvv58rrriCM888E4DHH3+cmTNnMn/+fBYsWMDMmTNZvXo1AGeeeSZXXHHFhu0GGl8aqQxNaQQ67LDD2Gmnnfpdf+ONNzJ9+nQigoMPPpgnnniC5cuXc9tttzFt2jR22mknXvrSlzJt2jRuvfVWli9fzpo1azjkkEOICKZPn853vvOdIdwjqT0YmlIHeuSRR9hjjz02LHd1dfHII48M2N7V1bVRu9RpDE2pA/V1PTIimm6XOo2hKXWgrq4ufv7zn29Yfvjhh5kwYcKA7Q8//PBG7VKnMTSlDnTssccya9YsMpO7776bl7zkJey+++4cddRRzJ49m9WrV7N69Wpmz57NUUcdxe677864ceO4++67yUxmzZrF2972tlbvhjTkRre6AEmD7+STT2bOnDmsWrWKrq4uZs6cyXPPPQfAGWecwTHHHMPNN9/M5MmT2X777fna174GwE477cT555/PQQcdBMAFF1yw4YaiL3/5y8yYMYOnn36ao48+mqOPPro1Oye1UHTys1bd3d25cOHCVpchSWojEbEoM7v7WufpWUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhYY0NCPisIi4KSIeiYiMiBkF2+wXEXdExNP1dhdEr5miI+L4iLgvItbWf9+x1XZCktSxhvpIcyxwD/BB4OlNdY6IHYB/BVYABwFnA38JnNvQ5xDgOuBa4ID67zcj4vWDXbwkqbMN6dyzmXkzcDNARFxVsMk7ge2Bd2fm08A9EfEq4NyIuDirOQDPAW7PzE/X23w6Io6s208e7H2QJHWudr+meQjw/Tow17sNmADs1dBndq/tbgPesNWrkyR1lHZ/y8luwMO92lY0rHug/ruijz679TVgRJwOnA4wYcIE5syZA8CkSZMYN24cS5YsAWD8+PFMmTKFuXPnAjB69Gh6enpYvHgxa9asAaC7u5sVK1bw1/+895bsoyRpEHzyxOUsXboUgIkTJ9LV1cX8+fMBGDt2LN3d3cybN4+1a9cC0NPTw7Jly1i5ciUAU6dO3bCuPy17y0lE/Br4QGZeNUCf2cDPM/PUhrbfBx4EDsnMuyPiWeDUzLymoc+7gcszc7uBahist5ycdskWDyFJ2kJXnjM44wznt5w8xsZHjLvUf1dsok/vo09JkrZIu4fmPODQiGg8YpwGPEp1tLm+z7Re200D7trq1UmSOspQP6c5NiIOiIgD6t/es17es17/mYj4t4ZN/gF4CrgqIqZGxHHAR4H1d84CXAr8YUScFxH7RsR5wJGAJ00lSYNqqI80u4Ef1p8XAzPr75+s1+8ObLirJjOfpDpqnAAsBL4IfB64uKHPXcBJwLuBHwHTgRMzc/5W3hdJUocZ6uc05wAxwPoZfbT9GDhsE+NeD1y/heVJkjSgdr+mKUlS2zA0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKlQU6EZESdExJsbli+IiIcj4raI2H3wy5MkqX00e6T5ifVfIuI1wP8BvgBsC3x+8MqSJKn9NBuavw8srb+/A/hOZl4EnAu8qWSAiHh/RDwQEc9ExKKIOHSAvldFRPbx+U1DnyP66bNvk/smSdKAmg3NZ4Bx9fc3Ad+rvz/Z0N6viDgRuBS4EDgQuAu4JSL27GeTDwK79/r8D/BPffSd0qvf/ZveHUmSyo1usv/3gc9HxH8A3cCf1O2vAH5esP25wFWZeWW9fFZEvAU4Ezivd+fMfJIqkAGIiDcCk4A/62PslZm5qnRHJElqVrOh+QHgy1RheUZmPlq3Hw3cNtCGETEGeC3wuV6rZgNvKPz904B7M/OuPtYtjIgXAfcBn8rM2/up43TgdIAJEyYwZ84cACZNmsS4ceNYsmQJAOPHj2fKlCnMnTsXgNGjR9PT08PixYtZs2YNAN3d3axYsQLYu7B8SdLWsnz5cpYura4gTpw4ka6uLubPnw/A2LFj6e7uZt68eaxduxaAnp4eli1bxsqVKwGYOnXqhnX9iczcirvQ8EMRE4BHgMMzc25D+wXAOzPzlZvY/iXAo8D/ycxLG9pfCRwJ/AAYQ3UUegZwROPv9KW7uzsXLly4mXv0O6ddssVDSJK20JXnDM44EbEoM7v7WtfskSYRsR3wv6gOry7PzCciYm9gdWY+XjBE75SOPtr68i5gFHDNCwbLXMrvbk4CmBcRewEfBgYMTUmSmtFUaEbEZKqbf8YCOwLfBJ6guia5I/DeATZfBawDduvVvguwouDnTwO+VRjM84GTCvpJklSs2btnL6G6Brkr8HRD+01Up0j7lZnPAouAab1WTaO6i7ZfEfE64NXAlQP1a3AAsLywryRJRZo9PfsG4ODMXBcRje0/AyYUbH8xcE1ELADupLr2OAG4DCAiZgFk5vRe251O9QjJHb0HjIhzgAeBe6muab4LeDtwfOlOSZJUoulrmlSz//S2Jw2PhvQnM6+LiPHAx6iepbwHOCYzH2oY5wUiYhzVqdZPZt93LY2huiN3ItXR773AWzPz5oJ9kSSpWLOhOZvqWctT6+WMiB2AmcC/lAyQmV8CvtTPuiP6aPsV1TXU/sa7CLio5LclSdoSzYbmucDtEbEU2A64DphMdSPPCYNcmyRJbaWp0MzMRyPiAOBk4DVUNxJdAVybmU8PuLEkScNc09c063D8av2RJKljbDI0I+I44J8z87n6e78y89uDVpkkSW2m5EjzeqoJCVbW3/uTVDP2SJI0Im0yNDNzm76+S5LUaZoKwYg4LCI2CtqIGBURhw1eWZIktZ9mjxxvB3bqo33Hep0kSSNWs6HZ3xtJxgO/2fJyJElqX0WPnETETfXXBL4eEY1v6RwFTGUTk65LkjTclT6n+cv6bwCreeEbTp4F/oPyN5BIkjQsFYVmZr4HICIeBD6XmZ6KlSR1nGan0Zu5tQqRJKndlcwI9CPg8MxcHRE/pu8bgQDIzP0HszhJktpJyZHmt4D1N/4MNCOQJEkjWsmMQDP7+i5JUqdxWjxJkgqVXNMc8DpmI69pSpJGstK3nEiS1PGauqYpSVIn85qmJEmFfE5TkqRCPqcpSVIhn9OUJKlQU3PPrhcRewOvqhd/kpk/HbySJElqT02FZkSMB74CHAv89nfN8V3glMz8Zb8bS5I0zDV79+zfA5OBQ4Ht6s9hwMvxfZqSpBGu2dOzRwFvysx5DW13RsT7gO8NXlmSJLWfZo80fwH09QLqpwBPzUqSRrRmQ/OTwCURMXF9Q/398/U6SZJGrM2ZsP3lwIMR8Ui9PBF4BtiF6pqnJEkjkhO2S5JUyAnbJUkq5ITtkiQVaio0I2JMRMyMiGUR8UxErGv8bK0iJUlqB80eaf5f4N1Ud8v+FvhL4ItUj5u8f3BLkySpvTQbmicAZ2Tm5cA64MbMPBv4ODBtsIuTJKmdNBuauwL31d9/DexYf78VePNgFSVJUjtqNjR/Bkyov/831bR6AIcATw9WUZIktaNmQ/MG4E3190uBmRHxAHAVTmwgSRrhmpqwPTPPa/h+fUQ8DLwBWJaZ3x3s4iRJaieb9RLq9TLzbuDuQapFkqS21vTkBhHxmoiYFREL6881EfGarVGcJEntpNnJDd4J/ADYHbi5/uwKLIiIdw1+eZIktY9mT89+Gjg/My9sbIyI84BPAV8frMIkSWo3zZ6efRnwT320f5Pq1WCbFBHvj4gH6mn4FkXEoQP0PSIiso/Pvr36HR8R90XE2vrvO5raK0mSCjQbmrcDR/TRfgRwx6Y2jogTqR5VuRA4ELgLuCUi9tzEplOoTgmv/9zfMOYhwHXAtcAB9d9vRsTrN1WPJEnNKHkJ9XENi7cAn4mIbn531+zBwHHAJwp+71zgqsy8sl4+KyLeApwJnNf/ZqzMzFX9rDsHuD0zP10vfzoijqzbTy6oSZKkIpv7EurT60+jvwW+1N8gETEGeC3wuV6rZlM96zmQhRHxIqop/D6Vmbc3rDuk/u1GtwEf2MSYkiQ1peQl1IP1zs2dgVHAil7tK4A/6meb5VRHoT8AxgB/BvxbRByRmXPrPrv1M+ZufQ0YERsCf8KECcyZMweASZMmMW7cOJYsWQLA+PHjmTJlCnPnVj8zevRoenp6WLx4MWvWrAGgu7ubFStWAHtvcuclSVvX8uXLWbp0KQATJ06kq6uL+fPnAzB27Fi6u7uZN28ea9euBaCnp4dly5axcuVKAKZOnbphXX8iM7fiLjT8UMQE4BHgsMz8fkP7x4GTM3Pffjd+4Tg3A89n5rH18rPAqZl5TUOfdwOXZ+Z2A43V3d2dCxcubH5nejntki0eQpK0ha48Z3DGiYhFmdnd17rNmdzgrRExNyJWRcQvIuKOiDimYNNVVK8T630EuAsbHykOZD6wT8PyY4MwpiRJm9Ts5AbvpZq0/afAR4CPAg8AN0TEKQNtm5nPAovY+L2b06juoi11ANVp2/XmDcKYkiRtUrOTG3wEODcz/66h7SsRsYgqQL+6ie0vBq6JiAXAncAZVK8auwwgImYBZOb0evkc4EHgXqprmu8C3g4c3zDmpcDceoKFG4B3AEcCPU3umyRJA2o2NPekeuF0b7ew8V2xG8nM6yJiPPAxquct7wGOycyHGsZvNKYedyLV+zrvBd6amTc3jHlXRJxENSPRTKqj4BMzc34zOyZJ0qY0G5o/ozr1+d+92t8MPLRx941l5pfo59GUzDyi1/JFwEUFY15P34/GSJI0aJoNzc8Bf1u/1eQuIKlOg/4ZcNYg1yZJUltp9iXUl0fESuAvqGYBAvgJcEJm3jjYxUmS1E6KQzMiRlOdhp2bmTdsvZIkSWpPxY+cZObzwLeBcVuvHEmS2lezkxssASZvjUIkSWp3zYbmJ4DPR8TbI2KPiNip8bMV6pMkqW00e/fsv9R/v0115+x6US+PGoyiJElqR82G5pFbpQpJkoaBotCMiO2Bz1JNYbct8D3g7AFeDC1J0ohTek1zJjCD6vTsN6hmBfryVqpJkqS2VHp69jiqd1b+I0BEXAvcGRGjMnPdVqtOkqQ2UnqkuQew4cXRmbkAeJ7qDSWSJHWE0tAcBTzbq+15mr+RSJKkYas09AL4ekSsbWjbDrgyIp5a35CZxw5mcZIktZPS0Ly6j7avD2YhkiS1u6LQzMz3bO1CJElqd81OoydJUscyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQkMemhHx/oh4ICKeiYhFEXHoAH2Pi4jZEfGLiPhVRMyPiGN79ZkREdnHZ7utvzeSpE4ypKEZEScClwIXAgcCdwG3RMSe/WxyOPDvwFvr/jcDN/QRtE8Buzd+MvOZwd8DSVInGz3Ev3cucFVmXlkvnxURbwHOBM7r3TkzP9iraWZEvBV4O/D9F3bNx7ZGwZIkrTdkoRkRY4DXAp/rtWo28IYmhhoHrO7V9uKIeAgYBfwncH5m/rCfOk4HTgeYMGECc+bMAWDSpEmMGzeOJUuWADB+/HimTJnC3LlzARg9ejQ9PT0sXryYNWvWANDd3c2KFSuAvZsoX5K0NSxfvpylS5cCMHHiRLq6upg/fz4AY8eOpbu7m3nz5rF27VoAenp6WLZsGStXrgRg6tSpG9b1JzJzK+5Cww9FTAAeAQ7PzLkN7RcA78zMVxaM8efAXwNTM/Ohuu0Q4BXAEqpA/SBwDPDqzLx/oPG6u7tz4cKFm7lHv3PaJVs8hCRpC115zuCMExGLMrO7r3VDfXoWoHdKRx9tG4mI44HPAietD0yAzJwHzGvodxfV0eZZwNmDUbAkSTC0NwKtAtYBu/Vq3wVYMdCGdWBeA0zPzJsG6puZ64CFwD6bX6okSRsbstDMzGeBRcC0XqumUd1F26eIOAH4OjAjM6/f1O9ERAD7A8s3v1pJkjY21KdnLwauiYgFwJ3AGcAE4DKAiJgFkJnT6+WTqI4wPwzMjYj1R6nPZubjdZ+PA3cD9wM7UJ2S3Z/qjlxJkgbNkIZmZl4XEeOBj1E9T3kPcEzDNcrez2ueQVXjJfVnvTuAI+rvOwJXUJ32fRL4IXBYZi7YGvsgSepcQ34jUGZ+CfhSP+uOGGi5n20+BHxoMGqTJGkgzj0rSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVGvLQjIj3R8QDEfFMRCyKiEM30f/wut8zEfE/EXHGlo4pSdLmGNLQjIgTgUuBC4EDgbuAWyJiz376vxy4ue53IPAZ4G8j4vjNHVOSpM011Eea5wJXZeaVmfmTzDwLWA6c2U//M4BHM/Osuv+VwNXAh7dgTEmSNsuQhWZEjAFeC8zutWo28IZ+Njukj/63Ad0Rse1mjilJ0mYZPYS/tTMwCljRq30F8Ef9bLMb8L0++o+ux4tmx4yI04HT68VfR8TSkuKlDrAzsKrVRUib6+8/NGhD/X5/K4YyNNfLXsvRR9um+q9vjwH69DlmZl4BXLHpMqXOEhELM7O71XVI7WwoQ3MVsI7q6LHRLmx8pLjeY/30fx74JVU4NjumJEmbZciuaWbms8AiYFqvVdOo7njtyzw2Ps06DViYmc9t5piSJG2WoT49ezFwTUQsAO6kujt2AnAZQETMAsjM6XX/y4APRMQlwOXAG4EZwMmlY0oq5mULaROGNDQz87qIGA98DNgduAc4JjMfqrvs2av/AxFxDPA3VI+QPAqcnZnfamJMSQXq6/2SBhCZA92DI0mS1nPuWUmSChmakiQVMjQlSSpkaEqSVMjQlFQkIvx/oY7Ximn0JA0jEREAmfnbVtcitZqPnEjqV0QcDPwp1RuHngFurT8/NETViQxNSX2KiIOAr1LN9Xwj0AW8mWoSkX8HPpaZP2hdhdLQMzQl9SkirgfWZOYpDW3bAG8C/gLYD3hfZn63RSVKQ84L+5L6swewFKrrmhExKjN/m5n/CpwELAD+KiJ2aGWR0lAyNCX157vAeyLi97KyDqqjzcx8Ajgf2BXYq4U1SkPK0JTUn+uormcuiIgPRcQUeMFdtF1AV2b+qFUFSkPNa5qS+hURBwDnAAcAjwMPUL0cfhzwh8CczPxA6yqUhpahKWlAETEGOBT4Y+DlwG5UofkZ4KbMfLKF5UlDytCU9AIRsSPwLmAq8D/AfwMLMvPhiBgHjMnMX7ayRqlVDE1JG0TEHsA/UN05+wDwCiCAh6gmNbi0vglI6kjeCCSp0UeAp4C3ZOaRmTkROB74IXAucHdEHNLKAqVW8khT0gYRsQC4OjO/GBGjM/P5hnXjgG8DqzPzhIiI9B+IOoxHmpIAiIhRwDzgpIjYdn1gRsSLIuJFmfkr4AvAARFxoIGpTmRoSgKgnrzgBqobgL4ZEa+u29dm5tq6231Uz2cua02VUmt5elYSUE2Vl5kZEYcBF1E9XnIfcEv9eR3VXbW/zsw/bl2lUusYmpI2EhEvA46lmpz9IGAS8AvgG8CXM9MjTXUkQ1MSABHxRuAlwEupJmpfDCSwMzAK2MGwVKczNKUOFxHbA5+nenPJi6gmM3geWAHcBNyQmY/Vfbfx5dPqZN4IJOnPgcOBEzNz+3p5FrAGOA34VD2VHgamOp1HmlKHi4j5wLWZ+YVe7TsCxwB/B9yWmSe3oj6pnXikKXWwiHgR1eMjR0bE79Vto+o7aZ/IzH8A3gvsGxH7tLJWqR0YmlKHqoNxLdVcs93Ae+sXTq/rNXHBD4G9gadbUafUTjw9K3W4+gjzo1Tzzj4EfI1qkoPVwCup5p49IjP3b1mRUpswNCUBEBGTgA8B7wB2B34GbA/cC3wyM+e0rjqpPRiaUgeLiB2oXv+VmbmobhsF7Ed1yvZR4PbM9NSshKEpdayIeB/wCarTsNtTTWDwbaoZf/6rV1/faCJhaEodKSJOBi4ELgfuAV4MHAj8MbAL8I/ABZn5ZMuKlNqQoSl1oIi4HViQmR9paNsO2BN4G/A+4KuZeWGLSpTako+cSB2mvma5ond7Zj6Tmcsy87PA1cDxETFxyAuU2pihKXWY+r2ZtwN/ERGnRsTOfXS7GtiDagJ3SbXRrS5AUkt8BdgH+EvgdRFxE9XMQMuB54ATgOcz877WlSi1H69pSh1m/ZtKIuIlwHTgA8Bk4D+Bx4DXAw8Cl2Xm37esUKkNGZpSh4mIbYGxmbm6oW1/4H9TvUvzv4A7gHt9q4n0Qoam1EEi4i3Ae4BXU707cy7wzcz8bksLk4YJbwSSOkRE9ACXUh1NfgH4KrAvcGNE/KR+dlPSADzSlDpERFwPrM7M03q1v4pqztm3Audl5qxW1CcNBx5pSp1jJ6obfQCIiNH19Hg/Ac4GZgPnRMQurSpQaneGptQ5vgOcFhGvAMjM5zMz6+B8BrgA2AHoamWRUjszNKXO8Q3gx8AtEfHpiDgsIsY1TMR+ELBrZi5uXYlSe/OaptRBImIy8H7gcKpJDB4BngJ+j+qmoO9m5l+1rkKpvRmaUgeKiD+geqPJH1Bd63wx8DdU7858qpW1Se3M0JRGuIjYAzgFeB3wAHAvcGdm/qievP3FmfnrVtYoDReGpjSCRcTLgW9RHUkuAPYDdgWepJrY4P9l5gOtq1AaXgxNaQSLiMuAicBpmflY3bYn8KfAmVTXMk/NzBtbV6U0fBia0ggWEd8HbsrMz9ZzzmZmPt+w/hvAjlQTG2T6D0EakI+cSCPbvwHvrB8teS4zn4+IbSPixfX6LwKvAF5nYEqbZmhKI9s/A7sAd0TEsQB1eD5dr/8F1enbH7WoPmlY8fSsNELVM/1k/WzmRcDBwCrgP4BbqB43OR54MDNPaF2l0vBhaEodICK2A/6o/rwemAL8EvgKcE1mPtTC8qRhw9CURqCI2AZ4G/AyqsdNfgrMzcw1dYAmMC4zV7WwTGnYMTSlESYixlEdQR4J/JZqqrwAfgN8D7g2M++v+26Tmb9tVa3ScDO61QVIGnRnA68EjsnMH0TEvkA30EM1dd5rI+KUzPyFgSk1xyNNaYSpn828ITMv7tU+Cngj1VHoTzPzLa2oTxrOfOREGkEiYjRwD3B8RLysbhsVEaMyc11mzgXOALoi4tWtrFUajgxNaQSpZ/u5GtgN+HBE7FqH5bqGbsuAvageP5HUBE/PSiNIfdfsNsB7gAup7lu4HrgO+DmwP9V1zVdl5kGtqlMargxNaYSKiB2BGVSTsx8A/ApYS/W2k89k5vzWVScNT4amNEJExA7ArxrnkK2PPLcDxgJTgd8YltLmMzSlESIiLqc6ilwAPJSZa/ro89LMXL1+ir0hL1Ia5gxNaQSIiJOBa4E1wOPAvwK3UU3E/khmPh0RY4GvA+dn5o9bVqw0jBma0ggQEVcC66gmZj8OeDewN7AUuJnqFWGvBC7NzDGtqlMa7gxNaZirn838K2CHzPxoQ/sU4DTgT6iua+4IXJ2Zp7akUGkEMDSlESAiXgrsmpn/FRFjgOd63RB0IvAN4DWZ+Z+tqlMa7px7VhoBMnM1sLr+/ixsuHM26okNdgCeMTClLWNoSiNUr8nYxwEfb1Ut0kjh6VmpA0TEtsA632oibRlDU5KkQk7YLklSIUNTkqRChqYkSYUMTUmSChmakiQV+v9bbVVvq8qOTAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qobj = assemble(qc)\n", + "counts = sim.run(qobj).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ご覧のとおり、今回は ```10000000``` という結果が出力されました。\n", + "\n", + "反転したビットは、量子ビット7に由来し、文字列の左端にあります。これは、Qiskitが文字列のビットに右から左に番号を付けるためです。この慣習に違和感を覚えたなら、心配しないでください。文字列のビットにどういう順番で番号を付けるかは好みが分かれるところで、他の教科書だと違う順番に番号を付けている場合もあるでしょう。Qiskitでは文字列のビットに右から左に番号を付けるということだけ覚えておいてください。いずれにせよ、量子ビットを使って数字を表す場合、Qiskitの方法には利点があります。なぜなら、私たちが慣れ親しんでいるバイナリ表現と同様、qubit 7は、数に$2^7$がいくつあるかを示してくれるからです。つまり、qubit 7の反転(0→1)操作は、8ビットコンピューター上で128という数字をエンコードするのと同じことなのです。\n", + "\n", + "次に、何か他の数字をエンコードしてみましょう。たとえば、あなたの年齢を表示させます。検索エンジンを使用して、年齢の数字がバイナリでどのように表現されるのかを調べて(「0b」が含まれている場合は無視して)64歳未満の場合は左側に0を追加してエンコードします。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_encode = QuantumCircuit(n)\n", + "qc_encode.x(1)\n", + "qc_encode.x(5)\n", + "\n", + "qc_encode.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これでコンピューターへの情報のエンコードの仕方がわかりました。次はエンコードした情報の処理方法、エンコードした入力からのアウトプットの出力の仕方についてです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.2 足し算の仕方を思い出してみよう" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "入力から出力を得るには、解く問題が必要です。基本的な算数からおさらいをしましょう。小学校で、比較的大きな数を足し算をするときは、扱いやすい大きさに分解しました。例えば:\n", + "\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= ????\n", + "```\n", + "\n", + "ここでは 一桁ずつ右から順番に足していきます。まずは3+4\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= ???7\n", + "```\n", + "\n", + "そして 1+5\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= ??67\n", + "```\n", + "\n", + "つづいて 2+8=10 結果が2桁となったため、1を保持して次の桁に繰り上げを行う必要があります。\n", + "\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= ?067\n", + " ¹ \n", + "```\n", + "\n", + "そして最後に 9+1+1=11を計算することで答えを求めることができます。\n", + "\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= 11067\n", + " ¹ \n", + "```\n", + "\n", + "\n", + "これは単純な足し算の例かもしれませんが、すべてのアルゴリズムの基本的な原理を示しています。アルゴリズムが数学的な問題を解決するように設計されているか、テキストや画像を処理するように設計されているかに関係なく、私たちは常に大きなタスクを小さくシンプルなステップに分解します。\n", + "\n", + "コンピューターで実行するには、アルゴリズムを可能な限り小さくて最も簡単な手順にコンパイルする必要があります。これらがどのように見えるかを見るために、上記の足し算の問題をもう一度、ただし今度はバイナリでやってみましょう。\n", + "\n", + "\n", + "```\n", + " 10001111111101\n", + "+ 00011100111110\n", + " \n", + "= ??????????????\n", + "```\n", + "\n", + "2番目の文字列の左端に余分な0がたくさんついていることに注目してください。これは、2つの文字列の長さを揃えるためです。\n", + "\n", + "最初のタスクは、右端の1 + 0を実行することです。バイナリでは、任意の数体系と同様に、答えは1です。2番目の列の0 + 1に対しても同じ結果が得られます。\n", + "\n", + "```\n", + " 10001111111101\n", + "+ 00011100111110\n", + "\n", + "= ????????????11 \n", + "```\n", + "\n", + "次に1+1=2ですが、 バイナリでは、数値2は ```10```と記述されるため、2ビット必要です。つまり、10進数の10の場合と同様に、1を保持する必要があります。\n", + "\n", + "```\n", + " 10001111111101\n", + "+ 00011100111110\n", + "= ???????????011 \n", + " ¹ \n", + "```\n", + "\n", + "次の桁では```1+1+1```を計算します. 三個の数を合計する必要があるのでコンピューターにとってはやや複雑な処理になってきました。しかしこれも毎回二個のビットの足し算という、より単純なオペレーションにコンパイルすることができます。 まずは最初の二つの1から足していきます。\n", + "\n", + "```\n", + " 1\n", + "+ 1\n", + "= 10\n", + "```\n", + "\n", + "つづいて、この ```10```と最後の```1```を足す必要があります。これは、いつも通りそれぞれ同じ長さの文字列として並べて上下を足すことで実行できます。\n", + "\n", + "```\n", + " 10\n", + "+ 01\n", + "= 11\n", + "```\n", + "\n", + "答えは ```11```(3としても知られています)です。\n", + "\n", + "ここで残りの問題に戻ることができます。 上記の答え```11```には、新たなキャリービットがあります。\n", + "\n", + "```\n", + " 10001111111101\n", + "+ 00011100111110\n", + "= ??????????1011\n", + " ¹¹\n", + "```\n", + "\n", + "ここで再び1 + 1 + 1を行う必要がでてきました。しかし、私たちはすでにこの問題の解き方を知っていますので、大したことではありません。\n", + "\n", + "実はここから先の問題の解き方を我々はすでに知っています。残っている桁の計算を二つのビットの足し算に分解すると、計算が必要な組合せは四つしかないためです。 四つの計算結果を次に示します(一貫性を保つために、すべての回答を2ビットで記述します)。\n", + "\n", + "```\n", + "0+0 = 00 (in decimal, this is 0+0=0)\n", + "0+1 = 01 (in decimal, this is 0+1=1)\n", + "1+0 = 01 (in decimal, this is 1+0=1)\n", + "1+1 = 10 (in decimal, this is 1+1=2)\n", + "```\n", + "\n", + "これは半加算器(*half adder*)と呼ばれています。私たちが量子ビットでつくるコンピューターも、この半加算器さえ実装できれば、それらをつなぎ合わせることでどのような数でも足すことができるようになるのです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 4.3 Qiskitで足し算を行う" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "それでは、Qiskitを使って独自の半加算器を作成してみましょう。この回路には、入力をエンコードする部分、アルゴリズムを実行する部分、および結果を抽出する部分が含まれます。最初の入力をエンコードする部分は、新しい入力を使用するたびに変更する必要がありますが、残りは常に同じままです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image3](images/half-adder.svg)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "足し合わせる2つのビットは、量子ビット0(`q[0]`)と1(`q[1]`)にそれぞれエンコードされます。上記では、それぞれの量子ビットに ```1```がエンコードされ、```1 + 1```の解を見つけようとしています。結果は2ビットの文字列になり、量子ビット2(`q[2]`)および量子ビット3(`q[3]`)から読み取ります。 残されているのは中央の空白スペースに実際のプログラムを埋めることだけです。\n", + "\n", + "画像の破線は、回路のさまざまな部分を区別するためのものです(ただし、より興味深い用途もあります)。これらは `barrier`コマンドを使用して作成されます。\n", + "\n", + "コンピューティングの基本操作は、論理ゲートで行われます。これまでに回答を手動で書き出すためにNOTゲートを使いましたが、半加算器を作成するのにはこれだけでは十分ではありません。コンピューターに実際の計算を行わせるには、さらに強力なゲートが必要になります。\n", + "\n", + "どのようなゲートが必要になってくるのかをみるために、半加算器がすべきことをもう一度見てみましょう。\n", + "\n", + "```\n", + "0+0 = 00\n", + "0+1 = 01\n", + "1+0 = 01\n", + "1+1 = 10\n", + "```\n", + "\n", + "これら4つの答えすべての右端のビットは、足し合わせる2つのビットが同じか異なるかによって決定されます。そのため、2つのビットが等しい「0 + 0」と「1 + 1」の場合、答えの右端のビットが「0」になります。異なるビットを足し合わせる「0 + 1」と「1 + 0」の場合、右端のビットは「1」です。\n", + "\n", + "この論理を再現するには、2つのビットが異なるかどうかを判断できるものが必要です。従来、デジタルコンピューティングの研究では、これはXORゲートで実現できます。\n", + "\n", + "量子コンピューティングにおいては, XORゲートの仕事は制御NOTゲートが行います。長い名前なので、通常は単にCNOTと呼びます。 Qiskitでは更に短く ```cx```と記述します。回路図の中では、下図のように描かれています。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_cnot = QuantumCircuit(2)\n", + "qc_cnot.cx(0,1)\n", + "qc_cnot.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これは、2量子ビットに適用されます。 1つは制御量子ビットとして機能します(これは小さなドットのあるものです)。もう1つは(大きな円で)*ターゲット量子ビット*として機能します。\n", + "\n", + "CNOTの効果を説明する方法はいくつかあります。 一つは、2つの入力ビットを調べて、それらが同じか異なるかを確認することです。次に、ターゲット量子ビットに回答を書き込みます。2つの入力ビットが同じ場合はターゲットは ```0```になり、異なる場合は``` 1```になります。\n", + "\n", + "CNOTを説明する別の方法は、コントロールが ```1```の場合、ターゲットに対してNOTを行い、それ以外は何もしないと言うことです。この説明は、前の説明同様に有効です(ゲートの名前もここからつけられています)。\n", + "\n", + "可能な入力をそれぞれ試して、CNOTを試してみてください。たとえば、入力 ```01```でCNOTをテストする回路を次に示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(2,2)\n", + "qc.x(0)\n", + "qc.cx(0,1)\n", + "qc.measure(0,0)\n", + "qc.measure(1,1)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路を実行すると、出力が ```11```であることがわかります。次のいずれかの理由からそうなることが考えられます。\n", + "\n", + "- CNOTは入力値が互いに異なることを検出して ```1```を出力しています。これは、量子ビット1の状態(ビット列の左側にあることを思い出してください)を上書きし、 ```01```を ```11```に変換することで行います。\n", + "\n", + "- CNOTは、量子ビット0が状態 ```1```であることを確認し、量子ビット1にNOTを適用します。これにより、量子ビット1の```0```が ```1```に変換されます。そして、```01```を``` 11```に変換します。\n", + "\n", + "半加算器の場合、いずれの入力も結果で上書きしたくありません。そこで結果を異なる量子ビットのペアに書き込みたいと思います。これは2つのCNOTを使用することで実現できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_ha = QuantumCircuit(4,2)\n", + "# encode inputs in qubits 0 and 1\n", + "qc_ha.x(0) # For a=0, remove this line. For a=1, leave it.\n", + "qc_ha.x(1) # For b=0, remove this line. For b=1, leave it.\n", + "qc_ha.barrier()\n", + "# use cnots to write the XOR of the inputs on qubit 2\n", + "qc_ha.cx(0,2)\n", + "qc_ha.cx(1,2)\n", + "qc_ha.barrier()\n", + "# extract outputs\n", + "qc_ha.measure(2,0) # extract XOR value\n", + "qc_ha.measure(3,1)\n", + "\n", + "qc_ha.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "半加算器の完成まであと半分の道のりとなりました。出力のもう1つのビット、つまり、4つ目の量子ビットが残っています。\n", + "\n", + "可能な足し算の4つの答えをもう一度見ると、このビットが ```0```ではなく```1```であるケースが1つ: ```1 + 1``` = ```10```しかないことに気付くでしょう。追加するビットが両方とも```1```の場合にのみ発生します。\n", + "\n", + "つまり、両方の入力が ```1```であるかどうかをコンピューターに確認させることでこの部分を計算することができます。両方の入力が```1```である場合のみ、量子ビット3でNOTゲートを実行する必要があります。\n", + "\n", + "このためには、新しいゲートが必要です。CNOTのようですが、制御量子ビットが1つではなく2つになります。これは、両方の制御量子ビットの状態が ```1```の場合にのみ、ターゲット量子ビットに対してNOTを実行します。この新しいゲートは*Toffoli(トフォリ)*と呼ばれ、ブール論理ゲート上のANDゲートに相当します。\n", + "\n", + "QiskitではToffoliは `ccx` というコマンドで実装されます。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_ha = QuantumCircuit(4,2)\n", + "# encode inputs in qubits 0 and 1\n", + "qc_ha.x(0) # For a=0, remove the this line. For a=1, leave it.\n", + "qc_ha.x(1) # For b=0, remove the this line. For b=1, leave it.\n", + "qc_ha.barrier()\n", + "# use cnots to write the XOR of the inputs on qubit 2\n", + "qc_ha.cx(0,2)\n", + "qc_ha.cx(1,2)\n", + "# use ccx to write the AND of the inputs on qubit 3\n", + "qc_ha.ccx(0,1,3)\n", + "qc_ha.barrier()\n", + "# extract outputs\n", + "qc_ha.measure(2,0) # extract XOR value\n", + "qc_ha.measure(3,1) # extract AND value\n", + "\n", + "qc_ha.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この例では、2つの入力ビットが両方とも`1`であるため、`1 + 1`を計算しています。何が得られるか見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAE6CAYAAAB00gm8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAZj0lEQVR4nO3df7RdZX3n8ffXxAxlJYgJIrm5IoYwgysRQY9ToZcIoxHBKSp0xEw1RChMYiUiY6cyS8XYgrMYZWCcopBaIeB0qChqbYBUhxAKIfEmbRR1EmoRSYw3RqLxR0ggfuePfRIPN+fe+5zk/jjkvF9rnXXPfvazn/Psf+5nPXs/+9mRmUiSpKE9b6w7IEnSc4WhKUlSIUNTkqRChqYkSYUMTUmSChmakiQVGj/WHRhLRx11VB533HFj3Q1JUhtZu3bttsx8UbN9HR2axx13HL29vWPdDUlSG4mIxwfa5+VZSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1M6BF100UUcffTRzJo1q+n+zGTRokXMmDGDk046iXXr1u3bd+utt3LCCSdwwgkncOutt+4rX7t2La94xSuYMWMGixYtIjNH/DykdmNoSoeg+fPnc8899wy4/+677+bRRx/l0Ucf5eabb2bhwoUAPPnkkyxevJjVq1ezZs0aFi9ezPbt2wFYuHAhN998877jBmtfOlQZmtIhaPbs2UyePHnA/V/5yleYN28eEcFrX/tafvazn7Flyxbuvfde5syZw+TJk3nhC1/InDlzuOeee9iyZQs7duzg1FNPJSKYN28eX/7yl0fxjKT2YGhKHWjz5s285CUv2bfd3d3N5s2bBy3v7u7er1zqNIam1IGa3Y+MiJbLpU5jaEodqLu7myeeeGLf9qZNm+jq6hq0fNOmTfuVS53G0JQ60LnnnsvSpUvJTB5++GFe8IIXMHXqVM466yyWL1/O9u3b2b59O8uXL+ess85i6tSpTJo0iYcffpjMZOnSpbzlLW8Z69OQRt34se6ApOE3d+5cVqxYwbZt2+ju7mbx4sU8/fTTACxYsIBzzjmHZcuWMWPGDA4//HA+97nPATB58mQ+/OEP85rXvAaAj3zkI/smFH36059m/vz57Ny5k7PPPpuzzz57bE5OGkPRyc9a1Wq17O3tHetuSJLaSESszcxas31enpUkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVGhUQzMiZkfEVyNic0RkRMwvOOYVEXF/ROysH/eR6LdSdEScHxHfjYhd9b9vG7GTkCR1rNEeaU4EHgHeB+wcqnJEHAH8PdAHvAZYBPwJcEVDnVOBO4DPAyfX/34hIn53uDsvSepso7r2bGYuA5YBRMQtBYf8IXA4cGFm7gQeiYiXA1dExHVZrQF4OXBfZl5dP+bqiDizXj53uM9BktS52v2e5qnAA/XA3OteoAs4rqHO8n7H3QucNuK9kyR1lHZ/y8kxwKZ+ZX0N+x6r/+1rUueYZg1GxKXApQBdXV2sWLECgOnTpzNp0iTWr18PwJQpU5g5cyYrV64EYPz48fT09LBu3Tp27NgBQK1Wo6+vj//2t8cfzDlKkobBxy7YwoYNGwCYNm0a3d3drF69GoCJEydSq9VYtWoVu3btAqCnp4eNGzeydetWAGbNmrVv30DG7C0nEfFL4L2ZecsgdZYDT2TmxQ1lLwV+AJyamQ9HxG7g4sy8raHOhcBNmXnYYH0YrrecXHL9QTchSTpISy4fnnaey285+TH7jxiPrv/tG6JO/9GnJEkHpd1DcxVwekQ0jhjnAD+iGm3urTOn33FzgIdGvHeSpI4y2s9pToyIkyPi5PpvH1vfPra+/+MR8Y2GQ/438GvgloiYFRHnAR8E9s6cBbgB+HcRcWVEnBgRVwJnAl40lSQNq9EeadaAf6x/fgdYXP/+sfr+qcC+WTWZ+XOqUWMX0Av8BfBJ4LqGOg8B7wAuBL4FzAMuyMzVI3wukqQOM9rPaa4AYpD985uUfRuYPUS7dwJ3HmT3JEkaVLvf05QkqW0YmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUqKXQjIi3R8QbG7Y/EhGbIuLeiJg6/N2TJKl9tDrS/OjeLxHxKuC/Av8TeD7wyeHrliRJ7afV0HwpsKH+/W3AlzPzWuAK4PUlDUTEeyLisYh4KiLWRsTpg9S9JSKyyedXDXXOGKDOiS2emyRJg2o1NJ8CJtW/vx74ev37zxvKBxQRFwA3ANcApwAPAXdHxLEDHPI+YGq/z78Af9Ok7sx+9R4d+nQkSSo3vsX6DwCfjIh/AGrAH9TL/zXwRMHxVwC3ZOaS+vZlEfEmYCFwZf/KmflzqkAGICJ+D5gOvKtJ21szc1vpiUiS1KpWR5rvBXZTheWCzPxRvfxs4N7BDoyICcCrgeX9di0HTiv8/UuA72TmQ0329UbEloj4RkScWdieJEnFWhppZuYm4PeblF9ecPhRwDigr195H/CGoQ6OiBcA/4Fq8lGjLVQj1W8CE6hGod+IiDMyc2WTdi4FLgXo6upixYoVAEyfPp1Jkyaxfv16AKZMmcLMmTNZubJqYvz48fT09LBu3Tp27NgBQK1Wo6+vDzh+yJOXJI2sLVu2sGFDNe1m2rRpdHd3s3r1agAmTpxIrVZj1apV7Nq1C4Cenh42btzI1q1bAZg1a9a+fQOJzGypUxFxGPDvqZLipsz8WUQcD2zPzCcHOa4L2AzMzswHGsqvAuZm5qATdyLij6lm6HYN9jv1usuAZzLz3MHq1Wq17O3tHaxKkUuuP+gmJEkHaUnJ8K1ARKzNzFqzfS2NNCNiBtXkn4nAkcAXgJ9RjfSOBP5okMO3AXuAY/qVH83+o89mLgG+OFRg1q0G3lFQT5KkYq3e07ye6h7ki4GdDeVfBQa9j5iZu4G1wJx+u+ZQzaIdUET8W+CVwJLB6jU4meqyrSRJw6bV2bOnAa/NzD0R0Vj+Q6Cr4PjrgNsiYg3wILCgftxnACJiKUBmzut33KVUj5Dc37/BiLgc+AHwHap7mu8E3gqcX3pSkiSVaDU0oVr9p79jaXg0ZCCZeUdETAE+RPUs5SPAOZn5eEM7zxIRk6gutX4sm9+AnQB8AphGNfr9DvDmzFxWcC6SJBVrNTSXUz1reXF9OyPiCGAx8HclDWTmjcCNA+w7o0nZL6juoQ7U3rXAtSW/LUnSwWg1NK8A7ouIDcBhwB3ADKqJPG8f5r5JktRWWn1O80cRcTIwF3gV1USim4HPZ+bOQQ+WJOk5ruV7mvVw/Kv6R5KkjjFkaEbEecDfZubT9e8DyswvDVvPJElqMyUjzTupFiTYWv8+kKRaJk+SpEPSkKGZmc9r9l2SpE7TUghGxOyI2C9oI2JcRMwevm5JktR+Wh053gdMblJ+ZH2fJEmHrFZDM6juXfY3BfjVwXdHkqT2VfTISUR8tf41gdsjovGFY+OAWQyx6LokSc91pc9p/rT+N4DtPPsNJ7uBf6D8DSSSJD0nFYVmZr4bICJ+AHwiM70UK0nqOK0uo7d4pDoiSVK7K1kR6FvA6zJze0R8m+YTgQDIzJOGs3OSJLWTkpHmF4G9E38GWxFIkqRDWsmKQIubfZckqdO4LJ4kSYVK7mkOeh+zkfc0JUmHstK3nEiS1PFauqcpSVIn856mJEmFfE5TkqRCPqcpSVIhn9OUJKlQS2vP7hURxwMvr29+LzO/P3xdkiSpPbUUmhExBfgscC7wm98Wx9eAizLzpwMeLEnSc1yrs2f/EpgBnA4cVv/MBl6G79OUJB3iWr08exbw+sxc1VD2YET8J+Drw9ctSZLaT6sjzZ8AzV5A/WvAS7OSpENaq6H5MeD6iJi2t6D+/ZP1fZIkHbIOZMH2lwE/iIjN9e1pwFPA0VT3PCVJOiS5YLskSYVcsF2SpEIu2C5JUqGWQjMiJkTE4ojYGBFPRcSexs9IdVKSpHbQ6kjzz4ALqWbL/gb4E+AvqB43ec/wdk2SpPbSami+HViQmTcBe4CvZOYi4CpgznB3TpKkdtJqaL4Y+G79+y+BI+vf7wHeOFydkiSpHbUamj8Euurf/5lqWT2AU4Gdw9UpSZLaUauheRfw+vr3G4DFEfEYcAsubCBJOsS1tGB7Zl7Z8P3OiNgEnAZszMyvDXfnJElqJwf0Euq9MvNh4OFh6oskSW2t5cUNIuJVEbE0Inrrn9si4lUj0TlJktpJq4sb/CHwTWAqsKz+eTGwJiLeOfzdkySpfbR6efZq4MOZeU1jYURcCfw5cPtwdUySpHbT6uXZFwF/06T8C1SvBhtSRLwnIh6rL8O3NiJOH6TuGRGRTT4n9qt3fkR8NyJ21f++raWzkiSpQKuheR9wRpPyM4D7hzo4Ii6gelTlGuAU4CHg7og4dohDZ1JdEt77ebShzVOBO4DPAyfX/34hIn53qP5IktSKkpdQn9eweTfw8Yio8dtZs68FzgM+WvB7VwC3ZOaS+vZlEfEmYCFw5cCHsTUztw2w73Lgvsy8ur59dUScWS+fW9AnSZKKHOhLqC+tfxp9CrhxoEYiYgLwauAT/XYtp3rWczC9EfGvqJbw+/PMvK9h36n13250L/DeIdqUJKklJS+hHq53bh4FjAP6+pX3AW8Y4JgtVKPQbwITgHcB34iIMzJzZb3OMQO0eUyzBiNiX+B3dXWxYsUKAKZPn86kSZNYv349AFOmTGHmzJmsXFn9zPjx4+np6WHdunXs2LEDgFqtRl9fH3D8kCcvSRpZW7ZsYcOGDQBMmzaN7u5uVq9eDcDEiROp1WqsWrWKXbt2AdDT08PGjRvZunUrALNmzdq3byCRmSN4Cg0/FNEFbAZmZ+YDDeVXAXMz88QBD352O8uAZzLz3Pr2buDizLytoc6FwE2ZedhgbdVqtezt7W39ZPq55PqDbkKSdJCWXD487UTE2sysNdt3IIsbvDkiVkbEtoj4SUTcHxHnFBy6jep1Yv1HgEez/0hxMKuBExq2fzwMbUqSNKRWFzf4I6pF278P/CnwQeAx4K6IuGiwYzNzN7CW/d+7OYdqFm2pk6ku2+61ahjalCRpSK0ubvCnwBWZ+b8ayj4bEWupAvSvhjj+OuC2iFgDPAgsoHrV2GcAImIpQGbOq29fDvwA+A7VPc13Am8Fzm9o8wZgZX2BhbuAtwFnAj0tnpskSYNqNTSPpXrhdH93s/+s2P1k5h0RMQX4ENXzlo8A52Tm4w3tN5pQb3ca1fs6vwO8OTOXNbT5UES8g2pFosVUo+ALMnN1KycmSdJQWg3NH1Jd+vznfuVvBB7fv/r+MvNGBng0JTPP6Ld9LXBtQZt30vzRGEmShk2rofkJ4FP1t5o8BCTVZdB3AZcNc98kSWorrb6E+qaI2Ar8Z6pVgAC+B7w9M78y3J2TJKmdFIdmRIynugy7MjPvGrkuSZLUnoofOcnMZ4AvAZNGrjuSJLWvVhc3WA/MGImOSJLU7loNzY8Cn4yIt0bESyJicuNnBPonSVLbaHX27N/V/36JaubsXlHfHjccnZIkqR21GppnjkgvJEl6DigKzYg4HPjvVEvYPR/4OrBokBdDS5J0yCm9p7kYmE91efavqVYF+vQI9UmSpLZUenn2PKp3Vv4fgIj4PPBgRIzLzD0j1jtJktpI6UjzJcC+F0dn5hrgGao3lEiS1BFKQ3McsLtf2TO0PpFIkqTnrNLQC+D2iNjVUHYYsCQifr23IDPPHc7OSZLUTkpD89YmZbcPZ0ckSWp3RaGZme8e6Y5IktTuWl1GT5KkjmVoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFRj00I+I9EfFYRDwVEWsj4vRB6p4XEcsj4icR8YuIWB0R5/arMz8issnnsJE/G0lSJxnV0IyIC4AbgGuAU4CHgLsj4tgBDnkd8H+BN9frLwPuahK0vwamNn4y86nhPwNJUicbP8q/dwVwS2YuqW9fFhFvAhYCV/avnJnv61e0OCLeDLwVeODZVfPHI9FhSZL2GrWRZkRMAF4NLO+3azlwWgtNTQK29yv7nYh4PCI2RcTXIuKUg+iqJElNjeZI8yhgHNDXr7wPeENJAxHxx0A3cFtD8QbgImA9VaC+D3gwIl6ZmY82aeNS4FKArq4uVqxYAcD06dOZNGkS69evB2DKlCnMnDmTlStXAjB+/Hh6enpYt24dO3bsAKBWq9HX1wccX9J9SdII2rJlCxs2bABg2rRpdHd3s3r1agAmTpxIrVZj1apV7Nq1C4Cenh42btzI1q1bAZg1a9a+fQOJzBzBU2j4oYguYDMwOzMfaCi/CpibmScOcfz5VGH5jsz86iD1xgH/BNyXmYsGa7NWq2Vvb28LZ9HcJdcfdBOSpIO05PLhaSci1mZmrdm+0ZwItA3YAxzTr/xo9h99PktDYM4bLDABMnMP0AuccOBdlSRpf6MWmpm5G1gLzOm3aw7VLNqmIuLtwO3A/My8c6jfiYgATgK2HHhvJUna32jPnr0OuC0i1gAPAguALuAzABGxFCAz59W330E1wvwAsDIi9o5Sd2fmk/U6VwEPA48CRwCLqEJz4SidkySpQ4xqaGbmHRExBfgQ1fOUjwDnZObj9Sr9n9dcQNXH6+ufve4Hzqh/PxK4meqy78+Bf6S6b7pmJM5BktS5RnukSWbeCNw4wL4zBtse4Jj3A+8fjr5JkjQY156VJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKjXpoRsR7IuKxiHgqItZGxOlD1H9dvd5TEfEvEbHgYNuUJOlAjGpoRsQFwA3ANcApwEPA3RFx7AD1XwYsq9c7Bfg48KmIOP9A25Qk6UCN9kjzCuCWzFySmd/LzMuALcDCAeovAH6UmZfV6y8BbgU+cBBtSpJ0QEYtNCNiAvBqYHm/XcuB0wY47NQm9e8FahHx/ANsU5KkAzJ+FH/rKGAc0NevvA94wwDHHAN8vUn98fX2otU2I+JS4NL65i8jYkNJ56UOcBSwbaw7IR2ov3z/sDX10oF2jGZo7pX9tqNJ2VD195bHIHWatpmZNwM3D91NqbNERG9m1sa6H1I7G83Q3AbsoRo9Njqa/UeKe/14gPrPAD+lCsdW25Qk6YCM2j3NzNwNrAXm9Ns1h2rGazOr2P8y6xygNzOfPsA2JUk6IKN9efY64LaIWAM8SDU7tgv4DEBELAXIzHn1+p8B3hsR1wM3Ab8HzAfmlrYpqZi3LaQhjGpoZuYdETEF+BAwFXgEOCczH69XObZf/cci4hzgf1A9QvIjYFFmfrGFNiUVqN/vlzSIyBxsDo4kSdrLtWclSSpkaEqSVMjQlCSpkKEpdbiIiMa/kgbmRCBJz7I3PNN/DtJ+xmIZPUltICKeB7wFeBFwOLAZuD8zt45px6Q25khT6kARMQn4LHAm8BtgE9V6zTuB+4HbM/P/RUQ44pR+y5Gm1JkWAf+GaiGQb0bEiUAN6AHOAk6KiIsz8ydj2Ump3TjSlDpQRDwA3JWZ1/UrH0e1XOVnge9n5pvGon9Su3L2rNRhImI81XKT50fEi+pl4yJiXGbuycyVVGs4d0fEK8eyr1K7MTSlDpOZzwC3Ur1S7wMR8eJ6WO5pqLYROA5fSi09i5dnpQ5TnzX7PODdwDVUcxvuBO4AngBOAn4feHlmvmas+im1I0NT6mARcSTV6/b+I3Ay8AtgF7AG+Hhmrh673kntx9CUOkhEHAH8ovExkvrI8zBgIjAL+JVhKTVnaEodJCJuohpFrgEez8wdTeq8MDO3+4ymtD9DU+oQETEX+DywA3gS+HvgXuBbwObM3BkRE4HbgQ9n5rfHrLNSmzI0pQ4REUuAPcC1wHnAhcDxwAZgGfANqgUPbsjMCWPVT6mdGZpSB6g/m/lfgCMy84MN5TOBS4A/oLqveSRwa2ZePCYdldqcoSl1iIh4IfDi+pqyE4Cn+00IugD4a+BVmflPY9VPqZ259qzUITJzO7C9/n037Js5G/WFDY4AnjIwpYEZmlIHy8zfNGxOAq4aq75IzwVenpUEQEQ8H9jTL0glNTA0JUkq5ILtkiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEL/H32y+Td9lfQYAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qobj = assemble(qc_ha)\n", + "counts = sim.run(qobj).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "結果は 「2」 のバイナリ表現である「10」です。有名な数学的問題 1+1 を解決できるコンピューターを構築しました!\n", + "\n", + "ここで残る3つの足し算の入力で同じ事を試してみると、アルゴリズムがそれらに対しても正しい結果を与えることを示すことができます。\n", + "\n", + "半加算器は足し算に必要な要素をすべて含んでいます。NOT, CNOTそしてToffoliゲートを用いることで、どのような大きさの数字の組合せでも足し合わせることができるプログラムを構築することができます。\n", + "\n", + "この3つのゲートは、足し算だけでなくコンピューティングにおけるすべてを行うのに十分です。実際、CNOTなしでも実行できます。値が「1」のビットを作るために本当に必要なのはNOTゲートだけです。Toffoliゲートは本質的には数学の世界における原子のようなもので、すべての問題解決手法をコンパイルできる最も単純な要素と言えます。\n", + "\n", + "このように、量子計算は原子を分割して行っていきます。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.13.0',\n", + " 'qiskit-aer': '0.5.0',\n", + " 'qiskit-ignis': '0.3.0',\n", + " 'qiskit-ibmq-provider': '0.6.0',\n", + " 'qiskit-aqua': '0.6.5',\n", + " 'qiskit': '0.18.0'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/case-for-quantum.ipynb b/translations/ja/ch-states/case-for-quantum.ipynb new file mode 100644 index 0000000..3373e07 --- /dev/null +++ b/translations/ja/ch-states/case-for-quantum.ipynb @@ -0,0 +1,409 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子コンピューターの場合" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "contents" + ] + }, + "source": [ + "## 目次\n", + "\n", + "1. [足し算の複雑さ](#adding) \n", + "2. [O記法(ビッグ・オー記法)](#big-o) \n", + "3. [複雑性理論](#complexity) \n", + "4. [デジタル計算を越すもの](#beyond) \n", + "5. [量子コンピューターを使う最適なケース](#when)\n", + "6. [参考文献](#references) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 足し算の複雑さ\n", + "\n", + "単純に述べると、量子コンピューターは古典コンピューターでは解くことができなかった問題を解くことができます。この理由を理解するために、最初にその問題を解くために必要な計算量を考える必要があります。\n", + "\n", + "まず、最初の章で検討したアルゴリズムを再度考えます。2つの数値を加算します。\n", + "```\n", + " 9213\n", + "+ 1854\n", + "= ????\n", + "```\n", + "\n", + "2つの$n$桁の数の足し算は、それぞれが2つの1桁の数字を足すシンプルな演算子で計算することができます。過程の複雑さを分析すると、これらの数の足し算が要求されている計算量やこれがどのように$n$に依存するかを考えることができます。この数を $c(n)$ と呼びます。\n", + "\n", + "最も簡単なケースは、繰り上がりのない足し算で、$n$回の基本的な足し算が要求されます。最悪なケースは、$n$回の繰り上がりの足し算を実行する必要がある場合です。それぞれの位に基本的な足し算が必要になります。これらの考えから、計算に必要な回数は以下で結論づけられます。\n", + "\n", + "$n \\leq c(n) \\leq 2n$\n", + "\n", + "\n", + "## 2. O記法(ビッグ・オー記法) \n", + "\n", + "この結果は、$c(n)$が$n$とともに線形に増加するということができます。より一般的に は、$n$が大きい場合に$c(n)$の上限として機能する$n$の線形関数を見つけることができると言えます。これは言葉にすると長くなるので、代わりに、これを`O記法`と表現します。\n", + "

    \n", + "

    \n", + " 定義:O記法(ビッグ・オー記法) (クリックすると開きます。)\n", + " \n", + "ある与えられた関数$f(x)$と$g(x)$と変数$x$に対して、式$f(x) = O(g(x))$の意味は以下: \n", + " \n", + "ある正の定数$M>0$と$x_0$が存在して、すべての$x>x_0$に対して、$$f(x) \\leq Mg(x)$$を満たす。\n", + "これを表現すると以下:\n", + "\n", + "$$\n", + "f(x) \\leq Mg(x) \\forall x>x_0\n", + "$$ \n", + "
    \n", + "

    \n", + "\n", + "O記法は、特定のプラットフォームやアルゴリズムの実装に関係なく、アルゴリズムに 必要なリソース/ランタイムが入力サイズとどのようにスケールするかを比較できるので便利です。以下に、入力サイズ$N$の関数としてのランタイム$N$の一般的なスケーリング係数の例を示します。問題のサイズが十分に大きい場合、$a$と$b$が一定である時、$O(a^n)$のアルゴリズムの実行時間が$O(n^b)$のアルゴリズムの実行時間を超えることは明らかです。\n", + "\n", + "
    \n", + " \"Drawing\"\n", + "
    さまざまな時間計算量の比較。nは入力ビットの数で、Nは要求される演算の数である。 [5]
    \n", + "
    \n", + "\n", + "この記法において、上記に書かれた性質は単に$c(n) = O(n)$として表現されています。これは特定のことを詳細に書く必要がなく、線形的な振る舞いであると捉えます。それ故、𝑐(𝑛)=𝑛、𝑐(𝑛)=2𝑛、またはその他の何かとは無関係に、単にそれを𝑐(𝑛)=𝑂(𝑛) と言うことができます。\n", + "\n", + "これまで検討してきたことには、隠れた仮定があります。桁数について話す際に、特定の数記法を使うことを前提としています。しかし、桁数は、10 進数、2進数、またはその他の、どの数記法を使っているかによって変わるでしょう。\n", + "例えば、数を示すのに必要なビット数$n_2$は、以下の式によって同じ数を示すのに必要な 10 進数の桁数$n_{10}$と関係しています。\n", + "\n", + "$n_2 = \\left\\lceil \\frac{\\log 10}{ \\log 2} \\, n_{10} \\right\\rceil \\approx 3.3 \\, n_{10}.$\n", + "\n", + "これもまた、線形関係があるので、O 記法での計算量は変わりません。これは実際に以下と同じことが言えます。\n", + "\n", + "$c(n_2) = O(n_2)$, $c(n_{10}) = O(n_{10})$, または$c(n_{10}) = O(n_{2})$ \n", + "\n", + "これは、数のシステムに何が使われているかを特定する必要がなく、単に桁数$n$のことを話すことができる理由です。\n", + "\n", + "\n", + "## 3. 複雑性理論 \n", + "\n", + "複雑性理論は、任意のアルゴリズムを実行するために必要な計算量の研究のことです。ある問題を解くための最適なアルゴリズムを考慮することによって、この問題を解く時の固有の計算量を研究することができます。\n", + "最適なアルゴリズムはすでに分かっているので、$O(n)$の複雑さの問題でもあることが分かっています。\n", + "掛け算はそれほどシンプルではありません。2つの$𝑛$桁の数値を掛け算する時に、学校で学んだアルゴリズムでは、1 桁の加算や乗算など、$O(n^2)$の基本的な操作が必要になります。漸近的な複雑さの低いアルゴリズムが見つかっていますが、$O(n)$の複雑さで掛け算を実行することは不可能であると広く考えられています。\n", + "\n", + "それでも、掛け算は最も複雑な問題ではありません。はるかに複雑な問題の例は、因数分解です: $n$桁の数を取り、その素因数を見つけることです。\n", + "この素因数分解の最もよく知られているアルゴリズムの計算量は、$O\\left(e^{n^{1/3}}\\right)$よりも悪いです。ここで、指数が含まれていることはとても急速に複雑性が増幅し、指数関数はその因数分解を解くため問題がハードになっていくことを示します。\n", + "\n", + "実際の計算時間で、この例を示すために最近の例を取り上げます。$^{1}$ 次の 829 桁の数字を考えてみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "rsa_250 = 2140324650240744961264423072839333563008614715144755017797754920881418023447140136643345519095804679610992851872470914587687396261921557363047454770520805119056493106687691590019759405693457452230589325976697471681738069364894699871578494975937497937" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このサイズの数値の掛け算や足し算をするために、あなたのコンピューターを使うと、瞬時に問題を解くことができることがわかるでしょう。コンピューターが持つプロセッサの数にコア秒数を取得するために必要な秒数を掛け算すると、 1 コア秒よりもはるかに少ないコア秒数が必要であることを確認してください。\n", + "\n", + "しかしながら、この数の因数分解の実行で以下の2つの因数を生成する計算では、スーパーコンピューターで約2700コア年もの実行時間を必要とします。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2140324650240744961264423072839333563008614715144755017797754920881418023447140136643345519095804679610992851872470914587687396261921557363047454770520805119056493106687691590019759405693457452230589325976697471681738069364894699871578494975937497937" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = 64135289477071580278790190170577389084825014742943447208116859632024532344630238623598752668347708737661925585694639798853367\n", + "q = 33372027594978156556226010605355114227940760344767554666784520987023841729210037080257448673296881877565718986258036932062711\n", + "p*q" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "より大きな数の因数分解では、スーパーコンピューターが天文学的な数字を実行する必要があるポイントに簡単に到達します。明らかにそのような問題は実践的に解くことは不可能です。\n", + "\n", + "これまでは、$n$桁の数字に対する数学的演算だけを考えてきましたが、その複雑さは、単純な一桁の演算の数で表されます。しかしながら、複雑性理論は、データーベースの探索やグラフを描いたり、ダイナミクスをシミュレーションしたり、*ゼルダの伝説*のダンジョンの移動など、あらゆる種類の問題の計算方法を分析できます。いずれの場合も、入力サイズとして機能する、パラメーター、またはパラメーターのセットを見つけ、O記法を用いて入力サイズの観点から計算量を表現することができます。例えば、$N$の要素のデータベースを探索する場合、その計算量は$O(N)$です。\n", + "\n", + "正式には、アルゴリズムの計算量の定義は、使っている計算の正確な理論モデルに依存します。各モデルには、プリミティブ演算と呼ばれる一連の基本演算があり、これを使用して任意のアルゴリズムを表現できます。ブール回路の場合、1章で検討したように、プリミティブ演算は論理ゲートです。アラン・チューリングによって提唱された、架空のコンピューターの形式である、チューリングマシーンの場合、テープに保存された情報をステップスルーして操作する装置を想定します。RAM モデルには、より複雑なプリミティブ操作のセットがあり、私たちが毎日使うコンピューターの理想的な形として機能しています。\n", + "これら全てのことが、離散値の離散された操作の基本となるデジタル方式のモデルです。それぞれ異なって見えるかもしれませんが、それぞれが他をシミュレートするのは非常に簡単であることがわかります。これは、ほとんどの場合、計算の複雑性は、これらのモデルでどのモデルを使うかに大きく依存ないことを意味します。したがって、RAM モデルやチューリングマシーンに特化して計算量を述べるのではなく、デジタルコンピューターの計算量をシンプルに述べることができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.デジタル計算を越すもの \n", + "デジタルコンピューターは今優勢なものですが、計算の形式はデジタルコンピューターだけではありません。アナログコンピューターもまた、過去に広く使われ、研究されてきました。デジタルコンピューターの離散的な値とは異なり、アナログコンピューターは連続的に変化する変数の精密な操作に基づいています。このアナログコンピューター・デバイスが、デジタルコンピューターで処理しにくい問題を迅速に解くことができると主張されることがあります。しかし、そのような主張は実現しませんでした。アナログコンピューターの大きな障害は、任意に高精度なデバイスを構築できないことです。デジタルコンピューターでは、誤差を目立たせるために比較的大きく離散化し、エラーを検出して修正する方法を実装できます。しかし、アナログコンピューターでは、誤差は任意に小さくて検出できないことがあり、またその影響が積み重なって計算を台無しにしてしまうことがあります。\n", + "\n", + "計算の理想モデルを提唱する場合、デジタルコンピューターの頑健性とアナログコンピューターの繊細な操作を結びつけることを探索するかもしれません。量子ビットが離散的な出力0と1を持つシステムであるが、連続パラメーターによってのみ記述できる状態で存在できることはすでに見てきました。これは、量子システムに典型的な「波と粒子」の二重性としてよく知られた概念の特定の例です。\n", + "量子ビットは、離散的または連続的のどちらかでは、完全に表現することができず、むしろその2つの組み合わせとして表現することができます。アインシュタインは以下$^{2}$の言葉を残しています。\n", + "\n", + "> 「時には一方の理論を使い、時には他方の理論を使わなければいけない場合もあれば、どちらかを使用する場合もあるようです。私たちは新しい種類の困難に直面しています。私たちは現実について2つの矛盾した写真を持っています。どちらも別々には現象を完全に説明してくれないが、一緒になら説明してくれます。」\n", + "\n", + "それ故、プリミティブ演算が量子ビットに適用されるゲートである量子コンピューターは、アナログでもデジタルでもなく、何かユニークなものです。次の章では、このユニークな性質がもたらす結果を探っていきます。量子コンピューターはデジタルコンピューターとは根本的に異なった計算複雑性の問題を解くことができます。実際、量子コンピューティングは特定のタスクで、古典コンピューターよりも指数関数的に速くなることができる唯一の技術として、知られています。計算時間を数年から数分に短縮できる可能性があります。量子誤り訂正が欠陥の影響をどのように取り除くことができるかもまた、私たちは探求します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. 量子コンピューターを使う最適なケース \n", + "\n", + "量子ビットと量子ゲートでは、デジタルやアナログの古典的なアルゴリズムと根本的に異なった新しいアルゴリズムを設計することができます。このような方法で、古典コンピューターで解くことができなかった問題の解法を見つけることを期待しています。\n", + "\n", + "これを行う一つの方法は、全体的な特性を決定したい関数を持っている時です。例えば、もし関数𝑓(𝑥)が最小値の時の変数𝑥の値を知りたい場合、または、関数𝑓(𝑥)が周期的な関数であれば、その関数の周期を知りたい場合です。デジタルコンピューターのアルゴリズムは、全体的な特性についての十分な情報を得るために、さまざまな異なる入力に対して、$f(x)$を計算するプロセスを使用することがあります。しかし、量子コンピューターでは、重ね合わせ状態を作り出すことができる現象が、関数をたくさんの可能な入力に同時に適用できることを意味します。そのような状態を測定すると、単に1つの結果を得られるだけなので、これは、全ての可能な出力にアクセスできるという意味ではありません。しかし、代わりに量子の干渉の結果に帰納することができ、これにより、私たちが知りたい全体的な特性が明らかになります。\n", + "\n", + "この典型的な記述は、たくさんの既に発見された量子アルゴリズムの機能を説明します。代表的な例として、Groverのアルゴリズムがあります。このアルゴリズムは、$N$のデータを探索する複雑さを $O(N)$ から $O(N^{1/2})$ に減らします。この2次の速度の向上は、機械学習や最適化問題のような非構造化探索として表現できるタスクを使用する多くのアプリケーションで役立つ可能性があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + "異なったプラットフォーム間でアルゴリズムのパフォーマンスを比較することは困難です。\n", + "O記法を通してわかることは、量子コンピューターと古典コンピューター間のスピードの違いがあるけれども、\n", + "十分に大きな問題の場合、量子探索アルゴリズムはいつも古典コンピューターで探索した結果よりも優れているということです。\n", + "
    " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# このコードは相互作用するグラフを作るものです。\n", + "from bokeh.layouts import column\n", + "from bokeh.models import ColumnDataSource, CustomJS, Slider\n", + "from bokeh.plotting import figure, show\n", + "from bokeh.embed import file_html\n", + "from bokeh.resources import CDN\n", + "import numpy as np\n", + "import IPython\n", + "\n", + "x = np.arange(0,500)\n", + "y_linear = x\n", + "y_sqrt = 7.5*np.sqrt(x)\n", + "\n", + "linear_source = ColumnDataSource(data=dict(x=x, y=y_linear))\n", + "sqrt_source = ColumnDataSource(data=dict(x=x, y=y_sqrt))\n", + "\n", + "plot = figure(\n", + " plot_height=400, \n", + " plot_width=800,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset,save\",\n", + " x_range=[0, 500], y_range=[0, 500], \n", + " x_axis_label=\"Size of Problem\",\n", + " y_axis_label=\"Time Taken to Find Solution\")\n", + "plot.line('x', 'y', source=linear_source, line_width=3, line_alpha=0.6, color=\"blue\", legend_label=\"Classical Search O(N)\")\n", + "plot.line('x', 'y', source=sqrt_source, line_width=3, line_alpha=0.6, color=\"red\", legend_label=\"Quantum Search O(√N)\")\n", + "plot.legend.location = \"top_left\"\n", + "\n", + "callback = CustomJS(args=dict(source=sqrt_source), code=\"\"\"\n", + " var data = source.data;\n", + " var f = (10-cb_obj.value)*2 + 3\n", + " var x = data['x']\n", + " var y = data['y']\n", + " for (var i = 0; i < x.length; i++) {\n", + " y[i] = f*Math.sqrt(x[i])\n", + " }\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "speed_slider = Slider(title=\"Relative Speed of Quantum Computer\", value=7.5, start=1.0, end=10.0, step=0.1, show_value=False)\n", + "speed_slider.js_on_change('value', callback)\n", + "\n", + "layout = column(plot, speed_slider)\n", + "\n", + "caption = \"\"\"\n", + "異なったプラットフォーム間でアルゴリズムのパフォーマンスを比較することは困難です。\n", + "O記法を通してわかることは、量子コンピューターと古典コンピューター間のスピードの違いがあるけれども、\n", + "十分に大きな問題の場合、量子探索アルゴリズムはいつも古典コンピューターで探索した結果よりも優れているということです。\n", + "\"\"\"\n", + "\n", + "html_repr = file_html(layout, CDN)\n", + "html_fig = \"
    {0}
    {1}
    \".format(html_repr, caption)\n", + "IPython.display.HTML(html_fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "目覚ましい速度の向上は、素因数分解の問題を解く中心となる周期関数を分析するショアのアルゴリズムでも得られます。これにより、$O(𝑛^3)$の計算量で$𝑛$桁の数字を因数分解する量子ソリューションを得ることができます。これは、$O\\left(e^{n^{1/3}}\\right)$よりも悪い計算量を持つデジタルコンピューターと比べて超多項式の高速化となります。\n", + "\n", + "量子アルゴリズムに対する別のアプローチは、量子問題を解決するために、量子コンピューターを使うことです。次のチャプターでわかるように、量子状態を表現するには、量子ビットの数に応じて指数関数的にスケールする情報が必要です。しかし、量子コンピューターでは、同じ仕事をするために、$n$量子ビット必要なだけです。このように、量子状態を表現したり、操作したりする自然の特性があるため、分子や素粒子のような関心のある量子のシステムを研究し、よりよく理解することができるようになります。\n", + "\n", + "したがって、さまざまな産業で量子アルゴリズムを適用し適応することで、ビジネスや科学の分野で破壊的なユースケースを可能にすると期待されています。これには、創薬、機械学習、材料発見、オプション価格設定、タンパク質の折りたたみ構造やサプライチェーンにおけるブレークスルーが含まれます。$^{3}$特に有望なのは、古典アルゴリズムが固有のスケーリング限界に直面している問題であり、大きな古典的なデータセットをロードする必要がない問題です。量子優位性のために、与えられた問題の解答は量子力学がすべてのパスを通らなくても解が得られるような構造を持つ指数関数的に多くのエンタングルした自由度に強く依存する必要があります。しかし、量子コンピューターにとって「簡単な」問題(多項式時間で解ける問題)と他の複雑性理論クラスとの正確な関係は、まだ未解決な問題であることに留意してください。$^{4}$\n", + "\n", + "これは、量子アルゴリズムが特有の方法で計算を実行する方法のほんの一部です。これらのアプローチの詳細は後の章で扱います。しかし、まず複数量子ビットを学び、量子ゲートの完全なセットを理解することに時間を費やす必要があります。これについて、次の章で学びます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. 参考文献 \n", + "\n", + "1. https://lists.gforge.inria.fr/pipermail/cado-nfs-discuss/2020-February/001166.html\n", + "2. Albert Einstein, Leopold Infeld (1938). The Evolution of Physics: The Growth of Ideas from Early Concepts to Relativity and Quanta. Cambridge University Press.\n", + "3. https://www.ibm.com/thought-leadership/institute-business-value/report/quantumstrategy\n", + "4. https://www.cs.virginia.edu/~robins/The_Limits_of_Quantum_Computers.pdf\n", + "5. Image: Cmglee / CC BY-SA (https://creativecommons.org/licenses/by-sa/4.0)" + ] + } + ], + "metadata": { + "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.7.7" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-states/images/1920px-Comparison_computational_complexity.png b/translations/ja/ch-states/images/1920px-Comparison_computational_complexity.png new file mode 100644 index 0000000..2f23d76 Binary files /dev/null and b/translations/ja/ch-states/images/1920px-Comparison_computational_complexity.png differ diff --git a/translations/ja/ch-states/images/atoms10.png b/translations/ja/ch-states/images/atoms10.png new file mode 100644 index 0000000..b0ed055 Binary files /dev/null and b/translations/ja/ch-states/images/atoms10.png differ diff --git a/translations/ja/ch-states/images/basis.svg b/translations/ja/ch-states/images/basis.svg new file mode 100644 index 0000000..aa3e9de --- /dev/null +++ b/translations/ja/ch-states/images/basis.svg @@ -0,0 +1,216 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-states/images/basis2.svg b/translations/ja/ch-states/images/basis2.svg new file mode 100644 index 0000000..caf59ea --- /dev/null +++ b/translations/ja/ch-states/images/basis2.svg @@ -0,0 +1,443 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translations/ja/ch-states/images/bloch.png b/translations/ja/ch-states/images/bloch.png new file mode 100644 index 0000000..168e19f Binary files /dev/null and b/translations/ja/ch-states/images/bloch.png differ diff --git a/translations/ja/ch-states/images/bloch_HZH.svg b/translations/ja/ch-states/images/bloch_HZH.svg new file mode 100644 index 0000000..6cb9fe1 --- /dev/null +++ b/translations/ja/ch-states/images/bloch_HZH.svg @@ -0,0 +1,8939 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Apply H-gate + Apply Z-gate + Apply H-gate + Start + + diff --git a/translations/ja/ch-states/images/car_track_1.jpg b/translations/ja/ch-states/images/car_track_1.jpg new file mode 100644 index 0000000..fc64f9d Binary files /dev/null and b/translations/ja/ch-states/images/car_track_1.jpg differ diff --git a/translations/ja/ch-states/images/car_track_1.png b/translations/ja/ch-states/images/car_track_1.png new file mode 100644 index 0000000..9d6a263 Binary files /dev/null and b/translations/ja/ch-states/images/car_track_1.png differ diff --git a/translations/ja/ch-states/images/car_track_2.jpg b/translations/ja/ch-states/images/car_track_2.jpg new file mode 100644 index 0000000..1b3fb2a Binary files /dev/null and b/translations/ja/ch-states/images/car_track_2.jpg differ diff --git a/translations/ja/ch-states/images/car_track_2.png b/translations/ja/ch-states/images/car_track_2.png new file mode 100644 index 0000000..434b21e Binary files /dev/null and b/translations/ja/ch-states/images/car_track_2.png differ diff --git a/translations/ja/ch-states/images/classical_circuit.png b/translations/ja/ch-states/images/classical_circuit.png new file mode 100644 index 0000000..b2c37de Binary files /dev/null and b/translations/ja/ch-states/images/classical_circuit.png differ diff --git a/translations/ja/ch-states/images/cnot_xor.svg b/translations/ja/ch-states/images/cnot_xor.svg new file mode 100644 index 0000000..2406c35 --- /dev/null +++ b/translations/ja/ch-states/images/cnot_xor.svg @@ -0,0 +1,195 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Input A + Input B + A XOR B + Input A + diff --git a/translations/ja/ch-states/images/half-adder.svg b/translations/ja/ch-states/images/half-adder.svg new file mode 100644 index 0000000..b65b9b9 --- /dev/null +++ b/translations/ja/ch-states/images/half-adder.svg @@ -0,0 +1,1470 @@ + + + + + + + + 2020-11-13T14:23:48.418983 + image/svg+xml + + + Matplotlib v3.3.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Encodeinput + Do operationson bits + Extractoutput + + + + + + + + diff --git a/translations/ja/ch-states/images/heisenberg_xkcd.png b/translations/ja/ch-states/images/heisenberg_xkcd.png new file mode 100644 index 0000000..c2385f0 Binary files /dev/null and b/translations/ja/ch-states/images/heisenberg_xkcd.png differ diff --git a/translations/ja/ch-states/images/quantum_circuit.png b/translations/ja/ch-states/images/quantum_circuit.png new file mode 100644 index 0000000..ecaa0a1 Binary files /dev/null and b/translations/ja/ch-states/images/quantum_circuit.png differ diff --git a/translations/ja/ch-states/images/uni1.png b/translations/ja/ch-states/images/uni1.png new file mode 100644 index 0000000..e5568e2 Binary files /dev/null and b/translations/ja/ch-states/images/uni1.png differ diff --git a/translations/ja/ch-states/images/x-measurement.svg b/translations/ja/ch-states/images/x-measurement.svg new file mode 100644 index 0000000..67a2338 --- /dev/null +++ b/translations/ja/ch-states/images/x-measurement.svg @@ -0,0 +1,9743 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Measure in Z-basis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transform to Z-basis + Transform back to X-basis + diff --git a/translations/ja/ch-states/introduction.ipynb b/translations/ja/ch-states/introduction.ipynb new file mode 100644 index 0000000..dad0295 --- /dev/null +++ b/translations/ja/ch-states/introduction.ipynb @@ -0,0 +1,88 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# はじめに" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子力学を難しいと感じるのはあなただけではありません。 私たちの直観は日々の経験に基づいているため、原子や電子よりもボールやバナナの動きを理解するのに長けています。 量子は、最初はランダムで混沌としたもののように見えるかもしれませんが、それらはただ違ったルールに従っているだけです。 このルールが何かを理解すると、新しい強力なテクノロジーを作ることができます。 量子コンピューティングは、その最も革命的な例です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image1](images/atoms10.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子コンピューティングへの旅を始めるために、いまの知識をテストしましょう。「ビット」について、正しい説明は次のうちどれですか?\n", + "\n", + "1. 大工が使用する刃
    \n", + "2. 情報の最小単位: 0 または 1
    \n", + "3. 馬術用語の轡(くつわ)の馬銜(はみ)
    \n", + "\n", + "上記のどれでも正解です。「ビット」というのは非常に多目的な言葉です!ただここでの議論においては、2番を選択した方は、正しい方向に向かっています。情報を一連の0と1として保存および処理できるという考えは、大きな概念上のハードルですが、今日のほとんどの人はそれについて不思議に思うことなく知っています。ここを出発点として、今度は量子力学のルールに従うビットを想像することができます。これらの量子ビットまたはキュービットは、新しいさまざまな方法で情報を処理できるようにしてくれます。\n", + "\n", + "量子ビットの世界をより深く探っていくことにしましょう。これには、ゲートを適用するときに何が起きているのかをトラッキングする何らかの方法が必要になります。これを行う最も強力な方法が、ベクトルや行列といった数学を用いることです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image2](images/bloch.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この章は、線形代数(ベクトルや行列)に精通していることが望ましいです。そうでない方も読み進めていただくことはできますが、わからないことがあれば[量子コンピューティングのための線形代数入門](../ch-prerequisites/linear_algebra.html)を参照することをおすすめします。\n", + "\n", + "量子コンピューティング用のPythonベースのフレームワークであるQiskitを使用するため、Pythonの基本を知ることも役立ちます。入門書が必要な場合は、[PythonおよびJupyterノートブックの概要](../ch-prerequisites/python-and-jupyter-notebooks.html)を参照してください。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/old-states-many-qubits.ipynb b/translations/ja/ch-states/old-states-many-qubits.ipynb new file mode 100644 index 0000000..9402d10 --- /dev/null +++ b/translations/ja/ch-states/old-states-many-qubits.ipynb @@ -0,0 +1,247 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# States for Many Qubits" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We've already seen how to write down the state of a single qubit. Now we can look at how to do it when we have more than just one.\n", + "\n", + "Let's start by looking at bits. The state of a single bit is expressed as `0` or `1`. For two bits we can have `00`, `01`, `10` or `11`, where each digit tells us the state of one of the bits. For more bits, we just use longer strings of bit values, known as 'bit strings'.\n", + "\n", + "The conversion to qubits is quite straightforward: we simply put a $|$ and $\\rangle$ around bit strings. For example, to describe two qubits, both of which are in state $|0\\rangle$, we write $|00\\rangle$. The four possible bit strings for two bits are then converted into four orthogonal states, which together completely specify the state of two qubits: \n", + "\n", + "$$\n", + "|a\\rangle = a_{00}|00\\rangle+ a_{01}|01\\rangle+a_{10}|10\\rangle+ a_{11}|11\\rangle = \\begin{pmatrix} a_{00} \\\\\\\\ a_{01} \\\\\\\\ a_{10} \\\\\\\\ a_{11} \\end{pmatrix}.\n", + "$$\n", + "\n", + "As in the single-qubit case, the elements of this vector are complex numbers. We require the state to be normalized so that $\\langle a|a\\rangle = 1$, and probabilites are given by the Born rule \\($p_{00}^{zz} = |\\langle00|a\\rangle |^2$, etc\\)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When designing quantum software, there are times when we will want to look at the state of our qubits. This can be done in Qiskit using the 'statevector simulator'.\n", + "\n", + "For example, here is the state vector for a simple circuit on two qubits." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "\\begin{pmatrix}(0.5000000000000001+0j)\\\\(0.5+0j)\\\\(0.3536941345835999+0.353412590552683j)\\\\(0.35369413458359983+0.3534125905526829j)\\end{pmatrix}" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# set up circuit (no measurements required)\n", + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.rz(3.14/4,1)\n", + "\n", + "# set up simulator that returns statevectors\n", + "backend = Aer.get_backend('aer_simulator')\n", + "\n", + "# run the circuit to get the state vector\n", + "qc.save_statevector()\n", + "state = execute(qc,backend).result().get_statevector()\n", + "\n", + "# now we use some fanciness to display it in latex\n", + "from IPython.display import display, Markdown, Latex\n", + "def state2latex(state):\n", + " state_latex = '\\\\begin{pmatrix}'\n", + " for amplitude in state:\n", + " state_latex += str(amplitude) + '\\\\\\\\'\n", + " state_latex = state_latex[0:-2]\n", + " state_latex += '\\end{pmatrix}'\n", + " display(Markdown(state_latex))\n", + "\n", + "state2latex(state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that Python uses $j$ to denote $\\sqrt{-1}$, rather than $i$ as we use." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The tensor product" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we have two qubits, with one in state $|a\\rangle = a_0 |0\\rangle + a_1 |1\\rangle$ and the other in state $|b\\rangle = b_0 |0\\rangle + b_1 |1\\rangle$, and we want to create the two-qubit state that describes them both. \n", + "\n", + "To see how to do this, we can use the Born rule as a guide. We know that the probability of getting a `0` is $| a_0 |^2$ for one qubit and $| b_0 |^2$ for the other. The probability of getting `00` is therefore $| a_0 |^2 | b_0 |^2 = | a_0 b_0 |^2$. Working backwards from this probability, it makes sense for the $|00\\rangle$ state to have the amplitude $a_{0}b_0$. Repeating this principle, the whole state becomes.\n", + "\n", + "$$\n", + "a_{0}b_0|00\\rangle+ a_{0}b_1|01\\rangle+a_{1}b_0|10\\rangle+ a_{1}b_1|11\\rangle.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the result we would get when using the 'tensor product' [1], which is a standard method for combining vectors and matrices in a way that preserves all the information they contain. Using the notation of the tensor product, we can write this state as $|a\\rangle \\otimes |b\\rangle$.\n", + "\n", + "We also make use of the tensor product to represent the action of single-qubit matrices on these multiqubit vectors. For example, here's an $X$ that acts only on the qubit on the right:\n", + "\n", + "$$\n", + "I \\otimes X= \\begin{pmatrix} 1&0 \\\\\\\\ 0&1 \\end{pmatrix} \\otimes \\begin{pmatrix} 0&1 \\\\\\\\ 1&0 \\end{pmatrix} = \\begin{pmatrix} 0&1&0&0 \\\\\\\\ 1&0&0&0\\\\\\\\0&0&0&1\\\\\\\\0&0&1&0 \\end{pmatrix}, ~~~ I= \\begin{pmatrix} 1&0 \\\\\\\\ 0&1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "This was made by combining the $X$ matrix for the qubit on the right with the single-qubit identity operator, $I$, for the qubit on the left. The identity operator is the unique operator that does absolutely nothing to a vector. The two-qubit operation resulting from the tensor product allows us to calculate expectation values for x measurements of the qubit on the left, in exactly the same way as before." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Entangled states" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the tensor product we can construct matrices such as $X \\otimes X$, $Z \\otimes Z$, $Z \\otimes X$, and so on. The expectation values of these also represent probabilities. For example, for a general two qubit state $|a\\rangle$,\n", + "\n", + "$$\n", + "\\langle a|Z\\otimes Z|a\\rangle = P^{zz}_{0} - P^{zz}_{1}.\n", + "$$\n", + "\n", + "The $zz$ in $P^{zz}_{0}$ and $P^{zz}_{1}$ refers to the fact that these probabilities describe the outcomes when a z measurement is made on both qubits. A quantity such as $\\langle a|Z\\otimes X|a\\rangle$ will reflect similar probabilities for different choices of measurements on the qubits.\n", + "\n", + "The $0$ and $1$ of $P^{zz}_{0}$ and $P^{zz}_{1}$ refer to whether there are an even (for $0$) or odd (for $1$) number of ```1``` outcomes in the output. So $P^{zz}_{0}$ is the probability that the result is either ```00``` or ```11```, and $P^{zz}_{1}$ is the probability that the result is either ```01``` or ```10```.\n", + "\n", + "These multiqubit Pauli operators can be used to analyze a new kind of state, that cannot be described as a simple tensor product of two independent qubit states. For example,\n", + "\n", + "$$\n", + "|\\Phi^+\\rangle =\\frac{1}{\\sqrt{2}}\\left(|00\\rangle+|11\\rangle\\right).\n", + "$$\n", + "\n", + "This represents a quantum form of correlated state, known as an entangled state. The correlations can be easily seen from the fact that only the `00` and `11` outcomes are possible when making z measurements of both qubits, and so the outcomes of these measurements will always agree. This can also be seen from the fact that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " $$\n", + "\\langle \\Phi^+|Z\\otimes Z|\\Phi^+\\rangle = 1, \\quad \\therefore P^{zz}_{0} = 1 .\n", + "$$\n", + "\n", + "These aren't the only correlations in this state. If you use x measurements, you'd find that the results still always agree. For y measurements, they always disagree. So we find that $\\langle \\Phi^+|X\\otimes X|\\Phi^+\\rangle = 1$ and $\\langle \\Phi^+|Y\\otimes Y|\\Phi^+\\rangle = -1$. There are a lot of correlations in this little state!\n", + "\n", + "For more qubits, we can get ever larger multiqubit Pauli operators. In this case, the probabilities such as $P^{zz\\ldots zz}_{0}$ and $P^{zz\\ldots zz}_{1}$ are understood in the same way as for two qubits: they reflect the cases where the total output bit string consists of an even or odd number of ```1```s, respectively. We can use these to quantify even more complex correlations. \n", + "\n", + "The generation of complex entangled states is a neccessary part of gaining a quantum advantage. The use of large vectors and multiqubit correlation functions is therefore important if we want to mathematically analyze what our qubits are doing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[1] For more on tensor products, see:\n", + " Michael A. Nielsen and Isaac L. Chuang. 2011. *Quantum Computation and Quantum Information: 10th Anniversary Edition (10th ed.).* Cambridge University Press: New York, NY, USA." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/old-unique-properties-qubits.ipynb b/translations/ja/ch-states/old-unique-properties-qubits.ipynb new file mode 100644 index 0000000..6fc5ca2 --- /dev/null +++ b/translations/ja/ch-states/old-unique-properties-qubits.ipynb @@ -0,0 +1,796 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Unique Properties of Qubits" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You now know something about bits, and about how our familiar digital computers work. All the complex variables, objects and data structures used in modern software are basically all just big piles of bits. Those of us who work on quantum computing call these *classical variables.* The computers that use them, like the one you are using to read this article, we call *classical computers*.\n", + "\n", + "In quantum computers, our basic variable is the _qubit_: a quantum variant of the bit. These are quantum objects, obeying the laws of quantum mechanics. Unlike any classical variable, these cannot be represented by some number of classical bits. They are fundamentally different.\n", + "\n", + "\n", + "The purpose of this section is to give you your first taste of what a qubit is, and how they are unique. We'll do this in a way that requires essentially no math. This means leaving terms like 'superposition' and 'entanglement' until future sections, since it is difficult to properly convey their meaning without pointing at an equation.\n", + "\n", + "Instead, we will use another well-known feature of quantum mechanics: the uncertainty principle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Heisenberg's uncertainty principle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The most common formulation of the uncertainty principle refers to the position and momentum of a particle: the more precisely its position is defined, the more uncertainty there is in its momentum, and vice-versa." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/heisenberg_xkcd.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a common feature of quantum objects, though it need not always refer to position and momentum. There are many possible sets of parameters for different quantum objects, where certain knowledge of one means that our observations of the others will be completely random.\n", + "\n", + "To see how the uncertainty principle affects qubits, we need to look at measurement. As we saw in the last section, this is the method by which we extract a bit from a qubit." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0)\n", + "\n", + "measure_z.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On the [Circuit Composer](https://quantum-computing.ibm.com/composer), the same operation looks like this.\n", + "\n", + "![A z measurement](images/uni1.png)\n", + "\n", + "This version has a small ‘z’ written in the box that represents the operation. This hints at the fact that this kind of measurement is not the only one. In fact, it is only one of an infinite number of possible ways to extract a bit from a qubit. Specifically, it is known as a *z measurement*.\n", + "\n", + "Another commonly used measurement is the *x measurement*. It can be performed using the following sequence of gates." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0)\n", + "measure_x.measure(0,0)\n", + "\n", + "measure_x.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Later chapters will explain why this sequence of operations performs a new kind of measurement. For now, you'll need to trust us.\n", + "\n", + "Like the position and momentum of a quantum particle, the z and x measurements of a qubit are governed by the uncertainty principle. Below we'll look at results from a few different circuits to see this effect in action.\n", + "\n", + "#### Results for an empty circuit\n", + "\n", + "The easiest way to see an example is to take a freshly initialized qubit." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_0 = QuantumCircuit(1)\n", + "\n", + "qc_0.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qubits are always initialized such that they are certain to give the result `0` for a z measurement. The resulting histogram will therefore simply have a single column, showing the 100% probability of getting a `0`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_0 + measure_z\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we instead do an x measurement, the results will be completely random." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_0 + measure_x\n", + "\n", + "print('Results for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the reason why the results are not split exactly 50/50 here is because we take samples by repeating the circuit a finite number of times, and so there will always be statistical noise. In this case, the default of `shots=1024` was used." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Results for a single Hadamard\n", + "\n", + "Now we'll try a different circuit. This has a single gate called a Hadamard, which we will learn more about in future sections." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_plus = QuantumCircuit(1)\n", + "qc_plus.h(0)\n", + "\n", + "qc_plus.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see what effect it has, let's first try the z measurement." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_plus + measure_z\n", + "\n", + "qc.draw()\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that it is the results of the z measurement that are random for this circuit.\n", + "\n", + "Now let's see what happens for an x measurement." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_plus + measure_x\n", + "\n", + "print('Results for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the x measurement, it is certain that the output for this circuit is `0`. The results here are therefore very different to what we saw for the empty circuit. The Hadamard has lead to an entirely opposite set of outcomes.\n", + "\n", + "#### Results for a y rotation\n", + "\n", + "Using other circuits we can manipulate the results in different ways. Here is an example with an `ry` gate." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_y = QuantumCircuit(1)\n", + "qc_y.ry( -3.14159/4,0)\n", + "\n", + "qc_y.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will learn more about `ry` in future sections. For now, just notice the effect it has for the z and x measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_y + measure_z\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have a case that we have not seen before. The z measurement is most likely to output `0`, but it is not completely certain. A similar effect is seen below for the x measurement: it is most likely, but not certain, to output `1`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_y + measure_x\n", + "\n", + "print('\\nResults for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results hint at an important principle: Qubits have a limited amount of certainty that they can hold. This ensures that, despite the different ways we can extract outputs from a qubit, it can only be used to store a single bit of information. In the case of the blank circuit, this certainty was dedicated entirely to the outcomes of z measurements. For the circuit with a single Hadamard, it was dedicated entirely to x measurements. In this case, it is shared between the two." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Einstein vs. Bell" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have now played with some of the features of qubits, but we haven't done anything that couldn't be reproduced by a few bits and a random number generator. You can therefore be forgiven for thinking that quantum variables are just classical variables with some randomness bundled in.\n", + "\n", + "This is essentially the claim made by Einstein, Podolsky and Rosen back in 1935. They objected to the uncertainty seen in quantum mechanics, and thought it meant that the theory was incomplete. They thought that a qubit should always know what output it would give for both kinds of measurement, and that it only seems random because some information is hidden from us. As Einstein said: God does not play dice with the universe.\n", + "\n", + "No one spoke of qubits back then, and people hardly spoke of computers. But if we translate their arguments into modern language, they essentially claimed that qubits can indeed be described by some form of classical variable. They didn’t know how to do it, but they were sure it could be done. Then quantum mechanics could be replaced by a much nicer and more sensible theory.\n", + "\n", + "It took until 1964 to show that they were wrong. J. S. Bell proved that quantum variables behaved in a way that was fundamentally unique. Since then, many new ways have been found to prove this, and extensive experiments have been done to show that this is exactly the way the universe works. We'll now consider a simple demonstration, using a variant of _Hardy’s paradox_.\n", + "\n", + "For this we need two qubits, set up in such a way that their results are correlated. Specifically, we want to set them up such that we see the following properties.\n", + "\n", + "1. If z measurements are made on both qubits, they never both output `0`.\n", + "2. If an x measurement of one qubit outputs `1`, a z measurement of the other will output `0`.\n", + "\n", + "If we have qubits that satisfy these properties, what can we infer about the remaining case: an x measurement of both?\n", + "\n", + "For example, let's think about the case where both qubits output `1` for an x measurement. By applying property 2 we can deduce what the result would have been if we had made z measurements instead: We would have gotten an output of `0` for both. However, this result is impossible according to property 1. We can therefore conclude that an output of `1` for x measurements of both qubits must also be impossible.\n", + "\n", + "The paragraph you just read contains all the math in this section. Don't feel bad if you need to read it a couple more times!\n", + "\n", + "Now let's see what actually happens. Here is a circuit, composed of gates you will learn about in later sections. It prepares a pair of qubits that will satisfy the above properties." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_hardy = QuantumCircuit(2)\n", + "qc_hardy.ry(1.911,1)\n", + "qc_hardy.cx(1,0)\n", + "qc_hardy.ry(0.785,0)\n", + "qc_hardy.cx(1,0)\n", + "qc_hardy.ry(2.356,0)\n", + "\n", + "qc_hardy.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see it in action. First a z measurement of both qubits." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two z measurements:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "# z measurement on both qubits\n", + "measurements.measure(0,0)\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two z measurements:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probability of `00` is zero, and so these qubits do indeed satisfy property 1.\n", + "\n", + "Next, let's see the results of an x measurement of one and a z measurement of the other." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two x measurement on qubit 0 and z measurement on qubit 1:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "# x measurement on qubit 0\n", + "measurements.h(0)\n", + "measurements.measure(0,0)\n", + "# z measurement on qubit 1\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two x measurement on qubit 0 and z measurement on qubit 1:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probability of `11` is zero. You'll see the same if you swap around the measurements. These qubits therefore also satisfy property 2.\n", + " \n", + "\n", + "Finally, let's look at an x measurement of both." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two x measurement on both qubits:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "measurements.h(0)\n", + "measurements.measure(0,0)\n", + "measurements.h(1)\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two x measurement on both qubits:')\n", + "counts = execute(qc,Aer.get_backend('aer_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We reasoned that, given properties 1 and 2, it would be impossible to get the output `11`. From the results above, we see that our reasoning was not correct: one in every dozen results will have this 'impossible' result.\n", + "\n", + "So where did we go wrong? Our mistake was in the following piece of reasoning.\n", + "\n", + "> By applying property 2 we can deduce what the result would have been if we had made z measurements instead\n", + "\n", + "We used our knowledge of the x outputs to work out what the z outputs were. Once we’d done that, we assumed that we were certain about the value of both. More certain than the uncertainty principle allows us to be. And so we were wrong.\n", + "\n", + "Our logic would be completely valid if we weren’t reasoning about quantum objects. If it was some non-quantum variable, that we initialized by some random process, the x and z outputs would indeed both be well defined. They would just be based on some pre-determined list of random numbers in our computer, or generated by some deterministic process. Then there would be no reason why we shouldn't use one to deduce the value of the other, and our reasoning would be perfectly valid. The restriction it predicts would apply, and it would be impossible for both x measurements to output `1`.\n", + "\n", + "But our qubits behave differently. The uncertainty of quantum mechanics allows qubits to dodge restrictions placed on classical variables. It allows them to do things that would otherwise be impossible. Indeed, this is the main thing to take away from this section:\n", + "\n", + "> A physical system in a definite state can still behave randomly.\n", + "\n", + "This is the first of the key principles of the quantum world. It needs to become your new intuition, as it is what makes quantum systems different to classical systems. It's what makes quantum computers able to outperform classical computers. It leads to effects that allow programs made with quantum variables to solve problems in ways that those with normal variables cannot. But just because qubits don’t follow the same logic as normal computers, it doesn’t mean they defy logic entirely. They obey the definite rules laid out by quantum mechanics.\n", + "\n", + "If you’d like to learn these rules, we’ll use the remainder of this chapter to guide you through them. We'll also show you how to express them using math. This will provide a foundation for later chapters, in which we'll explain various quantum algorithms and techniques." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/old-writing-down-qubit-states.ipynb b/translations/ja/ch-states/old-writing-down-qubit-states.ipynb new file mode 100644 index 0000000..4d2b105 --- /dev/null +++ b/translations/ja/ch-states/old-writing-down-qubit-states.ipynb @@ -0,0 +1,624 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Writing Down Qubit States" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the previous chapter we saw that there are multiple ways to extract an output from a qubit. The two methods we've used so far are the z and x measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# z measurement of qubit 0\n", + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0);\n", + "\n", + "# x measurement of qubit 0\n", + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0)\n", + "measure_x.measure(0,0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes these measurements give results with certainty. Sometimes their outputs are random. This all depends on which of the infinitely many possible states our qubit is in. We therefore need a way to write down these states and figure out what outputs they'll give. For this we need some notation, and we need some math." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The z basis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you do nothing in a circuit but a measurement, you are certain to get the outcome `0`. This is because the qubits always start in a particular state, whose defining property is that it is certain to output a `0` for a z measurement.\n", + "\n", + "We need a name for this state. Let's be unimaginative and call it $0$ . Similarly, there exists a qubit state that is certain to output a `1`. We'll call this $1$.\n", + "\n", + "These two states are completely mutually exclusive. Either the qubit definitely outputs a ```0```, or it definitely outputs a ```1```. There is no overlap.\n", + "\n", + "One way to represent this with mathematics is to use two orthogonal vectors.\n", + "\n", + "$$\n", + "|0\\rangle = \\begin{pmatrix} 1 \\\\\\\\\\\\ 0 \\end{pmatrix} \\, \\, \\, \\, |1\\rangle =\\begin{pmatrix} 0 \\\\\\\\\\\\ 1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "This is a lot of notation to take in all at once. First let's unpack the weird $|$ and $\\rangle$ . Their job is essentially just to remind us that we are talking about the vectors that represent qubit states labelled $0$ and $1$. This helps us distinguish them from things like the bit values ```0``` and ```1``` or the numbers 0 and 1. It is part of the bra-ket notation, introduced by Dirac.\n", + "\n", + "If you are not familiar with vectors, you can essentially just think of them as lists of numbers which we manipulate using certain rules. If you are familiar with vectors from your high school physics classes, you'll know that these rules make vectors well-suited for describing quantities with a magnitude and a direction. For example, velocity of an object is described perfectly with a vector. However, the way we use vectors for quantum states is slightly different to this. So don't hold on too hard to your previous intuition. It's time to do something new!\n", + "\n", + "In the example above, we wrote the vector as a vertical list of numbers. We call these _column vectors_. In Dirac notation, they are also called _kets_.\n", + "\n", + "Horizontal lists are called _row vectors_. In Dirac notation they are _bras_. They are represented with a $\\langle$ and a $|$.\n", + "\n", + "$$\n", + "\\langle 0| = \\begin{pmatrix} 1 & 0\\end{pmatrix} \\, \\, \\, \\, \\langle 1| =\\begin{pmatrix} 0 & 1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "The rules on how to manipulate vectors define what it means to add or multiply them. For example, to add two vectors we need them to be the same type (either both column vectors, or both row vectors) and the same length. Then we add each element in one list to the corresponding element in the other. For a couple of arbitrary vectors that we'll call $a$ and $b$, this works as follows.\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} +\\begin{pmatrix} b_0 \\\\\\\\ b_1 \\end{pmatrix}=\\begin{pmatrix} a_0+b_0 \\\\\\\\ a_1+b_1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "To multiple a vector by a number, we simply multiply every element in the list by that number:\n", + "\n", + "$$\n", + "x \\times\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} = \\begin{pmatrix} x \\times a_0 \\\\\\\\ x \\times a_1 \\end{pmatrix}\n", + "$$\n", + "\n", + "Multiplying a vector with another vector is a bit more tricky, since there are multiple ways we can do it. One is called the 'inner product', and works as follows.\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 & a_1 \\end{pmatrix} \\begin{pmatrix} b_0 \\\\\\\\ b_1 \\end{pmatrix}= a_0~b_0 + a_1~b_1.\n", + "$$\n", + "\n", + "Note that the right hand side of this equation contains only normal numbers being multipled and added in a normal way. The inner product of two vectors therefore yields just a number. As we'll see, we can interpret this as a measure of how similar the vectors are.\n", + "\n", + "The inner product requires the first vector to be a bra and the second to be a ket. In fact, this is where their names come from. Dirac wanted to write the inner product as something like $\\langle a | b \\rangle$, which looks like the names of the vectors enclosed in brackets. Then he worked backwards to split the _bracket_ into a _bra_ and a _ket_.\n", + "\n", + "If you try out the inner product on the vectors we already know, you'll find\n", + "\n", + "$$\n", + "\\langle 0 | 0\\rangle = \\langle 1 | 1\\rangle = 1,\\\\\\\\\n", + "\\langle 0 | 1\\rangle = \\langle 1 | 0\\rangle = 0.\n", + "$$\n", + "\n", + "Here we are using a concise way of writing the inner products where, for example, $\\langle 0 | 1 \\rangle$ is the inner product of $\\langle 0 |$ with $| 1 \\rangle$. The top line shows us that the inner product of these states with themselves always gives a 1. When done with two orthogonal states, as on the bottom line, we get the outcome 0. These two properties will come in handy later on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The x basis - part 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far we've looked at states for which the z measurement has a certain outcome. But there are also states for which the outcome of a z measurement is equally likely to be `0` or `1`. What might these look like in the language of vectors?\n", + "\n", + "A good place to start would be something like $|0\\rangle + |1\\rangle$ , since this includes both $|0\\rangle$ and $|1\\rangle$ with no particular bias towards either. But let's hedge our bets a little and multiply it by some number $x$ .\n", + "\n", + "$$\n", + "x ~ (|0\\rangle + |1\\rangle) = \\begin{pmatrix} x \\\\\\\\ x \\end{pmatrix}\n", + "$$\n", + "\n", + "We can choose the value of $x$ to make sure that the state plays nicely in our calculations. For example, think about the inner product,\n", + "\n", + "$$\n", + "\\begin{pmatrix} x & x \\end{pmatrix} \\times \\begin{pmatrix} x \\\\\\\\ x \\end{pmatrix}= 2x^2.\n", + "$$\n", + "\n", + "We can get any value for the inner product that we want, just by choosing the appropriate value of $x$.\n", + "\n", + "As mentioned earlier, we are going to use the inner product as a measure of how similar two vectors are. With this interpretation in mind, it is natural to require that the inner product of any state with itself gives the value $1$. This is already acheived for the inner products of $|0\\rangle$ and $|1\\rangle$ with themselves, so let's make it true for all other states too.\n", + "\n", + "This condition is known as the normalization condition. In this case, it means that $x=\\frac{1}{\\sqrt{2}}$. Now we know what our new state is, so here's a few ways of writing it down.\n", + "\n", + "$$\n", + "\\begin{pmatrix} \\frac{1}{\\sqrt{2}} \\\\\\\\ \\frac{1}{\\sqrt{2}} \\end{pmatrix} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix} 1 \\\\\\\\ 1 \\end{pmatrix} = \\frac{ |0\\rangle + |1\\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "This state is essentially just $|0\\rangle$ and $|1\\rangle$ added together and then normalized, so we will give it a name to reflect that origin. We call it $|+\\rangle$ ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Born rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we've got three states that we can write down as vectors. We can also calculate inner products for them. For example, the inner product of each with $\\langle 0 |$ is\n", + "\n", + "$$\n", + "\\langle 0 | 0\\rangle = 1 \\\\\\\\ \\langle 0 | 1\\rangle = 0 \\\\\\\\ \\, \\, \\, \\, \\langle 0 | +\\rangle = \\frac{1}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "We also know the probabilities of getting various outcomes from a z measurement for these states. For example, let's use $p^z_0$ to denote the probability of the result `0` for a z measurement. The values this has for our three states are\n", + "\n", + "$$\n", + "p_0^z( | 0\\rangle) = 1,\\\\\\\\ p_0^z( | 1\\rangle) = 0, \\\\\\\\ p_0^z( | +\\rangle) = \\frac{1}{2}.\n", + "$$\n", + "\n", + "As you might have noticed, there's a lot of similarlity between the numbers we get from the inner products and those we get for the probabilities. Specifically, the three probabilities can all be written as the square of the inner products:\n", + "\n", + "$$\n", + "p_0^z(|a\\rangle) = (~\\langle0|a\\rangle~)^2.\n", + "$$\n", + "\n", + "Here $|a\\rangle$ represents any generic qubit state.\n", + "\n", + "This property doesn't just hold for the `0` outcome. If we compare the inner products with $\\langle 1 |$ with the probabilities of the `1` outcome, we find a similar relation.\n", + "\n", + "$$\n", + "\\\\\\\\\n", + "p_1^z(|a\\rangle) = (~\\langle1|a\\rangle~)^2.\n", + "$$\n", + "\n", + "The same also holds true for other types of measurement. All probabilities in quantum mechanics can be expressed in this way. It is known as the *Born rule*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Global and relative phases" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vectors are how we use math to represent the state of a qubit. With them we can calculate the probabilities of all the possible things that could ever be measured. These probabilities are essentially all that is physically relevant about a qubit. It is by measuring them that we can determine or verify what state our qubits are in. Any aspect of the state that doesn't affect the probabilities is therefore just a mathematical curiosity.\n", + "\n", + "Let's find an example. Consider a state that looks like this:\n", + "\n", + "$$\n", + "|\\tilde 0\\rangle = \\begin{pmatrix} -1 \\\\\\\\ 0 \\end{pmatrix} = -|0\\rangle.\n", + "$$\n", + "\n", + "This is equivalent to multiplying the state $|0\\rangle$ by $-1$. It means that every inner product we could calculate with $|\\tilde0\\rangle$ is the same as for $|0\\rangle$, but multplied by $-1$. \n", + "\n", + "$$\n", + "\\langle a|\\tilde 0\\rangle = -\\langle a| 0\\rangle\n", + "$$\n", + "\n", + "As you probably know, any negative number squares to the same value as its positive counterpart: $(-x)^2 =x^2$.\n", + "\n", + "Since we square inner products to get probabilities, this means that any probability we could ever calculate for $|\\tilde0\\rangle$ will give us the same value as for $|0\\rangle$. If the probabilities of everything are the same, there is no observable difference between $|\\tilde0\\rangle$ and $|0\\rangle$; they are just different ways of representing the same state.\n", + "\n", + "This is known as the irrelevance of the global phase. Quite simply, this means that multplying the whole of a quantum state by $-1$ gives us a state that will look different mathematically, but which is actually completely equivalent physically.\n", + "\n", + "The same is not true if the phase is *relative* rather than *global*. This would mean multiplying only part of the state by $-1$ , for example:\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} \\rightarrow \\begin{pmatrix} a_0 \\\\\\\\ -a_1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "Doing this with the $|+\\rangle$ state gives us a new state. We'll call it $|-\\rangle$.\n", + "\n", + "$$\n", + "|-\\rangle = \\frac{1}{\\sqrt{2}}\\begin{pmatrix} 1 \\\\\\\\ -1 \\end{pmatrix} = \\frac{ |0\\rangle - |1\\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "The values $p_0^z$ and $p_1^z$ for $|-\\rangle$ are the same as for $|+\\rangle$. These two states are thus indistinguishable when we make only z measurements. But there are other ways to distinguish them. To see how, consider the inner product of $|+\\rangle$ and $|-\\rangle$. \n", + "\n", + "$$\n", + "\\langle-|+\\rangle = \\langle+|-\\rangle = 0\n", + "$$\n", + "\n", + "The inner product is 0, just as it is for $|0\\rangle$ and $|1\\rangle$. This means that the $|+\\rangle$ and $|-\\rangle$ states are orthogonal: they represent a pair of mutually exclusive possible ways for a qubit to be a qubit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The x basis - part 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whenever we find a pair of orthogonal qubit states, we can use it to define a new kind of measurement.\n", + "\n", + "First, let's apply this to the case we know well: the z measurement. This asks a qubit whether it is $|0\\rangle$ or $|1\\rangle$. If it is $|0\\rangle$, we get the result `0`. For $|1\\rangle$ we get `1`. Anything else, such as $|+\\rangle$, is treated as a superposition of the two.\n", + "\n", + "$$\n", + "|+\\rangle = \\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "For a superposition, the qubit needs to randomly choose between the two possibilities according to the Born rule.\n", + "\n", + "We can similarly define a measurement based on $|+\\rangle$ and $|-\\rangle$. This asks a qubit whether it is $|+\\rangle$ or $|-\\rangle$. If it is $|+\\rangle$, we get the result `0`. For $|-\\rangle$ we get `1`. Anything else is treated as a superposition of the two. This includes the states $|0\\rangle$ and $|1\\rangle$, which we can write as\n", + "\n", + "$$\n", + "|0\\rangle = \\frac{|+\\rangle+|-\\rangle}{\\sqrt{2}}, \\, \\, \\, \\, |1\\rangle = \\frac{|+\\rangle-|-\\rangle}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "For these, and any other superpositions of $|+\\rangle$ and $|-\\rangle$, the qubit chooses its outcome randomly with probabilities\n", + "\n", + "$$\n", + "p_0^x(|a\\rangle) = (~\\langle+|a\\rangle~)^2,\\\\\\\\\n", + "p_1^x(|a\\rangle) = (~\\langle-|a\\rangle~)^2.\n", + "$$\n", + "\n", + "This is the x measurement." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The conservation of certainty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qubits in quantum circuits always start out in the state $|0\\rangle$. By applying different operations, we can make them explore other states.\n", + "\n", + "Try this out yourself using a single qubit, creating circuits using operations from the following list, and then doing the x and z measurements in the way described at the top of the page." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(1)\n", + "\n", + "qc.h(0) # the hadamard\n", + "\n", + "qc.x(0) # x gate\n", + "\n", + "qc.y(0) # y gate\n", + "\n", + "qc.z(0) # z gate\n", + "\n", + "# for the following, replace theta by any number\n", + "theta = 3.14159/4\n", + "qc.ry(theta,0); # y axis rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You'll find examples where the z measurement gives a certain result, but the x is completely random. You'll also find examples where the opposite is true. Furthermore, there are many examples where both are partially random. With enough experimentation, you might even uncover the rule that underlies this behavior:\n", + "\n", + "$$\n", + "(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2 = 1.\n", + "$$\n", + "\n", + "This is a version of Heisenberg's famous uncertainty principle. The $(p^z_0-p^z_1)^2$ term measures how certain the qubit is about the outcome of a z measurement. The $(p^x_0-p^x_1)^2$ term measures the same for the x measurement. Their sum is the total certainty of the two combined. Given that this total always takes the same value, we find that the amount of information a qubit can be certain about is a limited and conserved resource.\n", + "\n", + "Here is a program to calculate this total certainty. As you should see, whatever gates from the above list you choose to put in `qc`, the total certainty comes out as $1$ (or as near as possible given statistical noise)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total uncertainty is 1.0093152672052383\n" + ] + } + ], + "source": [ + "shots = 2**14 # number of samples used for statistics\n", + "\n", + "uncertainty = 0\n", + "for measure_circuit in [measure_z, measure_x]:\n", + "\n", + " # run the circuit with a the selected measurement and get the number of samples that output each bit value\n", + " counts = execute(qc+measure_circuit,Aer.get_backend('aer_simulator'),shots=shots).result().get_counts()\n", + "\n", + " # calculate the probabilities for each bit value\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " uncertainty += ( probs['0'] - probs['1'] )**2\n", + "\n", + "# print the total uncertainty\n", + "print('The total uncertainty is',uncertainty )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have found this rule, let's try to break it! Then we can hope to get a deeper understanding of what is going on. We can do this by simply implementing the operation below, and then recalculating the total uncertainty." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# for the following, replace theta by any number\n", + "theta = 3.14159/2\n", + "qc.rx(theta,0); # x axis rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a circuit with a single `rx` with $\\theta=\\pi/2$, we will find that $(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2=0$. This operation seems to have reduced our total certainty to zero." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All is not lost, though. We simply need to perform another identical `rx` gate to our circuit to go back to obeying $(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2=1$. This shows that the operation does not destroy our certainty; it simply moves it somewhere else and then back again. So let's find that somewhere else." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The y basis - part 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are infinitely many ways to measure a qubit, but the z and x measurements have a special relationship with each other. We say that they are *mutually unbiased*. This simply means that certainty for one implies complete randomness for the other.\n", + "\n", + "At the end of the last section, it seemed that we were missing a piece of the puzzle. We need another type of measurement to plug the gap in our total certainty, and it makes sense to look for one that is also mutually unbiased with x and z.\n", + "\n", + "The first step is to find a state that seems random to both x and z measurements. Let's call it $|\\circlearrowleft\\rangle$, for no apparent reason.\n", + "\n", + "$$\n", + "|\\circlearrowleft\\rangle = c_0 | 0 \\rangle + c_1 | 1 \\rangle\n", + "$$\n", + "\n", + "Now the job is to find the right values for $c_0$ and $c_1$. You could try to do this with standard positive and negative numbers, but you'll never be able to find a state that is completely random for both x and z measurements. To achieve this, we need to use complex numbers." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complex numbers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hopefully you've come across complex numbers before, but here is a quick reminder. \n", + "\n", + "Normal numbers, such as the ones we use for counting bananas, are known as *real numbers*. We cannot solve all possible equations using only real numbers. For example, there is no real number that serves as the square root of $-1$. To deal with this issue, we need more numbers, which we call *complex numbers*.\n", + "\n", + "To define complex numbers we start by accepting the fact that $-1$ has a square root, and that its name is $i$. Any complex number can then be written\n", + "\n", + "$$\n", + "x = x_r + i~x_i .\n", + "$$\n", + "\n", + "Here $x_r$ and $x_i$ are both normal numbers \\(positive or negative\\), where $x_r$ is known as the real part and $x_i$ as the imaginary part. \n", + "\n", + "For every complex number $x$ there is a corresponding complex conjugate $x^*$ \n", + "\n", + "$$\n", + "x^* = x_r - i~x_i .\n", + "$$\n", + "\n", + "Multiplying $x$ by $x^*$ gives us a real number. It's most useful to write this as\n", + "\n", + "$$\n", + "|x| = \\sqrt{x~x^*}.\n", + "$$\n", + "\n", + "Here $|x|$ is known as the magnitude of $x$ \\(or, equivalently, of $x^*$ \\).\n", + "\n", + "If we are going to allow the numbers in our quantum states to be complex, we'll need to upgrade some of our equations.\n", + "\n", + "First, we need to ensure that the inner product of a state with itself is always 1. To do this, the bra and ket versions of the same state must be defined as follows:\n", + "\n", + "$$\n", + "|a\\rangle = \\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix}, ~~~ \\langle a| = \\begin{pmatrix} a_0^* & a_1^* \\end{pmatrix}.\n", + "$$\n", + "\n", + "Then we just need a small change to the Born rule, where we square the magnitudes of inner products, rather than just the inner products themselves.\n", + "\n", + "$$\n", + "p_0^z(|a\\rangle) = |~\\langle0|a\\rangle~|^2,\\\\\\\\\n", + "p_1^z(|a\\rangle) = |~\\langle1|a\\rangle~|^2,\\\\\\\\\n", + "p_0^x(|a\\rangle) = |~\\langle+|a\\rangle~|^2,\\\\\\\\\n", + "p_1^x(|a\\rangle) = |~\\langle-|a\\rangle~|^2.\n", + "$$\n", + "\n", + "The irrelevance of the global phase also needs an upgrade. Previously, we only talked about multiplying by -1. In fact, we can multiply a state by any complex number whose magnitude is 1. This will give us a state that will look different, but which is actually completely equivalent. This includes multiplying by $i$, $-i$ or infinitely many other possibilities." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The y basis - part 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have complex numbers, we can define the following pair of states.\n", + "\n", + "$$\n", + "|\\circlearrowright\\rangle = \\frac{ | 0 \\rangle + i | 1 \\rangle}{\\sqrt{2}}, ~~~~ |\\circlearrowleft\\rangle = \\frac{ | 0 \\rangle -i | 1 \\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "You can verify yourself that they both give random outputs for x and z measurements. They are also orthogonal to each other. They therefore define a new measurement, and that basis is mutally unbiased with x and z. This is the third and final fundamental measurement for a single qubit. We call it the y measurement, and can implement it with" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# y measurement of qubit 0\n", + "measure_y = QuantumCircuit(1,1)\n", + "measure_y.sdg(0)\n", + "measure_y.h(0)\n", + "measure_y.measure(0,0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the x, y and z measurements, we now have everything covered. Whatever operations we apply, a single isolated qubit will always obey\n", + "\n", + "$$\n", + "(p^z_0-p^z_1)^2 + (p^y_0-p^y_1)^2 + (p^x_0-p^x_1)^2 = 1.\n", + "$$\n", + "\n", + "To see this, we can incorporate the y measurement into our measure of total certainty." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total uncertainty is 1.0057139843702316\n" + ] + } + ], + "source": [ + "shots = 2**14 # number of samples used for statistics\n", + "\n", + "uncertainty = 0\n", + "for measure_circuit in [measure_z, measure_x, measure_y]:\n", + "\n", + " # run the circuit with a the selected measurement and get the number of samples that output each bit value\n", + " counts = execute(qc+measure_circuit,Aer.get_backend('aer_simulator'),shots=shots).result().get_counts()\n", + "\n", + " # calculate the probabilities for each bit value\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " uncertainty += ( probs['0'] - probs['1'] )**2\n", + "\n", + "# print the total uncertainty\n", + "print('The total uncertainty is',uncertainty )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For more than one qubit, this relation will need another upgrade. This is because the qubits can spend their limited certainty on creating correlations that can only be detected when multiple qubits are measured. The fact that certainty is conserved remains true, but it can only be seen when looking at all the qubits together.\n", + "\n", + "Before we move on to entanglement, there is more to explore about just a single qubit. As we'll see in the next section, the conservation of certainty leads to a particularly useful way of visualizing single-qubit states and gates." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.14.2',\n", + " 'qiskit-aer': '0.5.2',\n", + " 'qiskit-ignis': '0.3.3',\n", + " 'qiskit-ibmq-provider': '0.7.2',\n", + " 'qiskit-aqua': '0.7.3',\n", + " 'qiskit': '0.19.6'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/pauli-matrices-bloch-sphere.ipynb b/translations/ja/ch-states/pauli-matrices-bloch-sphere.ipynb new file mode 100644 index 0000000..6990170 --- /dev/null +++ b/translations/ja/ch-states/pauli-matrices-bloch-sphere.ipynb @@ -0,0 +1,243 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pauli Matrices and the Bloch Sphere" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.visualization import plot_bloch_vector\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this section we'll further develop the topics introduced in the last, and introduce a useful visualization of single-qubit states." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pauli matrices" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wherever there are vectors, matrices are not far behind. The three important matrices for qubits are known as the Pauli matrices.\n", + "\n", + "$$\n", + "X= \\begin{pmatrix} 0&1 \\\\\\\\ 1&0 \\end{pmatrix}\\\\\\\\\n", + "Y= \\begin{pmatrix} 0&-i \\\\\\\\ i&0 \\end{pmatrix}\\\\\\\\\n", + "Z= \\begin{pmatrix} 1&0 \\\\\\\\ 0&-1 \\end{pmatrix}\n", + "$$\n", + "\n", + "These have many useful properties, as well as a deep connection to the x, y and z measurements. Specifically, we can use them to calculate the three quantities used in the last section:\n", + "$$\\langle a | X | a\\rangle = p^x_0 (|a\\rangle)-p^x_1(|a\\rangle),\\\\\\\\\n", + "\\langle a | Y | a\\rangle = p^y_0 (|a\\rangle)-p^y_1(|a\\rangle),\\\\\\\\\n", + "\\langle a | Z | a\\rangle = p^z_0 (|a\\rangle)-p^z_1(|a\\rangle).\n", + "$$\n", + "\n", + "These quantities are known as the expectation values of the three matrices. In calculating them, we make use of standard matrix multiplication.\n", + "\n", + "Typically, we prefer to use a more compact notation for the quantities above. Since we usually know what state we are talking about in any given situation, we don't explicitly write it in. This allows us to write $\\langle X \\rangle = \\langle a|X|a \\rangle$, etc. Our statement from the last section, regarding the conservation of certainty for an isolated qubit, can then be written\n", + "\n", + "$$\n", + "\\langle X \\rangle^2 + \\langle Y \\rangle^2 + \\langle Z \\rangle^2 = 1.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To calculate these values in Qiskit, we first need a single qubit circuit to analyze." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we need to define the x, y and z measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# z measurement of qubit 0\n", + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0);\n", + "\n", + "# x measurement of qubit 0\n", + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0)\n", + "measure_x.measure(0,0)\n", + "\n", + "# y measurement of qubit 0\n", + "measure_y = QuantumCircuit(1,1)\n", + "measure_y.sdg(0)\n", + "measure_y.h(0)\n", + "measure_y.measure(0,0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally we can run the circuit with each kind of measurement, calculate the probabities and use them to determine $\\langle X \\rangle$, $\\langle Y \\rangle$ and $\\langle Z \\rangle$. This requires a process largely similar to the one used in the last section to calculate total certainty.\n", + "\n", + "Here we place the results in a list called ```bloch_vector```, for which ```bloch_vector[0]``` is $\\langle X \\rangle$, ```bloch_vector[1]``` is $\\langle Y \\rangle$ and ```bloch_vector[2]``` is $\\langle Z \\rangle$" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "shots = 2**14 # number of samples used for statistics\n", + "\n", + "bloch_vector = []\n", + "for measure_circuit in [measure_x, measure_y, measure_z]:\n", + " \n", + " # run the circuit with a the selected measurement and get the number of samples that output each bit value\n", + " counts = execute(qc+measure_circuit,Aer.get_backend('qasm_simulator'),shots=shots).result().get_counts()\n", + "\n", + " # calculate the probabilities for each bit value\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " bloch_vector.append( probs['0'] - probs['1'] )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Bloch sphere" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's take a moment to think a little about the numbers $\\langle X \\rangle$, $\\langle Y \\rangle$ and $\\langle Z \\rangle$. Though their values depend on what state our qubit is in, they are always constrained to be no larger than 1, and no smaller than -1. They also collectively obey the condition $\\langle X \\rangle^2 + \\langle Y \\rangle^2 + \\langle Z \\rangle^2 = 1$.\n", + "\n", + "The same properties are also shared by another set of three numbers that we know from a completely different context. To see what they are, first consider a sphere. For this, we can describe every point on the surface in terms of its x, y and z coordinates. We'll place the origin of our coordinate system at the center of the sphere. The coordinates are then constrained by the radius in both directions: they can be no greater than $r$ , and no less than $-r$ . For simplicity, let's set the radius to be $r=1$.\n", + "\n", + "For any point, the distance from the center of the sphere can be determined by the 3D version of Pythagoras' theorem. Specifically, $x^2 + y^2 + z^2$. For points on the surface, this distance is always 1.\n", + "\n", + "So now we have three numbers that can each be no greater than 1, no less than -1, and for which the sum of the squares is always 1. All exactly the same as $\\langle X \\rangle$, $\\langle Y \\rangle$ and $\\langle Z \\rangle$. They even have pretty much the same names as these values. \n", + "\n", + "Because of this correspondence, we can apply all our existing knowledge and intuition about balls to our understanding of qubits. Specifically, we can visualize any single-qubit state as a point on the surface of a sphere. We call this the Bloch sphere." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_bloch_vector( bloch_vector )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We usually associate $|0\\rangle$ with the north pole, $|1\\rangle$ with the south, and the states for the x and y measurements around the equator. Any pair of orthogonal states correspond to diametrically opposite points on this sphere.\n", + "\n", + "As we'll see in future sections, the Bloch sphere makes it easier to understand single-qubit operations. Each moves points around on the surface of the sphere, and so can be interpreted as a simple rotation." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/representing-qubit-states.ipynb b/translations/ja/ch-states/representing-qubit-states.ipynb new file mode 100644 index 0000000..f4e179c --- /dev/null +++ b/translations/ja/ch-states/representing-qubit-states.ipynb @@ -0,0 +1,2233 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子ビット状態を表現する" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このコースをさらに進めるには、量子ビットの状態を書き留める方法が必要です。第2章の終わりまでに、ベクトルと行列のみを使用して、任意の量子ビットのセットと任意の量子演算の状態を書き留めることができることがわかります。 **続行する前に**、複素数に慣れる必要があります。線形代数の知識は役立ちますが、複素数の重要な概念が点在していることに注意してください。さらに詳しい説明や復習が必要な場合は、ここで数学の前提条件を確認できます。[こちら](../ch-prerequisites/linear_algebra.html)\n", + "\n", + "## 目次\n", + "\n", + "1. [古典ビット vs 量子ビット](#cvsq) \n", + " 1.1 [状態ベクトル](#statevectors) \n", + " 1.2 [量子ビット表記](#notation) \n", + " 1.3 [Qiskitを使って量子ビットを探索する](#exploring-qubits) \n", + "2. [測定のルール](#rules-measurement) \n", + " 2.1 [非常に重要なルール](#important-rule) \n", + " 2.2 [測定のルールの意味](#implications)\n", + "3. [ブロッホ球](#bloch-sphere) \n", + " 3.1 [制限された量子ビット状態の説明](#bloch-sphere-1) \n", + " 3.2 [量子ビットの状態を視覚的に表現する](#bloch-sphere-2) \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 古典ビット vs 量子ビット \n", + "\n", + "### 1.1 状態ベクトル\n", + "\n", + "量子物理学では、_状態ベクトル_ を使用してシステムの状態を記述します。これは、一般的に数値のみを使用する古典的な物理学とは異なります。たとえば、道路に沿った車の位置を記述したい場合、これは古典的なシステムであるため、数$x$を使用できます。\n", + "\n", + "![tracking a car with scalars](images/car_track_1.jpg)\n", + "\n", + "$$ x=4 $$\n", + "\n", + "代わりに、_状態ベクトル_ と呼ばれるベクトルで数値のコレクションを使用することもできます。状態ベクトルの各要素には、特定の場所で自動車を見つける確率が含まれています。\n", + "\n", + "![tracking a car with vectors](images/car_track_2.jpg)\n", + "\n", + "$$\n", + "|x\\rangle = \\begin{bmatrix} 0\\\\ \\vdots \\\\ 0 \\\\ 1 \\\\ 0 \\\\ \\vdots \\\\ 0 \\end{bmatrix} \n", + " \\begin{matrix} \\\\ \\\\ \\\\ \\leftarrow \\\\ \\\\ \\\\ \\\\ \\end{matrix}\n", + " \\begin{matrix} \\\\ \\\\ \\text{車が} \\\\ \\text{位置4にある} \\\\ \\text{確率} \\\\ \\\\ \\\\ \\end{matrix} \n", + "$$\n", + "\n", + "このことは位置に限定されず、車が持つ可能性のあるすべての速度と、車が持つ可能性のあるすべての色の状態ベクトルを保持することもできます。ただ(上記の自動車の例のような)古典的なシステムでは、実際に1つの数値しか必要としないときに巨大なベクトルを維持する必要があるため、これは愚かなことです。しかし、この章で見るように、状態ベクトルは、量子コンピュータを含む量子システムを追跡するための非常に良い方法です。\n", + "\n", + "### 1.2 量子ビット表記 \n", + "\n", + "\n", + "古典的なビット(`c`)の状態を書き留めたいとしましょう。数字の` 0`と `1`を使います。\n", + "\n", + " c = 0\n", + "\n", + "古典的なビットは常に明確な状態を持っているので、この表記は問題ありません。ただし、量子ビットには、さまざまな状態が測定される可能性があります。 量子ビットが測定される各状態には、 _振幅_ (複素数)があり、この複素数をみていく必要があります。量子ビットは2つのエネルギーレベルを持つシステムであるため、測定する* と、次の2つの状態のいずれかが検出されます。\n", + "\n", + "$$ |0\\rangle \\quad \\& \\quad |1\\rangle $$\n", + "\n", + "
    *これはある種類の測定にのみ当てはまりますが、今は心配する必要はありません。これについては、この後のセクションで説明します。
    \n", + "\n", + "つまり、2つの複素数をみていく必要があります。 ベクトルはこれを表現する素晴らしい方法です。\n", + "\n", + "$$ |q_0\\rangle = \\begin{bmatrix} \\tfrac{1}{\\sqrt{2}} \\\\ \\tfrac{i}{\\sqrt{2}} \\end{bmatrix} $$\n", + "\n", + "ここでは、ベクトル($|q_0\\rangle$)の要素を使用して、状態$|0\\rangle$および$|1\\rangle$の複素振幅の「リスト」を格納します。この場合、$|0\\rangle$の振幅は$\\tfrac{1}{\\sqrt{2}}$で、$|1\\rangle$の振幅は$\\tfrac{i}{\\sqrt{2}}$です。$|$ と $\\rangle$ の記号で囲んで列ベクトルを表すことに注意してください。状態の振幅は、その状態で量子ビットを測定する確率に関連しています。量子ビットの状態が$|0\\rangle$である場合、$|0\\rangle$の振幅は1で、$|1\\rangle$の振幅は0です。したがって、次のように記述できます。\n", + "\n", + "$$ |0\\rangle = \\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} $$\n", + "\n", + "そして同様に\n", + "\n", + "$$ |1\\rangle = \\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix} $$\n", + "\n", + "$|0\\rangle$と$|1\\rangle$は正規直交基底を形成し、$|0\\rangle$と$|1\\rangle$の組み合わせで任意の2次元ベクトルを表すことができることに注意してください。このことを知っておくと、量子ビットの状態を別の形で書くことができます。\n", + "\n", + "$$ |q_0\\rangle = \\tfrac{1}{\\sqrt{2}}|0\\rangle + \\tfrac{i}{\\sqrt{2}}|1\\rangle $$\n", + "\n", + "\n", + "

    \n", + "

    \n", + " 備忘:行列の加算とスカラーによる乗算(ここをクリックして展開してください)\n", + "

    2つのベクトルを加算するには、それらの要素を一緒に加算します。\n", + " $$|a\\rangle = \\begin{bmatrix}a_0 \\\\ a_1 \\\\ \\vdots \\\\ a_n \\end{bmatrix}, \\quad\n", + " |b\\rangle = \\begin{bmatrix}b_0 \\\\ b_1 \\\\ \\vdots \\\\ b_n \\end{bmatrix}$$\n", + " $$|a\\rangle + |b\\rangle = \\begin{bmatrix}a_0 + b_0 \\\\ a_1 + b_1 \\\\ \\vdots \\\\ a_n + b_n \\end{bmatrix} $$\n", + "

    \n", + "

    そして、ベクトルにスカラーを掛けるには、各要素にスカラーを掛けます。\n", + " $$x|a\\rangle = \\begin{bmatrix}x \\times a_0 \\\\ x \\times a_1 \\\\ \\vdots \\\\ x \\times a_n \\end{bmatrix}$$\n", + "

    \n", + "

    これらの2つのルールは、ベクトル$|q_0\\rangle$を書き換えるために使用されます。(上記を参照)\n", + " $$\n", + " \\begin{aligned} \n", + " |q_0\\rangle & = \\tfrac{1}{\\sqrt{2}}|0\\rangle + \\tfrac{i}{\\sqrt{2}}|1\\rangle \\\\\n", + " & = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}1\\\\0\\end{bmatrix} + \\tfrac{i}{\\sqrt{2}}\\begin{bmatrix}0\\\\1\\end{bmatrix}\\\\\n", + " & = \\begin{bmatrix}\\tfrac{1}{\\sqrt{2}}\\\\0\\end{bmatrix} + \\begin{bmatrix}0\\\\\\tfrac{i}{\\sqrt{2}}\\end{bmatrix}\\\\\n", + " & = \\begin{bmatrix}\\tfrac{1}{\\sqrt{2}} \\\\ \\tfrac{i}{\\sqrt{2}} \\end{bmatrix}\\\\\n", + " \\end{aligned}\n", + " $$\n", + "

    \n", + "

    \n", + "

    \n", + "

    \n", + " 備忘:正規直交基底(ここをクリックして展開してください)\n", + "

    前に、2つのベクトル$|0\\rangle$と$|1\\rangle$は直交であると述べました。つまり、これらは両方とも直交正規化されています。 直交とは、ベクトルが直角であることを意味します。\n", + "

    \n", + "

    正規化とは、その大きさ(矢印の長さ)が1に等しいことを意味します。2つのベクトル$|0\\rangle$と$|1\\rangle$は線形独立です。つまり、$|0\\rangle$を$|1\\rangle$で表すことはできず、逆も同様です。ただし、ベクトル$|0\\rangle$と$|1\\rangle$の両方、およびスカラーによる加算と乗算の規則を使用すると、2次元空間で可能なすべてのベクトルを記述できます。\n", + "

    \n", + "

    ベクトル$|0\\rangle$と$|1\\rangle$は線形独立であり、ベクトルの加算とスカラー倍算を使用して2次元空間で任意のベクトルを記述するのに使用できるため、ベクトル$|0\\rangle$と$|1\\rangle$は基底を形成します。 この場合、それらは直交であり、正規化されているため、これを正規直交基底と呼びます。

    \n", + "
    \n", + "

    \n", + "\n", + "このベクトル$|q_0\\rangle$は、量子ビットの _状態ベクトル_ と呼ばれます。これは、この量子ビットについておそらく知ることができるすべてのことを示しています。$|0\\rangle$と$|1\\rangle$の振幅がゼロではないため、量子ビットは$|0\\rangle$と$|1\\rangle$の状態の _重ね合わせ_ にあると言われます。\n", + "\n", + "### 1.3 Qiskitを使って量子ビットを探索する\n", + "\n", + "まず、必要なすべてのツールをインポートする必要があります。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import QuantumCircuit, execute, Aer\n", + "from qiskit.visualization import plot_histogram, plot_bloch_vector\n", + "from math import sqrt, pi" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "さらに、画像出力を改善するために設定を変更します。(IPython環境で実行していない場合は、この行を無視してください。)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%config InlineBackend.figure_format = 'svg' # 画像を美しく見せます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitでは、`QuantumCircuit`オブジェクトを使用して回路を格納します。これは基本的に、回路内の量子ゲートとそれらが適用される量子ビットのリストです。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(1) # 1量子ビットで量子回路を作成します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "私たちの量子回路では、量子ビットは常に$|0\\rangle$の状態で始まります。`initialize()`メソッドを使用して、これを任意の状態に変換できます。`initialize()`にリストの形式で必要なベクトルを与え、この状態でどの量子ビットを初期化したいかを伝えます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
         ┌─────────────────┐\n",
    +       "q_0: ┤ Initialize(0,1) ├\n",
    +       "     └─────────────────┘
    " + ], + "text/plain": [ + " ┌─────────────────┐\n", + "q_0: ┤ Initialize(0,1) ├\n", + " └─────────────────┘" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "initial_state = [0,1] # 初期状態を|1>と定義します。\n", + "qc.initialize(initial_state, 0) # 初期化操作を0番目の量子ビットに適用します。\n", + "qc.draw() # 回路を見てみましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、Qiskitのシミュレーターの1つを使用して、量子ビットの結果の状態を表示できます。 最初に、statevectorシミュレーターを使用しますが、さまざまなシミュレーターとその使用法については後で説明します。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "backend = Aer.get_backend('statevector_simulator') # Qiskitに回路のシミュレーション方法を伝えます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "回路から結果を取得するには、`execute`を使用して回路を実行し、circuitとbackendを引数として指定します。 次に、`.result()`を使用して、この結果を取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "result = execute(qc,backend).result() # シミュレーションを行い、結果を返します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`result`から、`.get_statevector()`を使用して最終的な状態ベクトルを取得できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.+0.j 1.+0.j]\n" + ] + } + ], + "source": [ + "out_state = result.get_statevector()\n", + "print(out_state) # 出力状態ベクトルを表示します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**注意** Pythonは`j`を使用して複素数の$i$を表します。2つの複素数の要素を持つベクトルが表示されます。`0.+0.j` = 0と `1.+0.j` = 1です。\n", + "\n", + "実際の量子コンピューターと同じように量子ビットを測定して、結果を見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
            ┌─────────────────┐ ░ ┌─┐\n",
    +       "   q_0: ┤ Initialize(0,1) ├─░─┤M├\n",
    +       "        └─────────────────┘ ░ └╥┘\n",
    +       "meas_0: ═══════════════════════╩═\n",
    +       "                                 
    " + ], + "text/plain": [ + " ┌─────────────────┐ ░ ┌─┐\n", + " q_0: ┤ Initialize(0,1) ├─░─┤M├\n", + " └─────────────────┘ ░ └╥┘\n", + "meas_0: ═══════════════════════╩═\n", + " " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.measure_all()\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "今回は、statevectorの代わりに、`.get_counts()`を使用して `0`と`1`の結果のカウントを取得します。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result = execute(qc,backend).result()\n", + "counts = result.get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(当然のことながら)$|1\\rangle$を測定する可能性が100%あることがわかります。 では、代わりに量子ビットを重ね合わせて、何が起こるか見てみましょう。 このセクションの前半の状態$|q_0\\rangle$を使用します。\n", + "\n", + "$$ |q_0\\rangle = \\tfrac{1}{\\sqrt{2}}|0\\rangle + \\tfrac{i}{\\sqrt{2}}|1\\rangle $$\n", + "\n", + "これらの振幅をpythonリストに追加する必要があります。 複素振幅を追加するには、 `complex`を使用して、実数部と虚数部を引数として指定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "initial_state = [1/sqrt(2), complex(0,1/sqrt(2))] # 状態|q>を定義します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "次に、以前と同じように量子ビットを初期化するための手順を繰り返します。" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.70710678+0.j 0. +0.70710678j]\n" + ] + } + ], + "source": [ + "qc = QuantumCircuit(1) # qcを再定義する必要があります。\n", + "qc.initialize(initial_state, 0) # `initial_state`状態の0番目の量子ビットを初期化します。\n", + "state = execute(qc,backend).result().get_statevector() # 回路を実行します。\n", + "print(state) # 結果を表示します。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = execute(qc,backend).result().get_counts()\n", + "plot_histogram(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|0\\rangle$または$|1\\rangle$を測定する確率が等しいことがわかります。 これを説明するには、測定について話す必要があります。\n", + "\n", + "## 2. 測定のルール \n", + "### 2.1 非常に重要なルール \n", + "\n", + "測定には簡単なルールがあります。 状態$|\\psi \\rangle$を状態$|x\\rangle$で測定する確率を見つけるには、\n", + "\n", + "$$p(|x\\rangle) = | \\langle x | \\psi \\rangle|^2$$\n", + "\n", + "記号$\\langle$および$|$は、$\\langle x |$が行ベクトルであることを示します。 量子力学では、列ベクトルを _ケット_ 、行ベクトルを _ブラ_ と呼びます。これらを合わせて _ブラケット_ 表記を構成します。 すべてのケット$|a\\rangle$には対応するブラ$\\langle a|$があり、共役転置を使用してそれらの間で変換します。\n", + "\n", + "\n", + "
    \n", + " 備忘: 内積(ここをクリックして展開してください。)\n", + "

    ベクトルを乗算する方法はいくつかあります。ここでは、内積を使用します。 内積は、すでにおなじみのドット積を一般化したものです。 このガイドでは、ブラ(行ベクトル)とケット(列ベクトル)の間の内積を使用しており、このルールに従います。\n", + " \n", + "$$\\langle a| = \\begin{bmatrix}a_0^*, & a_1^*, & \\dots & a_n^* \\end{bmatrix}, \\quad\n", + " |b\\rangle = \\begin{bmatrix}b_0 \\\\ b_1 \\\\ \\vdots \\\\ b_n \\end{bmatrix}$$\n", + " $$\\langle a|b\\rangle = a_0^* b_0 + a_1^* b_1 \\dots a_n^* b_n$$\n", + "

    \n", + "

    2つのベクトルの内積は常にスカラーを与えることがわかります。 覚えておくと便利なことは、2つの直交ベクトルの内積は0であることです。たとえば、直交ベクトル$|0\\rangle$と$|1\\rangle$がある場合、\n", + " $$\\langle1|0\\rangle = \\begin{bmatrix} 0 , & 1\\end{bmatrix}\\begin{bmatrix}1 \\\\ 0\\end{bmatrix} = 0$$\n", + "

    \n", + "

    さらに、ベクトル$|0\\rangle$および$|1\\rangle$も正規化されていることを覚えておいてください。(大きさが1に等しい)\n", + "\n", + "$$\n", + " \\begin{aligned} \n", + " \\langle0|0\\rangle & = \\begin{bmatrix} 1 , & 0\\end{bmatrix}\\begin{bmatrix}1 \\\\ 0\\end{bmatrix} = 1 \\\\\n", + " \\langle1|1\\rangle & = \\begin{bmatrix} 0 , & 1\\end{bmatrix}\\begin{bmatrix}0 \\\\ 1\\end{bmatrix} = 1\n", + " \\end{aligned}\n", + "$$\n", + "

    \n", + "
    \n", + "\n", + "上記の方程式では、$|x\\rangle$は任意の量子ビット状態にすることができます。 $|x\\rangle$を測定する確率を見つけるには、$|x\\rangle$と測定している状態(この場合は$|\\psi\\rangle$)の内積を取り、その大きさを二乗します。 これは少し複雑に見えるかもしれませんが、すぐに慣れます。\n", + "\n", + "状態$|q_0\\rangle$を見ると、$|0\\rangle$を測定する確率は確かに$0.5$であることがわかります。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "|q_0\\rangle & = \\tfrac{1}{\\sqrt{2}}|0\\rangle + \\tfrac{i}{\\sqrt{2}}|1\\rangle \\\\\n", + "\\langle 0| q_0 \\rangle & = \\tfrac{1}{\\sqrt{2}}\\langle 0|0\\rangle + \\tfrac{i}{\\sqrt{2}}\\langle 0|1\\rangle \\\\\n", + "& = \\tfrac{1}{\\sqrt{2}}\\cdot 1 + \\tfrac{i}{\\sqrt{2}} \\cdot 0\\\\\n", + "& = \\tfrac{1}{\\sqrt{2}}\\\\\n", + "|\\langle 0| q_0 \\rangle|^2 & = \\tfrac{1}{2}\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "演習として$|1\\rangle$を測定する確率を確認してみてください。\n", + "\n", + "### 2.2 測定のルールの意味 \n", + "### #1 正規化\n", + "\n", + "測定のルールは3つのことを意味します。1つ目は、状態ベクトルを1に正規化する必要があることです。\n", + "\n", + "確率を合計して1にしたい場合(合計する必要があります!)、状態ベクトルの大きさを1にする必要があります。\n", + "\n", + "$$ \\langle\\psi|\\psi\\rangle = 1 \\\\ $$\n", + "\n", + "したがって\n", + "\n", + "$$ |\\psi\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle $$\n", + "\n", + "このとき\n", + "\n", + "$$ \\sqrt{|\\alpha|^2 + |\\beta|^2} = 1 $$\n", + "\n", + "これは、この章を通して見た$\\sqrt{2}$の要因を説明しています。 実際、正規化されていないベクトルを `initialize()`に与えようとすると、エラーが発生します。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [ + "raises-exception" + ] + }, + "outputs": [ + { + "ename": "QiskitError", + "evalue": "'Sum of amplitudes-squared does not equal one.'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mQiskitError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mvector\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mqc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minitialize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvector\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m~\\Anaconda3\\envs\\qiskit_Ver18\\lib\\site-packages\\qiskit\\extensions\\quantum_initializer\\initializer.py\u001b[0m in \u001b[0;36minitialize\u001b[1;34m(self, params, qubits)\u001b[0m\n\u001b[0;32m 252\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mqubits\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 253\u001b[0m \u001b[0mqubits\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mqubits\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 254\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mInitialize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mqubits\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 255\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 256\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\Anaconda3\\envs\\qiskit_Ver18\\lib\\site-packages\\qiskit\\extensions\\quantum_initializer\\initializer.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, params)\u001b[0m\n\u001b[0;32m 56\u001b[0m if not math.isclose(sum(np.absolute(params) ** 2), 1.0,\n\u001b[0;32m 57\u001b[0m abs_tol=_EPS):\n\u001b[1;32m---> 58\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mQiskitError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Sum of amplitudes-squared does not equal one.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 59\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[0mnum_qubits\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum_qubits\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mQiskitError\u001b[0m: 'Sum of amplitudes-squared does not equal one.'" + ] + } + ], + "source": [ + "vector = [1,1]\n", + "qc.initialize(vector, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 練習問題\n", + "1. $|0\\rangle$を測定する確率が$1/3$になる状態ベクトルを作成してください。\n", + "2. 同じ測定確率を与える別の状態ベクトルを作成してください。\n", + "3. これら2つの状態の$|1\\rangle$を測定する確率が$2/3$であることを確認します。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のウィジェットで答えを確認できます(ベクトルで「pi」と「sqrt」を使用できます)。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "28d76a5164074f16aad49c4c0aceae2c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='State Vector:'), HBox(children=(Text(value='[1, 0]', placeholder='Type something')…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d5bb2088529b4646aba181ac145e1f1f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTML(value='
    ')"
    +      ]
    +     },
    +     "metadata": {},
    +     "output_type": "display_data"
    +    }
    +   ],
    +   "source": [
    +    "# このセルのコードを実行してウィジェットとやり取りします。\n",
    +    "from qiskit_textbook.widgets import state_vector_exercise\n",
    +    "state_vector_exercise(target=1/3)"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "### #2 グローバルフェーズ\n",
    +    "\n",
    +    "2番目は、量子ビットの全体の位相(グローバルフェーズ)は重要ではなく、$|0\\rangle$と$|1\\rangle$(相対位相)の間の位相の違いのみが重要です。 これは、測定確率を計算するとグローバルフェーズが消えるためです。 たとえば、2つの状態は、\n",
    +    "\n",
    +    "$$|a\\rangle = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}1 \\\\ i\\end{bmatrix} \\quad \\& \\quad |b\\rangle = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}i \\\\ -1\\end{bmatrix}$$\n",
    +    "\n",
    +    "一方に$i$を掛けてもう片方を取得できるため、これらは同等です。\n",
    +    "\n",
    +    "$$ \n",
    +    "\\begin{aligned} \n",
    +    "i\\times\\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}1 \\\\ i\\end{bmatrix} & = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}i \\\\ -1\\end{bmatrix}\\\\\n",
    +    "\\\\\n",
    +    "i|a\\rangle & = |b\\rangle\n",
    +    "\\end{aligned}\n",
    +    "$$\n",
    +    "\n",
    +    "そして、測定確率を計算します。\n",
    +    "\n",
    +    "$$ |\\langle x|a\\rangle|^2 = |\\langle x|i|a\\rangle|^2 = |\\langle x|b\\rangle|^2 $$\n",
    +    "\n",
    +    "### #3 オブザーバー効果\n",
    +    "\n",
    +    "振幅には、特定の状態の量子ビットを見つける確率に関する情報が含まれていますが、量子ビットを測定すると、量子ビットの状態が確実にわかります。 たとえば、ある状態の量子ビットを測定し、\n",
    +    "\n",
    +    "$$ |q\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle$$\n",
    +    "\n",
    +    "状態$|0\\rangle$だと判明します。もう一度測定すると、状態$|0\\rangle$で量子ビットを見つける確率は100%です。 これは、量子ビットの状態の _変化_ を測定する行為を意味します。\n",
    +    "\n",
    +    "$$ |q\\rangle = \\begin{bmatrix} \\alpha \\\\ \\beta \\end{bmatrix} \\xrightarrow{\\text{Measure }|0\\rangle} |q\\rangle = |0\\rangle = \\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix}$$\n",
    +    "\n",
    +    "実際、測定は量子ビットの状態を変更するだけでなく、量子ビットの重ね合わせを _破壊_ し、2つの明確な状態のいずれかに置き換えます。 その結果、ほとんどの場合、測定は回路の最後に配置されます。 この破壊的な測定は、量子ビットの状態を _崩壊する_ と呼ぶこともあります。\n",
    +    "\n",
    +    "Qiskitのstatevectorシミュレーターを使用してこれを実証できます。 重ね合わせで量子ビットを初期化しましょう。"
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": 15,
    +   "metadata": {},
    +   "outputs": [
    +    {
    +     "data": {
    +      "text/html": [
    +       "
         ┌──────────────────────────────┐\n",
    +       "q_0: ┤ Initialize(0.70711j,0.70711) ├\n",
    +       "     └──────────────────────────────┘
    " + ], + "text/plain": [ + " ┌──────────────────────────────┐\n", + "q_0: ┤ Initialize(0.70711j,0.70711) ├\n", + " └──────────────────────────────┘" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1) # qcを再定義します。\n", + "initial_state = [0.+1.j/sqrt(2),1/sqrt(2)+0.j]\n", + "qc.initialize(initial_state, [0])\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "これにより、量子ビットが次の状態で初期化されます。\n", + "\n", + "$$ |q\\rangle = \\tfrac{i}{\\sqrt{2}}|0\\rangle + \\tfrac{1}{\\sqrt{2}}|1\\rangle $$\n", + "\n", + "これはシミュレーターを使用して確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Qubit State = [0. +0.70710678j 0.70710678+0.j ]\n" + ] + } + ], + "source": [ + "state = execute(qc,backend).result().get_statevector()\n", + "print(\"Qubit State = \" + str(state))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ここで、量子ビットが期待した状態である`[0. + 0.70710678j 0.70710678 + 0.j]`の状態で初期化されていることがわかります。\n", + "\n", + "では、この量子ビットを測定してみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
            ┌──────────────────────────────┐ ░ ┌─┐\n",
    +       "   q_0: ┤ Initialize(0.70711j,0.70711) ├─░─┤M├\n",
    +       "        └──────────────────────────────┘ ░ └╥┘\n",
    +       "meas_0: ════════════════════════════════════╩═\n",
    +       "                                              
    " + ], + "text/plain": [ + " ┌──────────────────────────────┐ ░ ┌─┐\n", + " q_0: ┤ Initialize(0.70711j,0.70711) ├─░─┤M├\n", + " └──────────────────────────────┘ ░ └╥┘\n", + "meas_0: ════════════════════════════════════╩═\n", + " " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.measure_all()\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "この回路全体をシミュレートすると、振幅の1つが _常に_ 0であることがわかります。" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "State of Measured Qubit = [0.+0.j 1.+0.j]\n" + ] + } + ], + "source": [ + "state = execute(qc,backend).result().get_statevector()\n", + "print(\"State of Measured Qubit = \" + str(state))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "このセルを数回再実行して、量子ビットを再初期化して再度測定できます。どちらの結果も同様にでる可能性がありますが、量子ビットの状態が$|0\\rangle$と$|1\\rangle$の重ね合わせになることはありません。興味深いことに、$|0\\rangle$状態のグローバルフェーズは存続しますが、これはグローバルフェーズであるため、実際の量子コンピューターでは測定できません。\n", + "\n", + "### 量子シミュレーターに関する注意\n", + "\n", + "量子ビットの状態を書き留めるには、2つの複素数を追跡する必要があることがわかりますが、実際の量子コンピューターを使用する場合、各量子ビットについて、「はい」または「いいえ」( `0`または`1`)の回答しか受け取りません。 10量子ビット量子コンピューターの出力は次のようになります。\n", + "\n", + "`0110111110`\n", + "\n", + "わずか10桁で、重ね合わせや複雑な振幅はありません。 実際の量子コンピューターを使用する場合、計算の途中で量子ビットの状態を見ると、状態を破壊してしまうため、見ることができません。 この動作は学習に理想的ではないため、Qiskitはさまざまな量子シミュレーターを提供します。`qasm_simulator`は、実際の量子コンピューターと対話しているように動作し、 `.get_statevector()`を使用できません。 別の方法として、(この章で使用してきた)`statevector_simulator`では、これまでに説明したように、測定前の量子状態をみることができます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. ブロッホ球 \n", + "### 3.1 制限された量子ビット状態の説明 \n", + "\n", + "この章の前半で、量子ビット($|q\\rangle$)の一般的な状態は次のとおりであることを確認しました。\n", + "\n", + "$$\n", + "|q\\rangle = \\alpha|0\\rangle + \\beta|1\\rangle\n", + "$$\n", + "\n", + "$$\n", + "\\alpha, \\beta \\in \\mathbb{C}\n", + "$$\n", + "\n", + "(2行目は、$\\alpha$と$\\beta$が複素数であることを示しています)。 セクション2の最初の2つの意味は、これらの状態のいくつかを区別できないことを示しています。 これは、量子ビットの説明をより具体的にできることを意味します。\n", + "\n", + "まず、グローバルな位相を測定できないため、状態$|0\\rangle$と$|1\\rangle$の間の位相の差しか測定できません。 $\\alpha$と$\\beta$を複素数にする代わりに、それらを実数に制限し、それらの間の相対的な位相を示す項を追加することができます。\n", + "\n", + "$$\n", + "|q\\rangle = \\alpha|0\\rangle + e^{i\\phi}\\beta|1\\rangle\n", + "$$\n", + "\n", + "$$\n", + "\\alpha, \\beta, \\phi \\in \\mathbb{R}\n", + "$$\n", + "\n", + "最後に、量子ビット状態は正規化する必要があるため、\n", + "\n", + "$$\n", + "\\sqrt{\\alpha^2 + \\beta^2} = 1\n", + "$$\n", + "\n", + "三角関数の性質を使用できます。\n", + "\n", + "$$\n", + "\\sqrt{\\sin^2{x} + \\cos^2{x}} = 1\n", + "$$\n", + "\n", + "実際の$\\alpha$と$\\beta$を1つの変数$\\theta$で説明すると、\n", + "\n", + "$$\n", + "\\alpha = \\cos{\\tfrac{\\theta}{2}}, \\quad \\beta=\\sin{\\tfrac{\\theta}{2}}\n", + "$$\n", + "\n", + "これから、2つの変数$\\phi$と$\\theta$を使用して、量子ビットの状態を説明できます。\n", + "\n", + "$$\n", + "|q\\rangle = \\cos{\\tfrac{\\theta}{2}}|0\\rangle + e^{i\\phi}\\sin{\\tfrac{\\theta}{2}}|1\\rangle\n", + "$$\n", + "\n", + "$$\n", + "\\theta, \\phi \\in \\mathbb{R}\n", + "$$\n", + "\n", + "### 3.2 量子ビットの状態を視覚的に表現する \n", + "\n", + "一般的な量子ビット状態をプロットします。\n", + "\n", + "$$\n", + "|q\\rangle = \\cos{\\tfrac{\\theta}{2}}|0\\rangle + e^{i\\phi}\\sin{\\tfrac{\\theta}{2}}|1\\rangle\n", + "$$\n", + "\n", + "$\\theta$と$\\phi$を球面座標として解釈すると($r=1$、量子ビット状態の大きさは$1$であるため)、_ブロッホ球_ として知られる球の表面に任意の量子ビット状態をプロットできます。 \n", + "\n", + "以下では、状態$|{+}\\rangle$の量子ビットをプロットしました。 この場合、$\\theta = \\pi/2$および$\\phi = 0$です。\n", + "\n", + "(Qiskitにはブロッホ球をプロットする関数 `plot_bloch_vector()`がありますが、これを書いている時点では、デカルト座標しかとっていません。自動的に変換を行う関数が含まれています。)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from qiskit_textbook.widgets import plot_bloch_vector_spherical\n", + "coords = [pi/2,0,1] # [Theta, Phi, Radius]\n", + "plot_bloch_vector_spherical(coords) # 球面座標を持つブロッホベクトル" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 注意!\n", + "量子ビットの状態について初めて学習するとき、量子ビットの _状態ベクトル_ と _ブロッホベクトル_ を混同しやすいです。 状態ベクトルは [1.1](#notation) で解かれたベクトルであり、量子ビットが存在できる2つの状態の振幅を保持します。ブロッホベクトルは、2次元の複素数の状態ベクトルを実際の3次元空間にマッピングする視覚化ツールです。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 練習問題\n", + "\n", + "`plot_bloch_sphere_spherical()`を使って以下の状態の量子ビットをプロットしてください。\n", + "1. $|0\\rangle$\n", + "2. $|1\\rangle$\n", + "3. $\\tfrac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle)$\n", + "4. $\\tfrac{1}{\\sqrt{2}}(|0\\rangle - i|1\\rangle)$\n", + "5. $\\tfrac{1}{\\sqrt{2}}\\begin{bmatrix}i\\\\1\\end{bmatrix}$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`plot_bloch_vector()`で使用するために、球座標からデカルト座標に変換するウィジェットも以下に含めました。" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "27de9ed023d6465d9a2b33d52a6ba63d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='Define a qubit state using $\\\\theta$ and $\\\\phi$:'), Text(value='', placeholder='T…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9cc58cbedeb741a8a3078bdad9edcf97", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTML(value='
    ')"
    +      ]
    +     },
    +     "metadata": {},
    +     "output_type": "display_data"
    +    },
    +    {
    +     "data": {
    +      "application/vnd.jupyter.widget-view+json": {
    +       "model_id": "624a34e38a204b008f893012b37470a2",
    +       "version_major": 2,
    +       "version_minor": 0
    +      },
    +      "text/plain": [
    +       "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01h\\x00\\x00\\x01h\\x08\\x06\\x00\\x00\\x00z\\xe5a\\xd5\\x00\\…"
    +      ]
    +     },
    +     "metadata": {},
    +     "output_type": "display_data"
    +    }
    +   ],
    +   "source": [
    +    "from qiskit_textbook.widgets import bloch_calc\n",
    +    "bloch_calc()"
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": 21,
    +   "metadata": {},
    +   "outputs": [
    +    {
    +     "data": {
    +      "text/plain": [
    +       "{'qiskit-terra': '0.13.0',\n",
    +       " 'qiskit-aer': '0.5.1',\n",
    +       " 'qiskit-ignis': '0.3.0',\n",
    +       " 'qiskit-ibmq-provider': '0.6.1',\n",
    +       " 'qiskit-aqua': '0.6.6',\n",
    +       " 'qiskit': '0.18.3'}"
    +      ]
    +     },
    +     "execution_count": 21,
    +     "metadata": {},
    +     "output_type": "execute_result"
    +    }
    +   ],
    +   "source": [
    +    "import qiskit\n",
    +    "qiskit.__qiskit_version__"
    +   ]
    +  }
    + ],
    + "metadata": {
    +  "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.8.5"
    +  },
    +  "widgets": {
    +   "application/vnd.jupyter.widget-state+json": {
    +    "state": {
    +     "0e3a9250b3134696b859f0cc876d05fd": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "0ec195bc84a54518a85886e31e7178f6": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "18a5fa494c7e47f4a626804eab4d5d60": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "1b44a3802c4e4100a38621e8b3feb703": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "1ed8efc7b1bc4ba4813bad7b9efc278d": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": "4em"
    +      }
    +     },
    +     "235d55acb4b64f9393d5ed1b9b92b973": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "LabelModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "LabelModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "LabelView",
    +       "description": "",
    +       "description_tooltip": null,
    +       "layout": "IPY_MODEL_6dd7bcfe4c314b6ebe5136d1eb4bf210",
    +       "placeholder": "​",
    +       "style": "IPY_MODEL_0ec195bc84a54518a85886e31e7178f6",
    +       "value": "State Vector:"
    +      }
    +     },
    +     "25d7f7674b4d4515ba34b966ce5168cf": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "2c0fbbec17e24abbbe57a955b414453c": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "HTMLModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "HTMLModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "HTMLView",
    +       "description": "",
    +       "description_tooltip": null,
    +       "layout": "IPY_MODEL_9aa70658809c44c48e1c519adefd6e86",
    +       "placeholder": "​",
    +       "style": "IPY_MODEL_1b44a3802c4e4100a38621e8b3feb703",
    +       "value": "
    "
    +      }
    +     },
    +     "3191b70d554e4e8aa6a9b97916ad30ab": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": "5em"
    +      }
    +     },
    +     "3f16f9013bb14ec7a7f9ac90e0e9e046": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "4859058a9b264a158f5ccb2672502968": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "VBoxModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "VBoxModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "VBoxView",
    +       "box_style": "",
    +       "children": [
    +        "IPY_MODEL_235d55acb4b64f9393d5ed1b9b92b973",
    +        "IPY_MODEL_51d56eb1f2b7400ca8a077dd9abb74fe"
    +       ],
    +       "layout": "IPY_MODEL_aa98b1360c18435aaaeacd35a64d651b"
    +      }
    +     },
    +     "487dd0b56c35463ea6f673b344a07406": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "LabelModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "LabelModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "LabelView",
    +       "description": "",
    +       "description_tooltip": null,
    +       "layout": "IPY_MODEL_8b5da1fa459c48d1a89a0a4acdc5f8dc",
    +       "placeholder": "​",
    +       "style": "IPY_MODEL_f05cb3fe8b754d66b697feca50af0cac",
    +       "value": "Define a qubit state using $\\theta$ and $\\phi$:"
    +      }
    +     },
    +     "5017adfdba004a4f8c140edfffda1e2b": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "51d56eb1f2b7400ca8a077dd9abb74fe": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "HBoxModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "HBoxModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "HBoxView",
    +       "box_style": "",
    +       "children": [
    +        "IPY_MODEL_6e84e0b61f85421185b012312d997556",
    +        "IPY_MODEL_83077d4ebabb4a59acd9a951b1ce8822"
    +       ],
    +       "layout": "IPY_MODEL_3f16f9013bb14ec7a7f9ac90e0e9e046"
    +      }
    +     },
    +     "69d46725a9e34490a72d75461a2b1116": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "6dd7bcfe4c314b6ebe5136d1eb4bf210": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "6e84e0b61f85421185b012312d997556": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "TextModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "TextModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "TextView",
    +       "continuous_update": true,
    +       "description": "",
    +       "description_tooltip": null,
    +       "disabled": false,
    +       "layout": "IPY_MODEL_9c7f09dd65d24fc69e0156d3d90fcc42",
    +       "placeholder": "Type something",
    +       "style": "IPY_MODEL_77946d3dfad2419d86f0e82f0c12b817",
    +       "value": "[1, 0]"
    +      }
    +     },
    +     "74fa278ca3324f7b95a3042ca6e984d3": {
    +      "buffers": [
    +       {
    +        "data": "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",
    +        "encoding": "base64",
    +        "path": [
    +         "value"
    +        ]
    +       }
    +      ],
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "ImageModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "ImageModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "ImageView",
    +       "format": "png",
    +       "height": "",
    +       "layout": "IPY_MODEL_25d7f7674b4d4515ba34b966ce5168cf",
    +       "value": {},
    +       "width": ""
    +      }
    +     },
    +     "77946d3dfad2419d86f0e82f0c12b817": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "77dd298926e844099916866686b66c51": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "77f01475566b41aca1a483bc229ad414": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "7e0e0c61b3ac4f3c85b91a4f4a3ada1b": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "HTMLModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "HTMLModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "HTMLView",
    +       "description": "",
    +       "description_tooltip": null,
    +       "layout": "IPY_MODEL_77f01475566b41aca1a483bc229ad414",
    +       "placeholder": "​",
    +       "style": "IPY_MODEL_be1374cdda6f4671822692e47ee461c1",
    +       "value": "
    "
    +      }
    +     },
    +     "83077d4ebabb4a59acd9a951b1ce8822": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "ButtonModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "ButtonModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "ButtonView",
    +       "button_style": "",
    +       "description": "Check",
    +       "disabled": false,
    +       "icon": "",
    +       "layout": "IPY_MODEL_3191b70d554e4e8aa6a9b97916ad30ab",
    +       "style": "IPY_MODEL_ce7d181d669a432a97a1e520c2fdb331",
    +       "tooltip": ""
    +      }
    +     },
    +     "89f27c8215f148e7a762cd2f91617f11": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "ButtonModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "ButtonModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "ButtonView",
    +       "button_style": "",
    +       "description": "Plot",
    +       "disabled": false,
    +       "icon": "",
    +       "layout": "IPY_MODEL_1ed8efc7b1bc4ba4813bad7b9efc278d",
    +       "style": "IPY_MODEL_ac418da874324794b5859619196d0301",
    +       "tooltip": ""
    +      }
    +     },
    +     "8b5da1fa459c48d1a89a0a4acdc5f8dc": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "9aa70658809c44c48e1c519adefd6e86": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "9c7f09dd65d24fc69e0156d3d90fcc42": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "a74bbee6862d404897e5f264a1e6edc8": {
    +      "model_module": "@jupyter-widgets/output",
    +      "model_module_version": "1.0.0",
    +      "model_name": "OutputModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/output",
    +       "_model_module_version": "1.0.0",
    +       "_model_name": "OutputModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/output",
    +       "_view_module_version": "1.0.0",
    +       "_view_name": "OutputView",
    +       "layout": "IPY_MODEL_77dd298926e844099916866686b66c51",
    +       "msg_id": "",
    +       "outputs": []
    +      }
    +     },
    +     "aa13028426bb45f888ac52222470b9fd": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "VBoxModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "VBoxModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "VBoxView",
    +       "box_style": "",
    +       "children": [
    +        "IPY_MODEL_487dd0b56c35463ea6f673b344a07406",
    +        "IPY_MODEL_d4000af0c7e54705943af08767f66d60",
    +        "IPY_MODEL_c464f275191645d1bc0854f8368755bc"
    +       ],
    +       "layout": "IPY_MODEL_18a5fa494c7e47f4a626804eab4d5d60"
    +      }
    +     },
    +     "aa98b1360c18435aaaeacd35a64d651b": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     },
    +     "ac418da874324794b5859619196d0301": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "ButtonStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "ButtonStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "button_color": null,
    +       "font_weight": ""
    +      }
    +     },
    +     "b75b9fab8c95454787407840352d1a7a": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "TextModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "TextModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "TextView",
    +       "continuous_update": true,
    +       "description": "",
    +       "description_tooltip": null,
    +       "disabled": false,
    +       "layout": "IPY_MODEL_0e3a9250b3134696b859f0cc876d05fd",
    +       "placeholder": "Phi",
    +       "style": "IPY_MODEL_be5507940a5142c4849eb527759d0fb4",
    +       "value": ""
    +      }
    +     },
    +     "be1374cdda6f4671822692e47ee461c1": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "be5507940a5142c4849eb527759d0fb4": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "c464f275191645d1bc0854f8368755bc": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "HBoxModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "HBoxModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "HBoxView",
    +       "box_style": "",
    +       "children": [
    +        "IPY_MODEL_b75b9fab8c95454787407840352d1a7a",
    +        "IPY_MODEL_89f27c8215f148e7a762cd2f91617f11"
    +       ],
    +       "layout": "IPY_MODEL_5017adfdba004a4f8c140edfffda1e2b"
    +      }
    +     },
    +     "ce7d181d669a432a97a1e520c2fdb331": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "ButtonStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "ButtonStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "button_color": null,
    +       "font_weight": ""
    +      }
    +     },
    +     "d4000af0c7e54705943af08767f66d60": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "TextModel",
    +      "state": {
    +       "_dom_classes": [],
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "TextModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/controls",
    +       "_view_module_version": "1.5.0",
    +       "_view_name": "TextView",
    +       "continuous_update": true,
    +       "description": "",
    +       "description_tooltip": null,
    +       "disabled": false,
    +       "layout": "IPY_MODEL_f0a97ff9eba245c08d02316dbfe58b43",
    +       "placeholder": "Theta",
    +       "style": "IPY_MODEL_69d46725a9e34490a72d75461a2b1116",
    +       "value": ""
    +      }
    +     },
    +     "f05cb3fe8b754d66b697feca50af0cac": {
    +      "model_module": "@jupyter-widgets/controls",
    +      "model_module_version": "1.5.0",
    +      "model_name": "DescriptionStyleModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/controls",
    +       "_model_module_version": "1.5.0",
    +       "_model_name": "DescriptionStyleModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "StyleView",
    +       "description_width": ""
    +      }
    +     },
    +     "f0a97ff9eba245c08d02316dbfe58b43": {
    +      "model_module": "@jupyter-widgets/base",
    +      "model_module_version": "1.2.0",
    +      "model_name": "LayoutModel",
    +      "state": {
    +       "_model_module": "@jupyter-widgets/base",
    +       "_model_module_version": "1.2.0",
    +       "_model_name": "LayoutModel",
    +       "_view_count": null,
    +       "_view_module": "@jupyter-widgets/base",
    +       "_view_module_version": "1.2.0",
    +       "_view_name": "LayoutView",
    +       "align_content": null,
    +       "align_items": null,
    +       "align_self": null,
    +       "border": null,
    +       "bottom": null,
    +       "display": null,
    +       "flex": null,
    +       "flex_flow": null,
    +       "grid_area": null,
    +       "grid_auto_columns": null,
    +       "grid_auto_flow": null,
    +       "grid_auto_rows": null,
    +       "grid_column": null,
    +       "grid_gap": null,
    +       "grid_row": null,
    +       "grid_template_areas": null,
    +       "grid_template_columns": null,
    +       "grid_template_rows": null,
    +       "height": null,
    +       "justify_content": null,
    +       "justify_items": null,
    +       "left": null,
    +       "margin": null,
    +       "max_height": null,
    +       "max_width": null,
    +       "min_height": null,
    +       "min_width": null,
    +       "object_fit": null,
    +       "object_position": null,
    +       "order": null,
    +       "overflow": null,
    +       "overflow_x": null,
    +       "overflow_y": null,
    +       "padding": null,
    +       "right": null,
    +       "top": null,
    +       "visibility": null,
    +       "width": null
    +      }
    +     }
    +    },
    +    "version_major": 2,
    +    "version_minor": 0
    +   }
    +  }
    + },
    + "nbformat": 4,
    + "nbformat_minor": 2
    +}
    diff --git a/translations/ja/ch-states/single-qubit-gates.ipynb b/translations/ja/ch-states/single-qubit-gates.ipynb
    new file mode 100644
    index 0000000..1ec661b
    --- /dev/null
    +++ b/translations/ja/ch-states/single-qubit-gates.ipynb
    @@ -0,0 +1,827 @@
    +{
    + "cells": [
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {
    +    "tags": [
    +     "remove_cell"
    +    ]
    +   },
    +   "source": [
    +    "# 単一量子ビットゲート"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "前の章では、量子ビットが存在する可能性のあるすべての状態を調べました。量子ビットは2次元ベクトルで表すことができ、その状態は次の形式に制限されていることがわかりました。\n",
    +    "\n",
    +    "$$ |q\\rangle = \\cos{(\\tfrac{\\theta}{2})}|0\\rangle + e^{i\\phi}\\sin{(\\tfrac{\\theta}{2})}|1\\rangle $$\n",
    +    "\n",
    +    "$\\theta$および$\\phi$は実数です。この章では、これらの状態間で量子ビットを変更する操作である _ゲート_ について説明します。ゲートの数とゲート間の類似性のため、この章は単調になる危険性があります。 これを回避するため、章全体の適切な場所に重要な考え方を紹介するいくつかの余談を含めました。\n",
    +    "\n",
    +    "## 目次    \n",
    +    "\n",
    +    "1. [パウリゲート](#pauli)    \n",
    +    "    1.1 [Xゲート](#xgate)    \n",
    +    "    1.2 [Y、Zゲート](#ynzgatez)    \n",
    +    "2. [余談: X、Y、Z基底](#xyzbases)    \n",
    +    "3. [アダマールゲート](#hgate)    \n",
    +    "4. [余談: 異なる基底での測定](#measuring)    \n",
    +    "5. [Pゲート](#rzgate)    \n",
    +    "6. [I、S、Tゲート](#istgates)    \n",
    +    "    6.1 [Iゲート](#igate)    \n",
    +    "    6.2 [Sゲート](#sgate)    \n",
    +    "    6.3 [Tゲート](#tgate)    \n",
    +    "7. [一般的なU3ゲート](#generalU3)    \n",
    +    "\n",
    +    "_原子で計算をおこなう_ では、いくつかのゲートに出会い、それらを使用して古典的な計算を実行しました。 量子回路の重要な特徴は、量子ビットの初期化と測定の間では、操作が *_いつも_* 可逆であることです。 その結果、量子回路で使用できるすべてのゲートも可逆です。 これらの可逆ゲートは、行列として表すか、ブロッホ球の周りの回転と考えることができます。"
    +   ]
    +  },
    +  {
    +   "cell_type": "code",
    +   "execution_count": 1,
    +   "metadata": {},
    +   "outputs": [],
    +   "source": [
    +    "from qiskit import QuantumCircuit, assemble, Aer\n",
    +    "from math import pi, sqrt\n",
    +    "from qiskit.visualization import plot_bloch_multivector, plot_histogram\n",
    +    "sim = Aer.get_backend('aer_simulator')"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "## 1. パウリゲート \n",
    +    "\n",
    +    "線形代数の章のパウリ行列に精通している必要があります。 ここで紹介する数学のいずれかが初めての場合は、線形代数の章を使用して、理解してもらう必要があります。 この章ではパウリ行列が非常に一般的に使用されるいくつかの量子ゲートを表すことができることがわかります。\n",
    +    "\n",
    +    "### 1.1 Xゲート \n",
    +    "\n",
    +    "Xゲートは、パウリ-X行列で表されます。\n",
    +    "\n",
    +    "$$ X = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix} = |0\\rangle\\langle1| + |1\\rangle\\langle0| $$\n",
    +    "\n",
    +    "ゲートが量子ビットに与える影響を確認するには、量子ビットの状態ベクトルにゲートを掛けます。 Xゲートが状態$|0\\rangle$と$|1\\rangle$の振幅を切り替えることがわかります。\n",
    +    "\n",
    +    "$$ X|0\\rangle = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix}\\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix} = |1\\rangle$$\n"
    +   ]
    +  },
    +  {
    +   "cell_type": "markdown",
    +   "metadata": {},
    +   "source": [
    +    "\n",
    +    "
    \n", + " 備忘: ベクトルと行列の乗算 (ここをクリックして展開してください。)\n", + "

    行列の乗算は、前章で見た内積の一般化です。 (上記のように)ベクトルに行列を乗算する特定のケースでは、常にベクトルを返します。\n", + " $$ M|v\\rangle = \\begin{bmatrix}a & b \\\\ c & d \\\\\\end{bmatrix}\\begin{bmatrix}v_0 \\\\ v_1 \\\\\\end{bmatrix}\n", + " = \\begin{bmatrix}a\\cdot v_0 + b \\cdot v_1 \\\\ c \\cdot v_0 + d \\cdot v_1\\end{bmatrix} $$\n", + " 量子コンピューティングでは、基底ベクトルで行列を書くことができます。\n", + " $$X = |0\\rangle\\langle1| + |1\\rangle\\langle0|$$\n", + " これは、行列を使用するよりも明確な場合があります。さまざまな乗算の結果を確認できるためです。\n", + " $$\n", + " \\begin{aligned}\n", + " X|1\\rangle & = (|0\\rangle\\langle1| + |1\\rangle\\langle0|)|1\\rangle \\\\\n", + " & = |0\\rangle\\langle1|1\\rangle + |1\\rangle\\langle0|1\\rangle \\\\\n", + " & = |0\\rangle \\times 1 + |1\\rangle \\times 0 \\\\\n", + " & = |0\\rangle\n", + " \\end{aligned}\n", + " $$\n", + " 実際、次のようにケットとブラが乗算されているのを見てみます。\n", + " $$ |a\\rangle\\langle b| $$\n", + " これは外積と呼ばれ、次のルールに従います。\n", + " $$\n", + " |a\\rangle\\langle b| = \n", + " \\begin{bmatrix}\n", + " a_0 b_0 & a_0 b_1 & \\dots & a_0 b_n\\\\ \n", + " a_1 b_0 & \\ddots & & \\vdots \\\\\n", + " \\vdots & & \\ddots & \\vdots \\\\\n", + " a_n b_0 & \\dots & \\dots & a_n b_n \\\\\n", + " \\end{bmatrix}\n", + " $$\n", + " これが実際にX行列に結果として表示されることがわかります。\n", + " $$\n", + " |0\\rangle\\langle1| + |1\\rangle\\langle0| = \n", + " \\begin{bmatrix}0 & 1 \\\\ 0 & 0 \\\\\\end{bmatrix} +\n", + " \\begin{bmatrix}0 & 0 \\\\ 1 & 0 \\\\\\end{bmatrix} = \n", + " \\begin{bmatrix}0 & 1 \\\\ 1 & 0 \\\\\\end{bmatrix} = X\n", + " $$\n", + "

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitでは、これを検証するための短い回路を作成できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# |0> 量子ビットに対してゲート作用させてみましょう。\n", + "qc = QuantumCircuit(1)\n", + "qc.x(0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上記の結果を見てみましょう。 **注意** ここでは、ブロッホベクトルの代わりに量子ビットの状態ベクトルを取る `plot_bloch_multivector()`を使用しています。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAAD7CAYAAACR4IPAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACN0ElEQVR4nO39eZBcZ3YfCv6+u+eetVcBBaCwEwsJgAC4NkE2u5vqcei5Y/zs98aOp7Fky9LIkmXL43FYdsRY1rwO6UmWdznCfvFey3JEyzOSQ023ZKl3Lk0QXEAQBLET+1JZW1aud7/3mz++77t1M+tmVhZYIApg/iIQReZyt7znnvOd8zu/Qyil6KOPPtYfpAd9AH300Ucy+sbZRx/rFH3j7KOPdYq+cfbRxzpF3zj76GOdom+cffSxTtE3zocIhJDfI4RQQsjUKr5znRBy/f4dVR/3C33j/ByCEPLT3Mh/+h6/P0kI+T8JIXcJIQ5/APwrQsjAGh/q5xrKgz6APu47vrSWGyOEbAdwHMAogFcBXADwFIC/C+CrhJDnKaULa7nPzyv6xvmIg1J6ZY03+e/BDPOXKaX/VrxICPkXAH4FwNcB/D/WeJ+fS/TD2jUCYfglQshZQohNCLlDCPl3hJBC0rqPEPJrPLR8KWFbU/y93+uwO4kQ8vcJIRf4vm4TQv4lISSfsK2WfRNCXgPwDf6/3+D7Ef+mVjjH7QBeAXAdwO+2vf1PATQB/BQhJNNtO330hr7nXDv8KwC/DGAawH8E4AH4GoCnAWgA3DXc178EcAzA/w8stPwJAH8PwAuEkC9QSu0u3/09ABV+bK8C+DD2XmWF/X6R//0upTSMv0EprRNC3gIz3mcA/GDl0+ijG/rGuQYghDwHZphXADxFKS3z1/8JgB8BmABwYw13+TyAg5TSG3w/vwrgDwH8JQD/LwD/n05fpJT+HiEEYMb5LUrp761iv7v530sd3r8MZpy70DfOT41+WLs2+Bn+9+vCMAGAe7BfvQ/7+9fCMPl+QjCjDAH8jfuwP4EC/1vt8L54vXgfj+Fzg75xrg2e5H9fT3jvxwCCNd7fsv1QSq8CuAVgihBSXOP99fEA0DfOtYHwKDPtb1BKfQDza7y/ZfvhKLUdz1pDeMZO2xevV+7T/j9X6Bvn2kDctGPtbxBCFADDCd8RCZWkdX9xhf0t2w/HeNvxrDUu8r+7Ory/k//ttCbtYxXoG+fa4AP+98WE974AQE54fZH/3ZTw3pEV9rdsP4SQbXxb1ymllRW+L8LspOPqhh/xv68QQlruHUJIDixRZQI4scrt9pGAvnGuDX6P//0nhJBB8SIhxADwGx2+8y7/+zPcu4rvbALw/15hf3+XELIl9h0JwG+D/Z7f6PitJQgGz+YePhuBExq+C2AKwC+2vf3PAGQA/GdKaXM12+0jGf1SyhqAUvoWIeTfAvg7AD4mhPwRluqci2C1z/bvvEMIeQOsXvkuIeSHYOHq/wDgO0j2qAJvAfiQEPL/BQthfwLAAQAnAfxWD4f8NpiH+3uEkCEsrVX/LaV0pZD4b4PR9/4NIeRLAM6D1XK/CBbO/pMe9t9HL6CU9v+twT8ABMAvgd2sDoC7YCyaAhij5nrCd4oA/ncAs/w7HwP4OTDPRAH8Xtvnf4+/vg3A/xOM12oDuANGgsgn7KPTvr8KZqQNvk0KYKrHc90E5qGnwcgVN/j+Bx707/Ao/SP8YvdxHyHoc5TSqQd7JH08TOivOfvoY52ib5x99LFO0TfOPvpYp1hpzdlfkPbRx/0HSXqx7zkfMvzar/0aCCG4fv36p9rOj3/8YxBC8Lu/296W2cd6Qd84HyHcvn0bf+Nv/A1s2LABuq5jamoKf+/v/T0sLi4u++xzzz2HkZERvPrqqw/gSPvoBX3jfERw5coVHD58GN/4xjfw1FNP4Vd+5Vewbds2/Ot//a/x7LPPYmGhVdZHkiT85E/+JF577TVUq/eLitvHp0HfOB8R/O2//bcxOzuLf/Nv/g2+9a1v4Td/8zfxwx/+EL/yK7+Cixcv4p/8k+XEna997WvwPA9/9md/9gCOuI+V0DfORwBXrlzBd7/7XUxNTeEXf7GV8vrP/tk/QyaTwX/+z/8ZzWYr5fUrX/kKUqlUP7Rdp+gb5yOAH/2INYu88sorkKTWnzSXy+H555+HaZo4caK1WSSdTuMrX/kK/uzP/gye531mx9tHb+gb5yOAixdZm+WuXcltljt3sjbLS5eWt1l+7WtfQ7VaxWuvvXbfjq+Pe0PfOB8BiIROoZAsUCBer1Qqy977yZ/8SUiS1A9t1yH6xvk5x+joKJ555hn8t//23x70ofTRhr5xPgIQnrFTSUS8XiwWE9+v1WrI55fpUffxgNE3zkcAu3czOdmkNSUAXL58GUDymvTq1av4+OOP8bWvfe3+HWAf94S+cT4C+OIXmRD7d7/7XYRhixA76vU63nrrLaTTaTzzzDPLvivWmn3jXH/oG+cjgO3bt+OVV17B9evXl3Fl/+k//adoNpv4qZ/6KWQyy0eYvPrqq5iYmMDRo0c/q8Pto0f0NYQeEfz7f//v8dxzz+GXf/mX8YMf/AB79uzBO++8gx/96EfYtWsXvv71ry/7zsLCAn784x/jZ3/2Z8FHNPSxjtD3nI8Itm/fjvfffx8//dM/jXfeeQe/8zu/gytXruDv/t2/ixMnTmBoaGjZd/70T/8UQRD0Q9p1ir7nfISwadMmfOMbycqYlFJ4ngdJkqAo7Gd/9dVXkc1m8fLLL3+Wh9lHj+gb50MK13FgmybCIEAYhqBhCFCKkFL2NwxBAUiEgAKo1mrwPA+EEOQLBWiahu985zv46le/Cl3XH/Tp9JGAvnGuIwRBAN/3Gc81DAFudGEQwHUceK6LWrkMXddRunULxHWXpBQBRKoW3EhpGAKEoNlswvN9pFMp+EGA2elp3Lp1C9u3bsWXjh3DJ2fPQtM0qJoGhf9VNQ1+EEBWFGQymf6a9AGgb5wPEI7jwDRN2JYF2zTh2DY8boRBGCIIAoRBEGnFKLIMSZYxODgIy7LQME2mbyo2SAj7b0JACAENAni+D9OyoOs6KKWQCIHjOJiYmMD/+R/+A0ApyouLWFhYQLPRQNOyYDWbME0z8rxBGCKTy2FgcBDFoSFMTU1h9+7dfYO9z+hrCD0AmKaJhZkZVCsVuLYdeT1CCGRJWrrpuUf0g4B5wiDA2YsXcfbjj/FX/8pfwfDQEOtC4UbZ/mPRMES1VkMQhhgoFABJAqEUjWYTlmVBkWVcu3EDt2/fRi6TQX5gAGnDgGYYMAwjWpv6vg/LsmDbNhzHwezsLLwwxNGjR3H4qaegqupnePUeSSQ+5frG+RnBsW3MlUqYn52NvJKh69A1DaqiQFEUyLIMWZIg8X+UUgRBEBlrEASwHQe24yDkXtDQdRi6DiItT7y7joNqvY5sOg3DMNg2KMXtW7dw6fJl2JaFrVu3YmpqCul0moXVsdDa8zwEYYgw9i8IAvhhiHq9jtLdu7AdB1NTUzh0+DAmNm6EkUr1Perq0TfOzxKUUti2jXqlgka1isriIvNWioJcLodMKgVVVaEqSsvNHIRhlNQJAj4MjJDIi/KNw+HezPN9EACZdBq6roNQChACSimq9To818VAsQhCCObm5vDBBx8gnU5jaGQEg0NDyHKjFMwiEcrKsgxZltl+4/sGIiP1fB8L5TKuXbuGIAyxc+dOFItFDI6MYHhkBLlcDpqmfQZX+6FH3zjvNyilcBwH9XodtXIZnm2DhiE8z4Pr+0hpGrKZDPwwhO/7S/+4txKGIckyC1MphSzLkCQJBEz3R5JlqIoCTdMgEQLP91nCJwigKgqymQwLdSnFfLkMTVWhqio+PnMGM3Nz2L9vH/KFAhqNBvwgQLFQiLy2IstQFAWSJEXGSvi+A0oRBgEIsMwzBmGIDz/8EKXZWezdswdElkEIQSaTwfDoKIZHR5HP5/setTP6xnm/4Ps+TNNEbXERdrMJn4edruuiUqvBdV0oqsrCT7CbW/xVZDlaC1JgKYTkxhAuDQ9iEOUSAIqiQNc06LqOkFIEvg8iSUjz0LJar6NWq+Hc2bMYHh7Gtu3bmQHKMqt7BgGGBweX1BPEfrinDtvuDRFmU/4ZEvtLAFy+cgWXLl7EU0ePIpPNomGaME0TmmGgMDCAsfFxDA4O9teoy9E3zrWGbduo1WpoVquoVypwHYeFiJRCkiTYtg1FUZDPZlmCRZYhKwr7y/9RSllo2uZVfL7WJKIswv+GQQDX8+A4Djz+NwRL/ni+D891EfLyyUypBN/z8Nju3RgYGICuaczjShJ830e92UQunYaqqsxDEsJCWkmK1rBdDbT1DUCSUJqexvsnT+LZp5/G8MgIwjBE0zRRbzQQUopMPo+x8XGMj4/366tL6BvnWsGyLNRqNZRKJdQXFhCEITRFgSxJMAwDKcOIPE8um01cd4nsqsdDRfD/F6/Ttu4SYGmtR2NeNQgCuK4L23XhuS4sx8Hs/Dxu3LiBEMCObdtQzOeRyWRgaFpkhGEYolqvwzAMGEnHx40UAIh4mHCjlYBl69A4SqUSTn3wAV7+8pfZOpi/7jgOavU6HM/DwMgIJiYm+p6UoW+cnxaWZaFcLmNubg7VxUUolCJlGMim00ilUjBSKSiyDM91Ua3XoWkaMul0FP61IwxDBB2MUHjJ+NpU/Bii7AIAMl/fUUrhOQ4WymVcvHQJmzdvxoVPPsHhAwcQhiEIT+6kUilk0mlk0mlUqlWoioJcNhuF1AEnPfg8SRSGIXz+QIgjCEO2TlUU9mASx8HfP336NCzLwlNPPRV9R5R9HMfBYrUKPZXC4PAwBgcHkc/nP89G2jfOe4Xv+5iZmcHMzAyajQY0SpHP5VDI55FKpVo+S8MQlWoVlFIUCoWuSRBhcCL54wUBfM+D67rwRaYWLEmkqCoLh4X3kiTIshzVIP0gwEyphE+uXMGTTz6JTCqF7/7gB3jlS1+C63mAJCHkhATf90G59zRSKUwMD0PmNc0WUgOAkBBGhBCGy401CAI4PIwHABACRVGishAIwWs/+hG2bd2KLVu3Lrv7CIB6s4mAUqSzWRQHB1EoFJDL5T6PiaPEE+4zhLqAUopSqYTbt27BbjaRUlWMFwqMmxp/yvPyBSEEddNEyI23401GCGgYwvE8BDHPCLCnoSxJ0HUdKjdIiYeicY8ZBAGazSYzPEJw5/Zt3Ll9G1986aUo5JQJQT6fR4N/LpXJYGhoCLZlwbRtlMtlVBYX4ToOspkMBvJ5qDzEpfy8JEpBCQHh7CQA0MG8bMowWEnF8+Dz0oplWdE57n/8cbz37rsoDg4uSaRwZ0ABZDMZ2JySWK9W0RgawuDwMAqFQlSX/Tyjb5wdUKvVcPHCBVj1OgxVxcaxMQzk8yCcHAAsPe5E8sTm1LuUYbAaYQI834frusw7+j4opVAUhSWMVDUKD+NmLbyZCBsFWwcAdMPAhfPnUavV8MWXX4au66hUKtBiyZZsNgvLNGHZNiilyKTTSGcySKVSqNVqkCUJTctCo9FAOpXCADcOGsvEdoqwZG60BpjBhbw05Pk+JEnC1NateP/993Hk6FHoug5dVSFLUhSSGZoGJZ9HjZMaapUKBoeHMTw6iiKvz35e0TfONoRhiFu3buHGtWtQAWyamMDQwAB7j5MDkmp9AGDZNghPCiH2mSAI4LguHMeJbnJd15ESFDleSxT7FxCeUoptp95oIAxD6IYBQ9fx7rvvglKKY8eOQZYkeNwDi/WbMOhUOg0iSTB5J0sul4Miy9B1HYVcDgNhiFqjgUajgdszMzBUFcViEdl0GhIhCJcOKsrYCpDYX0mWoSkKezhQityePbh79y6qlQpy+Tws247eV2UZRJKgqCpyuRzQaMC2LMyXSqgsLmJy0yaMjo93fNA96ugbZwy2bePSxYuoLCwgl0phy+QkVE1bKsgDiYkdAHBcF0EQIJ1OR9lQ23Hg8tcBZjC6rkesIBpr7WpHfF+UH5sw/lw2C0VR8MGpUwiCAM8/91zkvX3eqSLzYxBlGPHQIISgYZpommZUyggohaJpGBoYQCGfR73RQL1ex+zcHBZkGYVCAZl0OkrohPyhEXGC48cdvz6EQFYU7H3sMVy7dg3PPv88e0i5LtxGA5IksfIOD+Fz2Sxq9Tr8IIDkebh6+TJqtRq27djxuUwW9Y0TzFvNzc3hxpUr8G0bE0NDGB8bi9aGEr/Rk0D5etPiYSYoRb1ejzyYoihIp9PQNW2ZtyWcJufzbUeGKsoUPBnTaDYRBAE0VUU6k4FECM6fP49qpYJjL77Ywqv1goCtDWOvkRj9T9M0pMOQeVAeCUS9oGAZ1UI+j3wuh3qziXq9joWFBSyUyyjk88hms9G1kET3C5YbabRvAJObNuEcD70HBwaQMgxWo3VdWPyhI6iMmXQaTdOE67pIpdOYnZ5GvVrF7n37mHf9HOFzb5y2bePG9euoLy5CCgJsnpyMsqxhEDDDTFhviZCTEALP89BsNiNvKBGClGFEBX+RLOJfXLYt4eUkAAEQeUzHcWBaFkApMpkMdJ6suX71Km7evImXXnop6hwREEa87Hj5vgkhMAwDQRjCtm22Rk6lWtrOhGfMZ7PIZ7NomiYq1SoWymXMl8sYHBhAJp1GIAwydn5JRipLEnbu3IlLFy/imWeeWfKYqoqAM6kcx4HreaBhCF3X4bgubNtGOpWCZVn46IMPsHP3boyOj/fwqz4a+FwbZ6VSwY1r1xA6DtKahgLPFApvIiUYlAgRxQ1o2zbmFhbgeR4GuFfQVLVljUbathG9xf8SzqcNwhDgSaKmacLjtL+ILwtgenoa5y5cwIsvvtiS0aQAK3nwBFM7CAAa89zpVCry8obntWxL4g+Z6LPpNDRdR71eR6VSwcLCAuqNBgYHB6EpSrQOjR+LWKcKIv7U1BQuXriAeq2GHBewJoRAIQQy76wRPGGR7ArCEJZlIZPNol6v4/KFC2jUatg0NRVllR9lfG4FvhYXF3HzyhVoYYhiNotcNsvKH/z9lmwpEBkX4aRy23GwWKmgxhM0g4ODyGezUFQVITeCTomjOOL7I/wmr9Zq8FwX6XQauWw2Mszy4iJOnjyJ5559FtlstuX4CBCVY5KMs/2cCCFIp9NQFQXNRmPZlDFx3D4vlVC+nh4fH8dAoQDfdTF99y4Wq9XEkD8KmcGMjBCCbdu2JQpfE0IgSRI0RUEhn4/Wt2EYomlZcByHdc+EIWZKJVw+fx7NRqPrdX0U8Lk0zoWFBdy+ehUaIRjgXRn5fH4pK9jmBSjnjQLMUy5WKmiYJishGAbSnCEUlR46rL+i7cWMNw7HdVFvNCBLEorFIgs3uRer1+t4+/hxHDl6FAODgy3fI/x4fc7R7TW7SQhBNpuFRAiaphlxZkNKI6KB+JwItSVJQqFYxMTEBLKZDOq1Gu6USiz87gCxNp3ctAl3p6ejElJLLCEy0wBUTUM+l0OerzEXymU4ngddVeF5HmzLwrXLl1Epl3s6z4cVnzvjnJudxd1r16ARgonxcXhBwLKFihJlTwEsdV4QAkoIM8pqFY1mE5Iso8AZQmEQRCT2bj6SIhbGJoS4tm2zbROCfC4HhWd0hQc5fvw49u3dyxJV8e3GbnKfH0s3tO+ZSBKMdBo0DLHIO2jCIFiKFJDs/VVVxcjICEZHRqBIEubm5zE7Nxd57yRkMhlkMhmUy2V23JxxRHkijAJRWUkiBLqmYWxkBLquo1qrsSyv57F6bRji1rVrmLl7t+v5Psz4XBnn7MwMZm7cgCbL2LhxI1zXBShl6y9wD8kZMcJTuK6LaqXCDIdnMgucByqUAzRN62qYAqKg3w7TstBoNqFyDy61Gdjp06cxMjKCrdu2tfBX4+s8QasTnS6RxxeMnJgRB5yKF/FngwDpTAaUr/GSjlv0iLYjnU5jYnwcxUIBjuvizswMqh1CXQDYuGED7k5Pt7wmiP7CWKP9ckrgQKGAVIxUUa3V0LQsgBDM3L2LuzdvJu7rYcfnxjhnZ2cxc+sWdE3DxokJSJIEx3WhaRpkWV7qm+ShKeVSHDVejxNcWlVVoxvd5eu0TjW4Fm/Z4f1GoxEJcGWz2WVe6tbNmygvLODggQPRa9E6NfbZgHs74TnF+jUUtVTuqUTZRBi2SHopioJUKgXP9+G47rJjFQaadB6SJGGgWMSG8XGkNQ3VWg2l2dlEL7phwwaUYsbZbu6RHAo/VgJG2NB4KaqYz0OSJNSq1UjuZX52FvMzMwlH9nDjc2Gcs7OzmL55E2lVxcT4OMuMcjK3qqrMMIGoNOK4LirVKlzfRyaVQpHrvMY9FQHT6IkaptvQaV0pEFKKWq0G23WR5p0i7YbZaDRw+vRpPPX00xExvWUfsf8W3S1Jx9INJFYqMjhrxzTNFuJ9/LPdzklVVYyNjWF4aAhhEOBuwlo0z8tUtVotWmMunRBtZUjx8wrDMIpuPN9HPpeDJMtwHAfNZhOUUkzfuYNqwnDghxmPvHE2Gg2Ubt5ERtMwNj4eZT5FUkLmpQDR1FxvNFBvNNi6knedSJLEbmBxc/K6pAhp20HRPSnkhyFq1Sp830cum13W2QIwD/LuO+/gsT17Ok6sjoeZAfdSkrTyT9rO4onWl4Qgw7PDjWZzOXNJhPtt3N92ZLNZjI2OQlMUzM3PY7FtbujGDRtwV6wVRY20Qz052rUkQeUJIVmWoakqUqkUgiBArV6H67q4ff06TNNc8fwfFjzSxun7Pu5cvw4FwNjoaHTjUv4e+A8OsExppVKB63nIpFIocO6pCE3bEz6e54FS2lLwF5/tduP6QYB6rYYQaBHAaieWnz17FrphYPu2bT2da8DXm70SxUnsQQMsNXdLksSmkXVYf8Y2EGWSk6DrOsZGR6OMbmlmJgpzJzZswEx7GCpoht22qWmsQZ1fe1mWoxpws9lEo9HA1YsXHxkDfaSNc/rWLXi2jdGREZYoib0nOj8C30/0lvHECwG7UPEbX/RiRn2Qsc92gpCUpADyuVzLWjV+bDOlEm7duoUjR4505PK2J2eCMFxVSNu+bo1vTVVVGIbBWDuxdWPierOLMcmKgpHhYQwODMDzfdydmYFt2xgYGECtLWkU5y+3J8Si7XH9I9FAINhYQm3CcRzUajV8cv48zEegDvrIGufCzAyaCwsoJISNQuHO8zyUE7wlkGxs7QkYmbSKOXczzCAMUa/VIsNsKXnEEjS2beP9kydx9MiRrrKScXMQ8iWi7CKysRRcNa+NwRNHJJHS9r6RSkFRFDR5Q3RH8HJPN+TzeYyNjECRZZTm5tBoNpHJZlGr1djxtx0fiVEj22HoehT5COpgSGlUbw6CAIuVCs6fOfPQExUeSfpes1pFeXoakqJggLd7xbmwlFJYloWmaSLPSyPdjBKx14QBeEEQfWelQDKklIWylC43TLFtTrI/+f772LxpE/KFAhPv4plWIVsijjHkWVeAZY1Ny0Lg+6xzBcwoKYBaLEkS1W6xpFUkGqSJJEFVFEYYkCRIhEDTdbg8qijkcl1lMbqFowBgGAYmRkcxXy6jWq1CMwwsLi4iXyhE59WyvbbrJwxVVVUQsGVIe4JK4WFu0zRRazTw8enT2HfgQAub6mHCI2ecXrOJ+Tt34AUBNk5MRMmGqFmZs21834euaaynsgfDRNt7NAgg96AeJwwzoEzsS+bKd2IOih+GTA0hCDA7O4tqrYbdjz2GRrPJ9kOXejqFIgIBICnKkucAoPl+lMyJmqO5R1lWF43VQYWifMATZODDj+KUwEajAce2oalqFMrLksTU6bl0CkjySIg4ZEXB2OgoqpUKZlIp3LpzBxMTEx3phuz0CGsMiBm+JElMdiUMW7w2kSTQMEQmnYZl2zCbTZw7fRp7H38cWc7nfZjwSBlnYFko8/T9SJuqGyGENSvzfsFcLgdZUeBw5YKVMpAt+/F9puvTZY0XUjYPs1qtRvtoNBrLvIsYvSCFIS5fuoQDBw9GOjqRMbaFd+3bEJ0g6Vj4HjV1ryD3IRJa2Uwmul7CU9MwZGoJhMAPAiiKEnFtPW7EUaY3PkqCsD7OTgmqfKGAsbExnD17FjNzcxgZGlpRGV6MMhThu8p/uxbD5mtQCuapPc9Do9nEuY8+wmOPP458p6z3OsUjY5yBacJpNFCt1ZBKpZDN5Vo0d3zfR61ej0JLhTN8mrxXstvTOw6x3qGSFN1QYRAwxg3XAvI8D0EQwDJNeL6PTCbTMgtFSHvIsaf+6Y8+wsjICDZu2LDqcw/5DXtPSEgICW8FSYICYKBYRK1ehyRJyHJjF10wQq1PTEXzhAfmkPmwXnH+YlkwNjKC93kIPjM/j7Hh4RUNlGCJ+JFJp6N9JfbJEoJUKgXTNFFvNnH+zBk8tn8/CkLL6CHAI2GcgePAt23U6nUEYYihgYGIVAAsEcolzjBRFAVBEEDX9Za150qeU3SneL6PMAiY6p3vR/8PLkEpVPFUXcfQ0NCKYlW1Wg1Xr13Dl7/0pXs7f06muBf0UnpRFAW6rsN2nBYecTRPpW3f8QeV7/uwXReIZVhVRYGsKNBUlTVXWxZm5+cxPDycqKErEIYhXMeBpuvQFCXafqdzlyUJ6UwGpmmi0Wzi0rlzeOLw4YdGzPqhz9aGQQDfNFlJpF5nbVCaFp2Ybduo1+tQOC9WUZSleiRh8zx83496CDvB556wVq+jzIcS2ZbFmoN5F0VxcBCDxWK0BhNK7yvh1KlT2LtnTyIZYcXz56yae/Wc7X2enZBKpSARAquHGqLMo4pUKoVsNos8FxPTNI3p+vo+LNNEJpPB/Pw8cryuOjs72/V3aPJ9Z3jPLIBEJlMEHmKnUynIkoRavY4LH3/ckfe73vBQe84wDOE3GgClkfbMWLEYJSYavHFX4wJSwkvEa2q6psHRNJiWBY2r3wFL4atQyhP0OBGmpVMp1tLUdmNbfIZlOpXq6Ql96/ZtuJ6HbT2SDdrXmyLTea8iWCLBtIJ+MVN3SKfRaDTgel6i2kLCwS7NdeE1SvBrEvLEjZD2zGQyKC8u4uadOxgZGlqW1Xa4WmGaM7YAQFUUeJ7HcgYd9g9eNktnMjCbTczPz+PqpUvY8dhjKx//A8bDbZyWBcr7Duv1OhuDx1kktXodjuvC0PWWselJDJ5sOo1KrYZqvY6UYUShqmDNyIqCdIx8HQQB68RvM0zhETRdRyadZvvrUmP0fR8fffQRnnrqqZ7Cy6SthLGHxr1ipSyrgKFpsGU5GmUoJRyzyAKHvMFalIjar5VgIrmui1w2C9/3oWkaa1CYm4Nl28jwOS6gFI7nReG1gKIo8Hyfqc93O3+eKEqnUjAtC9dv3EAmn8fEPazvP0s8tGFtYNsIOPG8VquxcXZ8sS+e7pl0uqXTI1I0aPc+nApW4zQz27YjsalisYhCLse0aHkyg2K5MYRhiIZImmQy0etRGSQh63r23DmMj49jaGiot5NOMHLREH3PYa3gy67gOQUy6TQoV4JYOiwulyn6M2NJGgK0aP3GIVhIADO0TCaDzZs3o5jPw7KsqJVurlyOhkLFQ1KVl5OSwtSWvfFjkWQZ6XQasiTh4rlzaPJy1XrFQ2mcQRAgME0QQti0LL7W1DUtUm7LptMt4U67MDMFE4GuVquoVqvwPQ+FfB7pdDpSONB1fZl3EC1XLYZGKZo8E5zU9hWRxXl5RJIk1Gs13Lx5E/v37et95kWCpwq51/jU4ss9fl8WySHLgsu9VkiXjwts3XQyi8jgSaaW7csyRoaHkctmYZombMeJlCYs20a1Xkej2YwI8OIeEE3xcSwzUB7Cpzlh/mMuLbpe8dAZZxAECJrN6Gaq1WoIwhADxSJM24Zt22zSVyrVcsOJm1fUvhYrFTSbTYSUIpVOY6BYZFOZBwYiHR87oa8x4M3Y8ZvNtCw4vo9sJtPz2u/8+fPYs2dPNIWrE40OsdeT3gvCsCMXdVXoYlyif1UknzQ+rczuRoxvQ1K91kilEhNAkiC0EwLLsmDwhFsum4WqqnD5b1ir1aIpa0DrzZw0pQ1ANGcmZRioNxq4dP58z+fwWeOhM05q24CgsVEK0zRZlzylbL3HJ3sBaFG9E4SAxUoFjuOw6Vq5HNPqMYxI+1WW5Wjac7PZRJ33C0b7555TeFSXa68KKcxesLi4iIXFRWzbunUprBSeVZAh2m7msEMLmuhG+dTgLBzBc21p1EbsoUHYaMAUV8tbjedZZpy6DqfNOIMwjJYlY6OjKORyWKxUYLsuZFlGOpVaGiAlSazLp9FAo9mM1rkRvbHLcWiqCk3TcOfWLcy0KTOsFzxUxhl4HkL+lCRANG9E1XU0mk0mIxnnURI2lr1araLKn7Jp7iWz/Ckchwh9ZUlCPptFyjCi6dRCnS4+jj0IAjQaDaj8pukV586dw2O7dycKirX3SwqPE58vIj4nDKkl9CZLIs+R7Aptky2JGWDL6+I6IBYSdgh3NV2HJEnd28oSEF9/aprGtGr5/lzXZSyqMEQmk0E6ncbI8DAUWcbCwkLUckYIgaZpyGWzyOXzUFQVNp/9aZpmpGiRfABLrxu6DlmWcfHCha7aRw8KD5Vxhm1PWbPZZOse7j1y2Wx0U3ueh1qtxogJMaM0Yl4yjvaQkfDsXj6bZaWaRgM1ruQucQ5no9FgZYBstuc1W7lcRrVWw5YtW5b21cP3lok1cyL8MrW92Nq6JQvLz6/F8Pi+kzz1SpAIQUrX4fMZor0i3hImyTJUVUWDz2gxLYv1aGazUDljS5ZlDA8NgQCYm59f5hFVWYah60gbBqP0cclSy7ZBO3h1cb6yJCGVTsNzXXxy+fKK5aTPGg+NcQaeBxp7coKw0ephEEQhqsQ9ZYV7Sj8IkEmnI7HnTgbUPjUsDlVVUSwUkOYlllqtBotP5AqCALmY4HMvOHv2LB577LFVhaKdbhmRhLln6l7LTnq8MWOf03UdsiQtjaLoEeLh4fs+NFWNWscymUyLgLaApmkYGhxEGATLDDSua5TmpAdNUeC6LurNJizTXGbQNPZX4evP6du3sbi4uKrzuN94eIyTs0PED2FbFuq1GgzDiGZhNppNVKvVFk8pGqc7oZthChDO0ywWi9B0HaZpYr5cZormqzCM+fl5NJtNbNm8uX0H3b/YwXCiMsoaTeHqhYzQnmQz+IzOXr0npWz8QqPZZJRKSYLGlyNqF35zyjBQLBbh+36L7IkI+8XQJoCxmXKZDCMp+D4aXMYk6RwA9gCWJQk3r12LSjvrAQ+FcYaex1qZBChFuVyGF4YYHx1FELJp0rZtQzcM5iljRhllChO6OYDewkqAa6mqKiRZZnQ2MJnGuvjxV7ixz547hz179qyNpwNLTonwdU2wytAWYAwrRZK6ikoDbK0uqJSmabJ1JWf7KLxHcyXksllkM5mIRikguMztHjWdSrEMOl8bNxqNiOkVGSg/Z8MwUF1cxMLCwroJbx8KhlDAh/mIcNa2LDSbTaQ5/ct1HBBZZtIfHTKmhBA2JqGNrbLaG9syTUiShJHhYRBCYDsOHMdBgw8y0nUdmqou63IRvNFNmzYt2+ZKN0On94NPwanthJWappM+rxsGTF57bJFe4W1zvu8zmh5dGhSsqmq0Xu5U9khCsVCAHwSo1mpQOKlAImTJ6NogSxKy2Swcx4HlOGjU66yG3XafSFxParZUQrFYRJpn/B8k1r1xBq4LyhMf4NS5eqMBx3WRyWZZr2Qq1VIO6YS4EkISjW8l2K4Lhw/9EUaRMoxopJ3tOHB4rVVkFHVVhawoOHv2LPbs2dOTZxJEfNdxYNs2TD7J2nYc+LwdLeQDeUUoF3Iao2DpeK6LEMC3v/1tSLxNTbRsidY1if9/EIYwDAPZTIY9XPhgIZ0TMVaiBupcv8ey7ciLebx1TjxUNT6btH2tLXdgD3UCIQTDg4OYmZtDeXERUkxzOKl9TEDoE4trKaarxY9H0zRUFxexuLi44nLos8C6N86Qe01wxXGR2Qt8Hyle81JkubdsKQ8DQ0qj6Vc9HwelaDabkBUlsa1JVdVIcNrzPEaY5151YWEBjutieHg4Cr8afEBtjYfFlm0zw+bSJLquwzAMaLoOXdOg6zqrv/L1kcQ5rrquR5Q0SZIilQJCCP7ov/5XvPLKK0v9lqL3kiu9C8X6Bm8e8DwvypqKYxE1YcMw2PFoGjKZDHL5PHK5HLKZTCQj0uThvcKNXlNVqLwTpdON3o3z3AmEEIwMDaE0O4u5+XkMcNpmGIYdE22EsAbwbCYD1/Oi8Rct9WlKoSkKSnfvolAoPHB5k3VtnKHrRusqgLUMNXlpRDUMlmJfBS9UcEglQkAlqXUduwIEmyjdJevLdsE8pqZpsCwLi5UKLl++DEPXcfz4cRb++T6y2SyyfLrZxIYN0c1vGEaLgkCnYnrAtW9T6TSMhO6XeC2xGyilqFSrSKVS0Xbi07ZFAkdEBE3Orpq/dg2NRiNiZAn6ZDqdxujoKIrFYk9j+kTdU/CWe4UkSSjm85hbWEC9Xmfi4F2ME+DGzx8aCveilm0j5JEDCIGqqqhWKqhUKixkXuNlw2qw7o1T1KRcx8Fiucy4ndyTRAygXj0gbRu5IL63gnG7fApz2jASRxUA7IZeXFzE/MICygsLmJ+fB5EkpFIp2JaFbdu2RQLSqqqyBu1waaI1OwxmCFHI2UVALK4z+2mQeOaEIOS8WRFCE0mCzteKQu5DURQ21sJxYHKjXaxWUZqZQaPRgGEYGBoextDgIIaGhlra9qJdxcPaHh+04uFhpFLIZbOocIJJL/2wgogPsNKNaVlsecAlWQghMHh4m8/nkX+A2kPr1jjDMGR1TULguS7m5uYAQjA8NIS709NLrUOrCU3bPt/SrZLQ1gSwcLbBVRRSqRRTfQPrL1xYWMDC/DwWFhZQrdWQy2YxMDiIyU2bcODgQaQNA+9/8AEmxsexa+fOxHOM1mfcWJ1Y1jdaG8cI8+K/fc+D53kIgwCeOBeRnY6dZxBT6YuGGQlmEFett2w7ejCIdq94gkVIiWqqChgGJKDFu6d5LXliwwZUazWofO6KGFk/NzeHS5cuwXVdDA4NYWhgAEPDwxgcHGzJqEtAVwK9OOb4J/L5PEzLQr3RYCLdPSpCRMeeSjF9Xr5+T/N1qNlsotlsIrMKvvRaY90aJ+V0Od91Mb+wgDAMMTo2FtW0VEVZlWFGrWIJ3yEizAWWGalpWQgpRSadRqlUwrVr17BQLsOL3Wh79+3DYLG4LEPruC7u3L6NV155JfGQJK4YIKsq9JgxiDWhHwQIfD9KeAR8cjXlRuw4TscyhLiBRYG/82WhTHlPVZnxx4r6InEUT7SJlrBO56NrWhTq5nI55HI5TE1NsevhOCiXy5ifn8fHZ86wBnnfh9lsQtN1DBSLkYJeOwTPt93zSpKEwYEB1BsNVGq1nmmUUU2XUhaFSRIL200Thq4j5FnmRqPReRzGfca6Nk7f97FYqSAMAgwNDUHn6zhK6b2NHV9hrQiAGSm/+RqmietXr6K8uIjFchn5QgGFYhEHNm3CxPj4igmM69evY2JiYmVFhLabXWRWFVkGTZrFQinjEisK8lzITLwu/or/TvMBSXGurvgrjI4QEq0ZBYI2vq1ACyUwAbqmsTmarrvsvHVdx8TEBCYmJuD7Pt59913Mz89D0zS89957CHwfExMTGBsbw+joKOMJ84dRtxqspmnIptOweUkr3k/bEW30Rk1VIxmWhuex8otlweR9pr0KwK0l1qVxhmGIwHGYXqrrIpfLLU2Z8jwElCYmQTpC3GQ9rE8t08T09DRu376N2fl5DA4OYmrzZhw9cgS6YaBSrS7nuSadA6X45JNP8Mwzz/R+nO2H3eF1URJSE+qp0Xf5ObfX89rRqT64khF2gqwobGRCgnEK2LaNt99+G8ViEflCAY/t2YOhoSHU63XcvXsXFy5cwNvvvIOxkRFMbNiA8fHxFQXMstls1Opn6HpPxiRU+qIJbYqCVCYTEeitZhOZXA4mF4D7rLEujTNwHDQbDXiOg5RhsME63Kgc12W6qKtZBwij7GCYnufh5o0buH79Oizbxvj4OKampvDY3r3I5fPQ+JRpgIVRXg9Utbt377I+Ua443w2dCv/d6nZhEHwqaZIVjwnJxtmLweq6Do9npdspebVaDcePH8e2bduwa9cufO/7348+k81msXPXLuzcuRNms4m709O4dfMmPjh1CiNDQ5jauhXjExPLGuBFm1ihUEC1WsVCuYyR4eF7SpbJsoy0YcCybczPz2NkYgKWZfWNE+Ah28IC/DBkmdmYIjsohe/7vYcYsSzgspuKUiwuLuLa1au4c/cuRsfG8Pjjj2OYM38WK5UocyeOK6rF9ZBRvHLlCnbs2NHjYa7OMAEurbKWRfKEG77nElUbBFfVtm2osVrh7Ows3n//fTzxxBOYnJwEAPhcG0gkosRxpNJpTG3diqmtWxH4Pu7cuYOLly7hww8/xNTUFKamplpZPJSNc8wXCqjwSeT5XK7HU299OKqqiiAM4XkeZqanMTI2BpcPWv4sse6Ms7qwAI8reftAq7QkIfA9754ukrj1fM/DrVu3cPXqVfi+j61TU/jKK6+0hGC2ZSEMQ+RiP65Yt8mxNWknLFarqDcamJiY6O3YEjxntz2Iddj9VkC4188LGqNpWVE73/Xr13H+/Hk8/fTTLZpJjuOASK3zT/lGousiKwo2b9mCzVu2oFat4tq1a/jhD3+IwaEhbNu6FaNjY9GxZTMZxuFtNGBwUbZeIPYVHyQchiFmSyVkcjlYlvX5Nk7HtuHyi+ryWSayLLeUAoIwhNHrTRn7wSu1Gi5fuoTbt29jeHQU+/fvj5IOLV8JQ5hcXS5xnRNLooiyRDs++eQTbNu6teewc7X+KWr4XkPPmbSl1fJs49B41tZ1XVy9ehV3797FF154ga0NsVSn9XjbWBIkSWJDgWPnmS8UcODgQezfvx+3bt/G2XPn8OGHH0ZLEcMwMFAswp2bQ7lSwfjo6IrHGid8iFH3AKNmNppN3L19G5lMhgmPf4aUvnVlnPVKBQoh0ZCaljkfsQE7PZVQuGHW63WcO38es7OzmJqawpe//GUYXdLtlm0jpBS5DsRnsRaLQtx4rRTME9y5exc/8ZWvrHyMHBKA9rbgbkknYTBrsebs1pmTtO7s1VQlru976oMP4HgeXjh2jA1CaisZybIcPfA6bSep9ikrShTeVioVXLh4EW+88Qa2b9uGnTt3Ip/NYrFaRdM0I9malUAkCSR2fKLhvlavo1qtYnBw8DNVi183xmlZFkLXhWEYjDMqvKaALDMBZUpX7qGkFE3Lwvnz5zF99y52bN+OJw8d6poUApbamnRN67iuFftuXxOK/7p9+zbGR0ejH3GltSP7cpv37lKTFccZP5ZPg5XkSFa9PX7cjm3jvffegyRJeOro0UTv6PH1ZjcQsryTqB2FfB57HnsM4c6duHLlCr7z3e9i+/btyBcKqNVqSMUaFTocdIs3j0OWZWiahrm5OYyMjHz+jJNSinqlAo0QhLzQvmw6lqh3oXsTqm1ZOHfxIm7fvIlt27bhlZ/4CWj8Bugq3Q9EPMtuNDAJsQJ2wg1z4+ZN7ImpibcbZuSpYq8nhY5dk0HiOqyFQXXxnL3Q6ZImnjXqdbx9/Dg2bNyITZs3d2zE9jwPykqMHs5O6sa7jaasZTI4fPhwFC1duXoVY2NjrFG+RyJBEglCTIgrl8strKb7jXXRbG2aJkLPg87pccu8Jvd43S6K53k489FH+M53vgOJEHzlK1/Bvr17I8OMttMBQRjCtqyIeN4RIoxNuGnrjQbMZpOtZTt+Pfk8uinDt0NkNdeClC32mHRM7a8IdpBISLX8P/+3sLCAN994Azt37sS+ffugaRoCnitoh59QaknCijVltHa15HI5PP3UU3j+uefQqNfx1ttv4+rVqx1DcorWER3tnxOKiLMzM5+pEPUD95yUUtSrVRiyDJ97zZYMbcxDiXCvPZybKZVw8oMPMDo6ii9/5SsdKVzdCutiQE/HuRscwiCS1kG3bt3CxsnJVT9ZJcIbwTlCcZ7ieNsI+vFJz2uBuBJfp/dECanbA+TOnTs4ffo0Dh8+jDGeQdVUFRYhTAS6LSS0uHLFiuAPoo7es0MTQKFQwDPPPotr167h6vXruH37Ng4fPszq5vFzbNuu1OY9KaVIGQYWy2WUy+XPrJXsgRun7/uA70M3DDT5WlNq95ocIt0uXvE8Dx999BHm5uZw5MgRjAwPd99ZhzDNDwI4jgPdMFYsT4gkTBgEQOypTwHcvHkTR44c6X4MvYC2jjOIIMjsvEskHiK3d3ZQtBLd4+dOCWH9rOI80Lmu2fJ6lwfCpUuXcPXqVTz//PMtXFQx6Nblc2visEyz58lqBJ0frpGmb8Lx6ZqGkZERZLJZ1Gs1/OhHP8KePXuwbfv2luRe+75CLF17Qvig5DBEuVzG5nYNqPuEB26cjuOAxG4mbYUFNwH7wWdmZnDy5EmMj4/j5Zdf7ik86gShXL6S1wR4EoaQZZ5zcXERIaU9MYK6oafQltJlIxhaPKkwqLhhxbZL4v+9ggeOSkZdjuXUhx9icXERL734YmImXOjTtgtgm6bZu94v955J4fFKKgh5XqccHR3Fhg0b8MEHH+DOnTt48vDhjiMa270nCOvTrVUqnxkh4YGvOR3LgsZD2pZR7h1YM34Y4uOzZ3Hy5EkcPnwYhw4dYvXIHsK8pE8EYQjHcVqkR7pugzC907AtuXTz1i1sTtAHWi0IVjYYSunaiYSt4BVbXm37TXzfx/G334ZtWTh27FjHEpXQC3LbemFN214TrR6RnOuUIFNVFZlMBpbjQNd1HDt2DKNjY/j+976HK1eudHwgtr+qqSpr+P+M1p0P1DgppXAdB4osw3fd1jawhAu9MD+PD06exGK5jIMHDjCmSYJn6IiEbTq8l3E1RPr2J3hIKW7dvIlNnybcaauXdkLkJWIlncTPxfo4W15HayjXSwoq+mzs+tmWhTfeeAOpVArPPvts15KI0BBy20bSryas5RtKHjsYIw50Qp7rGld5C932HTtw7KWXcPPmTRw/fjxS9I92hbZsOKVsTgsXl/ss8ECN03VdSEIFAFgKaUWdL4a52VmcPHkSY2NjGB8fx6XLl/Fnf/ZnePvECVy9cmVFacZEUMqG6+r6qqhw7Ypxs7OzSKXTvbUqdYC4DRKNJZYICoKgRUJE/F32j5AWQ0xaW4keSXYAbdzatv+OkyKq1Spee/11bNq0CYdE/XgFaJoGArTMVjG5guKq0CHTvVK0ISYCeJ7HRLApRS6bxYsvvYRUOo033nhj+WCmtqWC6HddmJ+/Z+bUavBA15xBEIDwG04IMAFY9gPcunkTpz/6CEefegq2ZSFbKOBgoQDXcTAzM4PpUgnnzp+HYRiR8Q4ODa1IDHd45/+q2s+AJS4ox82bNz9VSBsvgHeUiRTZW77ftahxtpMo4rcbbf1gdGwzMzN4/+RJHDx4EJMbN3akMLZD5Z09YghuSNmMz17W+e3HLLWt+ZOasJOQzWSiEYKilY4AOHDgAC5fuoTXXn8dzz73HAq8A0UkmeKzZFQ+x3UlvaK1wANPCBFK4fn+koG0ZR1FFvCFF15AIZ/H9Rs3GN8SzNNObtqEyU2bIg2f0swMPj5zBvVGA6OjoxgfH2eF6ISbwLZtyFyvdDUQGduAczHv3r2L/fv3r/g9kfRKvJFiWdZut9majmAAIqPvBmG4V69dw7lz5/DMM89gaHBwyXuILHo3YgVPqNi2DWoYTC1B17tS9zofUGuiKwjDFX9DETmkUyk0Go2W7iZCCHbt3o2UYeDHb76Jp556CiMjI+yLksSm2olzlGWYvOx2v/FgjTMM4XseZEVpzX7xi//h6dOYn5/Hiy++GK1NZElCKBgnMZqbJElMSGpwEPv27IFt2yjNzmJmZgZnzpxBOp3G+Pg4hkdHMVgsRiMEeuVdxkF4ppSGIaZLpUTOZSdf0lEiEq3p+04QnnWt6pw90QsBfPzxx7h9+zaOHTu2vM7XhZghSl8UgKYosAmbZ2OZ5j0ng+JDmkRY3s2LhVi6bpl0Gs1mE03TjDykwKYtW2CkUnj33Xdx8MABVrOmFCKWIWD3n+04azd6sQsevHH6PjTOZY3ahijF+ydPwjRNvHjsWMtTUVYU+G0p7mX/zYkMU5s3Y2rzZoSUjW8olUr48NQpWJaFgYEBFAoFbN++fdWHLTynTynu3r2LiQ0bOtL5eobgkK4Ausaek6K7oQe+j5Pvv49Gs4mXXnpp1VGGiAYApjQg804T0zS7NiCshKjFSxhn0uQ4LGdeqaoKTVVhWhZy2eyy6zgyOornnnsOb584AT8MsWXzZlZWEXNpJCnSI77f5ZQHapyh7zMKV0zUFwAuX76MWrWKYy++uFRa4ZBlmUn7o0umsa2gLhGm2jc8NIQ9e/ei0Wjg6rVrWCyX8b2rV5HLZjHGw9+BgYHONytPtIgbw/c8TJdK2LN376cnjq9UT+QQ66u19Jydjt2xbZw4cQLpdBovvPDCPcmWtIAQqIoC23VRq9WYvpE4jlVvij3M/JjRxBH3qu3IZLNwymXYto1MOr1s34ViEc8/9xzefPNN5HI5DAwMRMsN0c9br9Va+n3vBx6ocfo8IaMqSnSBSjMzuHz5Mr74xS8uM0yAGWd7jTERXRgvEiGYmJjAXk5Qn19YiEgNrutifGyMiUyNjUU11Kg0wQ1DkiQslsuRoPKnRTzZ0w296BetBp08Z6PRwPG33sLGjRuxd9++SEbz00JRFMBxUKnVMDk52XLOLT2yKz18BKUvCJbVhkPanWYohuY2LQvpTCbxPsnl8zh06BDeOXECX3zppSUHQggoIZ9JOeWBGifhXkDccLV6He+//z6effbZjvUvhc/GCIJg5dCujZPK/pOXT2I0wdHRUYyOjuLxxx9Hs9lEaXoaN27dwsmTJ1EoFDA2Po7x8fGWNYoiyyjNzmJcdOF/RgjXkIAAINEQFubn8c4772Dvvn2RrCVdI08tCAm1ahWFvXvbDiVmqOK1LtsinG8ryXJk1EEPmVtJkpBJp1FrNOC6bsdQXejwnjhxAl944QUAiJKRy8ou9wEPzDhFR4OiKPB9H0SScPz4cezftw9Dg4MdvycMKvB9SL3G/LEfy7VtBJQi3WGEQSqdxtatW7F12zaEYYi5uTmUSiW8c+IEgjBkpZqxMWRzOczPzeHgwYOrOu9u6CU5s+YpfNraSHDr1i18dPo0jhw5grHx8ej1tQqjRTLHtu2uBPJEj7r8Q6CUsmhqlYmyTCaDeqOBpml2bSd7bPdu1KpVfPjhhzh48CD8IICiKI+45+RS/7quw/M8fHDqFMa41EQ3yHxokR+GWGVqAgDgcfW+iIsb4/VG4D+wJEkY4yEuDhxAo9FgwtLXr2N+fh6262J+fh66rieOGlgNes2aiuOMF/OT9GrFzeq5LqKWO7SSuQm/jhon0V+6eBHXrl3DC1/4AvJ8OFBsJ/d8bu2wbRuZbLa38BUJhiquAW9bu5dHlSzLSBkGTNtGmMt1jkYIweHDh/Ha66/jk08+wfjEBMvYPtKekw8p0nQdM6USGvV6TxqvuqZB4rS/1RawaRgybSLDiEohq7nlstksduzYgR07duCTTz7B5StX0ORrMwBRTXVkdHTVIsSUP6xEBlLoJdEwjJg8QpdV17RldLN2iHpoc4WaXKPRgCLLUW346NGjUDQNlm2zMQyERGT/tYJpmshmMq3JwB4hSiIhWM6C8DEV94I0n5ViWlZXdpesKHjqyBG8/uMfY3BoCIqisJGPXNn+fuGBGae4uQxNwydXrmDX7t09aeLIsgxFUeDYNrBKmXzH81gCKqZl08KMWUU5ZH5+Hhs3bMCWLVuiuSAzpRI+uXIF773/PgYHBzHO2UrZWFaPUoqQj94TI/l88f8JigHCOEQoq2saUnwaGcDDOOEVY/8tvEuOC2qJfSPmZQHGb7144QJkRcGRo0chyzI8fp3ioJTJksqSBIkPMFJiMz5XgzqfK+OtxjhjFEYBnz+wxOjF1UKIT4uHRTfkCwWMjIzg+o0b2LlzJ0ApHN6cf7/wwIxT3IilmRlIhGCgWGTJjh6ydLphrJqlQcHa0wBGJYvT5KLkQ4+GGYYhZmZn8fTTT0cJCDGRaueuXfA8D7OzsyhNT+PipUuQJQnDw8MYGBpCIZ9v4fFKkgSFP3CgaVEmWPyNIwgCeHx470paNuImlrt48GaziTMff4zBgQEcPny4Ze0pDDnknlt07wjyRth2/YTRyvxB0m1maq1ex6ZNm1j2d6UHIl92JFH0fN+PHlrROI1VGmk6lUKVz2zpFu0IGdW3T5zAls2bYaRSqxpZeC94YMbpcz7t2bNn8cSBAwBYXW3FLgVKWV8dn9O5UnJEZPF8Pgna4AaQpCZA2r/XAeVyGZl0Gul0OjJ4YGlqmO/7yOZy2JpOY2rbNjS5/sz169dRr9cxPDiI8fFxjE9MREkRMbyo280l3lmL5EylUsHx48cxOTmJ3bt2LVOXEF5YliTIABRKocQ4xZRnzMUQ3oCfuxuLSMRoBoX/FUZYqVbx+OOPM0MPw8SSGaUUCMPogblMi4lHHZqmQSIkup9WAwKwJU69DttxkO0y2sLmbYWbNm7EtWvXsGfPnkfXOANewM9kMpgYH0fTNKMOkU7hrbg5dV2HxGlUneh3tC1882N8XICl4bslOboZaqlUwvj4OCRO5G40GtENCvCeT1mGYRhQFQWDAwNR97zrOMyrzszgwsWL0HUd4+PjGBkexmBMbDnxnDrIcawWpVIJJ99/H48/8QTy+Xzv24vVjgkhiZ5GhL++7yPwfdi+D/AHmCLL7BqFITJ8JonveS09vC1N7F2MTdRcFU6ol6TW8fW9aO5SsB5NWZJYr2mH0NbjjeKGpuGxPXvw/e9/H1u2bHk0jVOsu25cv44jR48CYCoEtm3D6rY45xdb0zRIYGFqknEuy76CtacRoIXs3GsIFL9FwjDErbt3sWfXLtQbDdiWBYmQaES88BIdJ2LFyPqUspEQM6USPj53DrVqFcPDw0tk/bYoYi3EpK9euYILFy/i2WefRb5QYCPne9leDz2T4thUVY1qh5SyEYO+78MPApQXFpDJZtFoNOC5Llt38trnauD7PiiWOLUSIWwyGkeihEsM8dd0XUeTKy8uYxpRyubz8AYJBcDkpk24cfMmnn0UjdP3fTRNE57vY5DLekiSBINPgfZXmBIlSxI0XW8JKYGYUbYnM4BI1U9gRfmNGMTcDNd1Ydk2zHod2VwOOmcPpVOpaCryakAIweDgIAYGBrBr927Yto3p6WnWWfPxx0ilUkstcPHa7z0YJ6UUH3/8MUrT03jx2DFkeG+jOI4Vv7/qPSLatqKqkQTmtWvXUCwWWU8spbAaDRAwcoKqKGzeaA/H4/MlTfRZQWZp+66oC7d7ubjRCv0q1/OWtQ+KqdeZ2INyZHgYZ8+ebSln3Q88EOMMwxALCwtsaFDs9ZSuw7VtNJtN5PL5ZZ3ocWia1jIYNt4T2Q4hj9FOVO7WnhXyco3D54QC7KHgcNK8eKh4PJyNfmxCIk2kXo01ukl0HZs3b8bmzZuXWuBKJZz+6COYponhoSEUikUYur4qBYHA9/H+++/DcRxGXo8NZ0KXa9B+fPdaTolr/CwuLmLrtm1Ip9Msy8pLIb7vs4eFZUFVFKi8GSJRRjRWIxcgwLLQlh0yaUkmtQuhASwDTghhcjWxbfq+z5Q6RLacM9ky2SwcPqLyfuKBhbXlhQVs3rix5QcnksRCnnodzUYD2Wx26aK2bUPXdYRgTzZthVS6MM52bywlhDx+EMB2HLiOE4VNacNgN4ssY/ruXQyLXj+wzK/FPXj8Kd7OlSXg2eBuZIM4WV+SMDQ0hKGhIezbtw+WbePWrVuYmZnBlU8+QTabZQSJ8XEMFIsd140ReT2TwRe+8IWWTHGvHS4iyhAkhk5XWjycIgnT+G/LjWShXMZRvpRRFAWaLEPVNKZvy7PRvufBM01IhEDTdWiq2pKwEg/L9t+z21JF1I+Fx45fa1mWoSlKSyQWBAEsTjSIy3eKocKDg4O4eesWdsUExNcaD8xzzs/P4/ChQ8veU/gk4QbvuYvWn21EdrHutPmTthOikDYpXOLbpJTC9X04tg3P90H49pOGsM4vLGDr1q1Lx6uqII6DwPeXlS0Ss8FtN1CLEXNiRJLxpgwDGzdswNjoKLK5HMqcrH/qgw9g85miYiJ03KO8/vrrmJycxJ69e5dnPHv1iIJ5xI00Srbx91q2SzvLVFarVaRTqWg9SghTcw98H0Ss1xUF1DDgex5cXui3bRuaqrJkIReDizpE2q9vFwjPKggocRiGEZVUJEmCaVkIKUWGL1eihgMu6D08MoLbN2+usMdPhwdinPPz85BleZm4r3gqq5qGVBjCsixYksRCuISwVpZlNE2za+uO53nRNttB+T4c10UQhpAlCWnDYPq1SeEUZX2hhw8fjl4TxusnGGcnJIZq7I1WQkQbIhUEQjA8PIzhkRHs27cPpmVhplTC7Tt3cOrUKRQzeQw3VBRqwPaDuzC1bWt0/JHhUBp12pC29+LGRxBrvWoPGcW2esTCwgIG2njTqqIwTZ/4dgmBqmlQuTd1+Rh7lzfmi2hp2cOPkK7eUyCJgKLrelRSIWB6vulUitWcY98NKYUEYHRkBB9+9FHPtMt7wQMxznK5jEI+3/VJZxgGwiBgNDJJalkvhmA3TCadxmKt1rXe6fk+CGeRCIjOFMuymMSFoiCVTrdMsE5CrV6Hqqotnknox3q+j3sdcRO/ldpD7fi6WKjuRa/xz6VSKUxt3YotU1MIKiaav/UjKPMONlKC6dun8d4rc9gwPo7hsTF2HRPYNmL7ougvCOpAa7i4mix3O+bm5zEeI9MDLKQUxpAksibLMlKpFBsLKTypaYIaBnRNW9ZR0tPxxc8HvKSiaZAlCfV6HelUqnUshyRFjfCUe85cLgez2WQUxNU2oPeIB7bm7NgwHAtfU+k0wjBEs9EAzWahaxqTnODfT3PBpqZlId+hw8H3vMiAKE/ymLYNGoZQVBW5VKrnCdGLfJBNO1RVjRrAV4v29Q/F8jWd+P+Qe3ckfAZgN9rcn5zCwKLH1fcINtwBJD+Fazdu4P0PPkCxWIwywAqXIk0aLbHMk7YtK+7lPBfm57Fv376W10UjQ9DBOKNzk6TooehxNk/TsqDwyXRJRIZuxxL9d+w1SilMy0KxUOi4VBLq8pKgSt4nrwk8aJmSBEjAkmYLIWz9SSmazSZ8z2PSFvyC6IbBuJHNZqJxUrAf0tA0VgYxTRa+yjLSuVzEyeyoeNeGuYWFRKKAwkOtFRlLMaoaBQBOjVu2Bu349c4hVBiG+PDUKYzcrix7byMpYNPz+xAEAebn51EqlXDi7bfhU4rhoSFsmpzE6OjosrBcrCmFN2UHmFyy6Jb5BhC1WLU3pkuSFDF8evE/Lp9sns1k4HoeHNtGo9mEqihMGPwejCXkyxsKsMxsnMbIPhCdW1It9H7hgXnOXp/CRJKQzWZhWhYsy4IfBMhkMlH2LpNKdQxtRfHbDENIjgNJkpDNZFpGPkQJmR5+1PL8PLZv27bsdVVRQLBUe4udKPuD1hu9+wl39lCdjNPzPLzzzjuQZRmjI2OgN24nfl+W5aUWuCeeQGl2FuX5eVy5ehXvc7K+kGvJZbOtD5L4OXWoEXcz0IWFBQy1lc7Y6TI2lddDzTAMAsbU4V1FuqZBU1U4rgvHcVBvNKCrKivB9GhAQRCw8DQMkc1kIu6wyCW0b+V+rjHb8eCMM7am6QWGYYBIEkzTRL1eRzabhSTLSGcyqCSEthRsJF+z2UQ+l0M6nWaL/oSMLWkTiU6C63lMFCoh+RT1mHoedE2LQqRe0HOgGFvzxWE2mzh+/DhGRkbwxBNPwDt/srdtcvJEfmoKe/ftg+/7mOO0wk8++QQSIZGhDg0NLT10Vrgx2w1ZHO/CwkLikgBgkYfLJWu63fhi6RAPOQkhMHi5xeF1acd1oXPqZDd4ngfTNEHBNG0ppYxSGH9QxNebvByz2nbAe8UDC2u7equY96BhiIDH+bqmQZEkNBoN1Op1ZNLp6EeIh7ZBGKLRbKLRaEDVNAwODHR9kvbCFirzTGM8pIkboMKFx1KrpHSReMiIzp4nqexRWVzE2ydOYMeOHdi5Y8eqSQIiwQQwA5nYsAETGzYAlKJWq6FUKuHSpUtYLJcxNDwcrVV7GtvHj1VEDDOzs3h669ala91WZyR83dntxvdcF3KHFjWJZ/VVTUOz2YRpmtBUNfKy8XMGWMO34zjR0ikKh3mInQTRmCDC//vtPx+IcRYKBVyt1zs+KaN1p2CWxN6TFQW5fB7NRgONRiNiy9TqdYSUwvO8qMFYVVWm8LYGa4RyuYzBgYGWh0rcOFW+7lztmqRXz0nbPOf09DQ+OHkShw4dwoaNG3veX3x7HT0VIcgXCsgXCti1ezccx8HszAxKMzO4ePEiCCFRXXVoaGjFElK90UAYBMjn88s6aygQJaa6GWcQBAgpZZTJLlBkGblcDs1mE67nweclEeH5BbnAD4JonRq/Boosw+Mkh/b1pjBaWZZhNpswYtu9H3ggxjkxMYHv12owGw1kOtQoW1qG2kJESZKQy+dh2TYc22bMEtfF7OxsRPsyDGNVIUjSuPE4KrUaJiYmOq6XVU2DZFnwPG/FXssVjwUJGdtYjfPqlSu4ePEinn3uuY6h4oroECYnQVVVbJycxMbJSYBSLJTLmJ6exrlz51BvNDDCyfqjY2OJSoQzpRJGx8ZaPVjsfULYdLluXNWoXt3D7ykRglQqBUVVYZlmNH6BgjGmALZM0hIMXVEUVuvk4Wz86giCgkwIZufmsGv37kcvW6soCvLFImbn57G1m3GucOIpfoHrtRpMy0LDNLF961Zks9mOlL3VIF6Mr1Uq2LVrV8fPypwjulrjTCyJJNTqKFhYdfbsWczNz+MYJ6/fK+KEhq7H1/4gIgTFgQEUikU8tmcP86qzs6yz5uOPYaRSkQLE4OAgJFlGqVRqYVUtA2cKua67nAPL4Xlex5A2eZNMJ0rOZlGv17GwuAgCNpK+W1ZXURSElsUYX5xPK44n4P2jAJvH+sIairslHst93XoHyLKMsYkJ3O3wo4kieE9ZXcJkPAq5HCq1GpqmyaQS+VOv17CDELLkpfk6UIxHCPkadqVx49EskNVk9HpMHPm+j7NnzyIMQ7z04our1t5ZvtseqXsJaOno0HVs2rQJmzZtAo3Nqzlz5gyazSaGR0YwPz+PJ554ous2JU6uiJdsxLUXQl6rkQQRa1hRIhFesn2Z1A4xhlJIsogMdBALaUMAC+UytiVk7tcSD8w4N27ciHfffBPPYfnCur1RuhMC30eD1882bNgAQghcx4HFE0Sr1Xch4OwjQZLgrzfF+mKFp7aqqrBse1WskaTyA2kL5W3bxtvHj0M3DDzz9NOf2jCB5WvYjp/jjJiW4+vwWSJJGBwawuDQEPbu3QvHtnHhwgUoioLXXnsNmUyGaQALZf3Y9ZRlmc0liZERxENa9G72GgWFXFJF8GMNw0CGC4pZloUmn9OS5D0VRQGhTDlDw9JvETV3yzIq1Soy+TwKq9SwWi0eiHESQlAoFOD4PhMXjp1kPGEQJyS0w/d9NBoNJhCczUKWJORyOVRrNWTSadQbDViui0qlglQqlVxGiSGumdP+OVG6WQmqokAiBJ7n9WScHZ/iMcOs12o4fvw4NmzciMnJyZ75uyvuW6gqrOQ5P8WaSjcMBEGAXbt2Yfv27VgolzFTKuHDDz+MxsCLtaosywAfStzeOeM6Dru2XPup0xEFYQjXceC6LgJKIckyMnxiOaWU8XEBWJbFZoPGs7QcMqdw+p4HpFLRQ0zoFRFCUCqVui5x1goPrJSiqiq2bd+OC+fP4+mYJGaLt4zVmOLwPA/NZjMiz4t1SDaXQ4PPX8xlMlC4yp5IrRuGgRSvl/KdMZqb0J8hTAqy3V836nXke5yLoShKlO1bEd1ufEoxNz+P9959F/v278fY2BhsLle5FhBrzrXIZHcEpZiZmcH2HTtAuMjZ8PAw9u3fD8s0UZqZwd27d/Hh6dPIZrMYKBYxyqVFxQPS5UqAmq4vJWhIa/eOHwTMKD0PITfCFI8u2nWZhOqCaZpoNhot9w/AHlaSJLWUU0R9U9c0eL6P69eu4S/8xb94/64bxwMzTlmWsWfvXrz7xhusTDE4uDw5khDWBkHADFNRkM1kWrycrmkwUinUazVkczmkdB2KqsLn04wtzjIyDAMp4Unb+JFJyZhqrdZzVlTwbHsaEdcpbCcEt27fxkenT7NZkaOjsEXnxhoZZ0QEuY/Zxmq1CkJIYtQRKetv3YowCLCwsIAbt27hw9On4XtexGQSTdkt3Fm+7PCDAI5twxXNDbwvND4/VeQf4hBtiU3ThGmajHEWuw5RzyeHmCYuKwouXbrE6sETE2t7sRLwQI2TyDL27NmDMx9/jGPHji2/WUlr0zLlHFtCyDLDFMgXCtH0YiGzr6gqcqrKEgS2DdM0YVkWNF1nnQ2xbpT29R7AwtotKyjRC2iqiiYYp7cnZcD21yjFxYsXo4HBeRHyfwrSeeK+w3D1mVqOXg26lFBCSYIkyxgZHYWRSmHHjh2QAMzMzODGjRtYKJeRz+fZcKnxceRzOQS+D8d1mXcTND6uwpdwEon7lGUZ6VQKTdOEZdtIx5Ul2hherudFmfgrV6/i//o//o89nf+nxQM1TkoptmzZgiuXL2Nmehoj4+PLkyNYypqazSbCMEQuppDQjpRhQFdVVGu1ZQkcWZJYO5Cuw3aciCUiEQJd16FxQ42PNReUrl7HvUlc0sJz3RXH2bezg8IwxKlTp1Cr1fDyyy+3JH5EN8RaIUQPRvYpHwjT09PYvQqlAEEAyObz2JrNYnRsDK7rwrYsTPN5NX4QsCHJw8MYn5ho0fZph5A/6bg/RYnuBVeWl9oSyVIztpA71Q0DF86exeTkJIZWUElcKzzQNSfAbrp9+/bhzMcf4+XR0eVjyHliyLYseL6PVCq1YlIknU6jymufoigez07Kssx0Z1MpuFy4y7QsWHwMvTBSmRekJUlKLFh3gqFpaJjmimyhOMFCkNcVRcELL7wARVEiqU1+AmsW0gLcc66w3vw0pmly+uRoTNJlJURZWl46sXkvbyqTwdZt27B161a4nhcNQj539iwGBgaiDHAul1vW/7oSdF1HEASwbTsSw47KaliaTOBYFm7evo1XXnnlU5NMesUDNU5JkuAFASY2bMDFixdx+fJl7Nq9e9lnfd+HZdvLGp07Qdc06LrOZDHS6a7hma5p0DUNmXQ66ri3LAsmpZAlCbUeM7VJ5+byXsOO4MfVNE28HSOvJ3F917obgoYhSLf+yU+5/Vu3bmFiw4ZVJZwkXpts8GWHa9tIZTLQZZmtO/lDeXhoCLt27mRk/fl5zJRKeOvKFQCICBDDIyM9ExaMVAoNPnFM6FYRnkhyOfnh1KlT2L5jBwxd751b/CnxwIyTEAJN0+BaFlKqiqeefho//MEPkMvlGPlagFKYpgkiST0PqaWUIpfNomGarKbVg1KdJEkw+AwSIY1hWRbKi4uQFQWVanVJvpHPCukEWZbZBO6VjBOMaXLixAns3LkTO3bsiF6PlA5iHNS1NM6VwtqVfM5KigO3b9/G448/vuJxBLE5MY7jwGo2WRIvCJDJZrtmyRVFwcT4OCa4ukKtXkepVMLly5fxzjvvYHBwECO8XNMuiROHRAgy6TSapgnHtkEIYYOSfB+UUly6dAkIQ+zetYvVTR91zwmwkKLeaETsj2eefRZvHz+OYy++GNU+Xc9jkiQdEkBJCMIQ2VwOjutiYWEB6cnJVR2XkMbQDQO3bt1CLpdjxuY4kcaMLESGucG2H5uuqmjwY+9kyHfv3sXJDz7Ak4cOYUP8gcTR7kHXyjSFdtCnahpOSJwJ1Gs1OI6DoeHhZe/FR1Z4/OYH9+KqqkI3DDbGgcvQrAb5XA75XA67YvNqbt+5g4uXLkFRlGhi+UiCV5UkKZoeJh46rufhzp07mJubw4svvhjlMIw1mGTeCx64cVYliQ3CVRQMDQ7iwIEDOP7WW/jiyy9D53Q4hS/WexnZJ7oXFEXBwMAA5ubmUKvVkI9Npe4VhBA4rotCPs+mdXF+pbixbNsG5U9aRZaZeDL3mqKe5rhu4qjCK1eu4Oy5c3j+uecwwDVwEw6ghdu5Vp6zF17tSuu1booNN2/eZJ0ylMLnM00Cfs1C/htKYFl0MU9FrDeFcHeLhs89QFUUplY4Po4wCKIWuIsXL+Kdd9/FyPBwtFZNp9NsfIauo+F50fiFubk5XL16FS8eO8ZyJLwGer80g9rx2egtdICQQhRylACwadMmbN6yBW+/9RZMy4o634Hewjrf9wFeJshkMjAMA4vV6j3NtSBgk7DFOpcQEnW85LJZDAwMoJDPR8Zn2zbqzSaqtRqqtRpsy0KlWoVt2/C4F6WU4qOPPsLVa9fwxZde6myY7ecbN5Z2w4n/f8I1WmpVJFG4LGq8HY1wFZla8dASmdVbt25hcGgI1VoNjXodpmnC4eUIce1yhQITVdO0FkZQxKO919CxQxdToVDA7t27cezYMXz1q1/Fpk2bUF5YwI9+9CN8/3vfw+nTp7GwsMAScUGAer2Oc2fP4siRI0iLkJjSZcLkAPAv/sW/ACEEv/M7v5N4SBf5TJxjx46t6lQeuIaQnkrBXVxsWZvt2bMHtWoVJ0+exBNPPLFUUiBkWfkhDjGujmIp8zdQLKI0M4PFSqXrOPtOsHlXfRKEsSqKghSnegVcSkMMNmo0m6jxAbVBEOD8uXMIwhBPHT0KSZLguC4TIONaOpGAc3tXijAo8XonA00wKkrRUi8WD4kotBPWG/POIuspyApC60gM8/W5ALSQDqH8s/VaDSGlKOTzS16Rz/FcEZT144rrek9oN0yyNFFOnL+mqpicnMTk5CQopahUKiiVSjh79izq9ToTNrcs7Nq9GyM82ywkMnMJEdjzzz8PADhx4kTiIf2dv/N3EAQB/t2/+3erOpUHb5y6DosQBDHdFgLgwMGDOH78OE5/9BGefeaZFiHipKe9MMr2H0c3DMa15RS81YYkq5mgHTdWAFFrkqKqAKU48cEHyGYy2PPYY0xV0DSXP+l56CTFhKYIIUzYCjwyIK2ylR2VDNsg+MN+EERGhjAE5cYlBMfEWD9Kl6ZriweGaIIXxipCeJnP5rx5/To2TU7eUzubw9fz9xw2Jq2DY/+fdO8QAAMDAxgYGMCePXswPzeHt0+cgKoo2MInw7HNMAMfSKhxPvnkk0ilUnjnnXeWvfeHf/iH+N73vodf/uVfXrEzpx3rwjgpLxYritLyxD548CCuXbuG1157Dc8//zzL1pLlow5o2/8DrcmTgYEBWJaFhXIZ42NjPR+b0Lc1DOOe1nxifVKtVvHRRx9hy5YteIwX5SkQ6eaEYetoeWEcvu8j5BzPpmnCU5SOEhrinD3JBbJAGFIEIfN6kmeCVCrRjSpKRi1tcksnHXlSURMmwvsREo15J4RE68c4g+v2nTuRJ1kNKO8kkROSaz1vI4GoET8/8X5Lki02X2WmVMJ777+PjZOTSMWyu9HxEJK4DFFVFUePHsUbb7yB6enpiNrXbDbx9//+38fo6Ch+/dd/fdXn88CNkxACzTDgNhpLw3kojdqunnzySXzyySf44Q9/iOd453+cNSSakAWSvKqQNlmsVBgxocchQMJLqap6z7MYq7Ua3j95Evv37sXU1q1LNzKWZpR0S3yElILy0FHXtOhBEd9OdM6UgoQSAo+pkpOAfUIhMiQ+rEc82CRJQopnHSPSPxAZ30rnG9+vMIi5+XlomsaU+1YJhz+oUoYBu216XE/gS55lL6O10wk8wiJAy0P+k08+wcWLF3Ho0CG2f74MEcOUKKVIZ7PRtLR2PP/883jjjTfw9ttv4y/9pb8EAPj1X/913L59G9/4xjfuqb3sgSaEBNLZLAIsqasF3HOIEsXOnTtx6NAh/Pitt3Dr1q2W7pH2m6jTerRYKEBTVSwsLPRsaA6fZgwkDz3qBGE8165fx6kPPsD+ffswPDra/qGetiW8lSyywarKCN66zrjBuh7VZ41UCikqI2UDaRNI2eyfIWtMNZ2PmhAlC41zUkX9Vub1217OM8kQrl67hqmpKRC+PpN6PE8ahnBsu2VJsJqHYRIfOtr28g8v/Zb874enT+Pq1av4wvPPI53JQFYUqDxKiYfCxS7JOxEtiND2woUL+Jf/8l/i2WefxV//63+953OJ44F7ToCtzWqKAocPrIm6zmNJgQ0bNiCdTuP48eNoNBp4bPfu7j9ge2hECIrFIubm5lBvNFDoobRi2/bSTE9uJCveBHydduHCBdy8eTOi4tmOw+ZsiIRLr6EbXyeuJcS0rc677MGg2v7ftm3MzczgUEy6QxAnCElWlRcQ073ECI7Vjnzo9tlOyooSr1u/++67oJTipZdeYh4zCCDzmmfYtoTollB87rnnQAiJkkK/9Eu/hCAI8Lu/+7v3HKavC89JCEEml1saV86nSAlFdoFisYgvfvGLKJVK+NHrr6NRry/fWJe1YSaTQTqVwmK53NP4BLHejB9nEq0uWjdyj3/y5EmUSiW89OKLyOfzrBRDWdNw/DgfFGgYfuo+zvZrfO3aNWzYuDExmSPWeuJf/NzDIIDjOCypxLPW7TmFrsex0nl02M6d27fxve99D5lMBs89+yxCnmkXA5LEvRfNZpVl5LqEpiKhdPLkSXzzm9/ED37wA/z8z/88DiVM0usV68I4ASCdz4MQwjwMv3mSTCyVSuHYsWPYuHEjXnv9dZw/d67n0BYAhoaGoMgyZmdnVwydHMdZpg4vLphYc4X8H8B0VX/81lsIfB/Hjh2LSjAio2m77urJ5LEHwlqQECISwFpSASnF9evXe9bUESoXoBQOn4NqxGrJXeuvrRtadS7AMk28feIEPj57Fk899RSeOHAgUuVTFCWKKFRFYb2g/DgKXUJagS984QtoNpv4+Z//eQwPD+PrX//6qo6tHevGOCVJgpZOw3PdSLeGAh2K6gTbt23Dl7/0JVRrNXz/e9/Dwvw8gJWZNLKiYHBoCEEQYLFS6XpMvu8v70YhBEEswypgNpt47fXXUcjn8dRTTy0LG3Xeyd+zSkLLLteW8A6sPDC3p23xv6VSCUYqtaqkBwUiSVNN06LjEWfaLQyO9p2QnV0Gfu3CMMSVTz7B93/4Q+RzOXzp5ZcjeqHjupHWkM/LSnHDBLBsdGESxLqz0WjgN37jN7oSTHrBulhzCqRyOTimCcd1WZasw+fE0zKVSuHZZ57Bnbt3ceKddzAxMYHt27ev+INlMhlYphmpxncip8elMOIZUqltDbVYLuPtEyewe/dubN++PXFbolPFsW1o2ezqPGhbVvTTIBoS1cE4V7PWE4mYq1evYls36cuk/QCwbBtElpHSdaBdN3iF4+iWBGrdEUW1WsWpU6cAAMdeeKGVSMB1h8S814Cz1QTPVuwriSfcDqEkefToUfzNv/k3Vz62FbBuPCcAaOk0VF1n3rMD4yXpibpxwwa88sorIITgTV5rWumHGxwagq6qmJ2bQ9DBm8WZJfH9Eix5s7t37+L422/j0KFDHQ0T/PO6riPwfdanuZo15/3wnIlv9j7jRXy+2WyiUqkwwelVwHUchEEAQ9ej1jVBvuh13yvuw3Vx5swZvPHmm5icnMSxF19sMUxKKZp8tLwIq0OexY2H/SOjo4m0vXb89m//NiRJ+lRJoDjWleckhCCVy6FWqUQ0LrG2W+lkVUXBoYMHMToygnPnzuHa9evYvWsXtkxNdZytMTw0hNLMDOYXFzGW0BQsWDJJxW0C4PInn+Dy5ct4rht5PQZd15lKPVdJ6Lk0I0Sq1mjNCSCRTtezN1r6Aq5eu4ZNmzatKkwOw5A1sctyi9qDWMZIWEU2OwG2bePy5cu4duMGxkdH8fLLLy/V0GNwHAdBELSM7PAcZ9mSZMOmTSvu85vf/Ca+/e1v4xd/8Rdx9OjRez72ONaVcQKAns2yeZe89NDO6Og0MkHcWAODg3jyyScRBAEuXLyI8xcuYNfOndi6desyBQXdMFAoFLBYqaDRaERN1ZQXqoMwTBzKGoYhPjpzBrOzs3jxxRd77jOVJAmqosB1nKUSTS8QFL3ev9ERQvoz6WG32mRVGAS4cePGqgndJvdWiWQQwS3Gyj2j7WiaJi5fuoSbt25hcnISX/riF1l/bsI2PM9jCT9e6w0p4w17QdDSEjYwNNSx2f7mzZv45je/iStXruD3f//3sW/fPvzWb/1Wz8e7EtadcUqShEyhAKtUQrPRYNo9dIk329WLEhLxUQcGB/H888+jUqngwoULuHDxInbu2IHt27e3sDyKhQJs28b84iJ0XWf1LV5bpGEI0pYQ8n0f7773HgLfx0svvhhRDnuFYRjw6nU4rtuz9InwKGsRKnWTJ1mtcd6+fRvFQmFVShGe5yHwfei63pEMH6fLEUK6zrAB2KCkSxcv4s70NLZs3owvf/nLUR4hSPhuyJXgZVlmjCv+usvnsei82RsANsX4te348z//c/zqr/4qisUivva1r+Ff/at/1fODuhesO+MEgOzgIKoLCzC5jKVgjQRYOXMpZmVGrI5iEc888wzqtRouXLyIP/vzP8f2bduwbft29gMSguGhIUxPT2Nmbg5jsUbcdlEtiyuv5wsFHHr66Uiuv9fJ2AAikrjNCRc9oZesZI8IKIWc5DVXud4UKoFPHDiwqu9YXBeom9xM+1EIDnBcUJoCqFQquHTpEmZnZ7Ft2zb8xFe+skwNX+LZ9fgxxD13/H4S8qNirEYun++aCPq5n/s5/NzP/dzKJ36PWJfGqWoajGwWTqMRDawl6M0IRPjXzoLJ5fM4evQozGYTFy5dwve+9z0MDgxg8+bN2LBhA4oDA5ifn8dCuYwR/oNQSqOne7VaxfHjxzE1NYXHHnss+lEJsOKEsnakDANurcY6TT6jxl2BMAigJBjGakPIu3fvQlXVqKWqF9iOAxqGrD9yhYdsy7GIkJ4wMeibN2/i5s2b8H0f27Ztw8GDBxPJD4SQZZ7T5lPp0ul0i+cmhMBxnIhLGwTBqpNca411aZwAW3t6fNqTY1nQUylGyOZapZ0Qrac63GjpTAZPHjqEA088genpady8eRPvnzyJDRs2YHBwEKZpolKtolgoMIkRQjAzO4v33n0XTzzxBDYnhDndVAGSoKoqZFmGbVmrM85PGdaKZFCS51wNKKW4cOECdieIsXWC7/tLJYsVejXbm8w938fdO3dw88YNlKtVbJiYwMGDBzE0NNQxkhIPm/isF4934+i63mLMBEtaRpl0mjGFdP2e5p6uJdatcRrpNCxNAwF74iqiY55f9E4/iiRJ0Wfa65FxyLKMyclJbNy4EZZp4tbt27h+/ToajQaKAwPYsX07aBhioVzGuXPn8PTTT3f0EoTvt1e2CiEEhmGg0Wh8pt5TePdPS92bmZkBBZuzuhJZAIjVNHk5qRfQMERpeho3b91CqVTC0PAwtm7bhmfHx1c8/hb6H79PAj7ESJHlxGMQ/F5d0+AHAUbGxnoqn9xPrFvj1HUdRNMgeR5CgMnmZ7NLiZEONwXhNaq4Tk6nG0g8WQ3DwE4+ur1SreLChQt457334LkuJEnC4SefxOAKQsKrzS7qmgZLliOyf0/4tJ5TXJOEm7vXBwulFBcuXsTuVQzysS0LYVvJIgme62Jubg63bt3C9MwMMpkMNk1O4onHH28xKIolhlDiMcaOFWCGbloWCCHsGGLXUfyXaFOTFQWgFBMbNqwJi+rTYN0apyRJyOTzaJTLMHhpxbVtqD08eaW2DJ8kOJhtN3eYMLGqWCjgyNGjKE1P49SpU1A1DZcvX8YHH3yA4ZERjI2OYmR0FAXOBY5jNcZJCIFuGDCbzajRvBNEaScMAiaYFWvODikbmyfKD67sIcwDIQWCACAUkD0LUr3Oyge2HakWiKZpSZajXs6VMD8/D9e2sXHjxp4M2vM8Fh3wuTVxhEGA8sICZmZnMTs3h3qthsGBAeQKBTzz1FMdldUFgV4QBrqBcsWJSMExNsQq/vuJkNv3fWyamkKxWFzx3O431q1xAkA2m4XZaCD0faiKgqZtIyfIyeLCJhlDgreUJGnpNX5jd/pZFUnC6OgohoaGEFKKI4cPIwhDzM3OYmZ2Fp9cuQLf9zE6OorR0VGMjY6yJzK6e+p2GJoGmw9Xio97aNcish0HjUaDqRS2JTEkblwAu2HVUAJ1ARoCQQhQws6HSBIbi8cfXB4nWERrMywlt4SCoDDiOC5euICdfNz6SmcZco8lSRJj4FCKSrWKudlZzM7OYn5+Hrl8HqMjI9i/dy8G+RqyWq32NOow/puKZUxLTZxSNE2TJYAymZYHYIthui78MERWUZAfGMDwyMgDD2mBdW6ckiQhm8+jVi4jo2lwXRf1ep15LdFbmfD0lHlvaDuSqHidoKkqcrkcyuUyZmZnMT4+jo0bN2IjTxKYponZ2VmUSiWcOXMGmqpicHAQhWIRhXyetYqtpD3E156mabLuDN6iJMSMgaUWK0VRkE6loHJFA+H12uFRGYENIAR8fpqKrEPOZEAphaqqkUyoeAiEYGsyIUrmcXlIYbCiCbper6PeaGCzYMx0WV5QSpksab0Ox7ZRr9WwsLAAVdMwOjKCqa1bcfTo0WVZVvGg6LVrRsiltD8sxOhHkZlV44bZto06bz1MZzIYn5joeS7O/ca6Nk6AkdSbzSYcz0M2l0O1UkGNGyh4exHaQlZFUWADy8bwCXmTXilq2UwGtVoNnu9jfn6+Ze5HOp3G1NQUpqamQClFtVZDpVJBtVrF9PQ0FhcXIUkSisUiCoUCCoUCisUiG8LEvZHoXW02m5EyvdAdiisTeJ4HEAJN16M10b0gpK1C0kKQLARamFCRjhHXmhU6vWfPnsXmLVvgtg0H9n0f1WoVtWqVXYNaDbVqFYqiIJ/Po1AsYtOmTXj8wIEVJWJohwdut89LWM4ia1oWfGGY7Q8ALBloEASwOGNrbONGZLPZz0yXdiWse+MkhCCXy6FSLiMEkMnl0Gg0omnTJJadFZ5E3Gh+zDh/83/73/DxmTP4xV/6JcZ9FOEQgP/wH/8j3nzzTfwPP/mT+L/9z/9ztG+FCwkPFApYrFYxv7CA4YR1ECEExUIhGjkIMEOwuG5ttVLB9N27OH/+PMxmE5lcjk0103XoXHZEUVWk0+kW411rJNU4kxIrQthLlmVouo4wCHDz1i00Gg2Mj4/j8uXLcCwLjWYT9UYDjuMgl8+jkMuhMDCAiYkJKKqKVCqVyGlNQpRdF9zfHo1TPGxEjkGQ2YMgiCRZ2iFqppRS1BsNEACj4+PI5/PrxmsCD4FxAqw1zEqlYJkm0rKMdDrNJhNbFrJCkU8wSMSNRQgb3cbXDn/tr/5V/OqZM/ijP/ojHDlyJApxv/nNb+LNN9/Ey1/8YothAoCm63AdB8ViMfKOs2GI4eHhFW8eiWcGDcPAxPg4fN+H7TiwLIsNzWk04PE5k9VaDQ1+k7ueB0PXo++mUiloug4CoJ5Os/+WJChcC1aopQtjSvKplIZwXJeJaAGRqp/v+wgohc8Frz3PYwOGTROmbcOxLJh8uhuhFKlMBouLi2zwUy6HXD6PrakU0plMNCOTgvUzSsCKc2LiEOWPKJxfyTg5MUE0RgiKp8nXmCkehcS3H/+uyNSbpglNVbFhchK5XO7e9XLvA9bPkXQBIUyScD4ImHqeqrK5irYNmRD2dI6XWAjTio3PZty8eTOef/55vPnmm/jxm2/ihWPH8N++/W389//+3/HM00/jZ37mZ5btV1PVqKdvYGAAhBCW0Jifx0gPBkrAvJW4wYW6nMgExte+ruPANE0mFcopZiJZ1OTj9Mo82RQN/+H/wth/P349xMZQAg2Xbtj3T55EaUaKjFrmSTWZj7sTg5lUfl2LAwMYNwykuGjYzMwMrl69ipdeeqnl/ISwtOM4cF0XjuPA8zy2Ps7leuICt9eso+RUt+/y91oUIghBs9lkoSynfMbZQXEyvbjuTdOE6/vYtnMncrncqqfJ3W88FMYJsPBlcHAQczMzaFgWcpkMQn4TEwBaKsV6FLmByrLMZEFiP/5f/st/GSdOnMAff+tbsB0Hf/SHf4gnnngCv/ALv5BoaGKEvECxWAQIQaVSwezsLEZHRzsaqAhrHcdBCOaFDU2LQtb2MoSm63B4O1khl2tZm3meh0aziWwm0zLXNAlu+STozG1AAmjAPnPk8GH4h8ZgNpvRUCage61QwA8CnDt3LrENKp4sCoIAlUqFFfMJgcdVJLoaGW1TsRfH04VkkpQlDsMQlmlGhqnyLhNxjJGxtyUDa7Ua0uk0JjdtuifpyvuNddVsvRIURcHA0BCoLMNsNpFOp6EoCkzbhu95SwRnQpisJhAp+YWUYnBwEF/96lcxNzeH3//938fOnTvxK7/yK1BUNTEc1DQt8pwCxUIBA8UiHNfFzOxsopHYjoNKpQKbC1cVcjmkDWPFtWQqkwEoXabb2n6jCu+ShI7qEfw6tBTWe/Bsly9fxsDAQGLNMX4MwmMODgwglUrB4eWfbpOlk7K9YTfPmVBHDnw/2o8wTAARSV5sS2gnCZjNJmzHwbYdO6KoaL3hoTJOgK1jisPDcIMAlmkim8lAIgTNRgOB50WCWzI3TnFziB8mvuD/W3/rb0X1rKQfR1XVqMQQR6FQwPDgIFzXRalUigw0pGxEfdM0IUkSctksI1jzssdKP7+iKFBUFY5tJ/YgxsO41d5KkWhanB2zgte0bRuffPIJ9u/fn/wB/n3XcVhvpKoinckgm8kgw5k4pmVF3R6dvt/6Em1RmoiONbZkEXBdF41mEwCQyWaXla7i2rQtoXMYYm5hAbliETt37vxU08zuJx464wQYOSFbLMJxHDQ5rY8QgkazGclPhmD82cg4wxBvHz+OP/iDP4hCmD//8z9v3XD7DQEgk05HLUZx5HI5DA8NwfN9TJdKcBwH1WoVnuchZRgt4ePS5kn8fxLPLc3Xz3Z8nwmfXe2TPkjo41ypIHPu3Dls2bKl8+BZQuB7HkzOOopnZlVVRT6Xg8aXBs1GY6kFT5RLEhDXbVraTavYG+VLBss0IcsysrxBP35c0b92zxwETJomCHDw4MHPbIT8veChNE4AGBwdRbZQgOe6aDabyGSzUGQZTdOEzdehiqJEw3dPnz6N//Af/yMmJyfxG7/xG5iYmMBrr73G9IbiED8qRy6fR71WSzyGXDaLkeFhuI6DazduwPV9ZLPZrj+4xG+YTl5L4sRsz/NWnIuyGiQKSXfxnNVaDXemp7t2ngS+D9M0IUsSMvyh0nqQLGOd5moEjUZjWRTSDj8IloXe8aMMwxAmfwiruo5MJrOsdhvJuiRsu1KtotFoYNOWLYkdRusJD61xAkBhZATZXA5hGKLRaETzHi3bRrPZZJqzhODsxx/jn//O76BYLOIf/sN/iFwuh7/yl/8ywjDEf/kv/yV54/ymyBcKqHYwToBldFOpFEvLc57sSpB4k3YniCZw0zRbXr836gEiCY5e15sUwOnTp7Fn9+6ONDZBngAhyMY5qwnQdJ3VbwE0OM+1035DUZtue0gCfH3Jr7GRSkXN0vG5MWEYJqofeJ4Hs9lk6hqcP73e8VAbp6yqyA4OshQ4pWjU69B1nTUzuy4s08RMqYT//f/4P5DP5fCP/tE/Qr5QAKUUR596Ctu2bsUHH3yAixcvJm6fEIJCF8/pui57KKRS2LJlC1RFwczsLGpJSvRt6NbxQCQJ6VQqEsKKwrwEskAvEGviOE+2G0H/6tWrCHwf2zqoCYrxhQGlrWTyDiCEyceIUkUnAxUEfkmWl51rtL6klK0veckpPuGsE7PI4WUqx3Gg8OFYaykncr/wUBsnwOQ0U7kcsrkcQAjq9XrUGjQzO4v//Pu/D1lR8A/+wT/AGB//J/i1f+V/+p8AAH/wB3/Qcfv5fB61en3ZzezHPUc2C8MwMDY2hpRhoFKpYH6lgUmUdq2TalzPSLRbfRoElDdZt1H0kmBaFs6dO4fDnKix/LApTNMEDUNk+bj2jogR68HJIdlMBgSsxth+BAGnYcqc9QXwMNY0W9aXUSkooeQS70YSJAPbtiHx9fHU9u3YtGVL52NeRyArtDjdayT1mSIMQziLi2z9aZrwXBeyorCeSdtGvV5HOp2OCN8AIu0foZzQyQv5vo9vf/vb+It/8S9GT2bKs7Ke5yGfz7d4QUppxP+VFQUjo6NQE25gSmkUfnWqWYZBgFqtFpUCUuk0jLYwMwhDBN+/gvDH10HrDuAGQEgjUjsAWFkJriGhkM1C+dpeSLtHEmVVKIC33noLQ0ND0RzR9utsinpiKrUyzbADMd73PDRME5qiRCwiQggs24ZpmsjxdjzXdWHZNhCG0A2DreX5Njs13Asesie+S5mSe61aRW5wEM88++yqmEufERJvvofecwJ8lEOhAElRkM1mkclkQMMQlm1HJPJKpcKe1rHidMTL5DeymOAch8JvoAb3kiAEtm3D87xlyQiA82x5XTAMApRKpc6lBHH8HR4MkiwjxWUzPM9LLj18OI3gj8+CzjUB22eNnG0IwxCS5QPXK/B/9x1mxAm4efMmbNvGroRGahHK+r7PumN6IYd3eOgoqgqdZ3Fd32caTFgq94RhiGajAcs0IRGCLOcix7fZyatTSmE2mzC5ul42m2WzXtNp7Nu/fz0aZkc8EsYJsDaxFGfwaLqOXD7PGD58Fociy2g2GqjV6y1JG0H9igSseUIhHlHkxbqTZwItPvSm2w2ayWQwOjoKRZLYOrRLUgnobKC6rkPlIwQTZR4vzne/MABCCZDEV/0A4bXyss/YjoMzZ87g8OHDyx44YRii0Wwi8H2kM5mVex176JoxDCMaTyGuteiAEVldg/N2o+Oh3VUILctCvV6H5/tIGQaymQw8z4Ptuti2ffuqxMjWAx4Z4wRYgihVKACE9TtmeEFcVhTW8cC9Y71eZ+ummBcVRir+Pz7WL5fLoVqtAuATmMOwp24LXdeX1qHVKmbm5uDxUDNJNaFTaJ3hmU6rLXsLAGRj9zmjFMw45Zhdkw35ZZ85deoUprZsWaYAIAyTciUBIamSaH7i+HtIVBHegE3BObq+jwZfKsiyHD0EWh5aCdQ9YIklZFkWJFlGPp+HYRiMpdRsYmr79p4noK0nPFLGCQCKrsOIrS1VTUMul0M6l4PjuqyJmFLYth2tGyN0WMcMDw+jNDPDxIh5YkKW5Z5qjbIsY2xsDMVCAa5tY3p6Omrubf9+EjMGWKp9+r4Phx+/YEKRo5NAprMnC/lyV+I5JXJgAmQoHYXoFMCdO3fQqNfx2J49Ld8NggDNRgM0CJCJ8XoBtHrHDtnkZWi7vqqmAUGAKm+rCyiNliXtfbhJCHwfJm8K8F0XqVQK+VwOsiTBcRzUm01M7diBnTt3rqtuk17xyBknAKiGAS2fjzyTJEkYHBhAvlCIhhZRSlmHPqfbiW56YOlmEN8fGRlBtVqFZVkIwhCqrjOuZuxmXKmsUSgUMDExAU1VsVipYHpmJrEmGhlo242u6ToIpyl6vr80F1SXIX15R8f9BvwXFp5T+r/sbHnfsiyc/vBDPHnkSEvDdRAELJTlpYvEm1scYw9hbMTy4Z8NwhC2bcPhbWqQJNYFk7AmXJbV9f2oU8fn6vHpXC5qD/RcF9V6HZunprBr1651ITlyL3gkjRMA9FQKRj6/1J1AWEO0nkpB1/VISd71PNRrNVSrVRay8oxsXApElmWMcO9JKY2Eh0UvYRQCi75CmqyerqoqxsfGMFAsIvA8TE9PJ65Fo2QV317I9X4Ed1TU+wSkY1s6es9AeM6QeU1pUzF6LwwCvPPOO9i1ezcbqc7POyIYUIpcm/aOAE0gCSz/0NIaMeST1XzeQlev1WDz4cTpdBoSIZFn7uYphVEGvg/dMFhuQdOi8ovnulisVDC5ZQt2dSFRPAx4ZI0T4DXQfD5K8Gi8X9HzPDbslcuGKIqCpmlisVzG4uJipOcjQAjB+MQEZmZmmKBWp3YmIJJtDIHIYGnsHyEE+XweExMTMFIpVKpV3J2ebh1JL74rklP8GAghSHMtoDh7iBgq5A7eM5QBOWDHJv+F1izs6Y8+Qjqdxs4dS9/1PA9Nvu1sLpcotBXxY+OIe1H+sAJhoxDEw0uUtRzHgaooyGWzEXPI9TzWSdS+rqSsGbzdKLOi0ydWBguCAIvVKjZs3ozdu3c/VJnZJDzSxgkwAzVyOQTcUDJ8FIAlOKGZDAYGBzEwMABZlmFaFubm5zE/Pw/LsiIjnRgfx/z8fDRLshsIsNRbiiUjDXltMwxDSLKM0dFRDA4MIAgClGZnUalUEPLm6WUEBr4tVVWhGwY8rqAuIL24NdF7BhJbb5IDEyCTSz2LN27cwPzcHA4/+WRUO7QsK+LKFvJ5qLwZO44QiB44oplblKDirWyRqh/3lDU+vEkYZZqvKyVJYmF6ELR46DAIoryAEOrSeUOBYRiQJQkh9/JhyJQeFspljG3ciN2PPfZQMIBWwsO3Sr4HGMI7VioApUinUoyswHsQZUlCJp1GyjCY52g2Ydk25ubmoGkasrz1S9M01KtV5MSoQHQnoEfvieRLjAMqPE0mk4Gh6ygvLmKxUkGlVmP9n6LVTOwnFiobPDlkCQ1aWQZ0GfKXtyN49Xy0/5AAlLD1ZtxrVqtVfPzxxzj2wgusl5VStr4MQ+iahlScs8rb0+KEdVGThDgPUY7CEqEiCIJIdgVAFLXEZTzFQyEIAkjcA7r8OyI3oKgqNKEF1EYWEZFIrV6H6/vYwgdUrTdFg3vF58I4AUAxDOSGh2FWq9DCECZno8RZQ5IsQyN8AnUQwDRNNBoNLJTLqFSrGCgWUZqZiWZoRIkjrGCkCa1i8bBZVhQMDw9DbzRQWVxEeXERtXod+XweGeEBOEtIUPlShoE6r9vmcznWq3lsCuF/Ow/4LIz3JYowBOSJArCRJchcz8Pbb7+N/fv2IZPLwXXdKEROpdNRUoXGw1Qstd/Fk1XivIUhC1lN13WjmmzcKOPGLvo2gzCE43lQZJlxkikbHmUYBrSYckRSkizwPMyXy0hns9izezc2b978UGZlO+HROZMeICkKskNDsOt1JqtRraLeaLB1j2jl4l5AluVIV8ZxHNTrdaTSaVy7ehXTpRLSqRRSvPO+5WmOzoaa1KcogtcwDJHmnRbNZhPVahXlhQXUqlUUCgVIAHwhAUqZxGUmnUaz0WCKfpkMqCqBHBwHPXkXAIHPI3DlLzAqHqUUH5w8idGxMWzesgWO48DmM0wy7aLLWJ4lFXIkUUM0mHH5nOkjss+yLLNro6oRgUAiBGHMC/u+z2h8zSZsy0Ium2WDbPmIRHEMcc2feB21wR9Mw6Oj2L5jB0ZHR1e+AR4yfK6MU8DI5aDoOkJKUa1WUW82kctklnd/8JvJ4Cn+dDqNGzduYHFxEb7vo1arQVYUGLrO2tUUJRq2tBKisg0hyxhJmUwGqXQaZrOJWrWKhXKZJbQ0jXl6/gBRFIUNfOJqeZlUCvJPH0Ywa4LerMBXKJQjk1D2jYFSijNnzsB2HBw5coSJYfExECKEjqNTcYRwI3NcF77rMuEyMOMzdB2aqi6FrrE1t8ON0ff9JflLSYLv+9A0DUODg8uMUiTXSMwoaRhicXERHg9jd+zY8UisL5PwSBDf7xVhGGL21i3UKhUmQ8kpZZ30a4IgwIULF3D37l0899xzsGwblmXBd10EvMSiKQp0w4huUllRmOixWJu1QXiR+IWOr0lDStFsNFAul2HaNgr5PIqFAgyxLuRtZbbjQOe9pQAQeD7+6x9/Cz/x1VeQTqfZcd+5g2eefTbycLphwOCym50eKOK9MAzZGD/fh2WaTFkBgMK9nfC6gqTv88SWH/OohBAosgyFfz4MQ5Tm5qBKEgYGB6NRFsuuPw+bHdtGZXER6XweW7dvx+Tk5KMSxiZe/EfizO4VkiRhfMsWUELQWFyERJZG1EnxtQ4AUApZkjC5cSMuXLrERgXyUoyYPWlxCUy7UoHEE00yl5yMy1GKLKVA+xMwbiwSYaLamqZhbn4evudhfmEhyjSnMxk2Op2v3QhhIx6oRACJJVSuXLmCmzdv4siRI/B8PwqJFeHlE2iE4qERcOMSa0hhYIZhRCyekBMKhDxn+3pa1JTltuxvvdEA9TykBwZaVfKWDoStk22b1aEdB+OTk9ixcyeGu0ycflTwuTZOgfFNm1AiBPVyGUSSoKkqYwARwqZvkSVBrVQqhe1btuDC+fN45rnnWuQh05kMM1Q+pFWMW3C5Zq0YOiRLEmRZhqIooIQg5J0ZsiSByHJLHVUYqqwoyGYySKdScH2fkfhrNdTq9SijrEgSU+4TWV5Kcef2bVy+fBlPPvkkFEWJCBjt62TKPaPHM6VxaUmZRwTigSIEqkVGVUCWZfYg4tq4Ep9kFofYq88TbqqmRYoV0We4BxVG6bouZFnGgSefxJatWx/4aL7PCn3jBCcZTE6CAmguLoKmUtA1LSpfCHEpQghUTcPmLVvwo9deQ7PRiJqHKTdglYds6XSakQiEALTwQNxgfc+DAyDgpQRRTI/G8sVH9PE2Kt/34QcBUoaBdCoVEQaazSYWFhYidT3f86DwwcPnzp1jnf+ZDHQuASrqt6JG6AdBRBwQxyHLcjTqIuDnASDK+CqKwma38KlkUkJNVHxeEmyimEdtNpvwXBfFgYFo4LF433YcVCsVuK4LIkkYHh7GoaNH2bj6zxE+12vOdoRhiLlSCfX5eSiKglQms4ylIXRuTn34ITzfx1NHjizbjgjPRFYzfhHjRib6NC3Ligr6YRi2NEKLNRgF01o1dB0qH3sQsXEoZY3JlsV6JB0HZa7GsG3rVgwMDCxbm0mEgEgS8+b8QaDwcFsYmhx7OAjPDsIEo5edMz/Oltpuh3vL933cnZmBJEkY5mP/olEQlhWtUXO5HMbGx7Fzz551M1zoPqG/5lwJkiRhdGICRiaDhelp1Gs11nImWEH8hpNlGTu2b8ePXn8dd+7exYYNG9jbfDuC3tby/2BGKkkSmyuCJQO2UqmIPysyt4JYH038CkO4ts08uCQxr86NgQBI85DVsW3crtdRr1YhE8ZX9TwPEmFjK1KGAZ0nvsSxRWoQ3FjjEKUhQYTwaXJP5TKv2cEwKaVs7ez7yOdyqNVqUYKJUgpVUZDnc1g2bt6McX5tP4/oe84OcF0Xs9PTsGs1GLq+TO6SArh27Ro+OnMGL734Ikvn8zWqWD/10lIGsNC2XVk+Xs4RqFSrUCQp6u8EAEgSKB+w6zgOrl27hplSCXv37kUmm4VlWRHdThi8SHzpus4mccXWkxHjJwmURi1rPSPGjPJ9n1Ejy2WoXEYGvESU4o3Viiwjm8th09atMHqcUPYIIPGC942zC8IwxMLCAmoLC5D45Kp4n2FIKd579100LAtPP/VUS1eFqP0hFup1MtYQaKn/dUKj2QTCELlCgRHCfT8aHkTDEBcuXoTrujh06BDCMEQ2l4NtWbAdJyIG2LbNDNm2I11cCkTrRjEXVOUJK0VVo1ayUGSEOxwfJaR1pidPionEmGlZaNTrUFQVI8PDkbyluKayLGN840aMTkys+Ns8Yugb572i0WhgcWEBLp/lqPNiO8C6KX74wx9iw8QEtm7bxjKPWMqyirWYWH8KY42vz4QaQMDbqqKp3fFtgCkh2LaNdCbDssFBAJl7uVOnTiGVyeDI4cNomiYIEHFkhTK+JElsfAWXnhQTwoQBRWthcRzxdTP30KKkQjlbifLwWqx/W7p5wDK9iizD5bqxsqpi44YNLQ85SZIwMDyM8Q0bouv3OUPfOD8NhPJctVyGVa8DYRjxP2vVKl57/XUcOHgQA8XislLFSoizhCjbWbSeBJghOFwj1zLNaPyAqmmwTBPvvvceNm/ejD1cyaBaqSwbHOvx8gvAGEhKe4Ildh9Qbri+58EPw6gsFPo+wviDpvUkALCyksr1lRRFieZ1CvWHoaGhyDCJJGFoeBijGzas67EInwH6xrkWEBIniwsLMKtVIAigqCqmp6dx9uxZ7N+/H4VCIZqAtprtxns/XW4cHg93CZiR/vC11/Anf/In+M2vfx0zs7O4ffs2Dh46hI0bN0I0G5uNBjLx+ZjcswVhCLPRgB8EuHnzJn7rt38b//e//tfxype/3No1EwRsLcv3KVrCVhql0A6XS5U2m02m7cNV9CRJwuDICEYnJj7vRinQz9auBYjIek5OwhkZQaVchlmrYWh4GHv37sWZM2cwNTWF4eHhiI/bIh4WSxZRsO5+UQ8Vc12EagDlmWE91jIFSiEBePPHP8bU9u340le+Al3T8M477+Dc+fMolUqYLZVQmpnBc889h1/4hV+IkjwSIchwIv/kpk2YmJjA6VOn8OUvfal1doskAULZ4R4Q8NEUjuvCdRzouo5MNotsLofB4WEMDg8/1AoFnxX6xvkpoOs6xiYmgIkJuK6LkYkJ5ItFnHj7bdiOg5HhYVSrVWiaxrpX4l9uqwMKAoGguQkWEYl5MNuyMDMzA1mW8fiBA9gd05f91h//MW7dvo2RkRGks1lgZqb1YPmaUND7VE3D7t27cfr0aczNzWFocJC1dfF9sUNc8rwBZzEtQ2xtHPJjdFw3Ijik02lMbNqEsYkJpsrfR8/oG+caQdM0aCMjGBgZwcatW/HHf/iHsC0LmzZtgizLCIMAmq4v8xjtRrgsY0spFhcWcOX6dUzfuQOF83SHBgZaPvO//NRPsf7PTAZ3p6fx9f/1f11+kLEElSxJOHToEN768Y9x7vx5PL5/P2RJgsZJ++30vo7lFcIkR23Hges4UU3WSKcxODSEqa1boT3kciEPCn3jvA8YGBzE//IzP4P3338f7733HgazWWzZvBkDigLbtpkha9ry+Z1A1JnhOQ5u3LqF69euIQwCTG3disd/4ifw3//kTyJOblxvZ9/evag3GqxbpEudkv1hiae9e/YgpBRnTp/G0089Bce2YZkmLPCHja5DkeXEEg+lTNvH5W1jok6byeUwNDKCoZER5HK5zw0P9n6gb5z3CZqm4bnnnsPTTz+Nc+fO4cTx4yC+j+HBQWh8EloqnWaDfCmNBKwEmb1SqWBsbAwHDxzA0PDwsuxvwMn0AiKrmjIMlvyJJ5jQmnEQej+armP//v04/dFHjBRfKES1U5cbnkhQKZyoIDK5lm2zsgqXCs0XixgeG8PA4GDimIo+Vo++cd5nyLKMxx9/HPv378fNmzdRKpVQXljA3YUF1K5cQbPZRIoLX+eyWeTzeWyYnIwym0mglMJz3ZbXbNtm1EA+21OOGXO7HxVEfVCKw4cP49QHH+D8+fPYv3//UodNGML1PNi2HY06DMIQMveoAyMjyOXzyOXzUSQQJb/6WBP0jfMzAiEEW7ZswZa28XO+78PmTdvNeh2ubcOzbaY0wBXpZEFG599xHYc1M4dsIG4QhvD4TJhePZYEZqCHDh4ECMH7772Hffv2RYT8gEuPqJqGwUIBmVwO2Xw+Guyktq1L+1h79I3zAUPhk9Gy2SyGh4fhcI6s4ziwmk00KhWY3EsSQuCHIUKwGmK5XEYml4PNFetVTYv4syJbKrpXRFmExmQ6aRBAVlXs2bMH586fR5WPG0xnsygMD0dDanVd7xvjA0DfONcRRJlDiCFTzp/1uPaO53lo+j6u3b4NI5eDTwgqtVo0ZMjhHFvLcWCk05BkGY1mc6nbhDdhyzEGj6pp+OTGDXhBgD0HDrCRiarafShuH58J+sa5jkF4y1d7L+PV69exaWoKo6Oj0VQumUtPUkpxd34eH547h627d2PH3r1LLWGxhm7xnWvXruGtt9/GP/7H/xi5fh1yXaFvnA8pJEnqKJ6s6zpqtRp831/R4F599VUAwNe+9rU1P8Y+Ph36+e7POV599VVMTEzg6NGjD/pQ+mhD33M+IvjWt76Fb33rWwCAUqkEAHj77bfx0z/90wDYjNF//s//ect3FhYW8OMf/xg/+7M/20/2rEP0jfMRwYcffoj/9J/+U8trV69exdWrVwEAW7ZsWWacf/qnf4ogCPoh7TpFP6x9RPBrv/ZrUUIo6d/169eXfefVV19FNpvFyy+//NkfcB8rom+cn1PYto3vfOc7+OpXv9rvqVyn6Bvn5xSnT5/Gjh078Nf+2l970IfSRwf015yfUzz99NP48MMPH/Rh9NEFfeN8yPDSSy8BAIrF4gM9jj7uP/oaQn308eCRWMfqrzn76GOdom+cffSxTtE3zj76WKfoG2cffaxT9I2zjz7WKfrG2Ucf6xR94+yjj3WKvnH20cc6Rd84++hjnaJvnH30sU7RN84++lin6BtnH32sU6zUldIXlumjjweEvufso491ir5x9tHHOkXfOPvoY52ib5x99LFO0TfOPvpYp+gbZx99rFP8/wGEr0PZ+tqE4AAAAABJRU5ErkJggg==", + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 結果を見てみましょう\n", + "qc.save_statevector()\n", + "qobj = assemble(qc)\n", + "state = sim.run(qobj).result().get_statevector()\n", + "plot_bloch_multivector(state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "確かに、量子ビットの状態は予想どおり$|1\\rangle$です。 これは、ブロッホ球の *x軸* を中心とした$\\pi$ラジアンによる回転と考えることができます。 Xゲートは、古典回路との類似性からNOTゲートとも呼ばれます。\n", + "\n", + "### 1.2 Y、Zゲート \n", + "\n", + "Xゲートと同様に、YおよびZパウリ行列も量子回路のYおよびZゲートとして機能します。\n", + "\n", + "$$ Y = \\begin{bmatrix} 0 & -i \\\\ i & 0 \\end{bmatrix} \\quad\\quad\\quad\\quad Z = \\begin{bmatrix} 1 & 0 \\\\ 0 & -1 \\end{bmatrix} $$\n", + "\n", + "$$ Y = -i|0\\rangle\\langle1| + i|1\\rangle\\langle0| \\quad\\quad Z = |0\\rangle\\langle0| - |1\\rangle\\langle1| $$\n", + "\n", + "そして当然のことながら、それらはそれぞれブロッホ球のy軸とz軸を中心に$\\pi$だけ回転する作用をうみます。\n", + "\n", + "以下は、ブロッホ球で量子ビットの状態を表示するウィジェットです。いずれかのボタンを押すと、量子ビットにゲートが実行されます。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3e1af03e357b418387e00e6a673db4b0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='X', layout=Layout(height='3em', width='3em'), style=ButtonStyle()), Button(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b87402c1a9b540089639b2e590be2cd2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01 \\x00\\x00\\x01 \\x08\\x06\\x00\\x00\\x00\\x14\\x83\\xae\\x8…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# このセルのコードを実行してウィジェットを表示します。\n", + "from qiskit_textbook.widgets import gate_demo\n", + "gate_demo(gates='pauli')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitでは、次の方法でYゲートとZゲートを回路に適用できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc.y(0) # 量子ビット0にYゲートを適用します。\n", + "qc.z(0) # 量子ビット0にZゲートを適用します。\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. 余談: X、Y、Z基底 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
    \n", + " 備忘: 行列の固有ベクトル (ここをクリックして展開してください。)\n", + "ベクトルと行列を乗算すると、ベクトルが生成されることを確認しました。\n", + " \n", + "$$\n", + " M|v\\rangle = |v'\\rangle \\leftarrow \\text{新しいベクトル}\n", + " $$\n", + "適切なベクトルと行列を選択した場合、この行列乗算がスカラーによる乗算を実行するのと同じである場合を見つけることができます。\n", + " \n", + "$$\n", + " M|v\\rangle = \\lambda|v\\rangle\n", + " $$\n", + "(上記では、$M$は行列で、$\\lambda$はスカラーです)。 行列$M$の場合、この性質を持つベクトルは、$M$の固有ベクトルと呼ばれます。 たとえば、Z行列の固有ベクトルは$|0\\rangle$および$|1\\rangle$の状態です。\n", + "\n", + "$$\n", + " \\begin{aligned}\n", + " Z|0\\rangle & = |0\\rangle \\\\\n", + " Z|1\\rangle & = -|1\\rangle\n", + " \\end{aligned}\n", + " $$\n", + "私たちは量子ビットの状態を記述するためにベクトルを使用するので、これらのベクトルをしばしば固有状態と呼びます。 固有ベクトルは量子計算で非常に重要であり、それらをしっかりと把握することが重要です。\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "量子ビットが$|0\\rangle$または$|1\\rangle$にあるとき、Zゲートが量子ビットに影響を与えないように見えることもあります。これは、状態$|0\\rangle$および$|1\\rangle$がZゲートの2つの _固有状態_ であるためです。 実際、 _計算基底_ (状態$|0\\rangle$および$|1\\rangle$によって形成される基底)は、Z基底と呼ばれることがよくあります。 Z基底は、私たちが使用できる唯一の基底ではありません。そのほかの基底として一般的なものは、Xゲートの固有状態によって形成されるX基底です。X基底の2つのベクトルを$|+\\rangle$および$|-\\rangle$と呼びます。\n", + "\n", + "$$ |+\\rangle = \\tfrac{1}{\\sqrt{2}}(|0\\rangle + |1\\rangle) = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix} 1 \\\\ 1 \\end{bmatrix}$$\n", + "\n", + "$$ |-\\rangle = \\tfrac{1}{\\sqrt{2}}(|0\\rangle - |1\\rangle) = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix} 1 \\\\ -1 \\end{bmatrix} $$\n", + "\n", + "あまり一般的ではないもう1つの基底は、Yゲートの固有状態によって形成されるものです。 それは次のように記述されます。\n", + "\n", + "$$ |\\circlearrowleft\\rangle, \\quad |\\circlearrowright\\rangle$$\n", + "\n", + "これらの基底を計算する演習を用意しました。 事実、無数の基底があります。 1つの基底を構成するには、2つの直交ベクトルが必要です。\n", + "\n", + "### 練習問題\n", + "1. $|+\\rangle$および$|-\\rangle$が実際にXゲートの固有状態であることを確認してください。\n", + "2. 上の状態は、どのような固有値を持っていますか。\n", + "3. これらの固有値がブロッホ球に表示されないのはなぜですか?\n", + "4. Yゲートの固有状態と、ブロッホ球上の座標を見つけてください。\n", + "\n", + "パウリゲートのみを使用すると、初期化された量子ビットを$|0\\rangle$または$|1\\rangle$以外の状態に移動することは不可能です。つまり、重ね合わせを行うことはできません。 より興味深い状態を作成するには、より多くのゲートが必要になります!\n", + "\n", + "## 3. アダマールゲート \n", + "\n", + "アダマールゲート(Hゲート)は以下のような行列です。\n", + "\n", + "$$ H = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix} $$\n", + "\n", + "これにより、以下の変換が実行されることがわかります。\n", + "\n", + "$$ H|0\\rangle = |+\\rangle $$\n", + "\n", + "$$ H|1\\rangle = |-\\rangle $$\n", + "\n", + "この変換は、ブロッホベクトル `[1,0,1]`(x軸とz軸の間の線)を中心とする回転、またはXとZの基底間の量子ビットの状態の変換と考えることができます。\n", + "\n", + "以下のウィジェットを使用して、これらのゲートを体感してみてください。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "18f336c4f60e4bb694239edd9e548522", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='X', layout=Layout(height='3em', width='3em'), style=ButtonStyle()), Button(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dabae30e029d4827a653b2f8386382b4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01 \\x00\\x00\\x01 \\x08\\x06\\x00\\x00\\x00\\x14\\x83\\xae\\x8…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# このセルのコードを実行してウィジェットを表示します。\n", + "from qiskit_textbook.widgets import gate_demo\n", + "gate_demo(gates='pauli+h')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 練習問題\n", + "1. Hゲートをベクトル$|0\\rangle$、$|1\\rangle$、$|+\\rangle$および$|-\\rangle$の外積として記述してください。\n", + "2. ゲートを連ねたHZHを任意の量子ビット状態に適用することは、Xゲートを適用することと同等であることを示してください。\n", + "3. Yゲート(グローバルフェーズを無視)と同等のX、Z、Hゲートの組み合わせを見つけてください。\n", + "\n", + "## 4. 余談: 異なる基底での測定 \n", + "\n", + "Z軸は本質的に特別なものではなく、他にも無限に多くの基底があることがわかりました。 測定と同様に、常に計算ベース(Z基底)で測定する必要はなく、任意の基底で量子ビットを測定できます。\n", + "\n", + "例として、X基底で測定してみましょう。 $|+\\rangle$または$|-\\rangle$を測定する確率を計算できます。\n", + "\n", + "$$ p(|+\\rangle) = |\\langle+|q\\rangle|^2, \\quad p(|-\\rangle) = |\\langle-|q\\rangle|^2 $$\n", + "\n", + "そして測定後、これらの2つの状態のいずれかに量子ビットがあることが保証されます。 QiskitはZ基底でのみ測定できるため、X基底で測定するにはアダマールゲートを使用して独自に作成する必要があります。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# X測定関数を作成します。\n", + "def x_measurement(qc, qubit, cbit):\n", + " \"\"\"Measure 'qubit' in the X-basis, and store the result in 'cbit'\"\"\"\n", + " qc.h(qubit)\n", + " qc.measure(qubit, cbit)\n", + " return qc\n", + "\n", + "initial_state = [1/sqrt(2), -1/sqrt(2)]\n", + "# 量子ビットを初期化して測定します。\n", + "qc = QuantumCircuit(1,1)\n", + "qc.initialize(initial_state, 0)\n", + "x_measurement(qc, 0, 0) # measure qubit 0 to classical bit 0\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以前2つのHゲートの間にZゲートを挟むことでXゲートを作成できることを確認しました。\n", + "\n", + "$$ X = HZH $$\n", + "\n", + "これをZ基底に作用させると、Hゲートは量子ビットをX基底に変換し、ZゲートはX基底にNOTを作用させ、最後のHゲートがZ基底を返します。\n", + "これは行列を掛け合わせることで確かめられます:\n", + "$$ HZH=\\frac{1}{\\sqrt{2}}\\begin{bmatrix} 1 & 1\\\\ 1 & -1\\end{bmatrix} \\begin{bmatrix} 1 & 0\\\\ 0 & -1\\end{bmatrix} \\frac{1}{\\sqrt{2}} \\begin{bmatrix} 1 & 1 \\\\ 1 & -1\\end{bmatrix} \n", + "= \\begin{bmatrix} 0 & 1 \\\\ 1 & 0\\end{bmatrix} = X $$\n", + "\n", + "これと同じ論理に従って、測定前にX基底をZ基底へと変換することで、X測定を作りました。\n", + "\n", + "この測定処理は処理系に応じて異なった影響を及ぼしうるので(例えば、ある処理系では測定後にはいつも$|0\\rangle$を返し、一方で他の処理系では測定された状態のままにする)、処理後の量子ビットは未定義であり、もう一度使うためにはリセットする必要があります。\n", + "\n", + "なぜアダマールゲートによってZ基底での状態をX基底で測定できるのかについて、異なる観点から考えてみましょう。仮にX基底で測定したい量子ビットが(正規化された)状態$a|0\\rangle + b|1\\rangle$になっているとします。これをX基底で測定するには、まずこの状態を$|+\\rangle$と$|-\\rangle$の線形結合で表します。\n", + "$|0\\rangle = \\frac{|+\\rangle + |-\\rangle}{\\sqrt{2}}$と$|1\\rangle = \\frac{|+\\rangle - |-\\rangle}{\\sqrt{2}}$の関係を使うと、\n", + "状態は$\\frac{a+b}{\\sqrt{2}}|+\\rangle + \\frac{a-b}{\\sqrt{2}}|-\\rangle$となります。よって、X基底で確率の振幅を観測するには、Z基底で表現された状態ベクトルにアダマール行列を作用させればよいということが分かります。\n", + "\n", + "それでは、結果を見てみましょう。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAEyCAYAAACYgYvRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAYSUlEQVR4nO3df7BcZZ3n8fcXIiImKEmGkJsLYgiluwkI2jiAF4iWWRasQgVLoNBMljFZ4khEyp3BWmAmLOgMjiyssyxDZkoIOrOMuKPrGCAsEkNBuPEmM5EfbpIaIGvCzQ0ZohmHkAB+94/uZHub++PppO+9Te77VdV1u5/nOU9/zz/55PQ55zmRmUiSpKEdMtoFSJL0ZmFoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFxo12AaNp8uTJefzxx492GZKkNrJmzZrtmflb/fWN6dA8/vjj6enpGe0yJEltJCI2DdTnz7OSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpnQQuvzyyzn66KOZNWtWv/2ZyaJFi5gxYwYnn3wya9eu3dd39913c+KJJ3LiiSdy991372tfs2YNJ510EjNmzGDRokVk5rDvh9RuDE3pIDRv3jweeOCBAfvvv/9+Nm7cyMaNG7nzzjtZuHAhAC+99BKLFy+mu7ub1atXs3jxYnbs2AHAwoULWbJkyb7tBptfOlgZmtJB6Oyzz2bixIkD9v/gBz9g7ty5RASnn346v/zlL+nt7eXBBx9kzpw5TJw4kaOOOoo5c+bwwAMP0Nvby86dOzn99NOJCObOncv3v//9kdshqU0YmtIYtGXLFo499th9nzs7O9myZcug7Z2dnW9ol8YaQ1OSpEKGpjQGTZs2jV/84hf7Pm/evJlp06YN2r558+Y3tEtjjaEpjUEXXHABS5cuJTN54okneMc73sHUqVM599xzWb58OTt27GDHjh0sX76cc889l6lTp3LkkUfyxBNPkJksXbqUj3/846O9G9KIGzfaBUhqvUsvvZQVK1awfft2Ojs7Wbx4Ma+++ioAV1xxBeeffz7Lli1jxowZHHHEEXzrW98CYOLEiVx33XWcdtppAFx//fX7Lii6/fbbmTdvHrt27eK8887jvPPOG52dk0ZRjOV7rSqVSvb09Ix2GZKkNhIRazKz0l+fP89KklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSo0oqEZEWdHxP+MiC0RkRExr2CbkyLiJxGxq7bd9RERDWMuiohnImJ37e8nh20nJElj1kgfaY4HngK+COwaanBEHAk8BPQBp9W2+w/A1XVjzgDuBb4DnFL7+92I+O0W1y5JGuNGdO3ZzFwGLAOIiLsKNrkMOAL4nczcBTwVEe8Fro6IW7K6BuBVwCOZeVNtm5si4sO19ktbuweSpLGs3c9pngE8WgvMvR4EOoDj68Ysb9juQeDMYa9OkjSmtPtTTo4BNje09dX1PVf729fPmGP6mzAiFgALADo6OlixYgUA06dPZ8KECaxbtw6ASZMmMXPmTFauXAnAuHHj6OrqYu3atezcuROASqVCX18ff/zDEw5kHyVJLXDDxb2sX78eqD4ztrOzk+7ubgDGjx9PpVJh1apV7N69G4Curi42bNjAtm3bAJg1a9a+voGM2lNOIuLXwBcy865BxiwHNmfm5XVtxwGbgDMzc1VE7AE+l5lL68bMBZZk5lsHq6FVTzmZf+sBTyFJOkBLrmrNPG/mp5xsBaY0tE2p6xtszFYkSWqhdg/NVcBZEXF4Xdsc4AXg+boxcxq2mwM8PuzVSZLGlJG+T3N8RJwSEafUvvu42ufjav1fi4iH6zb5K+Bl4K6ImBURFwLXAHuvnAW4DfhIRFwTEe+NiK8AHwZuHaHdkiSNESN9pFkB/r72ehuwuPb+hlr/VGDfVTWZ+SuqR40dQA/wX4FvALfUjXkcuASYB/wMmAtcnJndw7srkqSxZqTv01wBxCD98/ppexI4e4h57wPuO8DyJEkaVLuf05QkqW0YmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUqKnQjIhDIuKQus/HRMTnIuJDrS9NkqT20uyR5o+AKwEiYjzQA3wdWBERc1tcmyRJbaXZ0KwAP669vxDYCRwNzAe+XDJBRHw+Ip6LiFciYk1EnDXI2LsiIvt5/UvdmNkDjHlvk/smSdKgmg3N8cAva+//DfC3mfkq1SA9YaiNI+Ji4Dbgq8CpwOPA/RFx3ACbfBGY2vB6FvibfsbObBi3sWiPJEkq1Gxo/h/gQxHxduBc4KFa+0Tg5YLtrwbuyswlmfnzzLwS6AUW9jc4M3+VmVv3vqgG83RgST/Dt9WPzczXm9w3SZIG1Wxo3gLcA2wGtgAra+1nA08OtmFEHAZ8AFje0LUcOLPw++cDT2fm4/309UREb0Q8HBEfLpxPkqRi45oZnJl/HhFrgGOBhzLzN7WufwSuG2LzycChQF9Dex/w0aG+OyLeAXwa+EpD194j1Z8ChwGfBR6OiHMy89F+5lkALADo6OhgxYoVAEyfPp0JEyawbt06ACZNmsTMmTNZubL6/4Jx48bR1dXF2rVr2blzJwCVSoW+vj4KfpmWJA2z3t5e1q9fD8C0adPo7Oyku7sbgPHjx1OpVFi1ahW7d+8GoKuriw0bNrBt2zYAZs2ata9vIJGZw7gLdV8U0UH16PSczFxZ1349cFlmvmeI7X8P+AbQkZkvDTF2GfBaZl4w2LhKpZI9PT2luzCg+bce8BSSpAO05KrWzBMRazKz0l9f04sb1K5+fToiXo6I6bW2P4iITw+x6XbgdWBKQ/sUYGvBV88HvjdUYNZ0AycWjJMkqVizixtcBVwL3AlEXdcLwBcG2zYz9wBrgDkNXXOoXkU72Pd+EHgf/V8A1J9TqP5sK0lSyzR1ThO4ApifmT+KiBvr2tdSveVjKLcA90TEauCx2nwdwB0AEbEUIDMbF0pYAGzMzBWNE9aC/HngaarnND8DfAK4qHCfJEkq0mxovgt4qp/2V4G3DbVxZt4bEZOoHq1Orc11fmZuqg15w/2aETEBuAS4YYBpD6O6KlEnsItqeH4sM5cNVY8kSc1oNjSfBd4PbGpoPx94pmSCzLwduH2Avtn9tP0z1UUVBprvZuDmku+WJOlANBuafwr8WUQcQfWc5hkR8Vng94HLW12cJEntpNn7NL8VEeOoLoN3BNWFDl4AFmXmvcNQnyRJbaPZI00ycwmwJCImA4dk5rbWlyVJUvtpOjT3ysztrSxEkqR2N2RoRsTPqK7isyMingQGXEIoM09uZXGSJLWTkiPN7wG7696PzLp7kiS1mSFDMzMX173/o2GtRpKkNtbsMno/joh39tN+ZET8uGVVSZLUhppdsH021RV4Gh0OnHXA1UiS1MaKrp6NiPfXfTw5IuqfNHIocC7Vx35JknTQKr3lpIfqBUAJLO+nfxdwZauKkiSpHZWG5rupLpv3LPBB4MW6vj3Atsx8vcW1SZLUVopCs+4pJE0/tFqSpINFyeIGFwI/zMxXa+8HlJn/o2WVSZLUZkqONO8DjgG21d4PJKleFCRJ0kGpZHGDQ/p7L0nSWGMISpJUqPScZhHPaUqSDmal5zRLeE5TknRQa+qcpiRJY5mBKElSIe/TlCSpkPdpSpJUyPs0JUkqZAhKklSo6dCMiPdHxNKI6Km97ml43qYkSQelpkIzIi4DfgpMBZbVXlOA1RHxmdaXJ0lS+yh9nuZeNwHXZeZX6xsj4ivAjcC3W1WYJEntptmfZ38L+Jt+2r8LHH3g5UiS1L6aDc1HgNn9tM8GfnKgxUiS1M6aXbD9fuBrEVEBnqi1nQ5cCPxRy6uTJKmN7O+C7Qtqr3rfBG4/4IokSWpTLtguSVIhA1GSpELN3nJCRBwFnAccBxxW35eZN7SoLkmS2k5ToRkRpwM/AnZTvf1kC9WFDnYDzwOGpiTpoNXsz7NfB74DTANeAT5C9YizB/iT1pYmSVJ7aTY0Twb+LDMTeB14a2b2AX+At5xIkg5yzYbmnrr3fcC7au9/DXS0pCJJktpUsxcCrQVOAzYAK4AbI2IK8BngZ60tTZKk9tLskeZ/BF6ovb8WeJHqogZH8cbFDiRJOqg0daSZmT1171+keuuJJEljQtP3aQJExAnAv6p9fCYzn21dSZIktadm79OcBPwlcAHwm//XHH8HXJ6Z/9Ti+iRJahvNntP8C2AGcBZweO11NvBuYElrS5Mkqb00G5rnAvMz87HMfK32egz497W+IUXE5yPiuYh4JSLWRMRZg4ydHRHZz+u9DeMuiohnImJ37e8nm9wvSZKG1Gxovgj8Sz/tLwND/jQbERcDtwFfBU4FHgfuj4jjhth0JtXl+va+NtbNeQZwL9WVik6p/f1uRPz2UPVIktSMZkPzBuDWiJi2t6H2/huUrTt7NXBXZi7JzJ9n5pVAL7BwiO22ZebWutfrdX1XAY9k5k21OW+ieg/pVcV7JUlSgSEvBIqIJ4Gsa3o38HxEbKl93rsO7dFUz3kONM9hwAeAP23oWg6cOUQZPRHxVuAZ4MbMfKSu7wyq94rWexD4whBzSpLUlJKrZ+9r0XdNBg6luvxevT7gowNss/co9KdUH0P2WeDhiDgnMx+tjTlmgDmP6W/CiFhAbSGGjo4OVqxYAcD06dOZMGEC69atA2DSpEnMnDmTlStXAjBu3Di6urpYu3YtO3fuBKBSqdDX1wecMOTOS5KGV29vL+vXrwdg2rRpdHZ20t3dDcD48eOpVCqsWrWK3bt3A9DV1cWGDRvYtm0bALNmzdrXN5Corr0+/CKig+qjxM7JzJV17dcDl2XmewrnWQa8lpkX1D7vAT6XmUvrxswFlmTmWwebq1KpZE9Pz2BDisy/9YCnkCQdoCVXtWaeiFiTmZX++vZ3cYOPAP+a6s+2T2fmioLNtlN9MsqUhvYpwNYmvr4buKTu89YWzClJ0pCauhAoIqZFxGrgIaqPA7uG6s+l3bUjyQFl5h5gDTCnoWsO1atoS51C9WfbvVa1YE5JkobU7JHmf6F6tDgjM58DiIjpwLdrfZ8aYvtbgHtqwfsYcAXVR4rdUZtrKUBmzq19vgp4Hnia6jnNzwCfAC6qm/M2YGVEXAN8H/gk8GGgq8l9kyRpUM2G5hxg9t7ABMjMZyNiEfDwUBtn5r21pfiupXq/5VPA+Zm5qTak8X7Nw4CvA53ALqrh+bHMXFY35+MRcQlwI9XbXv4RuDgzu5vcN0mSBrU/5zT7u3Ko+GqizLwduH2AvtkNn28Gbi6Y8z5ad5WvJEn9anZxg4eBb0bEsXsbaqv53ErBkaYkSW9mzYbmIuDtwLMRsSkiNlH9OfTttT5Jkg5azf48+0/AB4HZwN5F03+emf+rlUVJktSOikMzIg4FfgW8LzMfonrbiSRJY0bxz7O1RdI3Ub2iVZKkMafZc5r/CfjjiJg8HMVIktTOmj2n+WWqTznZEhGbaXi2Zmae3KrCJElqN82G5n1U78mMYahFkqS2VhSaEXEE1ZV5PgG8heo9mVdm5vbhK02SpPZSek5zMTAP+BHw11Sff/nfhqkmSZLaUunPsxcCv5uZ/x0gIr4DPBYRh9auqpUk6aBXeqR5LPDo3g+ZuRp4jeoTSiRJGhNKQ/NQYE9D22vs50OsJUl6MyoNvQC+HRG769oOB5ZExMt7GzLzglYWJ0lSOykNzbv7aft2KwuRJKndFYVmZv674S5EkqR21+wyepIkjVmGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUaMRDMyI+HxHPRcQrEbEmIs4aZOyFEbE8Il6MiH+OiO6IuKBhzLyIyH5ehw//3kiSxpIRDc2IuBi4DfgqcCrwOHB/RBw3wCbnAD8GPlYbvwz4236C9mVgav0rM19p/R5IksaycSP8fVcDd2XmktrnKyPi3wILga80Ds7MLzY0LY6IjwGfAB79/4fm1mGoV5KkfUbsSDMiDgM+ACxv6FoOnNnEVBOAHQ1tb4uITRGxOSL+LiJOPYBSJUnq10geaU4GDgX6Gtr7gI+WTBARvwd0AvfUNa8HLgfWUQ3ULwKPRcT7MnNjP3MsABYAdHR0sGLFCgCmT5/OhAkTWLduHQCTJk1i5syZrFy5EoBx48bR1dXF2rVr2blzJwCVSoW+vj7ghJLyJUnDqLe3l/Xr1wMwbdo0Ojs76e7uBmD8+PFUKhVWrVrF7t27Aejq6mLDhg1s27YNgFmzZu3rG0hk5jDuQt0XRXQAW4BzMnNlXfv1wGWZ+Z4htr+IalhenJk/HGTcocA/AI9k5qLB5qxUKtnT01O+EwOYf+sBTyFJOkBLrmrNPBGxJjMr/fWN5IVA24HXgSkN7VOAQc9HRsSnqAbm3MECEyAzXwd6gBP3v1RJkt5oxEIzM/cAa4A5DV1zqF5F26+I+DTVwJyXmfcN9T0REcDJQO/+VytJ0huN9NWztwD3RMRq4DHgCqADuAMgIpYCZObc2udLqAbml4GVEXFMbZ49mflSbcwfAk8AG4EjgUVUQ3PhCO2TJGmMGNHQzMx7I2IScC3V+ymfAs7PzE21IY33a15BtcZba6+9fgLMrr1/J3AncAzwK+DvgbMzc3XLd0CSNKaN9JEmmXk7cPsAfbMH+zzANl8CvtSK2iRJGoxrz0qSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYUMTUmSChmakiQVMjQlSSpkaEqSVMjQlCSpkKEpSVIhQ1OSpEKGpiRJhQxNSZIKGZqSJBUyNCVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmFDE1JkgoZmpIkFTI0JUkqZGhKklTI0JQkqZChKUlSIUNTkqRChqYkSYVGPDQj4vMR8VxEvBIRayLirCHGn1Mb90pEPBsRVxzonJIk7Y8RDc2IuBi4DfgqcCrwOHB/RBw3wPh3A8tq404FvgZ8MyIu2t85JUnaXyN9pHk1cFdmLsnMn2fmlUAvsHCA8VcAL2TmlbXxS4C7gS8fwJySJO2XEQvNiDgM+ACwvKFrOXDmAJud0c/4B4FKRLxlP+eUJGm/jOSR5mTgUKCvob0POGaAbY4ZYPy42nz7M6ckSftl3GgXMNIiYgGwoPbx1xGxfjTrkdrIZGD7aBch7a+/+FLLpnrXQB0jGZrbgdeBKQ3tU4CtA2yzdYDxr9Xmi2bnzMw7gTuLq5bGiIjoyczKaNchtbMR+3k2M/cAa4A5DV1zqF7x2p9VA4zvycxX93NOSZL2y0j/PHsLcE9ErAYeo3p1bAdwB0BELAXIzLm18XcAX4iIW4E/Bz4EzAMuLZ1TkqRWGdHQzMx7I2IScC0wFXgKOD8zN9WGHNcw/rmIOB/4z1RvIXkBWJSZ32tiTkllPG0hDSEyc7RrkCTpTcG1ZyVJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamNMZExJEREaNdh/RmZGhKY8/Xgcsj4qSIOLK/AbV7nyU18D5NaQyJiEuB7wA7gZeAh4AHgJ9RfXbtroh4G/DXwHWZ+eSoFSu1IUNTGkMiYgnVhxzcDFwI/A5wArAeWAY8DLwHuC0zDxutOqV2ZWhKY0REjAN+HzgyM6+pa58JzAc+BRwOvBO4OzN/dzTqlNqZoSmNIRFxFDAlM/93RBwGvJp1/whExMVUf5p9f2b+wyiVKbWtMfcQamksy8wdwI7a+z0AEXEI1f9Avw4cCbxiYEr9MzSlMS4zf1P3cQLwh6NVi9Tu/HlW0j4R8Rbg9YYglVRjaEqSVMjFDSRJKmRoSpJUyNCUJKmQoSlJUiFDU5KkQoamJEmF/i8c9Z8O/G5jcwAAAABJRU5ErkJggg==", + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qobj = assemble(qc) # 実行可能なQobjに回路をアセンブルします。\n", + "counts = sim.run(qobj).result().get_counts() # シミュレーションを行い、状態ベクトルを返します。\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$|-\\rangle$の状態で量子ビットを初期化しましたが、測定後、量子ビットが$|1\\rangle$の状態に飛び移ることがわかります。 セルを再度実行しても、同じ結果が表示されます。というのも状態$|-\\rangle$は、X-測定の標準基底であり、何度測定しても同じ結果となるからです。\n", + "\n", + "### 練習問題\n", + "1.\t$|+\\rangle$状態で量子ビットを初期化する場合、$|-\\rangle$状態でそれを測定する確率はどれくらいですか?\n", + "2.\tQiskitを使用して、$|+\\rangle$と$|-\\rangle$の状態で$|0\\rangle$量子ビットを測定する確率を表示してください。(**ヒント:** `.get_counts()`および `plot_histogram()`を使用することができます。)\n", + "3.\tY基底で測定する関数を作成してみてください。\n", + "\n", + "さまざまな基底で測定することで、ハイゼンベルクの有名な不確実性原理を見ることができます。 Z基底で状態を測定する確実性があると、X基底で特定の状態を測定する確実性がすべて失われ、その逆も同様です。 よくある誤解は、不確実性は機器の制限によるものであるというものですが、ここでは不確かさが実際に量子ビットの性質の一部であることがわかります。\n", + "\n", + "たとえば、量子ビットを$|0\\rangle$状態にした場合、Z基底での測定は$|0\\rangle$であることが確実ですが、X基底での測定は完全にランダムです! 同様に、量子ビットを$|-\\rangle$状態にした場合、X基底での測定は$|-\\rangle$であることが確実ですが、Z基底での測定は完全にランダムになります。\n", + "\n", + "より一般的には、 _量子システムの状態がどのようなものであっても、特定の結果をもたらす測定が常に存在します。_\n", + "\n", + "Hゲートの導入により、いくつかの興味深い現象を探ることができましたが、量子操作にはまだ非常に制限があります。 ここで、新しいタイプのゲートを紹介しましょう。\n", + "\n", + "## 5. Pゲート \n", + "\n", + "Pゲート(位相ゲート)は _パラメータ化されたゲート_ です。つまり、何をすべきかを正確に伝えるには数字($\\phi$)が必要です。Pゲートは、Z軸を中心に$\\phi$の回転を実行します。 以下のような行列です。\n", + "\n", + "$$\n", + "P(\\phi) = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{i\\phi} \\end{bmatrix}\n", + "$$\n", + "\n", + "$\\phi$は実数です。\n", + "\n", + "以下のウィジェットを使用してPゲートを体感してみてください。スライダーを使用して$\\phi$を指定してください。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "05da968cc5ad4a0383bd8733eddc19e7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='X', layout=Layout(height='3em', width='3em'), style=ButtonStyle()), Button(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9d20d035d47145acbf69849bf7226afb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01 \\x00\\x00\\x01 \\x08\\x06\\x00\\x00\\x00\\x14\\x83\\xae\\x8…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# このセルのコードを実行してウィジェットを表示します。\n", + "from qiskit_textbook.widgets import gate_demo\n", + "gate_demo(gates='pauli+h+p')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qiskitでは、`p(phi,qubit)`を使用してPゲートを指定します。" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHMAAABOCAYAAAATpymVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEMUlEQVR4nO3df0jcdRzH8efdKWooDDmGzsXo8gd4dLd5IyhsN/cDhCDsh5WKhUgDs0LcX9Ec+2MTEkd/DOcfETiijHRHMpBiK+8iFMJJkhK7YUtnuXk1HLuwqXf2R0uwLTx/jM/Xt+8H+IeneC94cp877+S0LS4uLqJEsJseoDaOxhREYwqiMQXRmIJoTEE0piAaUxCNKYjGFERjCqIxBdGYgmhMQTSmIBpTEI0piMYURGMKojEF0ZiCaExBNKYgGlMQjSmIxhREYwqSZHqAKVe+gTvTZq47YzsUHNj4n7tlY96ZhplJ0ys2lh6zgmhMQTSmIBpTkC37AGgtjrbv56fxARyOZOx2B9mZLqoOHuMZz4umpwF6y1y1qkNNXDgVJXDiD0p2V3Dyk1eYjIRNzwI05po5HEk89/SbxOMxrk39aHoOoDHXbH5hjp7+NpIcybh2eE3PASwYMx6P09raSl5eHqmpqXi9XkKhEAUFBRw5csT0PD79+hRlTduoPLmTgdEejr92nhxnrulZgAUfANXW1hIIBGhqasLn89Hf309FRQWRSITGxkbT86g8+B5Vh46ZnvFAlorZ2dlJR0cHwWAQv98PQElJCUNDQwQCAYqKigwvtDZLHbPNzc2UlpYuhfxXbm4uycnJeDweQ8s2B8vEnJycZGRkhPLy8vu+NjExgdvtJiUlxcCyzcNSMQGysrKWXT47O0soFEr4iLXZbAl9hELBVW88XRfckPvLUCiY8M7VsExMp9MJQDi8/BfwlpYWpqam8Pl8JmZtKpZ5AORyufB4PDQ3N5OZmUlOTg7d3d309vYCJBwz0fd1HPzM3OuZfv9+Fts3/v0nLXPLtNvtdHV14Xa7qauro6amBqfTSX19PQ6HQx/8JMAyt0yA/Px8+vr6ll1WXV1NYWEhaWlphlZtHpa5Zf6fwcFBvb9MkKVjRqNRwuGw5Z4s+P32r5ztaVj6/Py3H9DQVmxu0D2WOmb/Kz09nVgsZnrGfS6HL+LLPwzA3MJdxn77weygeywd0wqGx4KcOPc8rmwvN25d4/Edu8l4JJO3ys4A8OX3H3F47+uc++q44aUWP2at4InH9lHw6JOcrgvicfl554Wz/DX3J2kp6SzE5hkeC7In9yH8EewaaMwVTN36mexMFwCR29eZiUaWXr+8dPljDuypNDlvGY25gvEbo+zKchOLx7DZ7AxdvYgv75/7y+uRK1wYaOfdD0sZvznKF9+dMbpV7zNX8MvNUQp3PcX8wl1motMMXb3ES/uOAvDGs+8vfV9DWzFlxW+bmgmAbav+X5O1Pp0XGv4cv/fldV33tp2w99V1/YgH0mN2ldYb8mHassdsxnZ5171lj1mJ9JgVRGMKojEF0ZiCaExBNKYgGlMQjSmIxhREYwqiMQXRmIJoTEE0piAaUxCNKYjGFERjCvI33woPFvgLyUgAAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.p(pi/4, 0)\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ZゲートはPゲートの特殊なケースで、$\\phi=\\pi$であることに気付くでしょう。 実際、この章で言及する3つの一般的に参照されるゲートがあり、それらはすべてPゲートの特殊なケースです。\n", + "\n", + "## 6. I、S、Tゲート \n", + "\n", + "### 6.1 Iゲート \n", + "\n", + "まずIゲート(別名「Idゲート」または「Identityゲート」)があります。 これは単に何もしないゲートです。 その行列は単位行列です。\n", + "\n", + "$$\n", + "I = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1\\end{bmatrix}\n", + "$$\n", + "\n", + "回路内の任意の場所にIゲートを適用しても、量子ビットの状態には影響がないため、これは何もしないゲートと見なすこともできます。 このゲートの存在理由は主に2つの理由があります。1つは、計算でよく使用されるためです。たとえば、Xゲートが自分自身の逆行列であることを証明します。\n", + "\n", + "$$ I = XX $$\n", + "\n", + "2つ目は、実際のハードウェアを検討するときに、「何もしない」または「なし」の操作を指定することがしばしば役立つためです。\n", + "\n", + "#### 練習問題\n", + "1. Iゲートの固有状態は何でしょうか。\n", + "\n", + "### 6.2 Sゲート \n", + "\n", + "次に言及するゲートはSゲート($\\sqrt{Z}$ゲートとも呼ばれます)です。これは、$\\phi=\\pi/2$のPゲートです。ブロッホ球の周りを1/4回転します。 この章でこれまでに紹介したすべてのゲートとは異なり、Sゲートは自分自身の逆行列では **ない** ことに注意してください。 その結果、Sゲート(「Sダガー」、「Sdg」、または$\\sqrt{Z}^\\dagger$ゲートも同様)というものがあります。Sゲートは$\\phi=-\\pi/2$のPゲートです。\n", + "\n", + "$$ S = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{\\frac{i\\pi}{2}} \\end{bmatrix}, \\quad S^\\dagger = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{-\\frac{i\\pi}{2}} \\end{bmatrix}$$\n", + "\n", + "「$\\sqrt{Z}$ゲート」という名前は、2つの連続して適用されたSゲートが1つのZゲートと同じ効果を持つという事実によるものです。\n", + "\n", + "$$ SS|q\\rangle = Z|q\\rangle $$\n", + "\n", + "この表記法は、量子計算全体で共通です。\n", + "\n", + "QiskitでSゲートを追加するには、" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKAAAABOCAYAAACngR3fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEeklEQVR4nO3dfUjcdQDH8c/deTvPhy3zxgy3KPFheOwMb5HQwymjYQVBC2kG1sQyD1mE//SEELXuDydUK4Jtzcw/smFdDTYagXjXSmqZjZCFRnswTfIyN3M5muf1x9A0l/x0s8/v5ucF98+J3gd9f++np6AlFovFIEJiZQ+QlU0BCpUCFCoFKFQKUKgUoFApQKFSgEKlAIVKAQqVAhQqBShUClCoFKBQKUChUoBCpQCFSgEKlQIUKgUoVApQqBSgUClAoVKAQqUAhUoBCpUCFKoE9gCWYBcwOMp57Mw0YNvmpb0va/fVbF7Iig1wcBT4aZi9YvHidfd/0SVYqBSgUClAoVKAQqUAhUoBCpUCXMHGImfw2d4d1A0KUKhMF+DU1BQaGxuRk5ODxMREFBQUIBwOIy8vD9XV1ex5OD98Ckf2lGF/bQberkrBgac34PBrDyE6+Rd72qKE3tuJT9/ajrPfH8WHu4rx6+lvKTtM95uQqqoqBINB1NfXw+v1orOzE+Xl5YhEIqirq2PPw6Hd9+PmTVvx2O5erHKuxvjvgzh94jDM9N8uzg+fwhcfPItfeo/h0sVxOJLTsO7Wzbhv50HYElYBAIoffxNjkTP4KvgStj7VTNtqqgBbW1vR3NyMUCgEn88HACgpKUF3dzeCwSAKCwup+yb+GMHoUC8eeCYIR9IaAEBq+np4ttRQd/1bPBySaaa6BAcCAZSWls7ENy07Oxt2ux0ej4e07DJnajrS17vR/s4T+OFYC0YGT5ruizp9SDZtqYEjaQ0sFsvMIUmwO9jz5jFNgAMDA+jp6UFZWdm8t/X398PtdsPh4H8CH34xhMyNxfju6Ot4/4XbsL92Hb7++BXThBgPh2Q2UwUIABkZGXPun5iYQDgcNnz5tVgshm7hcGhJO52pLtz5SACPvtqNmn3ncNf2Bhz/5GWc/Pxdwx8jHA4Z3rmU3UYPic2eiLSbNi7LZqNME6DL5QIA9PX1zbm/oaEBQ0ND8Hq9jFkLsjuSkH/PDrg2eBA5e4I9Z4bRQ5J8QwZuf/A50srLTBNgVlYWPB4PAoEAWlpa0N7eDr/fj6amJgAwHGAsFjN08/mKF73x4oVRfHnwefz2cw+ik5cwFZ3Ej8c/wshADzLz7jb8cXy+YsM7r3b3tToki91slGkCtFqtaGtrg9vtht/vR2VlJVwuF2pra2Gz2eg/gACAzbYKf44N48gb27C35kbs86/FN4d2wVexBzl3zP/eleFaHZL/i6lehsnNzUVHR8ec+yoqKpCfnw+n00la9Q97YjLuffIAe8aCZh+SC+eGYLUmYPXaW0x1SGYzVYBX0tXVhaKiIvaMuBEPh2Q201yCr2R8fBx9fX30F6Bl+Zj6GTAlJQXRaJQ9Q5aRqZ8B5fqnAIVKAQqVAhQqBShUClCoFKBQmfp1wOWUmRafj83avVyPa4mZ+a8V5bqnS7BQKUChUoBCpQCFSgEKlQIUKgUoVApQqBSgUClAoVKAQqUAhUoBCpUCFCoFKFQKUKgUoFApQKH6GzwvyzL75/7eAAAAAElFTkSuQmCC", + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.s(0) # Sゲートを量子ビット0に適用します。\n", + "qc.sdg(0) # Sdgゲートを量子ビット0に適用します。\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.3 Tゲート \n", + "\n", + "Tゲートは非常に一般的に使用されるゲートであり、$\\phi=\\pi/4$のPゲートです。\n", + "\n", + "$$ T = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{\\frac{i\\pi}{4}} \\end{bmatrix}, \\quad T^\\dagger = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{-\\frac{i\\pi}{4}} \\end{bmatrix}$$\n", + "\n", + "Sゲートと同様に、Tゲートは$\\sqrt[4]{Z}$ゲートとしても知られています。\n", + "\n", + "Qiskitでは、" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKAAAABOCAYAAACngR3fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAADUElEQVR4nO3dT0iacQDG8UfLucB2EAmhsUOEjgQPeen2VqcuwS5CHYJFoxFtl4IxGMEu8yCsQxtEsYPsUmDIYNBhh+V76TLp1CVPkUKtIAYJMZa5U7HoD+9q7vlpzweCeEN8hK/vmyLoqlQqFYiQuNkD5HZTgEKlAIVKAQqVAhQqBShUClCoFKBQKUChUoBCpQCFSgEKlQIUKgUoVApQqBSgUClAoVKAQqUAhUoBCpUCFCoFKFQKUKgUoFApQKFSgEKlAIWqkT2AZeMrcLDLue/mFiDce73bsnbfZPNVbm2AB7vAjyJ7xd+r1d2X0SVYqBSgUClAoVKAQqUAhUoBCpUCvKV29jeRXHzMnqEAhcu4N6KPj48xPT2Nubk5FAoFhMNhzMzMYHR0FJZlYX5+nrKr/5Xv9PdfRz8BAJ5G7+mxz29K/33Tdb3/9BwbhW/4vr+JydluPO1/i9D9GGWLcQGOjIwgk8lgamoKsVgMq6urGBwcxN7eHiYmJmi7/gzsbfoJyuUjvBhI0fZcxskT5dmjd9jZ38THL6/pj8GoABcWFpBKpZDNZmFZFgCgp6cHa2tryGQy6OzsJC80X608UU4Y9T9gIpFAX1/faXwn2tvb4fF4EI1GScukWowJsFgsYn19HfF4/Nzftra2EIlE4PV6L7il1DKjAgSAYDB45vjh4SFs23Z8+XW5XI5+bDv7rx+CY7addbyzWrvvNN7Fg5aHVdvslDEBBgIBAEA+nz9zPJlMYnt7G7EY51VavfLfC2Kg9yV7hjkvQtra2hCNRpFIJOD3+9Ha2oqlpSUsLy8DgOMAnX73Ym6R97k6y+pGZfZ63xHJ2n2TzVcx5gzodruRTqcRiUQwNjaG4eFhBAIBjI+Po6GhQS9A6pQxZ0AACIVCWFlZOXNsaGgIHR0daGpqIq06bzL+gT2hbhgV4EVyuRy6urrYM2pSLTxRjLkEX6RUKiGfz+sN6Dpm9BnQ5/OhXC6zZ0gVGX0GlPqnAIVKAQqVAhQqBShUClCoFKBQGf0+YDU1t9TmfbN2V+t+XRWnHx8RqQJdgoVKAQqVAhQqBShUClCoFKBQKUChUoBCpQCFSgEKlQIUKgUoVApQqBSgUClAoVKAQqUAhUoBCtVvTPvOKE9xXGsAAAAASUVORK5CYII=", + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = QuantumCircuit(1)\n", + "qc.t(0) # Tゲートを量子ビット0に適用します。\n", + "qc.tdg(0) # Tdgゲートを量子ビット0に適用します。\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のウィジェットを使用して、この章でこれまでに紹介したすべてのゲートを試すことができます。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "740f8a4569894cc5aadc7e3a780b8d95", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(Button(description='I', layout=Layout(height='3em', width='3em'), style=ButtonSt…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fb59ef80d2064141b95876176d6be712", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01 \\x00\\x00\\x01 \\x08\\x06\\x00\\x00\\x00\\x14\\x83\\xae\\x8…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# このセルのコードを実行してウィジェットを表示します。\n", + "from qiskit_textbook.widgets import gate_demo\n", + "gate_demo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. 一般的なU3ゲート \n", + "\n", + "前に見たように、I、Z、S、Tゲートはすべて、より一般的なPゲートの特殊なケースです。 同様に、U3ゲートは、すべての単一量子ビット量子ゲートの中で最も一般的です。 これは、次の形式でパラメータ化されたゲートです。\n", + "\n", + "$$\n", + "U_3(\\theta, \\phi, \\lambda) = \\begin{bmatrix} \\cos(\\theta/2) & -e^{i\\lambda}\\sin(\\theta/2) \\\\\n", + " e^{i\\phi}\\sin(\\theta/2) & e^{i\\lambda+i\\phi}\\cos(\\theta/2)\n", + " \\end{bmatrix}\n", + "$$\n", + "\n", + "この章のすべてのゲートは$U_3(\\theta,\\phi,\\lambda)$として指定できますが、あまりみかけません。\n", + "\n", + "Qiskitは、U2およびU1ゲートも提供します。これらは、$\\theta=0$および$\\theta=\\phi=0$であるU3ゲートの特定のケースです。U1ゲートはPゲートと同等であることがわかります。\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "U_3(\\tfrac{\\pi}{2}, \\phi, \\lambda) = U_2 = \\tfrac{1}{\\sqrt{2}}\\begin{bmatrix} 1 & -e^{i\\lambda} \\\\\n", + " e^{i\\phi} & e^{i\\lambda+i\\phi}\n", + " \\end{bmatrix}\n", + "& \\quad &\n", + "U_3(0, 0, \\lambda) = U_1 = \\begin{bmatrix} 1 & 0 \\\\\n", + " 0 & e^{i\\lambda}\\\\\n", + " \\end{bmatrix}\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "実際のIBM量子ハードウェアで実行する前に、すべての単一量子ビット操作は$U_1$、$U_2$、および$U_3$にコンパイルされます。 このため、 _物理ゲート_ と呼ばれることもあります。\n", + "\n", + "ここでは言及していませんが、可能なゲートの数は無限であり、これにはRxおよびRyゲートも含まれることは明らかです。 また、Z基底は、特別なことは何もないですが、標準の計算基底として選択されていることに注意してください。 そのため、SゲートとTゲートには名前がありますが、X基底とY基底におけるSやTに対応する名前はありません。(例:$\\sqrt{X}$と$\\sqrt[4]{Y}$)。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

    Version Information

    Qiskit SoftwareVersion
    qiskit-terra0.19.2
    qiskit-aer0.10.3
    qiskit-ignis0.7.0
    qiskit-ibmq-provider0.18.3
    qiskit0.34.2
    System information
    Python version3.8.8
    Python compilerMSC v.1928 64 bit (AMD64)
    Python buildtags/v3.8.8:024d805, Feb 19 2021 13:18:16
    OSWindows
    CPUs4
    Memory (Gb)15.877853393554688
    Thu Feb 17 03:10:54 2022 東京 (標準時)
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qiskit.tools.jupyter\n", + "%qiskit_version_table" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/ch-states/states-many-qubits.ipynb b/translations/ja/ch-states/states-many-qubits.ipynb new file mode 100644 index 0000000..51be3b3 --- /dev/null +++ b/translations/ja/ch-states/states-many-qubits.ipynb @@ -0,0 +1,246 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# States for Many Qubits" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We've already seen how to write down the state of a single qubit. Now we can look at how to do it when we have more than just one.\n", + "\n", + "Let's start by looking at bits. The state of a single bit is expressed as `0` or `1`. For two bits we can have `00`, `01`, `10` or `11`, where each digit tells us the state of one of the bits. For more bits, we just use longer strings of bit values, known as 'bit strings'.\n", + "\n", + "The conversion to qubits is quite straightforward: we simply put a $|$ and $\\rangle$ around bit strings. For example, to describe two qubits, both of which are in state $|0\\rangle$, we write $|00\\rangle$. The four possible bit strings for two bits are then converted into four orthogonal states, which together completely specify the state of two qubits: \n", + "\n", + "$$\n", + "|a\\rangle = a_{00}|00\\rangle+ a_{01}|01\\rangle+a_{10}|10\\rangle+ a_{11}|11\\rangle = \\begin{pmatrix} a_{00} \\\\\\\\ a_{01} \\\\\\\\ a_{10} \\\\\\\\ a_{11} \\end{pmatrix}.\n", + "$$\n", + "\n", + "As in the single-qubit case, the elements of this vector are complex numbers. We require the state to be normalized so that $\\langle a|a\\rangle = 1$, and probabilites are given by the Born rule \\($p_{00}^{zz} = |\\langle00|a\\rangle |^2$, etc\\)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When designing quantum software, there are times when we will want to look at the state of our qubits. This can be done in Qiskit using the 'statevector simulator'.\n", + "\n", + "For example, here is the state vector for a simple circuit on two qubits." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "\\begin{pmatrix}(0.5000000000000001+0j)\\\\(0.5+0j)\\\\(0.3536941345835999+0.353412590552683j)\\\\(0.35369413458359983+0.3534125905526829j)\\end{pmatrix}" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# set up circuit (no measurements required)\n", + "qc = QuantumCircuit(2)\n", + "qc.h(0)\n", + "qc.h(1)\n", + "qc.rz(3.14/4,1)\n", + "\n", + "# set up simulator that returns statevectors\n", + "backend = Aer.get_backend('statevector_simulator')\n", + "\n", + "# run the circuit to get the state vector\n", + "state = execute(qc,backend).result().get_statevector()\n", + "\n", + "# now we use some fanciness to display it in latex\n", + "from IPython.display import display, Markdown, Latex\n", + "def state2latex(state):\n", + " state_latex = '\\\\begin{pmatrix}'\n", + " for amplitude in state:\n", + " state_latex += str(amplitude) + '\\\\\\\\'\n", + " state_latex = state_latex[0:-2]\n", + " state_latex += '\\end{pmatrix}'\n", + " display(Markdown(state_latex))\n", + "\n", + "state2latex(state)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that Python uses $j$ to denote $\\sqrt{-1}$, rather than $i$ as we use." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The tensor product" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we have two qubits, with one in state $|a\\rangle = a_0 |0\\rangle + a_1 |1\\rangle$ and the other in state $|b\\rangle = b_0 |0\\rangle + b_1 |1\\rangle$, and we want to create the two-qubit state that describes them both. \n", + "\n", + "To see how to do this, we can use the Born rule as a guide. We know that the probability of getting a `0` is $| a_0 |^2$ for one qubit and $| b_0 |^2$ for the other. The probability of getting `00` is therefore $| a_0 |^2 | b_0 |^2 = | a_0 b_0 |^2$. Working backwards from this probability, it makes sense for the $|00\\rangle$ state to have the amplitude $a_{0}b_0$. Repeating this principle, the whole state becomes.\n", + "\n", + "$$\n", + "a_{0}b_0|00\\rangle+ a_{0}b_1|01\\rangle+a_{1}b_0|10\\rangle+ a_{1}b_1|11\\rangle.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exactly the result we would get when using the 'tensor product' [1], which is a standard method for combining vectors and matrices in a way that preserves all the information they contain. Using the notation of the tensor product, we can write this state as $|a\\rangle \\otimes |b\\rangle$.\n", + "\n", + "We also make use of the tensor product to represent the action of single-qubit matrices on these multiqubit vectors. For example, here's an $X$ that acts only on the qubit on the right:\n", + "\n", + "$$\n", + "I \\otimes X= \\begin{pmatrix} 1&0 \\\\\\\\ 0&1 \\end{pmatrix} \\otimes \\begin{pmatrix} 0&1 \\\\\\\\ 1&0 \\end{pmatrix} = \\begin{pmatrix} 0&1&0&0 \\\\\\\\ 1&0&0&0\\\\\\\\0&0&0&1\\\\\\\\0&0&1&0 \\end{pmatrix}, ~~~ I= \\begin{pmatrix} 1&0 \\\\\\\\ 0&1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "This was made by combining the $X$ matrix for the qubit on the right with the single-qubit identity operator, $I$, for the qubit on the left. The identity operator is the unique operator that does absolutely nothing to a vector. The two-qubit operation resulting from the tensor product allows us to calculate expectation values for x measurements of the qubit on the left, in exactly the same way as before." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Entangled states" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the tensor product we can construct matrices such as $X \\otimes X$, $Z \\otimes Z$, $Z \\otimes X$, and so on. The expectation values of these also represent probabilities. For example, for a general two qubit state $|a\\rangle$,\n", + "\n", + "$$\n", + "\\langle a|Z\\otimes Z|a\\rangle = P^{zz}_{0} - P^{zz}_{1}.\n", + "$$\n", + "\n", + "The $zz$ in $P^{zz}_{0}$ and $P^{zz}_{1}$ refers to the fact that these probabilities describe the outcomes when a z measurement is made on both qubits. A quantity such as $\\langle a|Z\\otimes X|a\\rangle$ will reflect similar probabilities for different choices of measurements on the qubits.\n", + "\n", + "The $0$ and $1$ of $P^{zz}_{0}$ and $P^{zz}_{1}$ refer to whether there are an even (for $0$) or odd (for $1$) number of ```1``` outcomes in the output. So $P^{zz}_{0}$ is the probability that the result is either ```00``` or ```11```, and $P^{zz}_{1}$ is the probability that the result is either ```01``` or ```10```.\n", + "\n", + "These multiqubit Pauli operators can be used to analyze a new kind of state, that cannot be described as a simple tensor product of two independent qubit states. For example,\n", + "\n", + "$$\n", + "|\\Phi^+\\rangle =\\frac{1}{\\sqrt{2}}\\left(|00\\rangle+|11\\rangle\\right).\n", + "$$\n", + "\n", + "This represents a quantum form of correlated state, known as an entangled state. The correlations can be easily seen from the fact that only the `00` and `11` outcomes are possible when making z measurements of both qubits, and so the outcomes of these measurements will always agree. This can also be seen from the fact that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " $$\n", + "\\langle \\Phi^+|Z\\otimes Z|\\Phi^+\\rangle = 1, \\quad \\therefore P^{zz}_{0} = 1 .\n", + "$$\n", + "\n", + "These aren't the only correlations in this state. If you use x measurements, you'd find that the results still always agree. For y measurements, they always disagree. So we find that $\\langle \\Phi^+|X\\otimes X|\\Phi^+\\rangle = 1$ and $\\langle \\Phi^+|Y\\otimes Y|\\Phi^+\\rangle = -1$. There are a lot of correlations in this little state!\n", + "\n", + "For more qubits, we can get ever larger multiqubit Pauli operators. In this case, the probabilities such as $P^{zz\\ldots zz}_{0}$ and $P^{zz\\ldots zz}_{1}$ are understood in the same way as for two qubits: they reflect the cases where the total output bit string consists of an even or odd number of ```1```s, respectively. We can use these to quantify even more complex correlations. \n", + "\n", + "The generation of complex entangled states is a neccessary part of gaining a quantum advantage. The use of large vectors and multiqubit correlation functions is therefore important if we want to mathematically analyze what our qubits are doing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[1] For more on tensor products, see:\n", + " Michael A. Nielsen and Isaac L. Chuang. 2011. *Quantum Computation and Quantum Information: 10th Anniversary Edition (10th ed.).* Cambridge University Press: New York, NY, USA." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/unique-properties-qubits.ipynb b/translations/ja/ch-states/unique-properties-qubits.ipynb new file mode 100644 index 0000000..9f4b2ae --- /dev/null +++ b/translations/ja/ch-states/unique-properties-qubits.ipynb @@ -0,0 +1,796 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Unique Properties of Qubits" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *\n", + "from qiskit.visualization import plot_histogram\n", + "%config InlineBackend.figure_format = 'svg' # Makes the images look nice" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You now know something about bits, and about how our familiar digital computers work. All the complex variables, objects and data structures used in modern software are basically all just big piles of bits. Those of us who work on quantum computing call these *classical variables.* The computers that use them, like the one you are using to read this article, we call *classical computers*.\n", + "\n", + "In quantum computers, our basic variable is the _qubit_: a quantum variant of the bit. These are quantum objects, obeying the laws of quantum mechanics. Unlike any classical variable, these cannot be represented by some number of classical bits. They are fundamentally different.\n", + "\n", + "\n", + "The purpose of this section is to give you your first taste of what a qubit is, and how they are unique. We'll do this in a way that requires essentially no math. This means leaving terms like 'superposition' and 'entanglement' until future sections, since it is difficult to properly convey their meaning without pointing at an equation.\n", + "\n", + "Instead, we will use another well-known feature of quantum mechanics: the uncertainty principle." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Heisenberg's uncertainty principle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The most common formulation of the uncertainty principle refers to the position and momentum of a particle: the more precisely its position is defined, the more uncertainty there is in its momentum, and vice-versa." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./images/heisenberg_xkcd.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a common feature of quantum objects, though it need not always refer to position and momentum. There are many possible sets of parameters for different quantum objects, where certain knowledge of one means that our observations of the others will be completely random.\n", + "\n", + "To see how the uncertainty principle affects qubits, we need to look at measurement. As we saw in the last section, this is the method by which we extract a bit from a qubit." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0)\n", + "\n", + "measure_z.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On the [Circuit Composer](https://quantum-computing.ibm.com/composer), the same operation looks like this.\n", + "\n", + "![A z measurement](images/uni1.png)\n", + "\n", + "This version has a small ‘z’ written in the box that represents the operation. This hints at the fact that this kind of measurement is not the only one. In fact, it is only one of an infinite number of possible ways to extract a bit from a qubit. Specifically, it is known as a *z measurement*.\n", + "\n", + "Another commonly used measurement is the *x measurement*. It can be performed using the following sequence of gates." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0)\n", + "measure_x.measure(0,0)\n", + "\n", + "measure_x.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Later chapters will explain why this sequence of operations performs a new kind of measurement. For now, you'll need to trust us.\n", + "\n", + "Like the position and momentum of a quantum particle, the z and x measurements of a qubit are governed by the uncertainty principle. Below we'll look at results from a few different circuits to see this effect in action.\n", + "\n", + "#### Results for an empty circuit\n", + "\n", + "The easiest way to see an example is to take a freshly initialized qubit." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_0 = QuantumCircuit(1)\n", + "\n", + "qc_0.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qubits are always initialized such that they are certain to give the result `0` for a z measurement. The resulting histogram will therefore simply have a single column, showing the 100% probability of getting a `0`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_0 + measure_z\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we instead do an x measurement, the results will be completely random." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_0 + measure_x\n", + "\n", + "print('Results for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the reason why the results are not split exactly 50/50 here is because we take samples by repeating the circuit a finite number of times, and so there will always be statistical noise. In this case, the default of `shots=1024` was used." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Results for a single Hadamard\n", + "\n", + "Now we'll try a different circuit. This has a single gate called a Hadamard, which we will learn more about in future sections." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_plus = QuantumCircuit(1)\n", + "qc_plus.h(0)\n", + "\n", + "qc_plus.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see what effect it has, let's first try the z measurement." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_plus + measure_z\n", + "\n", + "qc.draw()\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we see that it is the results of the z measurement that are random for this circuit.\n", + "\n", + "Now let's see what happens for an x measurement." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_plus + measure_x\n", + "\n", + "print('Results for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the x measurement, it is certain that the output for this circuit is `0`. The results here are therefore very different to what we saw for the empty circuit. The Hadamard has lead to an entirely opposite set of outcomes.\n", + "\n", + "#### Results for a y rotation\n", + "\n", + "Using other circuits we can manipulate the results in different ways. Here is an example with an `ry` gate." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_y = QuantumCircuit(1)\n", + "qc_y.ry( -3.14159/4,0)\n", + "\n", + "qc_y.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will learn more about `ry` in future sections. For now, just notice the effect it has for the z and x measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Results for z measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_y + measure_z\n", + "\n", + "print('Results for z measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we have a case that we have not seen before. The z measurement is most likely to output `0`, but it is not completely certain. A similar effect is seen below for the x measurement: it is most likely, but not certain, to output `1`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for x measurement:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc = qc_y + measure_x\n", + "\n", + "print('\\nResults for x measurement:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results hint at an important principle: Qubits have a limited amount of certainty that they can hold. This ensures that, despite the different ways we can extract outputs from a qubit, it can only be used to store a single bit of information. In the case of the blank circuit, this certainty was dedicated entirely to the outcomes of z measurements. For the circuit with a single Hadamard, it was dedicated entirely to x measurements. In this case, it is shared between the two." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Einstein vs. Bell" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have now played with some of the features of qubits, but we haven't done anything that couldn't be reproduced by a few bits and a random number generator. You can therefore be forgiven for thinking that quantum variables are just classical variables with some randomness bundled in.\n", + "\n", + "This is essentially the claim made by Einstein, Podolsky and Rosen back in 1935. They objected to the uncertainty seen in quantum mechanics, and thought it meant that the theory was incomplete. They thought that a qubit should always know what output it would give for both kinds of measurement, and that it only seems random because some information is hidden from us. As Einstein said: God does not play dice with the universe.\n", + "\n", + "No one spoke of qubits back then, and people hardly spoke of computers. But if we translate their arguments into modern language, they essentially claimed that qubits can indeed be described by some form of classical variable. They didn’t know how to do it, but they were sure it could be done. Then quantum mechanics could be replaced by a much nicer and more sensible theory.\n", + "\n", + "It took until 1964 to show that they were wrong. J. S. Bell proved that quantum variables behaved in a way that was fundamentally unique. Since then, many new ways have been found to prove this, and extensive experiments have been done to show that this is exactly the way the universe works. We'll now consider a simple demonstration, using a variant of _Hardy’s paradox_.\n", + "\n", + "For this we need two qubits, set up in such a way that their results are correlated. Specifically, we want to set them up such that we see the following properties.\n", + "\n", + "1. If z measurements are made on both qubits, they never both output `0`.\n", + "2. If an x measurement of one qubit outputs `1`, a z measurement of the other will output `0`.\n", + "\n", + "If we have qubits that satisfy these properties, what can we infer about the remaining case: an x measurement of both?\n", + "\n", + "For example, let's think about the case where both qubits output `1` for an x measurement. By applying property 2 we can deduce what the result would have been if we had made z measurements instead: We would have gotten an output of `0` for both. However, this result is impossible according to property 1. We can therefore conclude that an output of `1` for x measurements of both qubits must also be impossible.\n", + "\n", + "The paragraph you just read contains all the math in this section. Don't feel bad if you need to read it a couple more times!\n", + "\n", + "Now let's see what actually happens. Here is a circuit, composed of gates you will learn about in later sections. It prepares a pair of qubits that will satisfy the above properties." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qc_hardy = QuantumCircuit(2)\n", + "qc_hardy.ry(1.911,1)\n", + "qc_hardy.cx(1,0)\n", + "qc_hardy.ry(0.785,0)\n", + "qc_hardy.cx(1,0)\n", + "qc_hardy.ry(2.356,0)\n", + "\n", + "qc_hardy.draw(output='mpl')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see it in action. First a z measurement of both qubits." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two z measurements:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "# z measurement on both qubits\n", + "measurements.measure(0,0)\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two z measurements:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probability of `00` is zero, and so these qubits do indeed satisfy property 1.\n", + "\n", + "Next, let's see the results of an x measurement of one and a z measurement of the other." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two x measurement on qubit 0 and z measurement on qubit 1:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "# x measurement on qubit 0\n", + "measurements.h(0)\n", + "measurements.measure(0,0)\n", + "# z measurement on qubit 1\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two x measurement on qubit 0 and z measurement on qubit 1:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The probability of `11` is zero. You'll see the same if you swap around the measurements. These qubits therefore also satisfy property 2.\n", + " \n", + "\n", + "Finally, let's look at an x measurement of both." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Results for two x measurement on both qubits:\n" + ] + }, + { + "data": { + "image/svg+xml": [ + "" + ], + "text/plain": [ + "
    " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = QuantumCircuit(2,2)\n", + "measurements.h(0)\n", + "measurements.measure(0,0)\n", + "measurements.h(1)\n", + "measurements.measure(1,1)\n", + "\n", + "qc = qc_hardy + measurements\n", + "\n", + "print('\\nResults for two x measurement on both qubits:')\n", + "counts = execute(qc,Aer.get_backend('qasm_simulator')).result().get_counts()\n", + "plot_histogram(counts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We reasoned that, given properties 1 and 2, it would be impossible to get the output `11`. From the results above, we see that our reasoning was not correct: one in every dozen results will have this 'impossible' result.\n", + "\n", + "So where did we go wrong? Our mistake was in the following piece of reasoning.\n", + "\n", + "> By applying property 2 we can deduce what the result would have been if we had made z measurements instead\n", + "\n", + "We used our knowledge of the x outputs to work out what the z outputs were. Once we’d done that, we assumed that we were certain about the value of both. More certain than the uncertainty principle allows us to be. And so we were wrong.\n", + "\n", + "Our logic would be completely valid if we weren’t reasoning about quantum objects. If it was some non-quantum variable, that we initialized by some random process, the x and z outputs would indeed both be well defined. They would just be based on some pre-determined list of random numbers in our computer, or generated by some deterministic process. Then there would be no reason why we shouldn't use one to deduce the value of the other, and our reasoning would be perfectly valid. The restriction it predicts would apply, and it would be impossible for both x measurements to output `1`.\n", + "\n", + "But our qubits behave differently. The uncertainty of quantum mechanics allows qubits to dodge restrictions placed on classical variables. It allows them to do things that would otherwise be impossible. Indeed, this is the main thing to take away from this section:\n", + "\n", + "> A physical system in a definite state can still behave randomly.\n", + "\n", + "This is the first of the key principles of the quantum world. It needs to become your new intuition, as it is what makes quantum systems different to classical systems. It's what makes quantum computers able to outperform classical computers. It leads to effects that allow programs made with quantum variables to solve problems in ways that those with normal variables cannot. But just because qubits don’t follow the same logic as normal computers, it doesn’t mean they defy logic entirely. They obey the definite rules laid out by quantum mechanics.\n", + "\n", + "If you’d like to learn these rules, we’ll use the remainder of this chapter to guide you through them. We'll also show you how to express them using math. This will provide a foundation for later chapters, in which we'll explain various quantum algorithms and techniques." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-states/writing-down-qubit-states.ipynb b/translations/ja/ch-states/writing-down-qubit-states.ipynb new file mode 100644 index 0000000..5b5953a --- /dev/null +++ b/translations/ja/ch-states/writing-down-qubit-states.ipynb @@ -0,0 +1,624 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Writing Down Qubit States" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from qiskit import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the previous chapter we saw that there are multiple ways to extract an output from a qubit. The two methods we've used so far are the z and x measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "# z measurement of qubit 0\n", + "measure_z = QuantumCircuit(1,1)\n", + "measure_z.measure(0,0);\n", + "\n", + "# x measurement of qubit 0\n", + "measure_x = QuantumCircuit(1,1)\n", + "measure_x.h(0)\n", + "measure_x.measure(0,0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sometimes these measurements give results with certainty. Sometimes their outputs are random. This all depends on which of the infinitely many possible states our qubit is in. We therefore need a way to write down these states and figure out what outputs they'll give. For this we need some notation, and we need some math." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The z basis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you do nothing in a circuit but a measurement, you are certain to get the outcome `0`. This is because the qubits always start in a particular state, whose defining property is that it is certain to output a `0` for a z measurement.\n", + "\n", + "We need a name for this state. Let's be unimaginative and call it $0$ . Similarly, there exists a qubit state that is certain to output a `1`. We'll call this $1$.\n", + "\n", + "These two states are completely mutually exclusive. Either the qubit definitely outputs a ```0```, or it definitely outputs a ```1```. There is no overlap.\n", + "\n", + "One way to represent this with mathematics is to use two orthogonal vectors.\n", + "\n", + "$$\n", + "|0\\rangle = \\begin{pmatrix} 1 \\\\\\\\\\\\ 0 \\end{pmatrix} \\, \\, \\, \\, |1\\rangle =\\begin{pmatrix} 0 \\\\\\\\\\\\ 1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "This is a lot of notation to take in all at once. First let's unpack the weird $|$ and $\\rangle$ . Their job is essentially just to remind us that we are talking about the vectors that represent qubit states labelled $0$ and $1$. This helps us distinguish them from things like the bit values ```0``` and ```1``` or the numbers 0 and 1. It is part of the bra-ket notation, introduced by Dirac.\n", + "\n", + "If you are not familiar with vectors, you can essentially just think of them as lists of numbers which we manipulate using certain rules. If you are familiar with vectors from your high school physics classes, you'll know that these rules make vectors well-suited for describing quantities with a magnitude and a direction. For example, velocity of an object is described perfectly with a vector. However, the way we use vectors for quantum states is slightly different to this. So don't hold on too hard to your previous intuition. It's time to do something new!\n", + "\n", + "In the example above, we wrote the vector as a vertical list of numbers. We call these _column vectors_. In Dirac notation, they are also called _kets_.\n", + "\n", + "Horizontal lists are called _row vectors_. In Dirac notation they are _bras_. They are represented with a $\\langle$ and a $|$.\n", + "\n", + "$$\n", + "\\langle 0| = \\begin{pmatrix} 1 & 0\\end{pmatrix} \\, \\, \\, \\, \\langle 1| =\\begin{pmatrix} 0 & 1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "The rules on how to manipulate vectors define what it means to add or multiply them. For example, to add two vectors we need them to be the same type (either both column vectors, or both row vectors) and the same length. Then we add each element in one list to the corresponding element in the other. For a couple of arbitrary vectors that we'll call $a$ and $b$, this works as follows.\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} +\\begin{pmatrix} b_0 \\\\\\\\ b_1 \\end{pmatrix}=\\begin{pmatrix} a_0+b_0 \\\\\\\\ a_1+b_1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "To multiple a vector by a number, we simply multiply every element in the list by that number:\n", + "\n", + "$$\n", + "x \\times\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} = \\begin{pmatrix} x \\times a_0 \\\\\\\\ x \\times a_1 \\end{pmatrix}\n", + "$$\n", + "\n", + "Multiplying a vector with another vector is a bit more tricky, since there are multiple ways we can do it. One is called the 'inner product', and works as follows.\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 & a_1 \\end{pmatrix} \\begin{pmatrix} b_0 \\\\\\\\ b_1 \\end{pmatrix}= a_0~b_0 + a_1~b_1.\n", + "$$\n", + "\n", + "Note that the right hand side of this equation contains only normal numbers being multipled and added in a normal way. The inner product of two vectors therefore yields just a number. As we'll see, we can interpret this as a measure of how similar the vectors are.\n", + "\n", + "The inner product requires the first vector to be a bra and the second to be a ket. In fact, this is where their names come from. Dirac wanted to write the inner product as something like $\\langle a | b \\rangle$, which looks like the names of the vectors enclosed in brackets. Then he worked backwards to split the _bracket_ into a _bra_ and a _ket_.\n", + "\n", + "If you try out the inner product on the vectors we already know, you'll find\n", + "\n", + "$$\n", + "\\langle 0 | 0\\rangle = \\langle 1 | 1\\rangle = 1,\\\\\\\\\n", + "\\langle 0 | 1\\rangle = \\langle 1 | 0\\rangle = 0.\n", + "$$\n", + "\n", + "Here we are using a concise way of writing the inner products where, for example, $\\langle 0 | 1 \\rangle$ is the inner product of $\\langle 0 |$ with $| 1 \\rangle$. The top line shows us that the inner product of these states with themselves always gives a 1. When done with two orthogonal states, as on the bottom line, we get the outcome 0. These two properties will come in handy later on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The x basis - part 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So far we've looked at states for which the z measurement has a certain outcome. But there are also states for which the outcome of a z measurement is equally likely to be `0` or `1`. What might these look like in the language of vectors?\n", + "\n", + "A good place to start would be something like $|0\\rangle + |1\\rangle$ , since this includes both $|0\\rangle$ and $|1\\rangle$ with no particular bias towards either. But let's hedge our bets a little and multiply it by some number $x$ .\n", + "\n", + "$$\n", + "x ~ (|0\\rangle + |1\\rangle) = \\begin{pmatrix} x \\\\\\\\ x \\end{pmatrix}\n", + "$$\n", + "\n", + "We can choose the value of $x$ to make sure that the state plays nicely in our calculations. For example, think about the inner product,\n", + "\n", + "$$\n", + "\\begin{pmatrix} x & x \\end{pmatrix} \\times \\begin{pmatrix} x \\\\\\\\ x \\end{pmatrix}= 2x^2.\n", + "$$\n", + "\n", + "We can get any value for the inner product that we want, just by choosing the appropriate value of $x$.\n", + "\n", + "As mentioned earlier, we are going to use the inner product as a measure of how similar two vectors are. With this interpretation in mind, it is natural to require that the inner product of any state with itself gives the value $1$. This is already acheived for the inner products of $|0\\rangle$ and $|1\\rangle$ with themselves, so let's make it true for all other states too.\n", + "\n", + "This condition is known as the normalization condition. In this case, it means that $x=\\frac{1}{\\sqrt{2}}$. Now we know what our new state is, so here's a few ways of writing it down.\n", + "\n", + "$$\n", + "\\begin{pmatrix} \\frac{1}{\\sqrt{2}} \\\\\\\\ \\frac{1}{\\sqrt{2}} \\end{pmatrix} = \\frac{1}{\\sqrt{2}}\\begin{pmatrix} 1 \\\\\\\\ 1 \\end{pmatrix} = \\frac{ |0\\rangle + |1\\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "This state is essentially just $|0\\rangle$ and $|1\\rangle$ added together and then normalized, so we will give it a name to reflect that origin. We call it $|+\\rangle$ ." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Born rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we've got three states that we can write down as vectors. We can also calculate inner products for them. For example, the inner product of each with $\\langle 0 |$ is\n", + "\n", + "$$\n", + "\\langle 0 | 0\\rangle = 1 \\\\\\\\ \\langle 0 | 1\\rangle = 0 \\\\\\\\ \\, \\, \\, \\, \\langle 0 | +\\rangle = \\frac{1}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "We also know the probabilities of getting various outcomes from a z measurement for these states. For example, let's use $p^z_0$ to denote the probability of the result `0` for a z measurement. The values this has for our three states are\n", + "\n", + "$$\n", + "p_0^z( | 0\\rangle) = 1,\\\\\\\\ p_0^z( | 1\\rangle) = 0, \\\\\\\\ p_0^z( | +\\rangle) = \\frac{1}{2}.\n", + "$$\n", + "\n", + "As you might have noticed, there's a lot of similarlity between the numbers we get from the inner products and those we get for the probabilities. Specifically, the three probabilities can all be written as the square of the inner products:\n", + "\n", + "$$\n", + "p_0^z(|a\\rangle) = (~\\langle0|a\\rangle~)^2.\n", + "$$\n", + "\n", + "Here $|a\\rangle$ represents any generic qubit state.\n", + "\n", + "This property doesn't just hold for the `0` outcome. If we compare the inner products with $\\langle 1 |$ with the probabilities of the `1` outcome, we find a similar relation.\n", + "\n", + "$$\n", + "\\\\\\\\\n", + "p_1^z(|a\\rangle) = (~\\langle1|a\\rangle~)^2.\n", + "$$\n", + "\n", + "The same also holds true for other types of measurement. All probabilities in quantum mechanics can be expressed in this way. It is known as the *Born rule*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Global and relative phases" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Vectors are how we use math to represent the state of a qubit. With them we can calculate the probabilities of all the possible things that could ever be measured. These probabilities are essentially all that is physically relevant about a qubit. It is by measuring them that we can determine or verify what state our qubits are in. Any aspect of the state that doesn't affect the probabilities is therefore just a mathematical curiosity.\n", + "\n", + "Let's find an example. Consider a state that looks like this:\n", + "\n", + "$$\n", + "|\\tilde 0\\rangle = \\begin{pmatrix} -1 \\\\\\\\ 0 \\end{pmatrix} = -|0\\rangle.\n", + "$$\n", + "\n", + "This is equivalent to multiplying the state $|0\\rangle$ by $-1$. It means that every inner product we could calculate with $|\\tilde0\\rangle$ is the same as for $|0\\rangle$, but multplied by $-1$. \n", + "\n", + "$$\n", + "\\langle a|\\tilde 0\\rangle = -\\langle a| 0\\rangle\n", + "$$\n", + "\n", + "As you probably know, any negative number squares to the same value as its positive counterpart: $(-x)^2 =x^2$.\n", + "\n", + "Since we square inner products to get probabilities, this means that any probability we could ever calculate for $|\\tilde0\\rangle$ will give us the same value as for $|0\\rangle$. If the probabilities of everything are the same, there is no observable difference between $|\\tilde0\\rangle$ and $|0\\rangle$; they are just different ways of representing the same state.\n", + "\n", + "This is known as the irrelevance of the global phase. Quite simply, this means that multplying the whole of a quantum state by $-1$ gives us a state that will look different mathematically, but which is actually completely equivalent physically.\n", + "\n", + "The same is not true if the phase is *relative* rather than *global*. This would mean multiplying only part of the state by $-1$ , for example:\n", + "\n", + "$$\n", + "\\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix} \\rightarrow \\begin{pmatrix} a_0 \\\\\\\\ -a_1 \\end{pmatrix}.\n", + "$$\n", + "\n", + "Doing this with the $|+\\rangle$ state gives us a new state. We'll call it $|-\\rangle$.\n", + "\n", + "$$\n", + "|-\\rangle = \\frac{1}{\\sqrt{2}}\\begin{pmatrix} 1 \\\\\\\\ -1 \\end{pmatrix} = \\frac{ |0\\rangle - |1\\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "The values $p_0^z$ and $p_1^z$ for $|-\\rangle$ are the same as for $|+\\rangle$. These two states are thus indistinguishable when we make only z measurements. But there are other ways to distinguish them. To see how, consider the inner product of $|+\\rangle$ and $|-\\rangle$. \n", + "\n", + "$$\n", + "\\langle-|+\\rangle = \\langle+|-\\rangle = 0\n", + "$$\n", + "\n", + "The inner product is 0, just as it is for $|0\\rangle$ and $|1\\rangle$. This means that the $|+\\rangle$ and $|-\\rangle$ states are orthogonal: they represent a pair of mutually exclusive possible ways for a qubit to be a qubit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The x basis - part 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whenever we find a pair of orthogonal qubit states, we can use it to define a new kind of measurement.\n", + "\n", + "First, let's apply this to the case we know well: the z measurement. This asks a qubit whether it is $|0\\rangle$ or $|1\\rangle$. If it is $|0\\rangle$, we get the result `0`. For $|1\\rangle$ we get `1`. Anything else, such as $|+\\rangle$, is treated as a superposition of the two.\n", + "\n", + "$$\n", + "|+\\rangle = \\frac{|0\\rangle+|1\\rangle}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "For a superposition, the qubit needs to randomly choose between the two possibilities according to the Born rule.\n", + "\n", + "We can similarly define a measurement based on $|+\\rangle$ and $|-\\rangle$. This asks a qubit whether it is $|+\\rangle$ or $|-\\rangle$. If it is $|+\\rangle$, we get the result `0`. For $|-\\rangle$ we get `1`. Anything else is treated as a superposition of the two. This includes the states $|0\\rangle$ and $|1\\rangle$, which we can write as\n", + "\n", + "$$\n", + "|0\\rangle = \\frac{|+\\rangle+|-\\rangle}{\\sqrt{2}}, \\, \\, \\, \\, |1\\rangle = \\frac{|+\\rangle-|-\\rangle}{\\sqrt{2}}.\n", + "$$\n", + "\n", + "For these, and any other superpositions of $|+\\rangle$ and $|-\\rangle$, the qubit chooses its outcome randomly with probabilities\n", + "\n", + "$$\n", + "p_0^x(|a\\rangle) = (~\\langle+|a\\rangle~)^2,\\\\\\\\\n", + "p_1^x(|a\\rangle) = (~\\langle-|a\\rangle~)^2.\n", + "$$\n", + "\n", + "This is the x measurement." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The conservation of certainty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Qubits in quantum circuits always start out in the state $|0\\rangle$. By applying different operations, we can make them explore other states.\n", + "\n", + "Try this out yourself using a single qubit, creating circuits using operations from the following list, and then doing the x and z measurements in the way described at the top of the page." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "qc = QuantumCircuit(1)\n", + "\n", + "qc.h(0) # the hadamard\n", + "\n", + "qc.x(0) # x gate\n", + "\n", + "qc.y(0) # y gate\n", + "\n", + "qc.z(0) # z gate\n", + "\n", + "# for the following, replace theta by any number\n", + "theta = 3.14159/4\n", + "qc.ry(theta,0); # y axis rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You'll find examples where the z measurement gives a certain result, but the x is completely random. You'll also find examples where the opposite is true. Furthermore, there are many examples where both are partially random. With enough experimentation, you might even uncover the rule that underlies this behavior:\n", + "\n", + "$$\n", + "(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2 = 1.\n", + "$$\n", + "\n", + "This is a version of Heisenberg's famous uncertainty principle. The $(p^z_0-p^z_1)^2$ term measures how certain the qubit is about the outcome of a z measurement. The $(p^x_0-p^x_1)^2$ term measures the same for the x measurement. Their sum is the total certainty of the two combined. Given that this total always takes the same value, we find that the amount of information a qubit can be certain about is a limited and conserved resource.\n", + "\n", + "Here is a program to calculate this total certainty. As you should see, whatever gates from the above list you choose to put in `qc`, the total certainty comes out as $1$ (or as near as possible given statistical noise)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total uncertainty is 0.9975615292787552\n" + ] + } + ], + "source": [ + "shots = 2**14 # number of samples used for statistics\n", + "\n", + "uncertainty = 0\n", + "for measure_circuit in [measure_z, measure_x]:\n", + "\n", + " # run the circuit with a the selected measurement and get the number of samples that output each bit value\n", + " counts = execute(qc+measure_circuit,Aer.get_backend('qasm_simulator'),shots=shots).result().get_counts()\n", + "\n", + " # calculate the probabilities for each bit value\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " uncertainty += ( probs['0'] - probs['1'] )**2\n", + "\n", + "# print the total uncertainty\n", + "print('The total uncertainty is',uncertainty )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we have found this rule, let's try to break it! Then we can hope to get a deeper understanding of what is going on. We can do this by simply implementing the operation below, and then recalculating the total uncertainty." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# for the following, replace theta by any number\n", + "theta = 3.14159/2\n", + "qc.rx(theta,0); # x axis rotation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a circuit with a single `rx` with $\\theta=\\pi/2$, we will find that $(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2=0$. This operation seems to have reduced our total certainty to zero." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All is not lost, though. We simply need to perform another identical `rx` gate to our circuit to go back to obeying $(p^z_0-p^z_1)^2 + (p^x_0-p^x_1)^2=1$. This shows that the operation does not destroy our certainty; it simply moves it somewhere else and then back again. So let's find that somewhere else." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The y basis - part 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are infinitely many ways to measure a qubit, but the z and x measurements have a special relationship with each other. We say that they are *mutually unbiased*. This simply means that certainty for one implies complete randomness for the other.\n", + "\n", + "At the end of the last section, it seemed that we were missing a piece of the puzzle. We need another type of measurement to plug the gap in our total certainty, and it makes sense to look for one that is also mutually unbiased with x and z.\n", + "\n", + "The first step is to find a state that seems random to both x and z measurements. Let's call it $|\\circlearrowleft\\rangle$, for no apparent reason.\n", + "\n", + "$$\n", + "|\\circlearrowleft\\rangle = c_0 | 0 \\rangle + c_1 | 1 \\rangle\n", + "$$\n", + "\n", + "Now the job is to find the right values for $c_0$ and $c_1$. You could try to do this with standard positive and negative numbers, but you'll never be able to find a state that is completely random for both x and z measurements. To achieve this, we need to use complex numbers." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Complex numbers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hopefully you've come across complex numbers before, but here is a quick reminder. \n", + "\n", + "Normal numbers, such as the ones we use for counting bananas, are known as *real numbers*. We cannot solve all possible equations using only real numbers. For example, there is no real number that serves as the square root of $-1$. To deal with this issue, we need more numbers, which we call *complex numbers*.\n", + "\n", + "To define complex numbers we start by accepting the fact that $-1$ has a square root, and that its name is $i$. Any complex number can then be written\n", + "\n", + "$$\n", + "x = x_r + i~x_i .\n", + "$$\n", + "\n", + "Here $x_r$ and $x_i$ are both normal numbers \\(positive or negative\\), where $x_r$ is known as the real part and $x_i$ as the imaginary part. \n", + "\n", + "For every complex number $x$ there is a corresponding complex conjugate $x^*$ \n", + "\n", + "$$\n", + "x^* = x_r - i~x_i .\n", + "$$\n", + "\n", + "Multiplying $x$ by $x^*$ gives us a real number. It's most useful to write this as\n", + "\n", + "$$\n", + "|x| = \\sqrt{x~x^*}.\n", + "$$\n", + "\n", + "Here $|x|$ is known as the magnitude of $x$ \\(or, equivalently, of $x^*$ \\).\n", + "\n", + "If we are going to allow the numbers in our quantum states to be complex, we'll need to upgrade some of our equations.\n", + "\n", + "First, we need to ensure that the inner product of a state with itself is always 1. To do this, the bra and ket versions of the same state must be defined as follows:\n", + "\n", + "$$\n", + "|a\\rangle = \\begin{pmatrix} a_0 \\\\\\\\ a_1 \\end{pmatrix}, ~~~ \\langle a| = \\begin{pmatrix} a_0^* & a_1^* \\end{pmatrix}.\n", + "$$\n", + "\n", + "Then we just need a small change to the Born rule, where we square the magnitudes of inner products, rather than just the inner products themselves.\n", + "\n", + "$$\n", + "p_0^z(|a\\rangle) = |~\\langle0|a\\rangle~|^2,\\\\\\\\\n", + "p_1^z(|a\\rangle) = |~\\langle1|a\\rangle~|^2,\\\\\\\\\n", + "p_0^x(|a\\rangle) = |~\\langle+|a\\rangle~|^2,\\\\\\\\\n", + "p_1^x(|a\\rangle) = |~\\langle-|a\\rangle~|^2.\n", + "$$\n", + "\n", + "The irrelevance of the global phase also needs an upgrade. Previously, we only talked about multiplying by -1. In fact, we can multiply a state by any complex number whose magnitude is 1. This will give us a state that will look different, but which is actually completely equivalent. This includes multiplying by $i$, $-i$ or infinitely many other possibilities." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The y basis - part 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have complex numbers, we can define the following pair of states.\n", + "\n", + "$$\n", + "|\\circlearrowright\\rangle = \\frac{ | 0 \\rangle + i | 1 \\rangle}{\\sqrt{2}}, ~~~~ |\\circlearrowleft\\rangle = \\frac{ | 0 \\rangle -i | 1 \\rangle}{\\sqrt{2}}\n", + "$$\n", + "\n", + "You can verify yourself that they both give random outputs for x and z measurements. They are also orthogonal to each other. They therefore define a new measurement, and that basis is mutally unbiased with x and z. This is the third and final fundamental measurement for a single qubit. We call it the y measurement, and can implement it with" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# y measurement of qubit 0\n", + "measure_y = QuantumCircuit(1,1)\n", + "measure_y.sdg(0)\n", + "measure_y.h(0)\n", + "measure_y.measure(0,0);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the x, y and z measurements, we now have everything covered. Whatever operations we apply, a single isolated qubit will always obey\n", + "\n", + "$$\n", + "(p^z_0-p^z_1)^2 + (p^y_0-p^y_1)^2 + (p^x_0-p^x_1)^2 = 1.\n", + "$$\n", + "\n", + "To see this, we can incorporate the y measurement into our measure of total certainty." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The total uncertainty is 1.0046265721321106\n" + ] + } + ], + "source": [ + "shots = 2**14 # number of samples used for statistics\n", + "\n", + "uncertainty = 0\n", + "for measure_circuit in [measure_z, measure_x, measure_y]:\n", + "\n", + " # run the circuit with a the selected measurement and get the number of samples that output each bit value\n", + " counts = execute(qc+measure_circuit,Aer.get_backend('qasm_simulator'),shots=shots).result().get_counts()\n", + "\n", + " # calculate the probabilities for each bit value\n", + " probs = {}\n", + " for output in ['0','1']:\n", + " if output in counts:\n", + " probs[output] = counts[output]/shots\n", + " else:\n", + " probs[output] = 0\n", + " \n", + " uncertainty += ( probs['0'] - probs['1'] )**2\n", + "\n", + "# print the total uncertainty\n", + "print('The total uncertainty is',uncertainty )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For more than one qubit, this relation will need another upgrade. This is because the qubits can spend their limited certainty on creating correlations that can only be detected when multiple qubits are measured. The fact that certainty is conserved remains true, but it can only be seen when looking at all the qubits together.\n", + "\n", + "Before we move on to entanglement, there is more to explore about just a single qubit. As we'll see in the next section, the conservation of certainty leads to a particularly useful way of visualizing single-qubit states and gates." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'qiskit-terra': '0.11.1',\n", + " 'qiskit-aer': '0.3.4',\n", + " 'qiskit-ignis': '0.2.0',\n", + " 'qiskit-ibmq-provider': '0.4.5',\n", + " 'qiskit-aqua': '0.6.2',\n", + " 'qiskit': '0.14.1'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import qiskit\n", + "qiskit.__qiskit_version__" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/ch-upcoming/0.ipynb b/translations/ja/ch-upcoming/0.ipynb new file mode 100644 index 0000000..4a2befc --- /dev/null +++ b/translations/ja/ch-upcoming/0.ipynb @@ -0,0 +1,54 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 今後更新されるトピック" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以下のトピックがテキストブックに追加される予定で現在作業中です。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. ショアのアルゴリズム\n", + "2. NISQハードウェア向けの量子アルゴリズムの全体像\n", + "3. 超伝導量子コンピューターへのイジングモデルのマッピング\n", + "4. QAOAを使った組み合わせ最適化問題の解法\n", + "5. HHLを使った線形方程式の解法\n", + "6. BB84を使った通信のセキュリティ\n", + "7. デコヒーレンスとエネルギー緩和:T2とT1の測定\n", + "8. 高いフィデリティーの量子ビット操作のためのマイクロ波最適化\n", + "9. 状態とプロセスのトモグラフィー" + ] + } + ], + "metadata": { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/guideline-ja.md b/translations/ja/guideline-ja.md new file mode 100644 index 0000000..6a2fc28 --- /dev/null +++ b/translations/ja/guideline-ja.md @@ -0,0 +1,37 @@ + +# Contributing Guidelines to the Japanese edition of Qiskit Textbook +[For English speakers](#contributing-guidelines-to-the-japanese-edition-of-qiskit-textbook-1) +## [日本語版Qiskitテキストブック](https://qiskit.org/textbook/ja/preface.html)への貢献のためのガイドライン +### バグの報告と修正・加筆の依頼 +- 問題を見つけたときは、issueテンプレートの[`Content Problem`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=content+bug&template=content-problem---.md&title=)を使って [issue](https://github.com/qiskit-community/qiskit-textbook/issues)を上げてください。 +- Qiskitコミュニティーの目標は、QiskitテクストブックをQiskitを使った量子コンピューティングのベストなテキストブックにすることです。もし補足説明などの追加が必要だと思われる場合は、[`Enhancement Request`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=enhancement&template=enhancement-request---.md&title=)のテンプレートを使って、遠慮なく修正依頼を [issue](https://github.com/qiskit-community/qiskit-textbook/issues)として上げてください。 + +### コードまたはコンテンツへの貢献 +- 日本語版テキストブックにコードや新しい章やセクションの追加をしたい場合は、[`New Content Suggestion`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=New+Content+Suggestion&template=new-content-suggestion-----.md&title=)のテンプレートを使って [issue](https://github.com/qiskit-community/qiskit-textbook/issues)を上げてください。 + +### 新コンテンツに対する翻訳 +- 英語版のテキストブックに新しい章が追加された場合、以下の手順で日本語翻訳に貢献いただけます: + - [`main` branchの`content`フォルダー](https://github.com/qiskit-community/qiskit-textbook/tree/main/content)に置かれている英語版の該当ファイルを見つけます。 + - そのファイルを日本語に翻訳します。 + - [`master-ja` branchの`i18n/locales/ja`フォルダー](https://github.com/qiskit-community/qiskit-textbook/tree/master-ja/i18n/locales/ja) に日本語訳されたファイルを追加するPull requestをしてください。 + +日本語版のQiskitテキストブックに関するご質問のコンタクト先:沼田祈史 (kifumi@jp.ibm.com) +
    +
    + +## Contributing Guidelines to the [Japanese edition of Qiskit Textbook](https://qiskit.org/textbook/ja/preface.html) + +### Reporting Bugs and Requesting Enhancements +- When you encounter a problem, please open an [issue](https://github.com/qiskit-community/qiskit-textbook/issues) using the issue template [`Content Problem`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=content+bug&template=content-problem---.md&title=).  +- The goal of the Qiskit community is to make the Qiskit Textbook the best textbook on quantum computing using Qiskit. If you would like to request an enhancement, please feel free to create an [issue](https://github.com/qiskit-community/qiskit-textbook/issues) using the issue template [`Enhancement Request`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=enhancement&template=enhancement-request---.md&title=).  + +### Contributing Code or a Chapter +- For contributing code, new section or a chapter to the existing Japanese textbook, please open an [issue](https://github.com/qiskit-community/qiskit-textbook/issues) using the issue template [`New Content Suggestion`](https://github.com/qiskit-community/qiskit-textbook/issues/new?assignees=&labels=New+Content+Suggestion&template=new-content-suggestion-----.md&title=). + +### Contributing New Translations +- When new content is added to the original textbook, you can contribute to translating it to Japanese by: + - Find the corresponding original file under the [`content` folder of the `main` branch](https://github.com/qiskit-community/qiskit-textbook/tree/main/content). + - Translate it to Japanese. + - Add the translated file under the [`i18n/locales/ja` folder of the `master-ja` branch](https://github.com/qiskit-community/qiskit-textbook/tree/master-ja/i18n/locales/ja) by sending Pull resquest. + +For any questions regarding the Japanese edition of the Qiskit Textbook please contact Kifumi Numata (kifumi@jp.ibm.com). \ No newline at end of file diff --git a/translations/ja/images/coursemaps/coursemap_A.png b/translations/ja/images/coursemaps/coursemap_A.png new file mode 100644 index 0000000..a5e535b Binary files /dev/null and b/translations/ja/images/coursemaps/coursemap_A.png differ diff --git a/translations/ja/images/coursemaps/coursemap_B.png b/translations/ja/images/coursemaps/coursemap_B.png new file mode 100644 index 0000000..0b728f0 Binary files /dev/null and b/translations/ja/images/coursemaps/coursemap_B.png differ diff --git a/translations/ja/images/coursemaps/coursemap_C.png b/translations/ja/images/coursemaps/coursemap_C.png new file mode 100644 index 0000000..9676b87 Binary files /dev/null and b/translations/ja/images/coursemaps/coursemap_C.png differ diff --git a/translations/ja/images/coursemaps/coursemap_all.png b/translations/ja/images/coursemaps/coursemap_all.png new file mode 100644 index 0000000..8537e91 Binary files /dev/null and b/translations/ja/images/coursemaps/coursemap_all.png differ diff --git a/translations/ja/images/curriculum.svg b/translations/ja/images/curriculum.svg new file mode 100644 index 0000000..1c04f71 --- /dev/null +++ b/translations/ja/images/curriculum.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/translations/ja/images/logo/favicon.ico b/translations/ja/images/logo/favicon.ico new file mode 100644 index 0000000..f0e916b Binary files /dev/null and b/translations/ja/images/logo/favicon.ico differ diff --git a/translations/ja/images/logo/logo.png b/translations/ja/images/logo/logo.png new file mode 100644 index 0000000..0398266 Binary files /dev/null and b/translations/ja/images/logo/logo.png differ diff --git a/translations/ja/images/logo/logo_long.png b/translations/ja/images/logo/logo_long.png new file mode 100644 index 0000000..12d2748 Binary files /dev/null and b/translations/ja/images/logo/logo_long.png differ diff --git a/translations/ja/images/logo/logo_qiskit_pink.png b/translations/ja/images/logo/logo_qiskit_pink.png new file mode 100644 index 0000000..94d1408 Binary files /dev/null and b/translations/ja/images/logo/logo_qiskit_pink.png differ diff --git a/translations/ja/images/logo/logo_qiskit_pink.svg b/translations/ja/images/logo/logo_qiskit_pink.svg new file mode 100644 index 0000000..3d53ba8 --- /dev/null +++ b/translations/ja/images/logo/logo_qiskit_pink.svg @@ -0,0 +1,223 @@ + + + + + + image/svg+xml + + qiskit-logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + qiskit-logo + + + + + + + + + + + diff --git a/translations/ja/images/logo/logo_qiskit_purple.png b/translations/ja/images/logo/logo_qiskit_purple.png new file mode 100644 index 0000000..3f6d473 Binary files /dev/null and b/translations/ja/images/logo/logo_qiskit_purple.png differ diff --git a/translations/ja/images/logo/preface_illustration.svg b/translations/ja/images/logo/preface_illustration.svg new file mode 100644 index 0000000..71d2d7a --- /dev/null +++ b/translations/ja/images/logo/preface_illustration.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/translations/ja/images/logo/qiskit_logo.svg b/translations/ja/images/logo/qiskit_logo.svg new file mode 100644 index 0000000..4ebd224 --- /dev/null +++ b/translations/ja/images/logo/qiskit_logo.svg @@ -0,0 +1 @@ +qiskit-logo \ No newline at end of file diff --git a/translations/ja/images/melbourne.png b/translations/ja/images/melbourne.png new file mode 100644 index 0000000..220e699 Binary files /dev/null and b/translations/ja/images/melbourne.png differ diff --git a/translations/ja/images/preface-hw-example.png b/translations/ja/images/preface-hw-example.png new file mode 100644 index 0000000..2a1914a Binary files /dev/null and b/translations/ja/images/preface-hw-example.png differ diff --git a/translations/ja/images/preface_algs.png b/translations/ja/images/preface_algs.png new file mode 100644 index 0000000..cfe2e57 Binary files /dev/null and b/translations/ja/images/preface_algs.png differ diff --git a/translations/ja/images/preface_code.png b/translations/ja/images/preface_code.png new file mode 100644 index 0000000..3e3ba2f Binary files /dev/null and b/translations/ja/images/preface_code.png differ diff --git a/translations/ja/images/preface_hardware.png b/translations/ja/images/preface_hardware.png new file mode 100644 index 0000000..32bd5f9 Binary files /dev/null and b/translations/ja/images/preface_hardware.png differ diff --git a/translations/ja/images/preface_illustration.svg b/translations/ja/images/preface_illustration.svg new file mode 100644 index 0000000..71d2d7a --- /dev/null +++ b/translations/ja/images/preface_illustration.svg @@ -0,0 +1,84 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/translations/ja/images/preface_illustration_2.svg b/translations/ja/images/preface_illustration_2.svg new file mode 100644 index 0000000..90fe7dc --- /dev/null +++ b/translations/ja/images/preface_illustration_2.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/translations/ja/images/qiskit_textbook_skills.png b/translations/ja/images/qiskit_textbook_skills.png new file mode 100644 index 0000000..5861294 Binary files /dev/null and b/translations/ja/images/qiskit_textbook_skills.png differ diff --git a/translations/ja/images/whatis/whatis1.png b/translations/ja/images/whatis/whatis1.png new file mode 100644 index 0000000..b2234c7 Binary files /dev/null and b/translations/ja/images/whatis/whatis1.png differ diff --git a/translations/ja/images/whatis/whatis10.png b/translations/ja/images/whatis/whatis10.png new file mode 100644 index 0000000..d923563 Binary files /dev/null and b/translations/ja/images/whatis/whatis10.png differ diff --git a/translations/ja/images/whatis/whatis11.gif b/translations/ja/images/whatis/whatis11.gif new file mode 100644 index 0000000..41e04e8 Binary files /dev/null and b/translations/ja/images/whatis/whatis11.gif differ diff --git a/translations/ja/images/whatis/whatis12.gif b/translations/ja/images/whatis/whatis12.gif new file mode 100644 index 0000000..fe8573c Binary files /dev/null and b/translations/ja/images/whatis/whatis12.gif differ diff --git a/translations/ja/images/whatis/whatis2.png b/translations/ja/images/whatis/whatis2.png new file mode 100644 index 0000000..6ebf5f3 Binary files /dev/null and b/translations/ja/images/whatis/whatis2.png differ diff --git a/translations/ja/images/whatis/whatis3.png b/translations/ja/images/whatis/whatis3.png new file mode 100644 index 0000000..86e1925 Binary files /dev/null and b/translations/ja/images/whatis/whatis3.png differ diff --git a/translations/ja/images/whatis/whatis4.gif b/translations/ja/images/whatis/whatis4.gif new file mode 100644 index 0000000..3555fa4 Binary files /dev/null and b/translations/ja/images/whatis/whatis4.gif differ diff --git a/translations/ja/images/whatis/whatis5.gif b/translations/ja/images/whatis/whatis5.gif new file mode 100644 index 0000000..a2bb751 Binary files /dev/null and b/translations/ja/images/whatis/whatis5.gif differ diff --git a/translations/ja/images/whatis/whatis6.png b/translations/ja/images/whatis/whatis6.png new file mode 100644 index 0000000..252e8dd Binary files /dev/null and b/translations/ja/images/whatis/whatis6.png differ diff --git a/translations/ja/images/whatis/whatis7.png b/translations/ja/images/whatis/whatis7.png new file mode 100644 index 0000000..f7aee9c Binary files /dev/null and b/translations/ja/images/whatis/whatis7.png differ diff --git a/translations/ja/images/whatis/whatis8.png b/translations/ja/images/whatis/whatis8.png new file mode 100644 index 0000000..25fc647 Binary files /dev/null and b/translations/ja/images/whatis/whatis8.png differ diff --git a/translations/ja/images/whatis/whatis9.png b/translations/ja/images/whatis/whatis9.png new file mode 100644 index 0000000..b6cfe29 Binary files /dev/null and b/translations/ja/images/whatis/whatis9.png differ diff --git a/translations/ja/preface-old.md b/translations/ja/preface-old.md new file mode 100644 index 0000000..59445c5 --- /dev/null +++ b/translations/ja/preface-old.md @@ -0,0 +1,56 @@ +# Learn Quantum Computation using Qiskit + + +Learn Quantum Computing using Qiskit + +

    +Greetings from the Qiskit Community team! We initiated this open-source textbook in collaboration with IBM Research as a university quantum algorithms/computation course supplement based on Qiskit. The Qiskit textbook helps you: +

    + + + + + + + + + + + + +
    Learn Quantum Computing TheoryLearn to Code Quantum ProgramsExperiment with Real Devices
    + Learn Quantum Computing Theory + + Learn to Code Quantum Programs + + Experiment with Real Devices +
    + + + + + +```python + +``` diff --git a/translations/ja/preface.ipynb b/translations/ja/preface.ipynb new file mode 100644 index 0000000..83367f1 --- /dev/null +++ b/translations/ja/preface.ipynb @@ -0,0 +1,171 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "preface-cell", + "preface-title" + ] + }, + "source": [ + "Qiskit を使った量子計算の学習\n", + "
    \n", + "
    \n", + "
    \n", + " \n", + "
    \n", + "

    \n", + " Qiskit Communityチームからのご挨拶です! Qiskitをベースとした大学の量子アルゴリズム/計算コースの補足教材となるよう、このテキストブックを作り始めました:

    \n", + "
      \n", + "
    1. 量子アルゴリズムの基礎となる数学
    2. \n", + "
    3. 今日の非フォールトトレラントな量子デバイスの詳細
    4. \n", + "
    5. IBMのクラウド型量子システムに量子アルゴリズムを実装するためのQiskitでのコーディング
    6. \n", + "
    \n", + "
    \n", + " \n", + "
    " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "preface-cell" + ] + }, + "source": [ + "# このテキストブックについて\n", + "\n", + "

    このテキストブックは、Qiskit SDKの使い方を学びながら、量子コンピューティングの概念を学ぶことができる無料のオンラインテキストです。

    \n", + "\n", + "## Codeをインラインで実行する\n", + "\n", + "

    このテキストブックは、読みやすいJupyter notebookのフレームワークに基づいて作られていますが、読者がテキストブック内でコードを編集して実行することもできます。 各章のページは、インストールなしに、IBM Quantum ExperienceでJupyter notebookとして開くこともできます。

    " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "preface-code-cell" + ] + }, + "outputs": [], + "source": [ + "# Click 'try', then 'run' to see the output,\n", + "# you can change the code and run it again.\n", + "print(\"This code works!\")\n", + "from qiskit import QuantumCircuit\n", + "qc = QuantumCircuit(2) # Create circuit with 2 qubits\n", + "qc.h(0) # Do H-gate on q0\n", + "qc.cx(0,1) # Do CNOT on q1 controlled by q0\n", + "qc.measure_all()\n", + "qc.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "preface-cell" + ] + }, + "source": [ + "\n", + "\n", + "## 実量子デバイスでの学習\n", + "\n", + "

    学ぶための最良の方法は、実行することです。 Qiskitを使用すると、ユーザーは居心地の良い環境から最先端の量子デバイスで実験を実行することができます。このテキストブックでは、理論的な量子コンピューティングだけでなく、それを実現する実験的な量子物理学も学ぶことができます。

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# テキストブックの使い方\n", + "\n", + "

    このテキストブックは、すべてを順番に読む必要はありませんが、最初に第1章から第3章を読むことをお勧めします。

    \n", + "\n", + "## 授業のカリキュラムとして\n", + "\n", + "

    このテキストブックは独立した授業として学ぶことができますが、伝統的な大学の授業の補足教材となるように設計されています。Qiskitを使用して量子アルゴリズムとハードウェアを実験する方法を学生に提示し、理解を深められるように作られています。\n", + "

    \n", + "\n", + "\n", + "\n", + "## 授業でこのテキストブックを使用する場合\n", + "\n", + "授業でQiskitテキストブックを使用している場合は、IBM Quantum Educators Programに参加できます。このプログラムでは以下が利用できます:\n", + "\n", + "
      \n", + "
    • クラス内でのデモのためにオープンシステムへ優先してアクセスする時間を予約する機能
    • \n", + "
    • オープンシステム以外の追加のプレミアムシステムへのアクセス
    • \n", + "
    • Qiskit Pulseを使用した完全なマイクロ波制御を備えた5量子ビットシステムへのアクセス
    • \n", + "
    \n", + " \n", + "\n", + "\n", + "# 連絡先\n", + "\n", + "

    テキストブックについて質問や提案がある場合、またはテキストブックをカリキュラムに組み込みたい場合は、Frank Harkins (Francis.Harkins@ibm.com)に連絡してください。 オープンソースのスピリットに基づいて、GitHubリポジトリーに新たな章の投稿を歓迎しています。

    \n", + " \n", + "# 貢献者リスト\n", + "\n", + "

    「Qiskit を使った量子計算の学習」は複数のメンバーによって書かれました。ご研究や仕事で利用される場合は、このbib fileを引用するか、直接次のように引用してください。

    \n", + "

    \n", + "Abraham Asfaw, Luciano Bello, Yael Ben-Haim, Sergey Bravyi, Lauren Capelluto, Almudena Carrera Vazquez, Jack Ceroni, Richard Chen, Albert Frisch, Jay Gambetta, Shelly Garion, Leron Gil, Salvador De La Puente Gonzalez, Francis Harkins, Takashi Imamichi, David McKay, Antonio Mezzacapo, Zlatko Minev, Ramis Movassagh, Giacomo Nannicini, Paul Nation, Anna Phan, Marco Pistoia, Arthur Rattew, Joachim Schaefer, Javad Shabani, John Smolin, Kristan Temme, Madeleine Tod, Stephen Wood, James Wootton.

    " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 日本語翻訳貢献者リスト\n", + "\n", + "

    「Qiskit を使った量子計算の学習」は以下のメンバーによって日本語翻訳されました。

    \n", + "

    \n", + "Ayumu Shiraishi,\n", + "Daiki Murata,\n", + "Emi Adachi,\n", + "Hironobu Takamatsu,\n", + "Ikko Hamamura,\n", + "Jiayun Zhu,\n", + "Kaori Namba,\n", + "Kazumasa Umezawa,\n", + "Keisuke Nakajima,\n", + "Kenji Tanaka,\n", + "Kifumi Numata,\n", + "Masao Tokunari,\n", + "Shun Shirakawa,\n", + "Tadashi Kadowaki,\n", + "Takahide Nogayama,\n", + "Takashi Imamichi,\n", + "Takehiko Amano,\n", + "Yuma Nakamura,\n", + "Yuri Kobayashi

    " + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/translations/ja/preface.md b/translations/ja/preface.md new file mode 100644 index 0000000..22d7fc4 --- /dev/null +++ b/translations/ja/preface.md @@ -0,0 +1,31 @@ +# Qiskit を使った量子計算の学習 + +Learn Quantum Computinb using Qiskit cover + + + +Qiskit Communityチームからのご挨拶です! Qiskitをベースとした大学の量子アルゴリズム/計算コースの補足教材となるよう、IBM Researchと共同でこのオープンソースの教科書を作り始めました。 +To the traditional quantum computation course, the textbook adds Python and Qiskit foundations, quantum programming and quantum algorithms on today's hardware. + +この教科書の目標は、以下のエリアのスキルを開発することです。 +1. 量子アルゴリズムの背後にある数学 +2. 今日の非フォールトトレラントな量子デバイスの詳細 +3. IBMのクラウド型量子システムに量子アルゴリズムを実装するためのQiskitでのコーディング + +この教科書は、この分野の広範な調査を試みるものではありませんが、できる限り自己完結することを目指します。 + +この教科書に質問・提案がある方、また、あなたの学校のカリキュラムに取り入れたい方は、Abraham Asfaw ([abraham.asfaw@ibm.com](mailto:abraham.asfaw@ibm.com)) にコンタクトしてください。オープンソースの精神に基づき、あらゆる章への貢献を[このGitHubリポジトリー](https://github.com/Qiskit/qiskit-textbook)にてお待ちしています。 + +## 貢献者(アルファベット順) + +**Qiskit を使った量子計算の学習** は複数の著者による合作です。ご自身の業務・研究などで使用する場合は、この[bibファイル](qiskit-textbook.bib)を使用するか、次のように直接引用してください: + +> Abraham Asfaw, Luciano Bello, Yael Ben-Haim, Sergey Bravyi, Lauren Capelluto, Almudena Carrera Vazquez, Jack Ceroni, Jay Gambetta, Shelly Garion, Leron Gil, Salvador De La Puente Gonzalez, David McKay, Zlatko Minev, Paul Nation, Anna Phan, Arthur Rattew, Javad Shabani, John Smolin, Kristan Temme, Madeleine Tod, James Wootton. diff --git a/translations/ja/qiskit-textbook.bib b/translations/ja/qiskit-textbook.bib new file mode 100644 index 0000000..d63ad17 --- /dev/null +++ b/translations/ja/qiskit-textbook.bib @@ -0,0 +1,8 @@ +@misc{ Qiskit-Textbook, + author = {Abraham Asfaw and Luciano Bello and Yael Ben-Haim and Sergey Bravyi and Lauren Capelluto and Almudena Carrera Vazquez and Jack Ceroni and Frank Harkins and + Jay Gambetta and Shelly Garion and Leron Gil and Salvador De La Puente Gonzalez and David McKay and Zlatko Minev and Paul Nation and Anna Phan + and Arthur Rattew and Joachim Schaefer and Javad Shabani and John Smolin and Kristan Temme and Madeleine Tod and James Wootton.}, + title = {Learn Quantum Computation Using Qiskit}, + year = {2020}, + url = {http://community.qiskit.org/textbook}, +} diff --git a/translations/ja/toc.yaml b/translations/ja/toc.yaml new file mode 100755 index 0000000..6a11b45 --- /dev/null +++ b/translations/ja/toc.yaml @@ -0,0 +1,185 @@ +- title: 前提条件 + url: /ch-prerequisites + sections: + - id: environment-setup-guide-to-work-with-qiskit-textbook + uuid: a5a86ddc-b519-11ec-b909-0242ac120002 + url: /ch-prerequisites/setting-the-environment + - id: introduction-to-python-and-jupyter-notebooks + uuid: a9f5ea68-b519-11ec-b909-0242ac120002 + url: /ch-prerequisites/python-and-jupyter-notebooks + + +- title: 量子状態と量子ビット + url: /ch-states + sections: + - id: introduction + uuid: afcc559e-b519-11ec-b909-0242ac120002 + url: /ch-states/introduction + - id: the-atoms-of-computation + uuid: b31c20ee-b519-11ec-b909-0242ac120002 + url: /ch-states/atoms-computation + - id: representing-qubit-states + uuid: b81717ca-b519-11ec-b909-0242ac120002 + url: /ch-states/representing-qubit-states + - id: single-qubit-gates + uuid: bd4334a4-b519-11ec-b909-0242ac120002 + url: /ch-states/single-qubit-gates + - id: the-case-for-quantum-computers + uuid: c0bbff62-b519-11ec-b909-0242ac120002 + url: /ch-states/case-for-quantum + + +- title: 複数量子ビットともつれ状態 + url: /ch-gates + sections: + - id: introduction + uuid: c50f4c90-b519-11ec-b909-0242ac120002 + url: /ch-gates/introduction + - id: multiple-qubits-and-entangled-states + uuid: c7cfe502-b519-11ec-b909-0242ac120002 + url: /ch-gates/multiple-qubits-entangled-states + - id: phase-kickback + uuid: cb7353ec-b519-11ec-b909-0242ac120002 + url: /ch-gates/phase-kickback + - id: basic-circuit-identities + uuid: ce8ce75a-b519-11ec-b909-0242ac120002 + url: /ch-gates/more-circuit-identities + - id: proving-universality + uuid: d15d3548-b519-11ec-b909-0242ac120002 + url: /ch-gates/proving-universality + - id: classical-computation-on-a-quantum-computer + uuid: d4f6e424-b519-11ec-b909-0242ac120002 + url: /ch-gates/oracles + + +- title: 量子プロトコルと量子アルゴリズム + url: /ch-algorithms + sections: + - id: quantum-circuits + uuid: d90cbfb6-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/defining-quantum-circuits + - id: deutsch-jozsa-algorithm + uuid: dc9d3aa2-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/deutsch-jozsa + - id: bernstein-vazirani-algorithm + uuid: df6e5a40-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/bernstein-vazirani + - id: simons-algorithm + uuid: e2714126-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/simon + - id: quantum-fourier-transform + uuid: e59ba472-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/quantum-fourier-transform + - id: quantum-phase-estimation + uuid: e8ac9ec8-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/quantum-phase-estimation + - id: shors-algorithm + uuid: ec157cd8-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/shor + - id: grovers-algorithm + uuid: eebb7488-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/grover + - id: quantum-counting + uuid: f1a9942c-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/quantum-counting + - id: quantum-teleportation + uuid: f4f4a090-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/teleportation + - id: superdense-coding + uuid: f87cbd42-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/superdense-coding + - id: quantum-key-distribution + uuid: fbafa8c6-b519-11ec-b909-0242ac120002 + url: /ch-algorithms/quantum-key-distribution + + +- title: 量子アプリケーションのアルゴリズム + url: /ch-applications + sections: + - id: solving-linear-systems-of-equations-using-hhl-and-its-qiskit-implementation + uuid: 01484810-b51a-11ec-b909-0242ac120002 + url: /ch-applications/hhl_tutorial + - id: simulating-molecules-using-vqe + uuid: 041df288-b51a-11ec-b909-0242ac120002 + url: /ch-applications/vqe-molecules + - id: solving-combinatorial-optimization-problems-using-qaoa + uuid: 06ff7ada-b51a-11ec-b909-0242ac120002 + url: /ch-applications/qaoa + - id: solving-satisfiability-problems-using-grovers-algorithm + uuid: 09d1529c-b51a-11ec-b909-0242ac120002 + url: /ch-applications/satisfiability-grover + - id: hybrid-quantum-classical-neural-networks-with-pytorch-and-qiskit + uuid: 0cac4d14-b51a-11ec-b909-0242ac120002 + url: /ch-machine-learning/machine-learning-qiskit-pytorch + - id: the-variational-quantum-linear-solver + uuid: 1163f456-b51a-11ec-b909-0242ac120002 + url: /ch-paper-implementations/vqls + - id: flexible-representation-of-quantum-images-frqi + uuid: 14acf6a8-b51a-11ec-b909-0242ac120002 + url: /ch-applications/image-processing-frqi-neqr + +- title: 量子回路による量子ハードウェアの探究 + url: /quantum-hardware + sections: + - id: introduction-to-quantum-error-correction-via-the-repetition-code + uuid: 197f7f66-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/error-correction-repetition-code + - id: measurement-error-mitigation + uuid: 1c5bd31a-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/measurement-error-mitigation + - id: randomized-benchmarking + uuid: 1fa1d22c-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/randomized-benchmarking + - id: measuring-quantum-volume + uuid: 22ab0bd2-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/measuring-quantum-volume + + +- title: マイクロ波パルスによる量子ハードウェアの探究 + url: /quantum-hardware-pulses + sections: + - id: calibrating-qubits-using-qiskit-pulse + uuid: 292100ca-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/calibrating-qubits-pulse + - id: accessing-higher-energy-states-with-qiskit-pulse + uuid: 2bf0d316-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/accessing_higher_energy_states + - id: introduction-to-transmon-physics + uuid: 2e944e0e-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/transmon-physics + - id: circuit-quantum-electrodynamics + uuid: 31b2ccdc-b51a-11ec-b909-0242ac120002 + url: /ch-quantum-hardware/cQED-JC-SW + + +- title: 量子コンピューティング・ラボ + url: /ch-labs + sections: + - id: lab-1-quantum-circuits + uuid: 3ff5a7ec-b51a-11ec-b909-0242ac120002 + url: /ch-labs/Lab01_QuantumCircuits + - id: lab-2-quantum-measurement + uuid: 82eb9557-1420-487b-a3a5-72fdf38878e8 + url: /ch-labs/Lab02_QuantumMeasurement + + +- title: Appendix(付録) + url: /ch-appendix + sections: + - id: an-introduction-to-linear-algebra-for-quantum-computing + uuid: 5d2bb2ca-b51a-11ec-b909-0242ac120002 + url: /ch-appendix/linear_algebra + - id: basic-qiskit-syntax + uuid: 5fd6b79a-b51a-11ec-b909-0242ac120002 + url: /ch-appendix/qiskit + + +- title: ゲームとデモ + url: /ch-demos + sections: + - id: bonus-level-sandbox + uuid: 63a85f0e-b51a-11ec-b909-0242ac120002 + url: /ch-ex/hello-qiskit + - id: estimating-pi-using-quantum-phase-estimation-algorithm + uuid: 69b9707c-b51a-11ec-b909-0242ac120002 + url: /ch-demos/piday-code diff --git a/translations/ja/upcoming.ipynb b/translations/ja/upcoming.ipynb new file mode 100644 index 0000000..72052f3 --- /dev/null +++ b/translations/ja/upcoming.ipynb @@ -0,0 +1,54 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Upcoming topics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following topics are currently being developed for addition to the textbook." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Shor's Algorithm\n", + "2. Overview of Quantum Algorithms for NISQ Hardware\n", + "3. Mapping the Ising Model onto a Superconducting Quantum Computer\n", + "4. Solving Combinatorial Optimization Problems using QAOA\n", + "5. Solving Linear Systems of Equations using HHL\n", + "6. Securing Communications using BB84\n", + "7. Decoherence and Energy Relaxation: Measuring T2 and T1\n", + "8. Optimizing Microwave Pulses for High-Fidelity Qubit Operations\n", + "9. State and Process Tomography" + ] + } + ], + "metadata": { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/translations/ja/using-the-textbook.ipynb b/translations/ja/using-the-textbook.ipynb new file mode 100644 index 0000000..31b76bf --- /dev/null +++ b/translations/ja/using-the-textbook.ipynb @@ -0,0 +1,67 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fitting the Textbook to Your Needs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "The textbook can be followed as an independent course, however, it has been designed to accompany a traditional university course. The textbook shows students how to use Qiskit to experiment with quantum algorithms and hardware, and uses this to reinforce their understanding:\n", + "\n", + "\n", + "\n", + "\n", + "The goal of the textbook is to develop skills in the following areas.\n", + "\n", + "1. The mathematics behind quantum algorithms\n", + "2. Details about today's non-fault-tolerant quantum devices\n", + "3. Writing code in Qiskit to implement quantum algorithms on IBM's cloud quantum systems\n", + "\n", + "While this textbook does not attempt to be an expansive survey of the field, it does attempt to be as self-contained as possible.\n", + "\n", + "# Course Map\n", + "\n", + "The Qiskit textbook covers a wide range of materials, not all of which can be covered in a single course. You can use the guide below to tailor the textbook materials to fit your goals. Bear in mind that this is only a suggested way to use the textbook." + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "{% include coursemap_img.html %}" + ] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/what-is-quantum.ipynb b/translations/ja/what-is-quantum.ipynb new file mode 100644 index 0000000..b2eca93 --- /dev/null +++ b/translations/ja/what-is-quantum.ipynb @@ -0,0 +1,1470 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# 量子とは何か?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "outputs": [], + "source": [ + "# このコードはインタラクティブな図形を作成するためのものです\n", + "from bokeh.events import ButtonClick\n", + "from bokeh.layouts import row, column\n", + "from bokeh.models import ColumnDataSource, CustomJS, Button, Slider, DataRange1d, LabelSet, RadioButtonGroup, Div\n", + "from bokeh.plotting import figure\n", + "from bokeh.embed import file_html\n", + "from bokeh.resources import CDN\n", + "from bokeh.io import output_notebook, show, curdoc\n", + "import IPython" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "「量子物理学」は広く使用されている用語ですが、あまり理解されていません。「量子物理学」は「古典」物理学の理論では説明できない実験室での小さなものの振る舞いを説明するために、最初に使用された数学モデルです。 量子論はこの振る舞いを説明し、私たちの世界のより完全な全体像を与えてくれます。 そして以前は説明できなかったこの振る舞いを使用して、不可能と思われていた特定の計算を実行できることに気付きました。 これを量子コンピューティングと呼びます。\n", + "\n", + "量子コンピューティングは、量子物理学に踏み出す最適な方法です。 量子物理学の核となる概念を最も単純な形に抽出し、物理世界の複雑さを取り除きます。 それでは、いくつかの奇妙な量子現象を発見(そして説明!)して、「量子」が何であるかを味わっていきましょう。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 古典的確率の復習\n", + "\n", + "量子現象を理解するために、私たちは最初に「古典的な」確率を思い出す必要があります。 ここでの「古典的な」とは、量子より前、つまり学校で習うはずの普通の確率の樹形図を意味します。 この分野に既に精通している場合は、すぐに読み進めることができます。 それほど精通していない場合でも、心配しないでください。可能な限り最も単純な確率の問題をいくつか取り上げていきます。\n", + "\n", + "### 確率の樹形図\n", + "\n", + "もしかしたら学校で習った確率の樹形図を覚えているかもしれません。 アイデアは単純です。図面を使用して、起こりうるすべての不測の事態をマッピングし、発生する確率を計算していきます。\n", + "\n", + "例えばコインを持っているとしましょう。まず、それを表(Head)の状態に置きます。 次に、この公正なコインを投げてそれを見ると、50%の確率で再び表(Head)が表示され、50%の確率で裏(Tail)が表示されます。 これを次のように確率の樹形図にプロットできます。\n", + "\n", + "![](images/whatis/whatis1.png)\n", + "\n", + "各枝の終わりに結果を描画し、枝での各発生の確率を描画します。 同様に、裏(Tail)の状態で開始してコインを投げた場合、50%の確率で表(Head)が表示され、50%の確率で裏(Tail)が表示されます。\n", + "\n", + "![](images/whatis/whatis2.png)\n", + "\n", + "試してみることでこの動作をテストできます。 物理的にコインを取り出し、何度も実行し、それぞれの結果を記録することができます。 最終的に、結果の約50%が表(Head)で50%が裏(Tail)であることがわかります。 信頼できる結果を得るには、約500〜1000回のトスで十分です。\n", + "\n", + "### 実験 #1: シングルコイントス\n", + "\n", + "下の`Toss Coin`ボタンを押してコイントスをシミュレートし、結果を保存することで、コイントス実験をシミュレートできます。 初期状態を「Heads」または「Tails」に変更したり、コインの数(`No. of Coins`)スライダーを増やしたりして、多くの結果をすばやく得ることができます。結果を破棄し、やり直すためには`Reset`を押してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"Heads\", \"Tails\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Coin\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=0)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = Math.floor(Math.random() * 2);\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' H ', ' T '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" tosses):\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Coin\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Coins\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### さらに続けると\n", + "\n", + "確率の樹形図モデルが実験結果を正しく予測しているようです。 さらに進んで、確率の樹形図を連鎖させて、一連のイベントの結果を予測することができます。 たとえば、表(Head)状態から始めて、コインを投げてから、_コインをもう一度投げる_ としましょう。何が表示されますか? 樹形図を使ってみてみましょう。\n", + "\n", + "![](images/whatis/whatis3.png)\n", + "\n", + "\n", + "イベントの各組み合わせの確率を計算するために、枝に沿って乗算していきます。\n", + "\n", + "![](images/whatis/whatis4.gif)\n", + "\n", + "次に、結果を合計して、各結果の確率を計算します。\n", + "\n", + "![](images/whatis/whatis5.gif)\n", + "\n", + "2回のトス後に表(Head)となる確率は50%であり、裏(Tail)となる確率も50%であることがわかります。\n", + "\n", + "### 実験 #2: ダブルコイントス\n", + "\n", + "実験1と同様に、`Toss Coin Twice` ボタンを押して2つのコイントスをシミュレートし、最終結果を保存することで、コイントス実験をシミュレートできます。 初期状態や、`No. of Coins` を変更することで、多くの結果をすばやく得ることができます。結果を破棄し、やり直すためには、`Reset`を押してください。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"Heads\", \"Tails\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Coin Twice\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=0)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = Math.floor(Math.random() * 2);\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' H ', ' T '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" Double Tosses):\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Coin Twice\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Coins Twice\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "十分なトスを行うと、表(Head)または裏(Tail)を測定するのは等しい確率となり期待通りです。\n", + "\n", + "## 量子コイン\n", + "\n", + "古典的なコインの完全な説明ができたところで次は、量子「コイン」を紹介します。 量子コインは「量子ビット」と呼ばれています。\n", + "\n", + "量子ビットは操作が非常に難しいため、ラボでしか遊べないものです。 長年の科学的および技術的進歩により、今日の量子ビットが作成されています。量子コンピューティングを通して学習することで、物理的な複雑さを無視することができます。また量子ビットを測定すると2つの状態のうち1つになることを覚えておいてください。 表(Head)と裏(Tail)の2つの状態の代わりに、量子ビットの2つの状態を0と1と呼びます。\n", + "\n", + "### 実験 #3: 量子コイントス\n", + "\n", + "量子コインを試して、どのように動作するかを見てみましょう。 量子トスを行い、コインの状態を測定して記録します。 これは、上記のセクションの古典的なコイントスと同じです。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false, + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"0\", \"1\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Quantum Coin\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=0)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = Math.floor(Math.random() * 2);\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' 0 ', ' 1 '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" Quantum Tosses):\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Quantum Coin\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Quantum Coins\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "確率の樹形図を使用して、量子コインについて説明します。 これは、0の状態から、コイントスで0または1を測定する確率が50-50になるように見えます。古典的なコインで行ったように、これを樹形図にプロットしてみましょう。\n", + "\n", + "![](images/whatis/whatis6.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"0\", \"1\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Quantum Coin\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=1)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = Math.floor(Math.random() * 2);\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' 0 ', ' 1 '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" Quantum Tosses):\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Quantum Coin\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Quantum Coins\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "同様に、1の状態から、コイントスにより0または1を測定する確率は50-50になります。確率の樹形図は次のようになります。\n", + "\n", + "![](images/whatis/whatis7.png)\n", + "\n", + "### 実験 #4: ダブル量子コイントス\n", + "\n", + "これで、量子コインの動作を予測するモデルができました。 優れた科学者のように、新しいシナリオでそれをテストし、正しいか確認したいと思います。 以前と同じようにダブルコイントスを試してみましょう。 古典的なコインと同じように、量子コインのモデルでは、どの状態で開始するかに関係なく、0または1を測定する確率が50-50であると予測しています。\n", + "\n", + "![](images/whatis/whatis8.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "さあ、やってみましょう! 量子コインを2回投げます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"0\", \"1\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Quantum Coin Twice\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=0)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label,\n", + " init_state_radio=init_state_radio), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = init_state_radio.active;\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' 0 ', ' 1 '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" Double Quantum Tosses):\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Quantum Coin Twice\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Quantum Coins Twice\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "うーん…これは予想外の結果です。 初期状態を1に設定するとどうなるか見てみましょう。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [ + "remove_input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " Bokeh Application\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_labels = [\"0\", \"1\"]\n", + "initial_counts = [0]*2\n", + "initial_labels = [\"0.00%\"]*2\n", + "\n", + "source = ColumnDataSource(data=dict(x=data_labels, top=initial_counts, top_percent=initial_labels))\n", + "\n", + "plot = figure(\n", + " plot_height=500, \n", + " plot_width=500,\n", + " sizing_mode=\"scale_width\",\n", + " tools=\"reset\",\n", + " x_range=data_labels,\n", + " y_range=DataRange1d(start=0, range_padding = 20, range_padding_units='absolute'),\n", + " y_axis_label=\"Counts\")\n", + "plot.vbar(top='top',x='x',width=0.5,source=source, color=\"#BE95FF\")\n", + "labels = LabelSet(x='x', y='top', text='top_percent', level='glyph',\n", + " x_offset=-20, y_offset=12, source=source, render_mode='canvas')\n", + "plot.add_layout(labels)\n", + "\n", + "\n", + "\n", + "# ボタンとスライダーを定義する\n", + "tossbtn = Button(label=\"Toss Quantum Coin Twice\")\n", + "repeat_slider = Slider(title=\"No. of Coins\", start=1, end=50, step=1, value=0)\n", + "radio_label = Div(text=\"Initial State:\")\n", + "init_state_radio = RadioButtonGroup(name=\"Initial State\", labels=data_labels, active=1)\n", + "resetbtn = Button(label=\"Reset\")\n", + "results_label = Div(text=\"Results:\")\n", + "resultsHTML = Div(text=\"\", style={'overflow-y': 'auto', 'max-height': '250px'})\n", + "\n", + "# コールバックを定義する\n", + "toss_callback = CustomJS(args=dict(source=source, p=plot, \n", + " s=repeat_slider, \n", + " resultsHTML=resultsHTML, \n", + " results_label=results_label,\n", + " init_state_radio=init_state_radio), \n", + " code=\"\"\"\n", + " for (var i = 0; i <= s.value; ++i){\n", + " const result = init_state_radio.active;\n", + " source.data.top[result] += 1;\n", + " resultsHTML.text += [' 0 ', ' 1 '][result]\n", + " }\n", + " const total_tosses = source.data.top[0] + source.data.top[1];\n", + " results_label.text = \"Results (\" + total_tosses + \" Quantum Tosses)\";\n", + " \n", + " for (var i = 0; i<2; ++i){\n", + " const frac = source.data.top[i] / source.data.top.reduce((a, b) => a + b, 0);\n", + " source.data.top_percent[i] = (frac*100).toFixed(2) + \"%\";\n", + " }\n", + " if (Math.max(...source.data.top) > 22) {\n", + " p.y_range.range_padding_units = 'percent';\n", + " p.y_range.range_padding = 1;\n", + " } else {\n", + " p.y_range.range_padding_units = 'absolute';\n", + " p.y_range.range_padding = 30 - Math.max(...source.data.top);\n", + " };\n", + " source.change.emit();\n", + " \"\"\")\n", + "\n", + "slider_callback = CustomJS(args=dict(tossbtn=tossbtn), \n", + " code=\"\"\"\n", + " const repeats = cb_obj.value;\n", + " if (repeats == 1) {\n", + " tossbtn.label = \"Toss Quantum Coin Twice\";\n", + " }\n", + " else {\n", + " tossbtn.label = \"Toss \" + repeats + \" Quantum Coins Twice\";\n", + " };\n", + " \"\"\")\n", + "\n", + "reset_callback = CustomJS(args=dict(source=source, resultsHTML=resultsHTML, results_label=results_label), code=\"\"\"\n", + " source.data.top = [0,0];\n", + " source.data.top_percent = ['0.00%', '0.00%'];\n", + " source.change.emit();\n", + " resultsHTML.text = \"\";\n", + " results_label.text = \"Results:\";\n", + " \"\"\")\n", + "\n", + "# コールバックをボタン/スライダーにリンクする\n", + "tossbtn.js_on_event(ButtonClick, toss_callback)\n", + "repeat_slider.js_on_change('value', slider_callback)\n", + "resetbtn.js_on_event(ButtonClick, reset_callback)\n", + "\n", + "# レイアウトの作成\n", + "control_panel = column(tossbtn, \n", + " repeat_slider, \n", + " radio_label, \n", + " init_state_radio, \n", + " resetbtn, \n", + " results_label, \n", + " resultsHTML)\n", + "\n", + "layout = row(plot, control_panel)\n", + "\n", + "# HTMLを出力\n", + "html_repr = file_html(layout, CDN)\n", + "IPython.display.HTML(html_repr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "私たちの予測とはまったく一致しません! このモデルでは説明できません! これは、物理学者が20世紀初頭に遭遇したのと同じ問題です。 答えを探すことで、量子物理学の発展につながりました。量子コイントスを説明するためにその答えを使ってみましょう。\n", + "\n", + "## 量子モデル\n", + "\n", + "要するに、量子論は負の数の確率論です。\n", + "\n", + "これは何を意味するのでしょうか? 意味のない負の確率を持つことはできません。 これに対応するために、_振幅_ と呼ばれる新しい量を使用し、代わりにこれらを樹形図にプロットします。 負の確率を持つことはできず、すべての確率を合計して1にする必要があるという事実のため、数学的なトリックを使用します。振幅を2乗して確率を計算します。\n", + "\n", + "例を見てみましょう。 単一量子コイントスの振幅の樹形図は次のようになります。\n", + "\n", + "![](images/whatis/whatis9.png)\n", + "\n", + "状態0から開始して、量子コイントスが両方の結果に等しい振幅を割り当てることがわかります。 これらの振幅を2乗すると、0または1を測定する正しい確率が得られます(50-50の確率)。 振幅が $\\sqrt{\\tfrac{1}{2}}$ であることをどうやって知りましたか? こうすると正しい答えを得られるからです!\n", + "\n", + "状態1から始めると、振幅の樹形図は異なります。\n", + "\n", + "![](images/whatis/whatis10.png)\n", + "\n", + "1の結果の振幅に最初の負の数が現れています。 振幅を二乗して確率を計算すると、この負の符号が消え(負の数×負の値は正であることを思い出してください)、上記を測定すると50-50の確率となります。 興味深い結果は、これらを連鎖させるとおきます。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ダブル量子コイントスの説明\n", + "\n", + "古典的な確率と同様に、分岐に沿って振幅を乗算して、各結果の振幅を計算します。\n", + "\n", + "![](images/whatis/whatis11.gif)\n", + "\n", + "そして、各結果を測定する確率を計算するために、これらの振幅を合計し、次にそれらを二乗します。\n", + "\n", + "![](images/whatis/whatis12.gif)\n", + "\n", + "状態1のコイン(量子ビット)を見つける振幅が互いに打ち消し合っていることがわかります。これを干渉と呼びます。 初期状態が1のときにこのモデルが機能することを確かめてください。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 量子コンピューティングとは何か?\n", + "\n", + "干渉効果は有用であることがわかりました。 量子コイントスなどの操作を組み合わせて、より効率的なアルゴリズムを構築できます。 これらのアルゴリズムは、干渉効果を使用して、間違った答えをすばやくキャンセルし、正しい答えを測定する可能性を高くすることができます。 これが量子コンピューティングの背後にある考え方です。" + ] + } + ], + "metadata": { + "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.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/translations/ja/widgets-index.ipynb b/translations/ja/widgets-index.ipynb new file mode 100644 index 0000000..94986f2 --- /dev/null +++ b/translations/ja/widgets-index.ipynb @@ -0,0 +1,368 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "remove_cell" + ] + }, + "source": [ + "# ウィジェットのデモンストレーション" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "実験できる実用的なコードを提供するだけでなく、本テキストブックは特定の概念を説明するのに役立つ多くのウィジェットも提供します。 ここでは、それらをインデックスとして提供しています。 各セルを実行してウィジェットを操作します。\n", + "\n", + "**注意:** コードセルの左下隅にある 「Try」 を押すか、[IBM Quantum Experience](https://quantum-computing.ibm.com/jupyter/user/qiskit-textbook/content/widgets-index.ipynb) でこのページを表示して、対話機能を有効にする必要があります。\n", + "\n", + "### インタラクティブコード\n", + "\n", + "本テキストブックの最も重要なインタラクティブ要素は、コードを変更して実験する機能です。 これは本テキストブックのWebページで直接可能ですが、Jupyterノートブックとして表示して、セルを追加したり、変更を保存したりすることもできます。 インタラクティブなPythonコードでは、[ipywidgets](https://ipywidgets.readthedocs.io/en/latest/) を介したウィジェットも使用できます。以降、Qiskit テキストブックが提供するウィジェットの一部を紹介します。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "This is code works!\n" + ] + } + ], + "source": [ + "#「try」をクリックしてから「run」をクリックして出力を確認します\n", + "print(\"This is code works!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ゲートデモ\n", + "\n", + "このウィジェットは、Q-sphereを通して示される、量子ビットに対するいくつかのゲートの効果を示しています。 [単一量子ビットゲート](./ch-states/single-qubit-gates.html)で多く使用されています。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "44955dcd74684d46ac7af35c7939f48d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(HBox(children=(Button(description='I', layout=Layout(height='3em', width='3em'), style=ButtonSt…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "13f29fb451fc44fca10c9ad4b4b8efd9", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x01\\xf8\\x00\\x00\\x01\\xf8\\x08\\x06\\x00\\x00\\x00\\xa6(\\xff…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import gate_demo\n", + "gate_demo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### バイナリデモンストレーション\n", + "\n", + "このシンプルなウィジェットを使用すると、2進数を操作できます。 [原子の計算](./ch-states/atoms-computation.html)にあります。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8fee1d52b5d14f99961d88da2a81b92d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Label(value='Toggle the bits below to change the binary number.'), Label(value='Think of a numb…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f37b57b89a924c97a93c44609cc8013f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTML(value='
    Binary   Decimal\\n 00000 = 0
    ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import binary_widget\n", + "binary_widget(nbits=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### スケーラブルな回路ウィジェット\n", + "\n", + "[量子フーリエ変換の章](./ch-algorithms/quantum-fourier-transform.html) のような回路を使用する場合、さまざまな量子ビットの数にどのようにスケーリングするかを確認すると便利なことがよくあります。 関数が回路(QuantumCircuit)といくつかの量子ビット(int)を入力として受け取る場合、以下のウィジェットを使用してどのようにスケーリングするかを確認できます。" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:11: DeprecationWarning: The QuantumCircuit.cu1 method is deprecated as of 0.16.0. It will be removed no earlier than 3 months after the release date. You should use the QuantumCircuit.cp method instead, which acts identically.\n", + " # This is added back by InteractiveShellApp.init_path()\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0c2accf3135349858cf4a642a33c94f2", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "IntSlider(value=4, max=8, min=1)" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d9961e8f55984614b459832c1935f3db", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x04U\\x00\\x00\\x01\\x08\\x08\\x06\\x00\\x00\\x00\\x9eK\\xcbE\\x…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import scalable_circuit\n", + "from numpy import pi\n", + "\n", + "def qft_rotations(circuit, n):\n", + " \"\"\"Performs qft on the first n qubits in circuit (without swaps)\"\"\"\n", + " if n == 0:\n", + " return circuit\n", + " n -= 1\n", + " circuit.h(n)\n", + " for qubit in range(n):\n", + " circuit.cu1(pi/2**(n-qubit), qubit, n)\n", + " # 関数の最後で、次の量子ビットで同じ関数を再度呼び出します(関数の前半でnを1つ減らしました)\n", + " qft_rotations(circuit, n)\n", + "\n", + "def swap_qubits(circuit, n):\n", + " \"\"\"Reverse the order of qubits\"\"\"\n", + " for qubit in range(n//2):\n", + " circuit.swap(qubit, n-qubit-1)\n", + " return circuit\n", + "\n", + "def qft(circuit, n):\n", + " \"\"\"QFT on the first n qubits in circuit\"\"\"\n", + " qft_rotations(circuit, n)\n", + " swap_qubits(circuit, n)\n", + " return circuit\n", + "\n", + "scalable_circuit(qft)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ベルンシュタイン-ヴァジラニ ウィジェット\n", + "\n", + "このウィジェットを介して、[ベルンシュタイン-ヴァジラニ アルゴリズム](./ch-algorithms/bernstein-vazirani.html) のインスタンスから数学を追跡できます。 ボタンを押して、アルゴリズムのさまざまなステップを適用します。 最初の引数は量子ビットの数を設定し、2番目の引数は非表示のバイナリ文字列を設定してからセルを再実行します。 `hide_oracle = False`を設定してセルを再実行することにより、オラクルの内容を明らかにすることもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "05d26678f0ea441dbcac20c3bc221a6e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='H⊗ⁿ', style=ButtonStyle()), Button(description='Oracle', style=ButtonStyle(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6b627f8bf87841f197394e212fffd3c6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTMLMath(value='$$ |00\\\\rangle = |00\\\\rangle $$')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3098efec99c34656867b43243515eef1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x00\\xce\\x00\\x00\\x00\\xcc\\x08\\x06\\x00\\x00\\x00;\\xd7\\x9c…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import bv_widget\n", + "bv_widget(2, \"11\", hide_oracle=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ドイチュ-ジョザ ウィジェット\n", + "\n", + "ベルンシュタイン-ヴァジラニ ウィジェットと同様に、ドイチュ-ジョザ ウィジェットを介して、[ドイチュ-ジョザ アルゴリズム](./ch-algorithms/deutsch-josza.html)のインスタンスから数学を追跡できます。 ボタンを押して、アルゴリズムのさまざまなステップを適用します。 「case」は\"balanced\"または\"constant\"、「size」は\"small\"または\"large\"にすることができます。 ランダムに選択されたオラクルに対してセルを再実行します。 `hide_oracle = False`を設定してセルを再実行することにより、オラクルの内容を明らかにすることもできます。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "d58c962e409f4625a6ea8345292986b7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='H⊗ⁿ', style=ButtonStyle()), Button(description='Oracle', style=ButtonStyle(…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5093e01199c44b1d91969a1bd600be6a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HTMLMath(value='$$ |0000\\\\rangle = |0000\\\\rangle $$')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1e2e317e4a184d45b90c563e8d05fca5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x00\\xce\\x00\\x00\\x01E\\x08\\x06\\x00\\x00\\x00\\xa4\\x1f\\xd2…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from qiskit_textbook.widgets import dj_widget\n", + "dj_widget(size=\"large\", case=\"balanced\", hide_oracle=True)" + ] + } + ], + "metadata": { + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}