Skip to content

Instantly share code, notes, and snippets.

@goerz
Last active November 25, 2020 17:31
Show Gist options
  • Save goerz/512f3c3e088d78e2d0d24d25672b9474 to your computer and use it in GitHub Desktop.
Save goerz/512f3c3e088d78e2d0d24d25672b9474 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$\\newcommand{tr}[0]{\\operatorname{tr}}\n",
"\\newcommand{diag}[0]{\\operatorname{diag}}\n",
"\\newcommand{abs}[0]{\\operatorname{abs}}\n",
"\\newcommand{pop}[0]{\\operatorname{pop}}\n",
"\\newcommand{aux}[0]{\\text{aux}}\n",
"\\newcommand{opt}[0]{\\text{opt}}\n",
"\\newcommand{tgt}[0]{\\text{tgt}}\n",
"\\newcommand{init}[0]{\\text{init}}\n",
"\\newcommand{lab}[0]{\\text{lab}}\n",
"\\newcommand{rwa}[0]{\\text{rwa}}\n",
"\\newcommand{bra}[1]{\\langle#1\\vert}\n",
"\\newcommand{ket}[1]{\\vert#1\\rangle}\n",
"\\newcommand{Bra}[1]{\\left\\langle#1\\right\\vert}\n",
"\\newcommand{Ket}[1]{\\left\\vert#1\\right\\rangle}\n",
"\\newcommand{Braket}[2]{\\left\\langle #1\\vphantom{#2} \\mid #2\\vphantom{#1}\\right\\rangle}\n",
"\\newcommand{op}[1]{\\hat{#1}}\n",
"\\newcommand{Op}[1]{\\hat{#1}}\n",
"\\newcommand{dd}[0]{\\,\\text{d}}\n",
"\\newcommand{Liouville}[0]{\\mathcal{L}}\n",
"\\newcommand{DynMap}[0]{\\mathcal{E}}\n",
"\\newcommand{identity}[0]{\\mathbf{1}}\n",
"\\newcommand{Norm}[1]{\\lVert#1\\rVert}\n",
"\\newcommand{Abs}[1]{\\left\\vert#1\\right\\vert}\n",
"\\newcommand{avg}[1]{\\langle#1\\rangle}\n",
"\\newcommand{Avg}[1]{\\left\\langle#1\\right\\rangle}\n",
"\\newcommand{AbsSq}[1]{\\left\\vert#1\\right\\vert^2}\n",
"\\newcommand{Re}[0]{\\operatorname{Re}}\n",
"\\newcommand{Im}[0]{\\operatorname{Im}}$"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.673922Z",
"start_time": "2020-11-25T14:23:31.670394Z"
}
},
"outputs": [],
"source": [
"from functools import partial"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.682709Z",
"start_time": "2020-11-25T14:23:31.678795Z"
}
},
"outputs": [],
"source": [
"import qalgebra\n",
"from qalgebra import *"
]
},
{
"cell_type": "code",
"execution_count": 162,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.692836Z",
"start_time": "2020-11-25T14:23:31.688077Z"
}
},
"outputs": [],
"source": [
"import sympy\n",
"import numpy as np\n",
"import matplotlib.pylab as plt\n",
"from sympy import exp, exp_polar, sin, cos, I, pi as π\n",
"from symbolic_equation import Eq\n",
"from IPython.display import display, Markdown"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.703202Z",
"start_time": "2020-11-25T14:23:31.696238Z"
}
},
"outputs": [],
"source": [
"init_printing()\n",
"Eq.latex_renderer = staticmethod(latex)"
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.713046Z",
"start_time": "2020-11-25T14:23:31.707099Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'4cbac73405101c9b74371cb8ef183ceb473e554b'"
]
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qalgebra.__git_version__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By default, qalgebra sorts sums by coefficients. Here, we want to sort by eigenstates instead:"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.722554Z",
"start_time": "2020-11-25T14:23:31.716622Z"
}
},
"outputs": [],
"source": [
"def _afi_order(state):\n",
" from qalgebra.utils.ordering import KeyTuple, expr_order_key\n",
" if isinstance(state, ScalarTimesKet):\n",
" return KeyTuple((_afi_order(state.term), state.coeff))\n",
" elif isinstance(state, BasisKet):\n",
" return KeyTuple((state.label,))\n",
" else:\n",
" return expr_order_key(state)\n",
"\n",
"KetPlus.order_key = _afi_order"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Utility Functions"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.730439Z",
"start_time": "2020-11-25T14:23:31.725746Z"
}
},
"outputs": [],
"source": [
"def incl_range(a, b, step=1):\n",
" \"\"\"Inclusive range (a, b)\"\"\"\n",
" e = 1 if step > 0 else -1\n",
" return range(a, b + e, step)"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.741572Z",
"start_time": "2020-11-25T14:23:31.734630Z"
}
},
"outputs": [],
"source": [
"def expand_sum(U):\n",
" \"\"\"Decorator for expanding a gate onto a superposition of states.\"\"\"\n",
" def U_with_expand(state, **kwargs):\n",
" if isinstance(state, KetPlus):\n",
" terms = [U_with_expand(psi, **kwargs) for psi in state.args]\n",
" return KetPlus.create(*terms)\n",
" elif isinstance(state, ScalarTimesKet):\n",
" coeff, term = state.args\n",
" return coeff * U_with_expand(term, **kwargs)\n",
" else:\n",
" res = U(state, **kwargs)\n",
" if res is None:\n",
" raise NotImplementedError(\n",
" \"We don't know how to apply %s to %s\" % (U.__name__, state)\n",
" )\n",
" return res\n",
" return U_with_expand"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.752869Z",
"start_time": "2020-11-25T14:23:31.745295Z"
}
},
"outputs": [],
"source": [
"def set_phase(expr, relative_to=0):\n",
" \"\"\"Apply a global phase factor.\n",
"\n",
" For simple states, this sets the global phase relative to the given level.\n",
" \"\"\"\n",
" c0 = (ket(relative_to).dag() * expr).expand()\n",
" if pattern(ScalarValue, pattern(sympy.Mul)).match(c0):\n",
" phase_factor = sympy.expand_trig((c0.conjugate() / sympy.Abs(c0)))\n",
" return phase_factor * expr\n",
" else:\n",
" return expr\n",
"\n",
" def _rewrite(c0, ket0, kets):\n",
" phase_factor = sympy.expand_trig((c0.conjugate() / sympy.Abs(c0)))\n",
" return KetPlus.create(\n",
" c0 * phase_factor * ket0, *[(phase_factor * ket) for ket in kets]\n",
" )\n",
"\n",
" return expr.apply_rule(pat, _rewrite, recursive=False)"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.769841Z",
"start_time": "2020-11-25T14:23:31.756671Z"
}
},
"outputs": [],
"source": [
"def to_polar(expr):\n",
" \"\"\"Rewrite coefficients in polar form.\"\"\"\n",
" pat = pattern(ScalarTimesKet, wc(\"coeff\"), wc(\"state\"))\n",
"\n",
" def coeff_to_polar(coeff, state):\n",
" factors1 = [] # everything not to be rewritten\n",
" factors2 = [] # everything to be written in polar form\n",
" has_half = False\n",
" has_sqrt2 = False\n",
" half = sympy.Rational(1, 2)\n",
" for arg in coeff.val.args:\n",
" if arg == half:\n",
" factors1.append(half)\n",
" has_half = True\n",
" elif arg == -half:\n",
" factors1.append(half)\n",
" factors2.append(-1)\n",
" has_half = True\n",
" elif arg == sympy.sqrt(2):\n",
" factors1.append(arg)\n",
" has_sqrt2 = True\n",
" else:\n",
" if isinstance(arg, sympy.exp):\n",
" factors1.append(arg)\n",
" else:\n",
" factors2.append(arg)\n",
" if has_half and has_sqrt2:\n",
" arg = sympy.log(sympy.Mul(*factors2))\n",
" if arg == 0:\n",
" exp_factor = 1\n",
" else:\n",
" exp_factor = sympy.exp_polar(arg, evaluate=False)\n",
" coeff = sympy.Mul(sympy.Mul(*factors1), exp_factor, evaluate=False)\n",
" return coeff * state\n",
"\n",
" return expr.apply_rule(pat, coeff_to_polar)"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.779573Z",
"start_time": "2020-11-25T14:23:31.774010Z"
}
},
"outputs": [],
"source": [
"def sym_norm(state):\n",
" \"\"\"The symbolically calculated norm of the given `state`.\"\"\"\n",
" nrm = 0\n",
" if isinstance(state, KetPlus):\n",
" for term in state.args:\n",
" nrm += term.coeff * term.coeff.conjugate()\n",
" else:\n",
" raise NotImplementedError()\n",
" try:\n",
" return nrm.simplify()\n",
" except AttributeError:\n",
" return nrm"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.788369Z",
"start_time": "2020-11-25T14:23:31.782406Z"
}
},
"outputs": [],
"source": [
"def apply_gates(\n",
" initial_state,\n",
" *gates,\n",
" ret=\"state\",\n",
" expand=True,\n",
" polar=False,\n",
" use_relative_phase=False,\n",
"):\n",
" \"\"\"Apply a series of gates ``U(state)`` to the `initial_state`.\"\"\"\n",
" state = initial_state\n",
" states = []\n",
" for U in gates:\n",
" state = U(state)\n",
" if polar:\n",
" state = to_polar(state)\n",
" if expand:\n",
" state = state.expand()\n",
" if use_relative_phase:\n",
" state = set_phase(state)\n",
" states.append(state)\n",
" if ret == 'state':\n",
" return state\n",
" elif ret == 'states':\n",
" return states\n",
" else:\n",
" raise ValueError(f'Invalid {ret=}')"
]
},
{
"cell_type": "code",
"execution_count": 172,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.798117Z",
"start_time": "2020-11-25T14:23:31.791704Z"
}
},
"outputs": [],
"source": [
"def arg(expr):\n",
" \"\"\"Return the argument (in radians) of a complex number.\n",
"\n",
" This improves on `sympy.arg` by recognizing and evaluating some \"trivial\"\n",
" expressions::\n",
"\n",
" >>> from sympy import exp, sin, I, symbols\n",
" >>> ϕ = symbols('phi', positive=True)\n",
" >>> expr = 2 * exp(I * 2 * sin(ϕ)**2)\n",
" >>> arg(expr) == 2 * sin(ϕ)**2\n",
" True\n",
" \"\"\"\n",
" if isinstance(expr, sympy.Mul):\n",
" args = [arg(a) for a in expr.args]\n",
" return sympy.Add(*args)\n",
" ϕ = sympy.Wild('ϕ')\n",
" m = expr.match(exp(I * ϕ))\n",
" if m:\n",
" if m[ϕ].is_real:\n",
" return m[ϕ]\n",
" else:\n",
" return sympy.arg(expr)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-10-17T16:29:47.587978Z",
"start_time": "2020-10-17T16:29:47.582434Z"
}
},
"source": [
"## Definition of Hilbert space and states"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.806368Z",
"start_time": "2020-11-25T14:23:31.802144Z"
}
},
"outputs": [],
"source": [
"# This is pretty arbitrary, but we need something specific so that we can\n",
"# properly define negative momentum numbers\n",
"N_MIN = -15\n",
"N_MAX = 15"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.813607Z",
"start_time": "2020-11-25T14:23:31.809172Z"
}
},
"outputs": [],
"source": [
"hs = LocalSpace('AFI', basis=incl_range(N_MIN, N_MAX))"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.826242Z",
"start_time": "2020-11-25T14:23:31.816513Z"
}
},
"outputs": [],
"source": [
"def ket(label, hs=hs):\n",
" \"\"\"Momentum eigenstate.\"\"\"\n",
" if isinstance(label, IdxSym):\n",
" return BasisKet(FockIndex(label), hs=hs)\n",
" else:\n",
" return hs.basis_state(str(label))"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.834723Z",
"start_time": "2020-11-25T14:23:31.830358Z"
}
},
"outputs": [],
"source": [
"def bra(label, hs=hs):\n",
" \"\"\"Momentum co-state.\"\"\"\n",
" return ket(label, hs=hs).dag()"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.843112Z",
"start_time": "2020-11-25T14:23:31.837972Z"
}
},
"outputs": [],
"source": [
"def tls_state(level_1=0, level_2=1, ampl_1=symbols('alpha'), ampl_2=symbols('beta')):\n",
" \"\"\"A generate symbolic state on two levels.\"\"\"\n",
" return ampl_1 * ket(level_1) + ampl_2 * ket(level_2)"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.853006Z",
"start_time": "2020-11-25T14:23:31.846889Z"
}
},
"outputs": [],
"source": [
"def tls_50_state(level_1=0, level_2=1, phase1=None, phase2=None):\n",
" \"\"\"A generate symbolic state on two levels in a 50/50 superposition.\"\"\"\n",
" ϕ1 = symbols('phi_%s' % level_1, real=True)\n",
" ϕ2 = symbols('phi_%s' % level_2, real=True)\n",
" if phase1 is not None:\n",
" ϕ1 = phase1\n",
" if phase2 is not None:\n",
" ϕ2 = phase2\n",
" ampl_1 = exp(I * ϕ1) / sqrt(2)\n",
" ampl_2 = exp(I * ϕ2) / sqrt(2)\n",
" return tls_state(level_1, level_2, ampl_1=ampl_1, ampl_2=ampl_2)"
]
},
{
"cell_type": "code",
"execution_count": 179,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.860684Z",
"start_time": "2020-11-25T14:23:31.855906Z"
}
},
"outputs": [],
"source": [
"def ketbra(label1, label2, hs=hs):\n",
" \"\"\"Matrix element.\"\"\"\n",
" return KetBra(ket(label1, hs=hs), ket(label2, hs=hs))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Rabi-pulse gates"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Effective Hamiltonian for Rabi cycling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use $\\Omega$ to denot the *pulse area* here. That is, we include dt directly"
]
},
{
"cell_type": "code",
"execution_count": 180,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.869474Z",
"start_time": "2020-11-25T14:23:31.864374Z"
}
},
"outputs": [],
"source": [
"Ω = symbols('Omega', positive=True)\n",
"Hdt = sympy.Matrix([[0, -Ω/2], [-Ω/2, 0]])"
]
},
{
"cell_type": "code",
"execution_count": 181,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.883945Z",
"start_time": "2020-11-25T14:23:31.874967Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{pmatrix}0 & - \\frac{\\Omega}{2} \\\\- \\frac{\\Omega}{2} & 0\\end{pmatrix}$"
],
"text/plain": [
"<qalgebra.core.matrix_algebra.Matrix at 0x11defc7f0>"
]
},
"execution_count": 181,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Matrix(Hdt)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Time evolution operator for π and π/2 pulses"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now verify the time evolution operator for $\\pi$ and $\\pi/2$ pulses"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.915852Z",
"start_time": "2020-11-25T14:23:31.888284Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{pmatrix}0 & i \\\\i & 0\\end{pmatrix}$"
],
"text/plain": [
"<qalgebra.core.matrix_algebra.Matrix at 0x11cab93d0>"
]
},
"execution_count": 182,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Matrix((-I * Hdt).exp().subs({Ω: sympy.pi}))"
]
},
{
"cell_type": "code",
"execution_count": 183,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.940904Z",
"start_time": "2020-11-25T14:23:31.918540Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{pmatrix}\\frac{1}{\\sqrt{2}} & \\frac{i}{\\sqrt{2}} \\\\\\frac{i}{\\sqrt{2}} & \\frac{1}{\\sqrt{2}}\\end{pmatrix}$"
],
"text/plain": [
"<qalgebra.core.matrix_algebra.Matrix at 0x11e0148e0>"
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_π_half = (\n",
" Matrix((-I * Hdt).exp().subs({Ω: sympy.pi / 2}))\n",
" .simplify_scalar(lambda v: v.rewrite(sympy.sin))\n",
")\n",
"U_π_half"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These operators are unitary:"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.953288Z",
"start_time": "2020-11-25T14:23:31.945814Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\begin{pmatrix}1 & 0 \\\\0 & 1\\end{pmatrix}$"
],
"text/plain": [
"<qalgebra.core.matrix_algebra.Matrix at 0x11e011b50>"
]
},
"execution_count": 184,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_π_half * U_π_half.dag()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Based on this, we create functions that calculate the application to a given state:"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.964422Z",
"start_time": "2020-11-25T14:23:31.956748Z"
}
},
"outputs": [],
"source": [
"def _make_tls_U(U_repr):\n",
" \"\"\"Make a function `U` that calculates the application of `U_repr` on a basis state.\"\"\"\n",
" ket0_repr = sympy.Matrix([[1], [0]])\n",
" ket1_repr = sympy.Matrix([[0], [1]])\n",
"\n",
" def U(state, level_1, level_2):\n",
" ket0 = ket(level_1)\n",
" ket1 = ket(level_2)\n",
" ket_repr = {\n",
" ket0: ket0_repr,\n",
" ket1: ket1_repr,\n",
" }\n",
" if state in [ket0, ket1]:\n",
" a0 = (ket0_repr.H @ U_repr @ ket_repr[state])[0, 0].rewrite(sympy.sin)\n",
" a1 = (ket1_repr.H @ U_repr @ ket_repr[state])[0, 0].rewrite(sympy.sin)\n",
" return a0 * ket0 + a1 * ket1\n",
" else:\n",
" if isinstance(state, BasisKet):\n",
" return state\n",
"\n",
" return U"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:31.994459Z",
"start_time": "2020-11-25T14:23:31.967408Z"
}
},
"outputs": [],
"source": [
"U_pi = expand_sum(_make_tls_U((-I * Hdt).exp().subs({Ω: sympy.pi})))\n",
"U_pi_half = expand_sum(_make_tls_U((-I * Hdt).exp().subs({Ω: sympy.pi / 2})))"
]
},
{
"cell_type": "code",
"execution_count": 187,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.016681Z",
"start_time": "2020-11-25T14:23:31.997541Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |1⟩^(AFI)"
]
},
"execution_count": 187,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"to_polar(U_pi_half(ket(0), level_1=0, level_2=1))"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.034678Z",
"start_time": "2020-11-25T14:23:32.019759Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(1/√2) exp_polar(ⅈ π/2) |0⟩^(AFI) + 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 188,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"to_polar(U_pi_half(ket(1), level_1=0, level_2=1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can show that a $\\pi$-pulse acts as a SWAP gate (up to a global phase $\\pi/2$; that is, a factor $i$)"
]
},
{
"cell_type": "code",
"execution_count": 189,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.053001Z",
"start_time": "2020-11-25T14:23:32.039629Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$i \\beta \\left\\lvert 0 \\right\\rangle^{(AFI)} + i \\alpha \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ β |0⟩^(AFI) + ⅈ α |1⟩^(AFI)"
]
},
"execution_count": 189,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_pi(tls_state(0, 1), level_1=0, level_2=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Comparison of π/2 pulse and Hadamard gate"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The effect of a $\\pi/2$ pulse on a general state:"
]
},
{
"cell_type": "code",
"execution_count": 190,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.082273Z",
"start_time": "2020-11-25T14:23:32.057094Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{\\alpha}{\\sqrt{2}} + \\frac{i \\beta}{\\sqrt{2}}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i \\alpha}{\\sqrt{2}} + \\frac{\\beta}{\\sqrt{2}}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(α / √2 + (ⅈ β) / √2) |0⟩^(AFI) + ((ⅈ α) / √2 + β / √2) |1⟩^(AFI)"
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_pi_half(tls_state(0, 1), level_1=0, level_2=1).expand()"
]
},
{
"cell_type": "code",
"execution_count": 191,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.091757Z",
"start_time": "2020-11-25T14:23:32.084944Z"
}
},
"outputs": [],
"source": [
"U_Hadamard = expand_sum(_make_tls_U(sympy.Matrix([[1, 1], [1, -1]]) / sqrt(2)))"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.110130Z",
"start_time": "2020-11-25T14:23:32.094692Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{\\alpha}{\\sqrt{2}} + \\frac{\\beta}{\\sqrt{2}}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{\\alpha}{\\sqrt{2}} - \\frac{\\beta}{\\sqrt{2}}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(α / √2 + β / √2) |0⟩^(AFI) + (α / √2 + (-1/√2) β) |1⟩^(AFI)"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Hadamard(tls_state(0, 1), level_1=0, level_2=1).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### AFI components"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Splitter"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.119098Z",
"start_time": "2020-11-25T14:23:32.113317Z"
}
},
"outputs": [],
"source": [
"@expand_sum\n",
"def U_Rabi_split(state, frm=0, to=3):\n",
" \"\"\"Split state.\n",
"\n",
" Splitting is done by applying an initial π/2 pulse followed by a series of\n",
" π pulses.\n",
" \"\"\"\n",
" assert frm < to\n",
" state = U_pi_half(state, level_1=frm, level_2=frm + 1)\n",
" for level in range(frm + 1, to):\n",
" state = U_pi(state, level_1=level, level_2=level + 1)\n",
" return state.expand()"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-09T19:38:39.056610Z",
"start_time": "2020-11-09T19:38:39.051162Z"
}
},
"source": [
"For example:"
]
},
{
"cell_type": "code",
"execution_count": 194,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.133576Z",
"start_time": "2020-11-25T14:23:32.122981Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + ⅈ / √2 |1⟩^(AFI)"
]
},
"execution_count": 194,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(0), frm=0, to=1)"
]
},
{
"cell_type": "code",
"execution_count": 195,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.147127Z",
"start_time": "2020-11-25T14:23:32.136541Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} \\left\\lvert 2 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) - 1/√2 |2⟩^(AFI)"
]
},
"execution_count": 195,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(0), frm=0, to=2)"
]
},
{
"cell_type": "code",
"execution_count": 196,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.162466Z",
"start_time": "2020-11-25T14:23:32.150613Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} i \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (-1/√2) ⅈ |3⟩^(AFI)"
]
},
"execution_count": 196,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(0), frm=0, to=3)"
]
},
{
"cell_type": "code",
"execution_count": 197,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.179137Z",
"start_time": "2020-11-25T14:23:32.167262Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 4 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + 1/√2 |4⟩^(AFI)"
]
},
"execution_count": 197,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(0), frm=0, to=4)"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.201184Z",
"start_time": "2020-11-25T14:23:32.183114Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{i}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ / √2 |0⟩^(AFI) - 1/√2 |3⟩^(AFI)"
]
},
"execution_count": 198,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(1), frm=0, to=3)"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.212676Z",
"start_time": "2020-11-25T14:23:32.204288Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$i \\left\\lvert 2 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ |2⟩^(AFI)"
]
},
"execution_count": 199,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_split(ket(3), frm=0, to=3)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-09T19:48:44.929497Z",
"start_time": "2020-11-09T19:48:44.922732Z"
}
},
"source": [
"Generally, with `frm` = 0 and `to` = $N_S$:\n",
"\n",
"\\begin{equation}\n",
"\\begin{split}\n",
"\\ket{0} &\\rightarrow \\frac{1}{\\sqrt{2}} \\ket{0} + \\frac{1}{\\sqrt{2}} e^{i N_S \\frac{\\pi}{2}} \\ket{N_S} \\\\\n",
" &= \\frac{1}{\\sqrt{2}} \\ket{0} + \\frac{1}{\\sqrt{2}} i^{N_S} \\ket{N_S}\n",
"\\end{split}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As a full unitary gate, the splitter acts non-trivially on all levels of the subspace $[0, N_S$:\n",
"\n",
"\\begin{align}\n",
" \\ket{N_S} & \\rightarrow i \\ket{N_S-1} \\\\\n",
" \\ket{N_S-1} & \\rightarrow i \\ket{N_S-2} \\\\\n",
" & \\dots \\\\\n",
" \\ket{1} & \\rightarrow \\frac{i}{\\sqrt{2}} \\ket{0} + \\frac{1}{\\sqrt{2}} e^{(N_S-1) \\frac{\\pi}{2}} \\ket{N_S}\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Recombine"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.223018Z",
"start_time": "2020-11-25T14:23:32.215785Z"
}
},
"outputs": [],
"source": [
"@expand_sum\n",
"def U_Rabi_recombine(state, frm=3, to=0):\n",
" \"\"\"Recombine state.\n",
"\n",
" Recombination is done by applying a series of π pulses and a final π/2\n",
" pulse.\n",
" \"\"\"\n",
" assert frm > to\n",
" for level in range(frm, to + 1, -1): # frm ... to+2\n",
" state = U_pi(state, level_1=level - 1, level_2=level)\n",
" state = U_pi_half(state, level_1=to, level_2=to + 1)\n",
" return state.expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For example, acting on $\\ket{N_S}$:"
]
},
{
"cell_type": "code",
"execution_count": 201,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.233364Z",
"start_time": "2020-11-25T14:23:32.225152Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{i}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ / √2 |0⟩^(AFI) + 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 201,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(1), frm=1, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.248773Z",
"start_time": "2020-11-25T14:23:32.236571Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{-1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-1/√2 |0⟩^(AFI) + ⅈ / √2 |1⟩^(AFI)"
]
},
"execution_count": 202,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(2), frm=2, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 203,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.265909Z",
"start_time": "2020-11-25T14:23:32.252414Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{-1}{\\sqrt{2}} i \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(-1/√2) ⅈ |0⟩^(AFI) - 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 203,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(3), frm=3, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 204,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.280413Z",
"start_time": "2020-11-25T14:23:32.268611Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} i \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (-1/√2) ⅈ |1⟩^(AFI)"
]
},
"execution_count": 204,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(4), frm=4, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 205,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.295132Z",
"start_time": "2020-11-25T14:23:32.282950Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{i}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ / √2 |0⟩^(AFI) + 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 205,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(5), frm=5, to=0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-09T19:48:44.929497Z",
"start_time": "2020-11-09T19:48:44.922732Z"
}
},
"source": [
"Generally, with `frm` = $N_S$ and `to` = 0:\n",
"\n",
"\\begin{equation}\n",
"\\begin{split}\n",
"\\ket{N_S} &\\rightarrow \\frac{1}{\\sqrt{2}} e^{i N_S \\frac{\\pi}{2}} \\ket{0} + \\frac{1}{\\sqrt{2}} e^{i (N_S-1) \\frac{\\pi}{2}} \\ket{1} \\\\\n",
" &= \\frac{1}{\\sqrt{2}} i^{N_S} \\ket{0} + \\frac{1}{\\sqrt{2}} i^{N_S-1} \\ket{1}\n",
"\\end{split}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### kick"
]
},
{
"cell_type": "code",
"execution_count": 206,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.306311Z",
"start_time": "2020-11-25T14:23:32.300210Z"
}
},
"outputs": [],
"source": [
"@expand_sum\n",
"def U_kick(state, level=10, kick_phase=symbols('phi_kick', positive=True)):\n",
" if state == ket(level):\n",
" return exp(I * kick_phase) * state\n",
" elif isinstance(state, BasisKet):\n",
" return state"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.321496Z",
"start_time": "2020-11-25T14:23:32.310603Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\beta e^{i \\phi_{kick}} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) + β exp(ⅈ φ_kick) |10⟩^(AFI)"
]
},
"execution_count": 207,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_kick(tls_state(0, 10), level=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Amplifier"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.330802Z",
"start_time": "2020-11-25T14:23:32.324986Z"
}
},
"outputs": [],
"source": [
"def U_Rabi_amplifier(state, frm=3, to=10):\n",
" step = 1\n",
" if to < frm:\n",
" step = -1\n",
" for level in range(frm, to, step):\n",
" state = U_pi(state, level_1=level, level_2=level + step)\n",
" return state"
]
},
{
"cell_type": "code",
"execution_count": 209,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.350345Z",
"start_time": "2020-11-25T14:23:32.333356Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} - i \\beta \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) - ⅈ β |10⟩^(AFI)"
]
},
"execution_count": 209,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_amplifier(tls_state(0, 3), frm=3, to=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Just to test that the downward-direction works correctly:"
]
},
{
"cell_type": "code",
"execution_count": 210,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.361466Z",
"start_time": "2020-11-25T14:23:32.352631Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$- i \\left\\lvert 0 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-ⅈ |0⟩^(AFI)"
]
},
"execution_count": 210,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_amplifier(ket(3), frm=3, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 211,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.377895Z",
"start_time": "2020-11-25T14:23:32.365145Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$- i \\left\\lvert 0 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-ⅈ |0⟩^(AFI)"
]
},
"execution_count": 211,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"apply_gates(\n",
" ket(3),\n",
" partial(U_pi, level_1=2, level_2=3),\n",
" partial(U_pi, level_1=1, level_2=2),\n",
" partial(U_pi, level_1=0, level_2=1),\n",
").expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, amplifying from level $N_S$ to level $N$, with $\\Delta N = N - N_S$, have\n",
"\n",
"\\begin{equation}\n",
" \\alpha \\ket{0} + \\beta \\ket{N_S}\n",
" \\rightarrow \n",
" \\alpha \\ket{0} + \\beta e^{i \\Delta N \\frac{\\pi}{2}} \\ket{N}\n",
"\\end{equation}\n",
"\n",
"As a full unitary gate, the amplifier acts non-trivially on all levels of the subspace $[N_S, N]$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### De-Amplifier"
]
},
{
"cell_type": "code",
"execution_count": 212,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.395200Z",
"start_time": "2020-11-25T14:23:32.380114Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} - i \\beta \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) - ⅈ β |3⟩^(AFI)"
]
},
"execution_count": 212,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_amplifier(tls_state(0, 10), frm=10, to=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, de-amplifying from level $N$ to level $N_S$, with $\\Delta N = N - N_S$, have\n",
"\n",
"\\begin{equation}\n",
" \\alpha \\ket{0} + \\beta \\ket{N}\n",
" \\rightarrow \n",
" \\alpha \\ket{0} + \\beta e^{i \\Delta N \\frac{\\pi}{2}} \\ket{N_S}\n",
"\\end{equation}\n",
"\n",
"The relative phase introduced by de-amplification is the same as that introduced by amplification."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Amplification + De-Amplification"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we de-amplify an amplified state, we get:"
]
},
{
"cell_type": "code",
"execution_count": 213,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.403602Z",
"start_time": "2020-11-25T14:23:32.398140Z"
}
},
"outputs": [],
"source": [
"def ampl_deampl(state, kick=False, N=10, N_S=3):\n",
" state = U_Rabi_amplifier(state, frm=N_S, to=N)\n",
" if kick:\n",
" state = U_kick(state, level=N)\n",
" state = U_Rabi_amplifier(state, frm=N, to=N_S)\n",
" return state"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.430948Z",
"start_time": "2020-11-25T14:23:32.406357Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} - \\beta e^{i \\phi_{kick}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) - β exp(ⅈ φ_kick) |3⟩^(AFI)"
]
},
"execution_count": 214,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ampl_deampl(tls_state(0, 3), N=10, N_S=3, kick=True)"
]
},
{
"cell_type": "code",
"execution_count": 215,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.454867Z",
"start_time": "2020-11-25T14:23:32.435639Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\beta e^{i \\phi_{kick}} \\left\\lvert 4 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) + β exp(ⅈ φ_kick) |4⟩^(AFI)"
]
},
"execution_count": 215,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ampl_deampl(tls_state(0, 4), N=10, N_S=4, kick=True)"
]
},
{
"cell_type": "code",
"execution_count": 216,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.478157Z",
"start_time": "2020-11-25T14:23:32.459843Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} - \\beta e^{i \\phi_{kick}} \\left\\lvert 5 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) - β exp(ⅈ φ_kick) |5⟩^(AFI)"
]
},
"execution_count": 216,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ampl_deampl(tls_state(0, 5), N=10, N_S=5, kick=True)"
]
},
{
"cell_type": "code",
"execution_count": 217,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.501482Z",
"start_time": "2020-11-25T14:23:32.480564Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\alpha \\left\\lvert 0 \\right\\rangle^{(AFI)} - \\beta e^{i \\phi_{kick}} \\left\\lvert 4 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"α |0⟩^(AFI) - β exp(ⅈ φ_kick) |4⟩^(AFI)"
]
},
"execution_count": 217,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ampl_deampl(tls_state(0, 4), N=9, N_S=4, kick=True)"
]
},
{
"cell_type": "code",
"execution_count": 218,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.520238Z",
"start_time": "2020-11-25T14:23:32.504305Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$- e^{i \\phi_{kick}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-exp(ⅈ φ_kick) |3⟩^(AFI)"
]
},
"execution_count": 218,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ampl_deampl(ket(3), N=10, N_S=3, kick=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, amplifying from level $N_S$ to level $N$ and the de-amplifying back to level $N_S$, with $\\Delta N = N - N_S$, have\n",
"\n",
"\\begin{equation}\n",
" \\alpha \\ket{0} + \\beta \\ket{N_S}\n",
" \\rightarrow \n",
" \\alpha \\ket{0} + \\beta e^{i \\Delta N \\pi} \\ket{N_S}\n",
"\\end{equation}\n",
"\n",
"Thus, only even $\\Delta N$, the de-amplification effectively undoes the amplification.\n",
"\n",
"As a gate, though, de-amplification is not the inverse of amplification!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### SWAP"
]
},
{
"cell_type": "code",
"execution_count": 219,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.528638Z",
"start_time": "2020-11-25T14:23:32.523407Z"
}
},
"outputs": [],
"source": [
"def U_Rabi_SWAP(state, level_1=0, level_2=3):\n",
" if level_2 < level_1:\n",
" level_1, level_2 = level_2, level_1\n",
" state = U_Rabi_amplifier(state, frm=level_2, to=level_1 + 1)\n",
" state = U_pi(state, level_1=level_1, level_2=level_1 + 1)\n",
" state = U_Rabi_amplifier(state, frm=level_1 + 1, to=level_2)\n",
" return state"
]
},
{
"cell_type": "code",
"execution_count": 220,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.543566Z",
"start_time": "2020-11-25T14:23:32.531215Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$-i \\beta \\left\\lvert 0 \\right\\rangle^{(AFI)} - i \\alpha \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-ⅈ β |0⟩^(AFI) - ⅈ α |3⟩^(AFI)"
]
},
"execution_count": 220,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(tls_state(0, 3), level_1=3, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.561094Z",
"start_time": "2020-11-25T14:23:32.546850Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$- i \\left\\lvert 0 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-ⅈ |0⟩^(AFI)"
]
},
"execution_count": 221,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(3), level_1=3, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 222,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.573198Z",
"start_time": "2020-11-25T14:23:32.563683Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$-\\left\\lvert 2 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-|2⟩^(AFI)"
]
},
"execution_count": 222,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(2), level_1=3, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 223,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.584141Z",
"start_time": "2020-11-25T14:23:32.575974Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$-\\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-|1⟩^(AFI)"
]
},
"execution_count": 223,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(1), level_1=3, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 224,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.596767Z",
"start_time": "2020-11-25T14:23:32.586801Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$- i \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"-ⅈ |3⟩^(AFI)"
]
},
"execution_count": 224,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(0), level_1=3, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 225,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.615619Z",
"start_time": "2020-11-25T14:23:32.599446Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$i \\left\\lvert 0 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ |0⟩^(AFI)"
]
},
"execution_count": 225,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(5), level_1=5, level_2=0)"
]
},
{
"cell_type": "code",
"execution_count": 226,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.629617Z",
"start_time": "2020-11-25T14:23:32.618344Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$i \\left\\lvert 5 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ |5⟩^(AFI)"
]
},
"execution_count": 226,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_SWAP(ket(0), level_1=5, level_2=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general for a swap between level 0 and $N_S$, we find\n",
"\n",
"\\begin{equation}\n",
" \\alpha \\ket{0} + \\beta \\ket{N_S}\n",
" \\rightarrow\n",
" e^{i N_S \\frac{\\pi}{2}} \\left(\n",
" \\beta \\ket{0} + \\alpha \\ket{N_S}\n",
" \\right)\n",
"\\end{equation}\n",
"\n",
"This is indeed a SWAP gate, with a global phase that depends on $N_S$."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Full AFI scheme with Rabi pulses"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.639345Z",
"start_time": "2020-11-25T14:23:32.631869Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{i}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"ⅈ / √2 |0⟩^(AFI) + 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 227,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"apply_gates(\n",
" ket(1),\n",
" partial(U_Rabi_split, frm=0, to=1),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 228,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.704878Z",
"start_time": "2020-11-25T14:23:32.645460Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\phi_{kick}}}{2} + \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\phi_{kick}} - \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ_kick)/2 + 1/2) |0⟩^(AFI) + (ⅈ exp(ⅈ φ_kick)/2 - ⅈ/2) |1⟩^(AFI)"
]
},
"execution_count": 228,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"apply_gates(\n",
" ket(0),\n",
" partial(U_Rabi_split, frm=0, to=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_kick, level=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_SWAP, level_1=0, level_2=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_recombine, frm=3, to=0),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looking at intermediary states:"
]
},
{
"cell_type": "code",
"execution_count": 229,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.759978Z",
"start_time": "2020-11-25T14:23:32.708748Z"
}
},
"outputs": [],
"source": [
"states = apply_gates(\n",
" ket(0),\n",
" partial(U_Rabi_split, frm=0, to=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_kick, level=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_SWAP, level_1=0, level_2=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_recombine, frm=3, to=0),\n",
" ret='states'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 230,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.823704Z",
"start_time": "2020-11-25T14:23:32.762437Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"After splitter:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-up:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π) |10⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After kick:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (exp(ⅈ φ_kick) / √2) exp_polar(ⅈ π) |10⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-down:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (exp(ⅈ φ_kick) / √2) exp_polar(ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After SWAP:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ φ_kick) / √2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-up:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ φ_kick) / √2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π) |10⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-down:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ φ_kick) / √2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After recombining:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\phi_{kick}}}{2} + \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\phi_{kick}} - \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ_kick)/2 + 1/2) |0⟩^(AFI) + (ⅈ exp(ⅈ φ_kick)/2 - ⅈ/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (desc, state) in zip(['After splitter:', \"After ramp-up:\", \"After kick:\", \"After ramp-down:\", \"After SWAP:\", \"After ramp-up:\", \"After ramp-down:\", \"After recombining:\"], states):\n",
" display(Markdown(desc))\n",
" display(to_polar(state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Without a kick:"
]
},
{
"cell_type": "code",
"execution_count": 231,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.874174Z",
"start_time": "2020-11-25T14:23:32.826634Z"
}
},
"outputs": [],
"source": [
"states_no_kick = apply_gates(\n",
" ket(0),\n",
" partial(U_Rabi_split, frm=0, to=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_SWAP, level_1=0, level_2=3),\n",
" partial(U_Rabi_amplifier, frm=3, to=10),\n",
" partial(U_Rabi_amplifier, frm=10, to=3),\n",
" partial(U_Rabi_recombine, frm=3, to=0),\n",
" ret='states',\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 232,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.922490Z",
"start_time": "2020-11-25T14:23:32.876654Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"After splitter:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-up:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π) |10⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-down:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After SWAP:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-up:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 10 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π) |10⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After ramp-down:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After recombining:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\left\\lvert 0 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"|0⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (desc, state) in zip(['After splitter:', \"After ramp-up:\", \"After ramp-down:\", \"After SWAP:\", \"After ramp-up:\", \"After ramp-down:\", \"After recombining:\"], states_no_kick):\n",
" display(Markdown(desc))\n",
" display(to_polar(state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Minimal AFI"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The bare minimumum for an AFI consists simply of a $\\pi/2$ (splitter), $\\pi$ (mirror), and $\\pi/2$ (recombination) pulse."
]
},
{
"cell_type": "code",
"execution_count": 233,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.936623Z",
"start_time": "2020-11-25T14:23:32.925180Z"
}
},
"outputs": [],
"source": [
"states_rabi_minimal = apply_gates(\n",
" ket(0),\n",
" partial(U_pi_half, level_1=0, level_2=1), # split\n",
" partial(U_kick, level=1),\n",
" partial(U_pi, level_1=0, level_2=1), # mirror\n",
" partial(U_pi_half, level_1=0, level_2=1), # recombine\n",
" ret='states',\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 234,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.975925Z",
"start_time": "2020-11-25T14:23:32.939035Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"After splitter (π/2 pulse):"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After kick:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (exp(ⅈ φ_kick) / √2) exp_polar(ⅈ π/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After mirror (π pulse):"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ_kick) / √2) exp_polar(ⅈ π) |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After recombination (π/2 pulse):"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\left(- \\frac{e^{i \\phi_{kick}}}{2} - \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(- \\frac{i}{2} e^{i \\phi_{kick}} + \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(-exp(ⅈ φ_kick)/2 - 1/2) |0⟩^(AFI) + (-ⅈ exp(ⅈ φ_kick)/2 + ⅈ/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (desc, state) in zip(['After splitter (π/2 pulse):', \"After kick:\", \"After mirror (π pulse):\", \"After recombination (π/2 pulse):\"], states_rabi_minimal):\n",
" display(Markdown(desc))\n",
" display(to_polar(state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Semi-Minimal AFI (no amplifier)"
]
},
{
"cell_type": "code",
"execution_count": 235,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:32.997905Z",
"start_time": "2020-11-25T14:23:32.979004Z"
}
},
"outputs": [],
"source": [
"states_no_amplifier = apply_gates(\n",
" ket(0),\n",
" partial(U_Rabi_split, frm=0, to=3),\n",
" partial(U_kick, level=3),\n",
" partial(U_Rabi_SWAP, level_1=0, level_2=3),\n",
" partial(U_Rabi_recombine, frm=3, to=0),\n",
" ret='states'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 236,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.033313Z",
"start_time": "2020-11-25T14:23:33.000514Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"After split:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After kick:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (exp(ⅈ φ_kick) / √2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After SWAP"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{i \\pi} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ_kick) / √2) exp_polar(ⅈ π) |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After recombination:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\left(- \\frac{e^{i \\phi_{kick}}}{2} - \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(- \\frac{i}{2} e^{i \\phi_{kick}} + \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(-exp(ⅈ φ_kick)/2 - 1/2) |0⟩^(AFI) + (-ⅈ exp(ⅈ φ_kick)/2 + ⅈ/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (desc, state) in zip(['After split:', \"After kick:\", \"After SWAP\", \"After recombination:\"], states_no_amplifier):\n",
" display(Markdown(desc))\n",
" display(to_polar(state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### No-SWAP AFI"
]
},
{
"cell_type": "code",
"execution_count": 237,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.054380Z",
"start_time": "2020-11-25T14:23:33.036162Z"
}
},
"outputs": [],
"source": [
"states_no_swap = apply_gates(\n",
" ket(0),\n",
" partial(U_Rabi_split, frm=0, to=3),\n",
" partial(U_kick, level=3),\n",
" partial(U_Rabi_recombine, frm=3, to=0),\n",
" ret='states'\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.098254Z",
"start_time": "2020-11-25T14:23:33.059329Z"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"After split:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After kick:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{kick}}}{\\sqrt{2}} e^{- \\frac{i \\pi}{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (exp(ⅈ φ_kick) / √2) exp_polar(-ⅈ π/2) |3⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/markdown": [
"After recombination:"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$\\left(\\frac{1}{2} - \\frac{e^{i \\phi_{kick}}}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\phi_{kick}} + \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(1/2 - exp(ⅈ φ_kick)/2) |0⟩^(AFI) + (ⅈ exp(ⅈ φ_kick)/2 + ⅈ/2) |1⟩^(AFI)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for (desc, state) in zip(['After split:', \"After kick:\", \"After recombination:\"], states_no_swap):\n",
" display(Markdown(desc))\n",
" display(to_polar(state))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Population results from recombination"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $N_S = 1$"
]
},
{
"cell_type": "code",
"execution_count": 239,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.112194Z",
"start_time": "2020-11-25T14:23:33.101325Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\Delta\\phi}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ \\Delta\\phi) / √2 |0⟩^(AFI) + 1/√2 |1⟩^(AFI)"
]
},
"execution_count": 239,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Δϕ = symbols('\\Delta\\phi', real=True)\n",
"state_in = tls_50_state(0, 1, phase1=Δϕ, phase2=0)\n",
"state_in"
]
},
{
"cell_type": "code",
"execution_count": 240,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.130028Z",
"start_time": "2020-11-25T14:23:33.114997Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\Delta\\phi}}{2} + \\frac{i}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\Delta\\phi} + \\frac{1}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ \\Delta\\phi)/2 + ⅈ/2) |0⟩^(AFI) + (ⅈ exp(ⅈ \\Delta\\phi)/2 + 1/2) |1⟩^(AFI)"
]
},
"execution_count": 240,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_recombined = U_Rabi_recombine(state_in, frm=1, to=0).expand()\n",
"state_recombined"
]
},
{
"cell_type": "code",
"execution_count": 241,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.136717Z",
"start_time": "2020-11-25T14:23:33.132059Z"
}
},
"outputs": [],
"source": [
"c0 = state_recombined.args[0].coeff.val.replace(sympy.exp_polar, exp)\n",
"c1 = state_recombined.args[1].coeff.val.replace(sympy.exp_polar, exp)"
]
},
{
"cell_type": "code",
"execution_count": 242,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:33.811064Z",
"start_time": "2020-11-25T14:23:33.139308Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\left(- \\frac{i}{2} + \\frac{e^{- i \\Delta\\phi}}{2}\\right) \\left(\\frac{e^{i \\Delta\\phi}}{2} + \\frac{i}{2}\\right)$"
],
"text/plain": [
"⎛ -ⅈ⋅\\Delta\\phi⎞ ⎛ ⅈ⋅\\Delta\\phi ⎞\n",
"⎜ ⅈ ℯ ⎟ ⎜ℯ ⅈ⎟\n",
"⎜- ─ + ──────────────⎟⋅⎜───────────── + ─⎟\n",
"⎝ 2 2 ⎠ ⎝ 2 2⎠"
]
},
"execution_count": 242,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c0 * c0.conjugate()"
]
},
{
"cell_type": "code",
"execution_count": 243,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:34.486919Z",
"start_time": "2020-11-25T14:23:33.814497Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"sin(\\Delta\\phi) 1\n",
"─────────────── + ─\n",
" 2 2"
]
},
"execution_count": 243,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c0 * c0.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "code",
"execution_count": 244,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.076506Z",
"start_time": "2020-11-25T14:23:34.489981Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2}$"
],
"text/plain": [
"1 sin(\\Delta\\phi)\n",
"─ - ───────────────\n",
"2 2 "
]
},
"execution_count": 244,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $N_S = 3$"
]
},
{
"cell_type": "code",
"execution_count": 245,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.086661Z",
"start_time": "2020-11-25T14:23:35.079126Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\Delta\\phi}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 3 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ \\Delta\\phi) / √2 |0⟩^(AFI) + 1/√2 |3⟩^(AFI)"
]
},
"execution_count": 245,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_in = tls_50_state(0, 3, phase1=Δϕ, phase2=0)\n",
"state_in"
]
},
{
"cell_type": "code",
"execution_count": 246,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.108237Z",
"start_time": "2020-11-25T14:23:35.097585Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\Delta\\phi}}{\\sqrt{2}} \\left(\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}\\right) + \\frac{1}{\\sqrt{2}} \\left(\\frac{-1}{\\sqrt{2}} i \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{-1}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}\\right)$"
],
"text/plain": [
"exp(ⅈ \\Delta\\phi) / √2 (1/√2 |0⟩^(AFI) + ⅈ / √2 |1⟩^(AFI)) + 1/√2 ((-1/√2) ⅈ |0⟩^(AFI) - 1/√2 |1⟩^(AFI))"
]
},
"execution_count": 246,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(state_in, frm=3, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 247,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.126011Z",
"start_time": "2020-11-25T14:23:35.112948Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\Delta\\phi}}{2} - \\frac{i}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\Delta\\phi} - \\frac{1}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ \\Delta\\phi)/2 - ⅈ/2) |0⟩^(AFI) + (ⅈ exp(ⅈ \\Delta\\phi)/2 - 1/2) |1⟩^(AFI)"
]
},
"execution_count": 247,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_recombined = U_Rabi_recombine(state_in, frm=3, to=0).expand()\n",
"state_recombined"
]
},
{
"cell_type": "code",
"execution_count": 248,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.133506Z",
"start_time": "2020-11-25T14:23:35.128130Z"
}
},
"outputs": [],
"source": [
"c0 = state_recombined.args[0].coeff.val.replace(sympy.exp_polar, exp)\n",
"c1 = state_recombined.args[1].coeff.val.replace(sympy.exp_polar, exp)"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:35.694081Z",
"start_time": "2020-11-25T14:23:35.136206Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\left(\\frac{i}{2} + \\frac{e^{- i \\Delta\\phi}}{2}\\right) \\left(\\frac{e^{i \\Delta\\phi}}{2} - \\frac{i}{2}\\right)$"
],
"text/plain": [
"⎛ -ⅈ⋅\\Delta\\phi⎞ ⎛ ⅈ⋅\\Delta\\phi ⎞\n",
"⎜ⅈ ℯ ⎟ ⎜ℯ ⅈ⎟\n",
"⎜─ + ──────────────⎟⋅⎜───────────── - ─⎟\n",
"⎝2 2 ⎠ ⎝ 2 2⎠"
]
},
"execution_count": 249,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c0 * c0.conjugate()"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:36.269643Z",
"start_time": "2020-11-25T14:23:35.697262Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2}$"
],
"text/plain": [
"1 sin(\\Delta\\phi)\n",
"─ - ───────────────\n",
"2 2 "
]
},
"execution_count": 250,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c0 * c0.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:36.787337Z",
"start_time": "2020-11-25T14:23:36.272559Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"sin(\\Delta\\phi) 1\n",
"─────────────── + ─\n",
" 2 2"
]
},
"execution_count": 251,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $N_S = 4$"
]
},
{
"cell_type": "code",
"execution_count": 252,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:36.800153Z",
"start_time": "2020-11-25T14:23:36.790901Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\Delta\\phi}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert 4 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ \\Delta\\phi) / √2 |0⟩^(AFI) + 1/√2 |4⟩^(AFI)"
]
},
"execution_count": 252,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_in = tls_50_state(0, 4, phase1=Δϕ, phase2=0)\n",
"state_in"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:36.816863Z",
"start_time": "2020-11-25T14:23:36.801962Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\Delta\\phi}}{2} + \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{i}{2} e^{i \\Delta\\phi} - \\frac{i}{2}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ \\Delta\\phi)/2 + 1/2) |0⟩^(AFI) + (ⅈ exp(ⅈ \\Delta\\phi)/2 - ⅈ/2) |1⟩^(AFI)"
]
},
"execution_count": 253,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_recombined = U_Rabi_recombine(state_in, frm=4, to=0).expand()\n",
"state_recombined"
]
},
{
"cell_type": "code",
"execution_count": 254,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:36.822691Z",
"start_time": "2020-11-25T14:23:36.818953Z"
}
},
"outputs": [],
"source": [
"c0 = state_recombined.args[0].coeff.val.replace(sympy.exp_polar, exp)\n",
"c1 = state_recombined.args[1].coeff.val.replace(sympy.exp_polar, exp)"
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:37.346502Z",
"start_time": "2020-11-25T14:23:36.824924Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\left(\\frac{1}{2} + \\frac{e^{- i \\Delta\\phi}}{2}\\right) \\left(\\frac{e^{i \\Delta\\phi}}{2} + \\frac{1}{2}\\right)$"
],
"text/plain": [
"⎛ -ⅈ⋅\\Delta\\phi⎞ ⎛ ⅈ⋅\\Delta\\phi ⎞\n",
"⎜1 ℯ ⎟ ⎜ℯ 1⎟\n",
"⎜─ + ──────────────⎟⋅⎜───────────── + ─⎟\n",
"⎝2 2 ⎠ ⎝ 2 2⎠"
]
},
"execution_count": 255,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c0 * c0.conjugate()"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:37.866963Z",
"start_time": "2020-11-25T14:23:37.349333Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\cos{\\left(\\Delta\\phi \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"cos(\\Delta\\phi) 1\n",
"─────────────── + ─\n",
" 2 2"
]
},
"execution_count": 256,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c0 * c0.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:38.396304Z",
"start_time": "2020-11-25T14:23:37.869587Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\Delta\\phi \\right)}}{2}$"
],
"text/plain": [
"1 cos(\\Delta\\phi)\n",
"─ - ───────────────\n",
"2 2 "
]
},
"execution_count": 257,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand().rewrite(sin).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Population in level 0 for different values of $N_S$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In general, starting from $\\frac{1}{\\sqrt{2}} \\left( e^{i \\Delta\\phi} \\ket{0} + \\ket{N_S}\\right)$:"
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:38.907860Z",
"start_time": "2020-11-25T14:23:38.398728Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{i^{N_{S}} e^{- i \\Delta\\phi}}{4} + \\frac{\\left(- i\\right)^{N_{S}} e^{i \\Delta\\phi}}{4} + \\frac{1}{2}$"
],
"text/plain": [
" N_S -ⅈ⋅\\Delta\\phi N_S ⅈ⋅\\Delta\\phi \n",
"ⅈ ⋅ℯ (-ⅈ) ⋅ℯ 1\n",
"─────────────────── + ───────────────────── + ─\n",
" 4 4 2"
]
},
"execution_count": 258,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"N_S = IdxSym('N_S')\n",
"p0 = (1 + (-I) ** N_S * exp(I * Δϕ) + (I ** N_S) * exp(-I * Δϕ) + 1) / 4\n",
"p0"
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:39.443543Z",
"start_time": "2020-11-25T14:23:38.910620Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\left(\\frac{\\left(-1\\right)^{N_{S}} i^{N_{S}}}{4} + \\frac{i^{N_{S}}}{4}\\right) \\cos{\\left(\\Delta\\phi \\right)} + \\left(\\frac{\\left(-1\\right)^{N_{S}} i i^{N_{S}}}{4} - \\frac{i i^{N_{S}}}{4}\\right) \\sin{\\left(\\Delta\\phi \\right)} + \\frac{1}{2}$"
],
"text/plain": [
"⎛ N_S N_S N_S⎞ ⎛ N_S N_S N_S⎞ \n",
"⎜(-1) ⋅ⅈ ⅈ ⎟ ⎜(-1) ⋅ⅈ⋅ⅈ ⅈ⋅ⅈ ⎟ \n",
"⎜──────────── + ────⎟⋅cos(\\Delta\\phi) + ⎜────────────── - ──────⎟⋅sin(\\Delta\\p\n",
"⎝ 4 4 ⎠ ⎝ 4 4 ⎠ \n",
"\n",
" \n",
" 1\n",
"hi) + ─\n",
" 2"
]
},
"execution_count": 259,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0 = sympy.collect(p0.rewrite(exp, cos).expand(), (sin(Δϕ), cos(Δϕ)))\n",
"p0"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:39.944113Z",
"start_time": "2020-11-25T14:23:39.446114Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"sin(\\Delta\\phi) 1\n",
"─────────────── + ─\n",
" 2 2"
]
},
"execution_count": 260,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.subs({N_S: 1})"
]
},
{
"cell_type": "code",
"execution_count": 261,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:40.480979Z",
"start_time": "2020-11-25T14:23:39.946583Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\Delta\\phi \\right)}}{2}$"
],
"text/plain": [
"1 cos(\\Delta\\phi)\n",
"─ - ───────────────\n",
"2 2 "
]
},
"execution_count": 261,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.subs({N_S: 2})"
]
},
{
"cell_type": "code",
"execution_count": 262,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:41.089522Z",
"start_time": "2020-11-25T14:23:40.483937Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\sin{\\left(\\Delta\\phi \\right)}}{2}$"
],
"text/plain": [
"1 sin(\\Delta\\phi)\n",
"─ - ───────────────\n",
"2 2 "
]
},
"execution_count": 262,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.subs({N_S: 3})"
]
},
{
"cell_type": "code",
"execution_count": 263,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:41.735210Z",
"start_time": "2020-11-25T14:23:41.092743Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\cos{\\left(\\Delta\\phi \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"cos(\\Delta\\phi) 1\n",
"─────────────── + ─\n",
" 2 2"
]
},
"execution_count": 263,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.subs({N_S: 4})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that this can also be written as $\\cos^2\\left(\\frac{\\Delta\\phi}{2}\\right)$"
]
},
{
"cell_type": "code",
"execution_count": 264,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:41.745921Z",
"start_time": "2020-11-25T14:23:41.738574Z"
}
},
"outputs": [],
"source": [
"def plot_phase_func(*funcs, labels=None):\n",
" fig, ax = plt.subplots()\n",
" x = np.linspace(0, 2 * np.pi, 100)\n",
" for (i, func) in enumerate(funcs):\n",
" y = func(x)\n",
" if labels is not None:\n",
" label = labels[i]\n",
" else:\n",
" label = func.__name__\n",
" ax.plot(x / np.pi, y, label=label)\n",
" ax.set_xticks([0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2])\n",
" ax.set_xlabel('phase (π)')\n",
" ax.grid()\n",
" ax.legend()"
]
},
{
"cell_type": "code",
"execution_count": 265,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:41.752381Z",
"start_time": "2020-11-25T14:23:41.748568Z"
}
},
"outputs": [],
"source": [
"def sin_sq_half(ϕ):\n",
" return np.sin(ϕ/2)**2"
]
},
{
"cell_type": "code",
"execution_count": 266,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.085951Z",
"start_time": "2020-11-25T14:23:41.755234Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEGCAYAAAB1iW6ZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB+k0lEQVR4nO2dd3iURdeH78mm9x5KIKGEToDQEZAOUlQUBBRQivSOSLO/gKCCSAfpSBULRbr03nsIhE4gnfS62fn+2MQvQHq2Jex9XbnY3Weemd8Om5OzM2fOEVJKjBgxYsRI0cdE3wKMGDFixIhmMBp0I0aMGCkmGA26ESNGjBQTjAbdiBEjRooJRoNuxIgRI8UEU30N7OrqKr29vQt0b3x8PDY2NpoVpAGMuvKHUVf+MVRtRl35ozC6Lly4EC6ldMvyopRSLz9169aVBeXQoUMFvlebGHXlD6Ou/GOo2oy68kdhdAHnZTZ21bjkYsSIESPFBKNBN2LEiJFigtGgGzFixEgxwWjQjRgxYqSYYDToRowYMVJMyNWgCyFWCiFChRDXs7kuhBDzhBCBQoirQgg/zcs0YsSIESO5kRcPfTXQIYfrbwE+6T+DgMWFl2XEiBEjRvJLrgeLpJRHhRDeOTR5B1ibHh95WgjhKIQoKaV8pimRmUm4cAGbHTuJfPQIE3t7TF1csKhUCVN3d4QQ2hiySKFMU/EwMoE7IXGExSWTnJrGrbsp+HMXNzsL3O0sKONsjbeLtXG+AJQpEPUIoh7A84eQEkeZR3fhxBWwsANHL3DyBseyoDDTt1q9o5IqHsQ84FncM8ISwwhPDAfgUcwjQm6F4G7tTnnH8njaeqIwUehZrf6RUqIMDib59m2Ukc9RxUSTFh2Dqb2dVsYTMg/50NMN+k4pZY0sru0EZkopj6c//xeYKKU8n0XbQai9eDw8POpu2rQp34Kt9+3D7s+/Xnk9zc4OpZcXyTVrkFy7NioHh3z3XVji4uKwtbXV6ZgqKXkQo+JqWBpXw9J4GKMiLQ8p7m3MoKKjgspOJtQvYYqbte63U/QxX0iJbdxdnCMv4fT8KvYxt1CoUnK9Lc3EgmiHajx38iXS2Y94W2/ta80CfcxZaGoolxMuczfpLvdT7pOoSsz1HlNMKWNRhupW1almVQ1PM0+9OBD6mC+T58+xuHQJi+vXMXv4CJP4+FfahL33Hqp2bQvUf8uWLS9IKetldU2nBj0z9erVk+fP59gkWw7/+y9N/fxQxcaiDA0lyf8WSf7+JF64QMrDhyAEVn5+OPXsgX2HDggz3XhWhw8fpkWLFjoZKzwumc3nHrPhzCOCohIRAmqXcaRBOWd83O2o6G5LKQdLLM0VnDl5nCZvNCMsNpnQ2GTuh8dx8WEUFx49JzA0DoC6Xk50rVOa9/08sTLXjWely/kiPgKuboZL6yD0pvo1jxpQrjmU8FV74U5eYOnA0WPHaN60KSRFqb32qIfw9DLcPwph/up7S/iCX1+o2Q2snHTzHtDdnMWnxvN34N/svLuT6xHq7bOKjhWp7V6bWm61KGtXFjcrN1ysXDA1MeXAkQPUb1Sfp/FPuRd1j3vR9zgXfI4bETcA8LT1pEflHnT16YqDhe6cLV3NlyolhZgdO3m+ZTNJV64CYF6hAlZ1amNZrRqWVapg6uaGws4OEzs7jhw7VmBdQohsDbomcrkEAWUyPfdMf017KBSYOjmBkxPmZctiXU/93qSUpAQGErN/PzE7dvJ0wueEzp6Dc5/eOPXqhYm1tVZl6YInzxOYe+AO2y8/JSVNRZMKLoxvV4kWld1xtjHP8h4zE4GNhSk2FqZ4u9rQoJwzPeqXBeBxZAI7rj5l26WnfPH3debsv82ApuXo09gLe8tisMQQFwbHf4bzK0CZBKXrQue5ULUL2LhmeYtKYQkWtuofB0/gDaj9ofpibAj4b4eLa2HXZ7D/a2g4CJqMAmtnnb0tbRGdHM16//Ws919PTEoMVZ2r8lm9z2jv3Z4SNiWyvc/axBo3azfcrN2o5Vbrv9fDE8M59uQYfwf+zewLs1lweQFvV3ibIbWG4G7trou3pFXS4uJ4/ttvRK5fT1pYOBY+FXEbOxa7tm2xKF9O53o0YdC3AyOEEJuAhkC0ttbPc0MIgYWPD24+PrgOGULc0aNErlxF6I8/Ebl2He7jx2HfuTPCpOhFa0YlpLDwUCBrTj5ECOjZoAx9G3tR0b1wa3FlnK0Z1qIiw1pU5PyDSBYcCuTHvQEsPXKXcW0r0buRF6aKojdfJMfBsdlwZonakPv2hCYjwKN64fq184AGn6p/nl6Gk/Pg+Fw4u1zd/xujwcxKE+9Ap6SmpbLOfx1LrywlQZlAyzIt+bTmp9R0q1mofl2tXOnq05WuPl0JiAxgU8Am/gr8ix13d9CnWh/61eiHnbl21pO1iUxLI+rPPwmb+wtpERHYNG2K88xPsGnSRK97U7kadCHERqAF4CqEeAJ8DZgBSCmXALuAjkAgkAD005bY/CBMTLBr0QK7Fi1IuHiRkOkzePr5RCLXr6fkt99iWaWKviXmCSkl26885evtN4hOTKWbnydj21ailKPmjUY9b2dW92vA9aBoZu25xTc7brLl/BOmda2BX1ndLSsUmjv7Yec4iH4ENbpBi0ng6qP5cUrVhm4rodlncHgGHP5evazT5Rf1Uk4R4VzwOaadnsa96Hu08GzBSL+RVHKqpPFxKjtX5uvGX9O/Rn/mX5rPr9d+5c87f/Jloy9p7dVa4+Npi8SrV3n2zTck3/THqk4dPJYsxqpm4f7waYq8RLn0yuW6BIZrTJEWsPbzw/v3LUT/vY3QOXN40P0D3MaMxvmTTxAKw92JD41N4ou/rrPvZgh1yjry/Xs1qVLCXuvj1ijtwNr+Ddh9PZjvdtzkvUUnGdS8PJ+1q4y5qQF764nPYdcEuPY7uFaG/nuhbCPtj+tRDXr8BvcOw44xsKYL1OkDHb5XR8oYKEnKJGafn82mgE2Uti3NglYLeLPMm1oft4xdGX5o/gMfV/uYb059w5jDY+hYriOTG0zG0dJR6+MXFKlUEr5kKeGLF2Pq6kqp2T9h37GjQUWLGfBvp2YRJiY4vteV8ju2Y9viTUJ//IlHn/Qj9ZleVody5didMNr/fJTDt8OY/FYVtg5pohNjnoEQgo41S3Jg/Jt81LAsy47eo/uSkzyMeHXH3iAIughL34Qbf0GLyTDkmG6MeWbKt4Bhp+CNMXB5PSxrCSE3dKshj9yNusuHuz5kU8Am+lTrw1/v/KUTY56Z6q7V2dBpA8NqD2Pfg3103d6ViyEXdaohr6Q8esSDjz4ifMEC7Dt2pPyO7Th06mRQxhxeI4OegamTE6XnzaPkjBkk3bjB/W7dSbhoOB8iKSWLDgfy8cqzuNlZsGtUUwa/WQGFiX4+OLYWpkzvWpMlvf24Hx5Pp3nH2XsjWC9askRKOPsrrGwPqjTot0e9xGJqoR89ZlbQ9lvoux2SY+DX1nBpvX60ZMM/9/6h586eRCRGsKj1Ij6v/zlWpvpZ9zczMWNoraFs7LwRa1NrBuwdwHr/9eQl+k5XxJ88yf3uH5By/wGl58ym9I8/oLDXnXOVH147gw5q79Pxva54/74FE1sbHn78Cc9//13fskhMSWPY+ov8sCeAjjVL8tewNwq96akpOtQoye4xzangbsuQ3y6w9Mhd/f/SpSlh5xh1tEn5FmqvvEx9/WrKoFwzGHJcrWfbMNg7FVQqvUqSUrLw8kImHZtEddfqbO2ylWaezfSqKYMqzlXY2HkjTUs3ZebZmUw9PpWUtNzPB2gTKSWRa9fy6NNBmLm7U+6Prdh37KhXTbnxWhr0DCwqVKDcli3YNGhA8JdfEfLDj3ozUs/jU/hw+Wn23AhmaseqzO9VBxsLvVUIzJLSjlZsHtSIjjVL8v3uW0z64xopSj0ZqeQ42NQLLqyGpmOh12bDCxu0dYc+f0ODwXBqAWztB6lJepGSnJbMxKMTWXJlCe9UeIdf2/6Km3XWVcz0hb25Pb+0+oVhtYex494Ohh0YRlxKnF60yLQ0gr/9lpAZ32PbsgVeGzdiXqZMrvfpG8OyGHpA4eBAmaVLCJnxPZErV5IWE03Jb7/V6WZpUFQifVec4fHzRBZ/5EeHGiV1NnZ+sTRTML9nHcq72jD/YCBhccks+sgPSzMdbi7HhcH6bhB8FTr/DPX6627s/GKigLdmgWMZ2PcFxAbDh5t0ehgpITWBkQdHcjb4LKP9RjOgxgCDW/vNwESYMLTWUDxtPfnqxFf029uPxW0W42qV9ZkBbSBTUng6aRIxu3bj8ulA3MaOLTKhzkVDpZYRpqZ4fPkFrsOGEr31D4LGjUeVopuve/fC4ui2+CShMcms7d/AoI15BiYmgvHtKjO9aw0O3gpl4JrzJKQodTN4XCis6QxhAdBzo2Eb8wyEgCYjoftqeHoR1r4DCZE6GTo2JZYhB4ZwPuQ8M5rOYGDNgQZrzDPTpUIX5reez8OYh/TZ1YencU91Mq4qMZHHI0cSs2s37hM+w338+CJjzMFo0P9DCIHbqFG4T5xI7N69BI0chdSyUX8YEc+Hv54hRali8+DGNCrvotXxNM1HDb34qXstTt4N55OV54hL1rJRjw2B1Z3VybQ++h0q55QE1ACp3hV6rIfQWzox6tHJ0Xy671OuhV3jx+Y/0qVCF62Op2malm7K8nbLiU6JZsDeAQTHa3czXpWUxOOhw4g/eowS332Ly4ABWh1PGxgN+ku49PuEEt98TdyRIwR9PhGp1I6RehyZQK9lp0lWprH+04ZUK2WYu+a50a2uJ7/0rMOFR88ZsPocSalp2hkoNgRWd4LoJ/DRVvWmY1GkUjvouUH9DWPN21oz6vGp8QzZP4Tbz2/zc8ufaefdTivjaBtfN1+WtllKVHIUA/YOIDQhVCvjyJQUnoweTcKZM5SaNROnDz7QyjjaxmjQs8CpZ0+1p75nD8+mfoHUcHTCs+hEev16mviUNH4b2FCn8eXaoEutUsz5oBZnH0QyYsNFUtM0vFGaFA2/vQcxT6H3VvB+Q7P96xqfNtBrI4TfhvXdIUWzsf3JacmMPjga/0h/5rSYQ4syLTTav66p6VaTxW0WE54YzoC9A4hM0uwfQalUEvTZBOKPHKXEt9/g8PbbGu1flxgNeja49PsE15EjiN62jZDpMzQW/RKTlEq/VeeISkhl3YAGVC+l+zS/2uCd2qX57p0aHPAP5fOtV1GpNBQtlJoEGz9MXzP/DbyaaKZffVOxtTptwNOL8PsnkJaqkW6VKiWfH/mcM8Fn+N8b/yvyxjyD2u61WdRmEcHxwYz4dwQJqQka6VdKybMvvyJ23z48Jk8qsp55BkaDngOuw4bh/MknPF+/nsjVawrdX4pSxeC1FwgMjWNJ77r4ejoWXqQB0aeRFxPaV+avS0FM3+Vf+A5VafDnQHh4HLougQqtCt+nIVG1szpK584+2D6y0HHqUkqmnZ7GwccHmdxgcpFbM8+Nuh51mdV8FjcibvD50c9Rqgq/HBq+cBHRf/2F6/DhOH/8sQZU6hejQc8BIQTun0/Arl07Qn/4gZj9+wvcl0olmbD1CqfuRfBDN1+a+uguDEuXDGtRgU+aeLPi+H1+O/2wcJ3tnQr+O6DDTHXe8eJI3U+g5VS4shEOTS9UV2turOGPO3/wac1P+bDqh5rRZ2C0KtuKKQ2mcOTJEWacKdw356i//yZ8wQIcunbFdYRBp6PKM0aDngvCxIRSP8zCyteXpxM+J/Hq1QL1M/ffO2y7/JQJ7Svznp+nhlUaDkIIvuxcjZaV3fh6+w2O3wkvWEcXVsOZxdBoGDQaqlGNBkfzCepkXsd+gmtbC9TFv4/+Zc6FObT3bs+IOiM0LNCw6FGlBwNqDOD327+z9ubaAvURf+Ysz778CutGjSj57TdFIpQzLxgNeh4wsbTEc9FCTN3ceDx8OKkh+dtp33P9GfP+vUO3up4Ma1FBSyoNB4WJYF6vOlR0s2Xo+gsEhsbmr4MHx+Gf8VCxDbT9n3ZEGhJCQKc5ULYJbBsOQRfydbt/hD+Tj02mhmsNpr0xDRNR/H+tR/uNpq1XW+ZcmMPJoJP5ujflyROCRo3CvGxZPOf9gjDPujBMUaT4/89rCFMXF8osWogqPoGgMWPyHKN+KziGcVuuULuMI9PerVFsPIHcsLM0Y8Un9bAwNWHQ2gvEJuVx0+/5A9jcB5zKwfsrQPGaHGY2NYce68DGHTZ9BDF5ywL6POk5ow+NxsHCgXmt5mFpaqlloYaBEIJpb0yjgmMFJhydwKOYR3m6T5WYyJMRI5FSUmbxIoNNslVQjAY9H1j4+FBqxnQSL10i+Pvvc20flZDCoLUXsLUwZWmfuro9Hm8AeDpZs/BDPx5GJjDh96u5r3emJsLm3iDT4MPNYOWoE50Gg42rOpwxKQZ+/zjXyJc0VRqTjk0iPDGcuS3m6vR4vCFgbWbNvJbzEEIw6uAo4lNzDv+UUvLsq69JDgig9E8/Yl62rI6U6g6jQc8n9h064DJwAFEbNxH1xx/ZtlOpJOO2XOFZdCJL+tTFw/718JxepmF5FyZ1qMKeG8EsO3ov58a7J0LwNXjvV3Ap/ktTWVKiBrw9Dx6fgQPf5Nh08ZXFnHx6kikNp1DdtZCl9Yoonnae/PTmT9yPuc+3p77N0Wl4vnYtMTt24DZ6FLbNi05FqfxgNOgFwG3MGGyaNCb4u/+RFHA7yzbLj9/j4K1QvuhUrWiVb9MCA5uVo2PNEszac4tTdyOybnRlE1xco86cWKm9bgUaGjW7Qf2B6gyN/juzbHL0yVGWXl3KuxXf5X2f93Us0LBoVLIRI2qPYPf93Wy9k/WmcuLly4T8+BO2bVrjMmiQjhXqDqNBLwDC1JRSP/6Iib0dQePGoUp48ZDDhYfPmbUngLdqlKBvYy89qTQchBD80K0W3q42jNp0iYi45BcbhPrDzrHg1RRafqEfkYZG+xlQqg78PQwiX/xmExwfzJTjU6jiXIWpDae+NvsyOTGg5gCalGrCzDMzCYgMeOFaWkwMQeM/w8zdnVIzZhSpZFv5pfi+My1j6uJC6VmzSLl3j+AZM/57PSohhZEbLlLK0ZJZ3XyNv2zp2FqYsqCXH9EJqUzYmmk9PTURfu8H5rbQ7TXaBM0NUwvovgYEsHXAf+vpKqli8rHJpKSl8NObP702m6C5YSJMmNF0Bg4WDnx25LP/X09PXzdPDQ6m9JzZxW4T9GWMBr0Q2DRpgsugQURv/YPonf8gpWTSH9cIi0tm4Yd+2Fua6VuiQVGtlD2TO1bh4K1Q1px8oH5x/9cQ5g9dF4NdCb3qMzicvKDLPHV6gMMzAdgfs5/zIeeZ0nAKXvbGb3+ZcbFyYVbzWTyKfcT3Z9RBC1bHjxO7Zw9uY0ZjVbu2fgXqAKNBLyRuI0dgVacOwV9/zcUboey5Ecxn7SoXu2P9muKTJt60quLOjN23SHtyDs4uhYZD1THnRl6l+rtQuzccm82Vq+vYFbWLt7zf4p0K7+hbmUFSv0R9BtYcyLa72zh87DfstvyudryKYCrcgmA06IVEvZ7+AyopKbN5HY28HRnYrLy+ZRksQgh+7OaLt2UCdQLnoXKrCm2+0bcsw+atmSQ4eTHp/CycFA582fhL41JeDgypNYSajtVI/HoWKjMzSs78vlivm2fm9XiXWkZRqjR/N/mAmmF3mSH9UZgYf9lywsXGnPUe67GRiawq8QWYGdeBc8TCjjnV3yTIBL6Is8TO3DAKhxsqZiZmfBvoi/dTJVs7u2LqZli1U7WJ0aBrgGVH77HUpjrPKtUgZfF8kgMD9S3JsLm6Gbegf/nDpifTzwsuPHyub0UGzcmnJ9kcdIg+9lVoE3wGbv2jb0kGTeK16yhXbeL5mzX5o8JTNgds1rcknWE06IUkMDSWnw/c5q2aJVEM6I2JjQ1PJ07SWqWjIk/MM9j9OZRpiFOddynpYMVnv18hMUVLlY6KOLEpsXx14ivKOZRjZMeVxNmUgx1jdFaTtKihSk7m6aRJmLq40GDWMqpYVmHOhTkExQXpW5pOMBr0QpCmkny+9SrW5gq+e6cG0sGBEl9/TdKNG0SsWqVveYaHlLBzDCiT4Z1FWJmZ8mN3X+6HxzNrzy19qzNIZp2dRVhiGNPfmI6lpT23qoyCxEj1qVojrxC+aDEpd+9Scto0TB0d6eXSC4Hgm5PfaKxIjSFjNOiFYNWJ+1x8FMU3XarjZmcBgH2H9ti1bUv4/AUk37+vZ4UGxtXNcHsPtPoSXCsC0KSCKx839mLNqQdceGj0OjNzMugk2+5uo3+N/tR0qwlAnF15dbrda1uyPUX6upLk70/E8uU4dO2KbbOmADibOjOu7jhOPzvNX4F/6Vmh9jEa9ALyIDyen/YF0KaqO+/ULvXCNY8vv0BYWvLsyy81Xo+0yBIXpvYqyzR8Jb/5hA5VKOVgxcQ/rpGsNC69ACSkJvDd6e/wtvdmSK0hL15sNh5K1FSnGE6K1o9AA0MqlTydOhWFkxMeEz9/4Vr3yt2pX6I+P577kZD4ED0p1A1Gg14ApJRM/vMaZgoTpr1b85UQMjN3dzwmTiTx/AWiNr8+GzI5sneKuhhyl3lg8mLWSVsLU6Z1rUFgaByLD9/Vk0DDYtHlRQTFBfFNk2+wUFi8eFFhpp7H+FA48K1+BBoYEatWkXzTnxJffonC0fGFaybChG8bf0uaTGPamWn6EagjjAa9APx5MYhT9yKY/FZVSjhkHXLn8F5XbJo0JvTHn0gNDtaxQgMj8IB6iaDZOHCvkmWTlpXdebtWKRYeCuROSD4LYhQzboTfYJ3/OrpX6k5dj7pZNyrtpz6QdX4FPDqjW4EGRsrDh4TPX4Bd27bYt2+XZZsy9mUYVmsYhx8f5t9H/+pWoA7Jk0EXQnQQQgQIIQKFEJOyuF5WCHFICHFJCHFVCNFR81INg8j4FKb9c5O6Xk70rF8m23ZCCEp8+y0yLY2QGbnnTi+2pCTAznHg4gNNx+XY9Ksu1bCxMGXSn9dQqYr/BlZWKFVKvjn1DS6WLoytOzbnxi2ngEMZ2DEalHkruFLckFIS/O13CHNzPL7IObHbR9U+opJTJWacmZFr7vSiSq4GXQihABYCbwHVgF5CiGovNfsC2CKlrAP0BBZpWqih8P0uf2KTlEzvWgOTXA4QmZcpg+vQocTu20fckSM6UmhgHJkJUQ+hy9xcDxC52lowtWNVLjx8zu8XHutGn4Gx8dZGbkXeYkrDKbkfILKwhU6z1blwTv6iG4EGRuzu3cSfPInbmDGYebjn2NbMxIyvGn9FWEIYCy4t0JFC3ZIXD70BECilvCelTAE2AS8nkpBARhozB+Cp5iQaDqfvRfD7hScMbFaeKiXylrXNpX8/zMuXJ/h/01AlJmpZoYER6g+nFkKd3uDdNE+3dKvrSQNvZ77ffYvI+NfL6wyJD2HBpQU0K92M1mVb5+2mSu2h2rtw9Cd1+b7XiLTYWIK//x7L6tVx6tUzT/fUcqvFB5U/YMOtDdyIuKFlhbpH5BabKYToBnSQUg5Mf94HaCilHJGpTUlgH+AE2ABtpJSvVLoVQgwCBgF4eHjU3bRpU4FEx8XFYWtrW6B7C4pSJfnqZCIpaTC9qRUWile98+x0mQXcxvnnn4nr0IH4d3WfVEkf84WU1L78BTbxDzjbYDGp5q/+AcxO15NYFV+dTKRpaVP617B45bq20ct8AavCVnEt8RpTSk7B1SzrcnJZabNICqfB2eE8d6rJ9Zr6ySevjzmz27QZqyNHiJw0EaVX1pkns9KVoEpg+tPpOCocGV9ivF6Kahdmvlq2bHlBSlkvy4tSyhx/gG7A8kzP+wALXmozDhif/rgxcBMwyanfunXryoJy6NChAt9bUH49eld6Tdwp998IzrZNTrqCPp8ob9aoKZPu3tWCupzRx3zJK1uk/NpeynMrsm2Sk67p/9yUXhN3yvMPIrUgLmf0MV8ng07KGqtryMWXF+fYLlttx+eq5/vWLs2LywO6nrOE69flzarV5LPv/pdju+x07bi7Q9ZYXUP+HvC7FtTlTmHmCzgvs7GrefnTFARk3v3zTH8tMwOALel/IE4BlkCxqVgbGpPE3AN3aFnZjdZVc16nyw73zydgYmlJyIzvi/+JtaQY2DdVXXHH7+MCdTG6tQ8l7C354u/rKNOKdyx/SloKM87MoKxdWfrV6FewThoOBdfK6lj/1OK9tCelJGTadBROTriNHlWgPjqV64Sfux+/XPyF6OTiE8ufF4N+DvARQpQTQpij3vTc/lKbR0BrACFEVdQGPUyTQvXJ97tvkaJU8XWX6gVOW2rq4oLbyBHEHz9O3MGDGlZoYByeCXGh6g27l2LO84qNhSlfdq6G/7MYNp4r3hukv/n/xoOYB0xuOPnVmPO8YmoOHX9Ub0Af/1mzAg2MmO3bSbx0Cfdx4wpcgUgIwZSGU4hJiWH+pfkaVqg/cjXoUkolMALYC/ijjma5IYT4Tgjxdnqz8cCnQogrwEbgE1lM3NCz9yP561IQg5qXx9vVplB9OfXqhXnFCoR8PxNVUpKGFBoYobfgzBLw6wuls4mhziMda5agYTlnZu8LICqheG6QhiWEsfTKUlp4tqBp6bxtHGdL+Tehxvtw4hd4/lAzAg2MtLg4Qn76CUtfXxy6vluovio7V6Zn5Z5sCdjCzYibmhGoZ/K0GyCl3CWlrCSlrCClnJ7+2ldSyu3pj29KKd+QUtaSUtaWUu7TpmhdkaaSfLP9BqUdrRjesmKh+xNmZpSYOpXUJ0+ILI7Ju6SEvZPV4XStvyp0d0IIvnm7OjGJqfy8/7YGBBoecy/OJVWVyoT6EzTTYdv/gTCB/YWff0MkfPFi0sLCKfHFVI0UrRheZzhOlk58f6Z4LIUaT4rmwO/nH3PzWQyT3qqClXnBlg5exqZxY+zatSN86TJSnxaz6M7be+HuQXhzEthoZgulakl7PmroxW9nHhEQXLxOkF4Nu8r2u9vpW60vZe3LaqZTh9Lwxhi4+Tc8OK6ZPg2E5Hv3iVy7Dof33sPK11cjfdqb2zOqziguh11m74O9GulTnxgNejbEJqXy074A6nk50dm3pEb79pj4OUhJ6JxitNapTFHna3GtBA0+1WjX49pWwtbClG933CgWXhSASqqYeXYmblZufOqr2fmiyUj1CdLdk0BVfJKdhf7wAybm5riPy+UEbT55t+K7VHaqzJwLc0hSFu2lUKNBz4YFhwIJj0vhqy7VNF6/0ax0aZw/+YSYnTtJvHJFo33rjbNLIfIutP9enTxKgzjZmDO+XSVO3o3ggH+oRvvWF//c+4dr4dcYU3cMNmaF25t5BXNraPsdhFyDS+s027eeiD95krjDh3EZMhhTV80G0ClMFExsMJFn8c9Ye3OtRvvWNUaDngUPI+JZdfwB3ep64uvpqJUxXD79FIWbKyHfzyz6Xmd8OBz5AXzag08brQzxYYOyVHS3ZcYuf1KURTuMMVGZyC8Xf6G6S3U6l++snUGqd4WyTeDf/xX5FLsyLY2QWT+oHaG+fbUyRv0S9WlTtg3Lry0nNKHoOg1Gg54F3++6halCMKF9Za2NobC1wX30aBIvXyZm1y6tjaMTDn+vTo3bTnupSU0VJkzpWIX74fGsP1O0IzjW3lhLSEIIn9X7THunFIWADjMgIbzIhzFG/fEHyQEBuE/4DBML7Z0cHld3HEqVkl8uFt28OEaD/hLnHkSy50YwQ96sgIe9dqvRO3TtikXVqoTOnl10wxjDbsP5VVCvH7hV0upQLSu707SiK7/8e4fohFStjqUtwhPDWXF9BW3KtqFeiaxPb2uMUnXAtwecWgRRRTOWPy0ujrBf5mFVty527dtrdawy9mXoXbU3O+7u4FZk0SyJaDTomZBSMv0ffzzsLfi0WXmtjycUCjwmTkT59BmRa4voWueBr8HMWh3ZomWEEEztVJXoxFTmH7yj9fG0wYJLC0hVpeaeGldTtPpS7a0f/J9uxtMwEcuXkxYRgcekiRrfy8qKgb4DsbewZ/b52UVyKdRo0DPxz7VnXH4cxfh2lTUWppgbNo0aYtuiBRHLlqF8/lwnY2qM+8cgYJe6cIWtm06GrFrSnh71yrDm1AMeRhStnNa3n9/mzzt/0qtKL82FKeaGYxloNExdzzXoom7G1BCpISFErl6DfefOWNWsqZMx7c3tGeI7hNPPTnPi6QmdjKlJjAY9nWRlGj/sCaBKCTve9/PU6dju48ehSkggYskSnY5bKFQqdb4We89XaoRqm3FtK2FqYsKPewN0Om5h+fnCz9ia2zLYd7BuB246FqxdYd+X6sNfRYSwefMgLQ23MaN1Om6Pyj0oY1eG2ednk1bEwj6NBj2d304/4lFkApM7VkWRS+EKTWPh44Pj++8RuWEjKY+LyFrnjT/h2RVo/SWYWel0aHd7SwY2K8fOq8+48jhKp2MXlLPPznI86DgDaw7EwcJBt4Nb2kOLSfDwONwpGoe4kwJuE/3X3zh99BHmnrp1sMwUZoz2G01gVCDb7m7T6diFxWjQgZgk9ZpsMx9X3qykm6WDl3EdMRKhUBD281y9jJ8vlCnw73fgURNqfqAXCYOal8fZxpyZu28Z/FqnSqqYc2EOHtYefFjlQ/2IqPsJOJeHA98UicNGoXNmY2Jri+sQHX+bSaedVzt83XxZcGkBicqik73SaNCBpUfuEpWQysQOWRcw1gVmHu449/uEmF27SLx2TW868sSFVeqsfm2/AQ3k0ygIdpZmjGpVkVP3Ijh827ATe+57sI8bETcYUWcElqbajZzKFoWZOr9O6E31eroBE3/6DPFHjuI6eBAKR0e9aBBCMK7uOMISw1jvv14vGgrCa2/QQ2OSWHH8Pm/XKkWN0jr+KvwSLgMGoHByInTOHL3qyJGkGDgyC8o1hwp5LJOmJT5s6IWXizWzdt8izUCLSqempfLLxV/wcfKhS/ku+hVT7V0o5QcHp0OqYYbJSikJnT0b05IlcerdW69a6nrUpblnc1ZeW1lkcqa/9gb9l3/voEyTjG+n3RjqvKCwtcV16BASTp0m/uRJfcvJmlMLICEC2nyjDofTI+amJnzWrjK3gmPZdvnlmiuGwdY7W3kS94QxfmNQFDA3vMYQAtp+CzFP4Nyv+tWSDbH795N07RpuI0Zo9RBRXhntN5q41DhWXFuhbyl54rU26PfD49l07jEfNiyLl4uG82kUEMeePTEtVZLQ2XMMb204LhROLlAfKy9krnNN0almSWqUtmfO/tsGlxIgITWBpVeWUtejLs1KN9O3HDXlmkPFNuqi0olR+lbzAlKpJGzuL5hXqIDDO2/nfoMOqORUic7lO7Ph1gaC44P1LSdXXmuD/tO+ACxMTRjZykffUv7DxNwct5GjSLpxg9i9BhaRcGw2KJOgpX4KEWeFiYlgQvsqPHmeyMazj/Qt5wXW+68nIimCMX5jdHIoJs+0/hqSotTftgyI6G3bSLl3D7cxoxGmpvqW8x/D6wxHJVUsvrJY31Jy5bU16NeDovnn6jMGNi2Hm53+v9plxuHtLphXrEDY3LlIpVLfctREPYLzK6FOb3AtfLEPTdLcx5WG5ZyZfzCQhBTDmK/o5GhWXV/Fm55vUtu9tr7lvEhJX6j+njolQJxhbCirkpMJm78AS19f7NpoJ8FbQSltW5oelXvwd+Df3I++r285OfLaGvSf9gXgaG3GwObaP+KfX4RCgfvYsaQ8eEDUn3/qW46aw7MAAW9+rm8lryCE4PMOVQiPS2bViQf6lgPAyusriUuNY2SdkfqWkjUtp6q/bR2brW8lADzfsBFlcDDu48YZ1reZdAbWHIiFwoKFlxfqW0qOvJYG/dyDSA4HhDHkzQrYW2o2d7emsG3VCstavoQvWowqOVm/YsJuw5UNUH8gOOj2kEdeqevlRJuqHiw5clfv9UfDEsLY4L+BjuU7UtlZexk7C4VrRaj9IZxfoffEXWlx8UQsW4ZNkybYNGqoVy3Z4WLlQu+qvdn7YK9BJ+567Qy6lJIf9wbgZmfBx4299S0nW4QQuI8ZgzI4mKjNW/Qr5tB0dQKuZuP0qyMXJrSvTFyykmVH7+lVx7Kry1CqlAyvNVyvOnKlRXpCtSOz9Crj+bq1pD1/rvMj/vnlkxqfYGdux/xL8/UtJVsMZ+dBRxy7E87Z+5F89051nSXgKijWjRph3aAB4UuX4tjtfUysrXUv4ulldX3KNydqrE6otqhcwo63a5Vi1YkH9G9aDldb3e+NPI17ytY7W+nq05Uy9mV0Pn6+cPBUf+s6swTeGA2uug8OSIuOJmLlKqw7diTYzo4kf3+N9u/g4IC/BvucW20usSmxXLl+BXOFuVZ1WVpa4unpiZlZ3lcRXiuDLqXkp30BeDpZ0bO+jrLdFQIhBG5jxvDwww+J/G09roM0XHsyLxyaAZaO0NjAvc10Rrf2YefVZyw+fJcvO1fT+fhLry7FBBMG+Q7S+dgFouk4uLAGDs+EbrqPtY5YuQpVXBzKfp/gYGeHt7e3RtfQY2NjsbOz01h/aao07kTdwUJhgbd9wbXmpktKSUREBE+ePKFcuXJ57ve1WnLZdzOEq0+iGd3aB3PTovHWrf3qYPNmcyJWrCAtJka3gz8+C3f2qr03S/2eos0r5d1sed+vNOtOPyQ4WrenIR/GPGRb4DY+qPwBJWxK6HTsAmPrBg0Hw/U/IOSmTodWRkQQuW4d9m+9RYqpKS4uLga5IZoZhYkCNys3ElITiE/VXvpmIQQuLi4k5bPwTdGwahpApZL8vP825V1t6FqntL7l5Av30aNRRUcTuXqNbgc+NF2ddrVBEfE20xnZygcpJQsO6bYIxuIrizFXmDOg5gCdjltomowECzs4PEOnw0Ys+xWZnIzryBEABm/MM3CydMLUxJTQxFCtHv4ryHy8NgZ91/Vn3AqOZXQbH0wVRettW1arhl27dkSuWUNaVJRuBn1wHO4dVm+EWtjqZkwNUcbZmp71y7Lp7GMeRyboZMzA54HsureLXlV64Wpl2HsNr2DtrF5S89+h3jPRAakhoTzftAmHt9/GIh9LCoaAiTDBzdqNxNRE4lLj9C3nBYqWZSsgaSrJ3AN38HG3pbNvKX3LKRCuI4ari2CsWq39waRUJ3CyKwn1+mt/PC0wvGVFFCZCZ6XqFl1ZhLWZNf2q99PJeBqn0VD1Xskh3XjpEb/+ikxLw3WYboujaApHC0fMFGaEJmjXS88vr4VB33HlKYGhcYxtW0nnxSs0hWWlSti/1YHIdeu0X6ru3iF4dBKajdd58QpNUcLBkg8bluWPi0E8CNduqbqAyAD2P9xP76q9cbR01OpYWsPSQb1XcmcvPD6n1aFSnz0javNmHLt2xbyM4UQCCSEYP378f89/+uknvvnmmyzbmggToh5H0bNTT2rVrkXVqlUZNCjvS5PfffcdZcqUwdZWs99+i32UizJNxS//3qFKCTs6VC8iG1XZ4DpiBDF79hK5YgXun32mnUGkVHtp9p7g11c7Y+iIoS0qsPHsI+YfDGT2B7W0Ns7iK4uxM7OjT7U+WhtDJzQYpM7vcngG9PlLa8OEL12KhGyLV3y74wY3n2omACAtLQ2FQkG1UvZ83aV6jm0tLCz4888/mTx5Mq6uuS+bfTHhC/oP60+7Tu0o71Ce69ev51lXhw4dGDduHD4+mg0VLfYe+l+XgrgfHs+4tpUwKaLeeQYW5ctj37kTkes3oAwP184ggf/Ck3PQfDyYGlaOm/zibmdJ74Ze/HXpCffCtLPW6R/hz7+P/qVPtT66Ly2naSxs1V763YPw6IxWhkh5EkTUH3/i2O19zEobVnCCqakpgwYN4ueff85T++BnwVQtV5UkZRKxKbHUzEch6wYNGlCyZMmCSs2WYu2hp6apmH8wkBql7WlbzUPfcjSC27BhxPyzi4hfl+MxeZJmO5dS7Z05lIXa+i0uoCkGv1mB9WfUXvrPPWprvP9FVxZhZ25H72rFY76oPxBOzld/Dvpqvp5mxNIlCMB1cPal5XLzpPNDfuPQhw8fjq+vL59/nnvOorFjx/LOW+9Qq34tmrVqxmdDP8PJyYmAgAB69OiR5T2HDx/GUYtVmPLkoQshOgghAoQQgUKILK2IEOIDIcRNIcQNIcQGzcosGH9dCuJRZAJjWlcqMiFRuWHu7Y1Dly4837wZZZiGM+Xd2Q9BF9K984KfgjMk3Ows6NvYi22XgwgMjdVo3zfCb3D48WE+rvYxduaaO7yiV8xt1F76vcPwULNFVlKePCHqr79x/OADzEoY5vKnvb09ffv2Zd68ebm27devH/7+/nzQ/QNOHTtFw0YNSU5OpnLlyly+fDnLH20ac8iDQRdCKICFwFtANaCXEKLaS218gMnAG1LK6sAYzUvNH2rv/A41SzvQuqq7vuVoFNehQ5CpqUQs1+DJvgzv3LEs1P5Ic/0aAIOal8fSTMH8g4Ea7XfxlcU4WDjwUdXiNV/UGwA27hqPeAlfsgRhYoKLPk4854MxY8awYsUK4uNz30wvVaoUwwcNZ+mGpWAC165dIyAggNq1a2f5E6XlsOO8eOgNgEAp5T0pZQqwCXjnpTafAgullM8BpJShmpWZf/68+ITHkYmMaeNTbLzzDMy9vHB4+22eb9qkOS/9zj54egmaT1AXFC5GuNha0LexN9vTo500wY3wGxx5coSPq32MrXnRitPPFXNraDoGHhxTn0fQACmPHxP99za1d+5h2Mufzs7OfPDBB6xYkbPDtGfPHlJTUxFCoIpR8TzyOfZu9nr10POyhl4ayJxf8wnwco7LSgBCiBOAAvhGSrnn5Y6EEIOAQQAeHh4cPny4AJIhLi4ux3uVKsmPxxIpZ2+CSfBNDodoNuFPQXVpEkWd2rhs28blb74lrnu3wumSEr+LUzCz9OBsVCmkjt6DLuermkJibgJfbDzOkFqWhda1NHQp1ibWeIZ76uw9gO7mzCStIg3NnUj4exJXak8rtC77deuwBG7XqM6tLNo5ODgQG6vZJTFQR7nkp9+MtoMHD2bBggUkJydne//OnTsZOXIklpbqz9Pn33wOthATE5OrEzl16lT++OMPEhISKF26NH379mXKlCmvtEtKSsrf/7eUMscfoBuwPNPzPsCCl9rsBP4CzIByqP8AOObUb926dWVBOXToUI7XN519KL0m7pT/+gcXeIyCkJsuTRM0abL0960lU0JCcmyXq66APVJ+bS/lhTWaE5cHdD1f3+/yl96Tdso7IbE5tstN1/Ww67LG6hpy2ZVlGlSXN3Q6ZycXqD8X94/n2jQnXcmPHsmb1arLZ9OmZ9vm5s2bBVGYKzExMVrpNyuikqLk9bDrMiopKte2edWV1bwA52U2djUvSy5BQObof8/01zLzBNgupUyVUt4HbgN6KdSZEdni6+lAy8rFa+38ZVyHDEYqlUQsX17wTqRUZ9pzLAu1emlOnAHyabNyWJkpCn16NGPtvFeV4j1f1O2nXks/MrNQ3YQvWYJQKHAZOFBDwgwTe3N7zBXmhCWG6e30aF4M+jnARwhRTghhDvQEtr/U5m+gBYAQwhX1Eoxeqgz8dTGIJ88TGdWq+K2dv0zGWnrU5i0FX0u/sx+eXoRmnxW7tfOX0cRaerFeO38Zc2t1xMv9owWOeEl58oTobdtx7NEDM4+i6WBNnz79lc3N6dOnv9JOCIGbtRvJymRiUnScGTWdXA26lFIJjAD2Av7AFinlDSHEd0KIt9Ob7QUihBA3gUPABCllhLZEZ0dqmooFh9Rx58UtsiU7XIcMVke8rFiZ/5ulVHtfr4F3nkFhvfTFVxZjb25f/L3zDOr1Bxs39be4AhCxdKk6sqUIe+dTp059ZXNz6tSpWbZ1MHfQq5eepzh0KeUuKWUlKWUFKeX09Ne+klJuT38spZTjpJTVpJQ1pZSbtCk6O/5OjzsfXYziznPD3MsLhy6d1REv+T09GnhAHXferPjEneeGi60FfRp5sePKU+7m8/TozYibHHlyhL7V+hZ/7zyD/7z0I/DodL5uTXkSpI4779atyHrn+UUIgZuV2kuPTdH8Jm9uFJuj/8p077x6KXvavCbeeQYuQ4YgU1KIWLUq7zdlrJ07lIFaH2pPnAHyafPymJuasPBQ/uLSl15Zip25HR9Wfb3m6z8vPZ+1RyN+/VVdqMHA4841jYOF/rz0YmPQt195ysOIBEa1Lv5r5y9jUa4c9p068XzDRpSRkXm76d4hCDqvznf+mnjnGbjaWtC7oRfbLj/NcybGgMgADj4+SJ+qfYrPqdC8Ym6jLoJx92CeMzGmPn1K1J9/4tDtfYM9FaotMrz0jBwvuqRYGPQ0lWTBwUCqlrSnXTHJ2ZJfXIcOQSYlEZkXL11KODwL7EsXu1OheWXQm+UxNRF59tKXXl2KrZktH1V7PeeLegPA2gWO/pCn5uG//gqA66dFxzvPT/pcgICAAFq0aEHt2rVfSZ+bk5eekJBAt27dqFKlCtWrV2fSJM3lZCoWBn3n1afcC49nVKuKr513noFF+fLYd+yozsSYW770+0fh8WloOrbIZ1QsKO526nzpf14K4lFEzlWNbj+/zf6H+/mo6kfYm9vrSKGBYWELjUeoTxQHXcixaWpICNFb/8Cxa1fMShWdgjIZ6XPD87gXNWrUKMaOHcvly5fx9/dn5MiR/10TQuBq5UqSMinLqkajRo3i1q1bXLp0iRMnTrB7926NvIcin21RpZLMPxhIJQ9b2hfxfOeFxXXIYGJ27SJy7VrcR4/OvuGRH9TViOoU8fzdhWRIeibGhYcCmdXNN9t2y64uw8bMpujnOy8sDT6Fk/PgyI/wYfZxDxHLVyClxCUfBR9eYPckCL5WQJEvYpWmBIUplKgJb+UcqZM5fW5WYYkv8+zZMzw9Pf97/nL6XAcLB8ISwwhLCMPWzPY/Z9Pa2prmzZsDYG5ujp+fH0+ePMnvW8uSIu+h774eTGBoHCNb+RT5fOeFxcLHB7v27Xm+7jfSoqOzbvTgBDw8Dm+MAbOcj8AXdzzsLelVvwx/XHzCk+dZe+n3ou6x78E+PqzyYdHPd15YLOyg0XC4vTvb2qOpoaFEbdmCw7vvYO5pWPnO88Lw4cNZv3490dn9/mRi7NixtGrVirfeeouff/75v8RbGcm5/Or48X6L9+nYtCO1atfKMjlXVFQUO3bsoHXr1hrRX6Q9dLV3focKbjZ0rKn5ZPFFEdehQ4jds4fIdb/hNmL4qw2OzFKf/qv7se7FGSBDWlRg49nHLDlyl2nvvlqgYNm1ZViaWhq98wwaDoJT8+Hoj9Bz/SuXI1euQiqVuBbUO4dcPen8kJjPfOiZ0+daWeVcfrFfv360b9+ePXv2sG3bNpYuXcqVK1f+S84FoJIqAp8HYqowpZx9uReWhJVKJb169WLUqFGUL1++QO/vZYq0h77vZgi3gmMZ1dqnyNYK1TSWlStj17YNkWvXkvZyUqFHZ9TxxG+MLrK1QjVNSQcrutfzZMu5JzyLTnzh2oPoB+y+v5ueVXriZOmkJ4UGhqUDNBwKt3ZCyI0XLikjIni+aRMOXbpgXrasngQWnvymz+3fvz/btm3D1NSU69evv5A+16+OH++3fJ+Ob6i99Mwe+qBBg/Dx8WHMmDEa015kDbqUau+8nKsNnX2LzsaLLnAZMgRVTAzP17/kQR39AaxdoV4RrUyvJYa2qIBKSpYeeTFbxa/XfsXcxJyPqxm/zbxAoyFgbqf20jMRuWoVMiUFl8GF8M4NgPymzwUIDg4mIiKC0qVLv5I+98rlK2w7uo1tR7f9lz73u+++Izo6mrlz52pUe5E16AdvhXLjaQzDW1Y0eucvYVW9OrYtWhC5ajVpcelexpML6pOhTUao44qN/IenkzXv+3my4ewjQmOSAHgc+5h/7v1D98rdcbFy0bNCA8PKSb30cuNvCL0FgIiLI3LDRuzfeguLcuX0q08DjB8/Ptdol3379lGjRg1q1apF+/bt+fHHHymRRcy9iTDB1cqVhNQE4lPjefLkCT/99BM3b97Ez8+P2rVrs7wwCfYyUSTX0KWUzPv3DmWcrXinttE7zwrXYUN58EEPojZthIoV1d65lZO6ZqSRVxjWsgJbLz5h6dF7NLOFFddWoBAK+lU3fpvJkkbD4fQSOPYTvL8c63//RSYm4jp0iL6VFZi4uP8PL/Tw8CAhIedw1jlz5jBnzpw89e1k6UR4YjhhCWF4e3oTExOTr7X9vFIkPfRr4WlceRLN8BYVMVMUybegdax8fbFp2pSIlauwjbgFt/dA4+HqSAUjr+DlYsO7tUuz/sxDHiZEsC1wG+9Xeh83azd9SzNMbFygwUC4/gdp9y5jfegwdu3bY1Gxor6VGSQmwgQXKxfiU+NJSM35D0WhxtFaz1pCSsn2u6mUdrTiPT/P3G94jXEdNoy0yEjcd68BCwdoULTXNrXN8JYVSFGqWP9sH0II+tfor29Jhk3jkaCwIHL2ZEySkoq0d54TeU2fmxtOFk4oTBSEJWq4uHsmitySy5JzO3liu44pdWdhblrk/h7pFGu/Olj71SDp/BVU3T/FxPI1j6POhfJutrTzteR40hne9X6XEjav90G1XLF1I61GHyI3bye1ZjUsK1fWtyKtMHXq1GzT5eYHhYkCF0sXQhNCMTWxwQ7jkgvBMdGY2fnj7H5L31KKBK6100hLUhD11Gic8oJjyRMgJGaxbfQtpUjw/JEHqlQTnGqm6FtKkUCobJHSlDSp1Er/Rc6gf9WqFx6mHqy88SsqqdK3HMMmLACbhIOYeNoTsXo9qhTjL11OhCeGc+DJdhxT6rL1TDzRian6lmTQqOLjidzwB7bV3CktT0PUI31LMmiklITHpWIhS+FoZq2VMYqcQVeYKGjv0J47z+9w6PEhfcsxbI7+BGbWRL3zAcqQEKL//Evfigya1ddXo1Qp6e7WnthkJatO3Ne3JIPm+aZNpEVF4Tr+C/ULx+fqVY+hE5WQSopShYedpdaSCBY5gw7gZ+NHWbuyLL2yVG/FWA2eiLtwfSvUH0BiDT+satcmfNlSpNFLz5KIxAi23N5Cx3IdqeXkQdtqHqw8fp/YJKOXnhWqxEQiVqzEpmlTrN5oS3CJ1nBpHcQ81bc0g0RKSWhsMpZmCuwstbd1WSQNukIoGFhzIP6R/hwLOqZvOYbJsdmgsFAXJhAC12FDUT59RvT2l+t7GwFYe3MtScokPvVV5+8e1cqHmCQla0891LMyw+T55s2kRUbiOmwoAI/Kvg9SBSd+0bOygqPJfOgvE52YSrIyDQ87C4QQdO3alVq1alG9enWGDBlCWlqaRt5DkTToAJ0rdKa0bWmWXFli9NJf5vkDuLIJ6n4CtupyfDbNmmFZowbhS5chldrZkCmqRCVFsenWJjqU60A5B/Upx5qeDrSq4s7yY/eITzbOV2ZUSUlErFiBdaNGWPv5AZBk5QG1esKF1RAbol+BBUST+dAzI6UkNEbtndtbmQGwZs0arly5wvXr1wkLC+P333/XyHsocmGLGZiZmDGw5kC+PfUtJ5+e5I3Sb+hbkuFwbA6YmKqTcKUj0r30J8OGE71zJ47vvqs/fQbGOv91JCoTGVTzRQ9rZKuKdF10kt9OP2TwmxX0pM7wiNr6B2lh4bj+NPvFC83Gw+WN6pzp7fMfp53BrLOzuBWpmSi2tLQ0FAoFVZyrMLHBxBzbajofegYxiakkKdMo62z939q5vb26UIpSqSQlJUVja+pF1kMHeKfCO5SwKWH00jMT9Qgub1Cnx7V/MaWwbcuWWFSpQsSSpUgNfcUr6kQnR7PBfwNtvdpS0enFU451yjrRvJIby47eIzHFOF8AqpQUIpYvx6peXawb1H/xonN58P0Azq+EOO0dntEmmsyHnvHTqEE9enRoTosmDV7Itti+fXvc3d2xs7OjW7duGtFfZD10ADOFGQNrDGTamWmcCT5Do5KN9C1J/xyfC0KoC1i8RIaXHjRqNDG7duPQpbPO5RkaG/w3EJcaxyDfrNc/R7WqSLclp1h/5iEDm2kmZ3VRJvrPP1EGB1Ny+rSsvcpm4+HqZji1ANp+W6AxcvOk80OsnvOhRyem8jAinjLO1jhZv1iMfe/evSQlJfHRRx9x8OBB2rZtm+/39zJF2kMH6OrTFXdrd5ZcWaJvKfonOkgdaVD7I3DIulqMXZs2WPj4EL5kyWvvpcemxLLOfx0ty7SksnPWpxzreTvTpIILS4/eIyn19Z4vmZJC+LJlWNWujU2TJlk3cvWB6u/B2V8hPkK3AjWEJvOhN6pflx4dmtOySYMsKxZZWlryzjvvsG3bNo1oL/IG3VxhTv8a/bkQcoFzwef0LUe/nPhFHWnQdGy2TYSJCa7DhpJy9y6x+/bpUJzhsfHWRmJTYhlSK+ccJKNa+xAWm8yms6/3wZmobdtQPn2G6/BhOa/5Nv8MUhPg9ELdidMgmsqHfvTUOTbvOcqJM+f/y43u6OhIXFwcwcHBgHoN/Z9//qFKlSoa0V7kDTrA+z7v42rlytIrS/UtRX/EPFNHGNTqBU5eOTa1a9cO8woVCF+0CKl6PU/bxqfGs/bmWlp4tqCaS7Uc2zYq70LDcs4sPnL3tfXSZWoqEUuWYlmzJjZNm+bc2L0qVHsHziyDhEjdCNQwhc2HLqUkJDYJc1MTHK3NXrgvPj6eHj164OvrS+3atXF3d2fIEM0kNisWBt3S1JJ+1ftxJvgMF0Mu6luOfjjxC6iU6jXMXBAKBa5Dh5J8J5DY/Qd0IM7w2HhrI9HJ0QyuNThP7Ue39iEkJpnfzz/WsjLDJHr7DlKDgnL3zjN483NIiYXTi7UvTkNklQ89pzj0OXPmEBAQwJUrV7hy5Qq9e/f+71pskpLElDTc7SwweWm+PDw8OHLkCFevXuX69evMnz8fU1PNbGcWC4MO0L1yd5wtnVl8peh8gDRGbDBcWKWOA3bOW7UY+7c6YO7t/Vp66QmpCay5sYampZtSw7VGnu5pXMGFel5OLDp8l2Tl6+WlS6WS8KVLsaxWDds338zbTR7VoWoXOLMEEp9rV6CBkXEq1FxhguNLG6HaptgYdCtTK/pV78fpZ6e5HHpZ33J0y8n5kJaaJ+88A7WXPoTkgADiDh7UojjDY1PAJqKSo3JdO8+MEILRbXx4Fp3E7+efaFGd4RG9cyepjx7hOmxo/uKl35wIyTFwpmgvheY3H3pcspKEFCVuWXjn2qbYGHSADyp/8Pp56XGhcG6FOv7XJX+HX+w7dcLMqyxhCxe9NnH8Gd55k1JNqOVWK1/3Nq3oSp2yjiw+fJcU5evxrUYqlYQvXoxF1arYtm6dv5tL1IQqneH0IkjKPa7bUJk6deoLRZ8vX76cbX50KSUhMWrv3MlGt945FDODbm1mzcfVP+bk05NcCbuibzm64eQ8SEuGZp/l+1ZhaqpeS/f3f2289C0BW4hMisyXd56BEILRrX0Iikpk64XXw0uP+ecfUh8WwDvP4M3P1ca8iHvpeUWf3jnk0aALIToIIQKEEIFCiEk5tHtfCCGFEPU0JzF/9KzcEycLp9fDS48LU3vnNbqBa8FqOTp07pzupS8s9l56QmoCq26sonHJxtRxr1OgPt6s5EbtMo4sPBRY7L10qVQSvmgxFlWqYJdf7zyDkrWgckc4tbBIe+l5IcM7N9OTdw55MOhCCAWwEHgLqAb0EkK8EuclhLADRgNnNC0yP1ibWdO3el9OBJ3gathVfUrRPifngTJJ7QUVEGFqiuuQoSTf9CfuUPHOL5/hnQ+tPbTAfQghGNPm9fDSY3btIuXhQ7V3blKIL/NvToSkqGLvpWd451lFtuiKvPwvNQACpZT3pJQpwCbgnSza/Q+YBSRpUF+B+LDKhzhaOLLoyiJ9S9EecWFwbjnU7K4+nVcIHLp0xqxsWcIWLCi2XromvPMMXgcvXaalqb3zSpWwa1PIcnylaqd76QuKrZduCN45gMjtF1gI0Q3oIKUcmP68D9BQSjkiUxs/YKqU8n0hxGHgMynl+Sz6GgQMAvDw8Ki7adOmAomOi4vD1tY2xzb7o/ezPWo740qMo5xF3kL5CktedGmK8ndXUebxds42WECiddbH/POjy/LkKRzWriVq6BCSa+Vvs7Cg6HK+/o35l7+f/81Yj7GUt8w5J0tedF0NUzLnQjKfVDenRRmzHNtqEl3NmeWZMzisWk3Up5+SXNev0LpsY+9S78I47nt/yEPvHq9cd3BwoGLFgi0b5kRGtsW8YG9vz4gRI5gxYwYA8+bNIy4ujilTpmTZ/s6dO4wePZro6GiSkpLxrd+YX36Zh71F7t55hq4ePXrw4MEDzpzJemEjMDDwlURhLVu2vCClzHpZW0qZ4w/QDVie6XkfYEGm5ybAYcA7/flhoF5u/datW1cWlEOHDuXaJj4lXjbb2EwO3je4wOPkl7zo0gixoVL+z0PKPwblqXledKlSU+Wdtu3k3a5dpUqlKqTAvKGr+YpPiZfNNzWXn+79NE/t8zRfKpV8Z8Fx2eT7f2VyalohFeYdXcyZKjVVBrZrL+++/Y5UpeXtveVJ14ZeUn5fRsqE569cunnzZv5E5pGYmJg8t7WwsJDe3t4yLCxMSinljz/+KL/++uts27dr107+/fffUqVSyTshsfLvf0/KtDz+7sTExMg//vhD9urVS1avXj3bdlnNC3BeZmNX83I8KQgok+m5Z/prGdgBNYDD6bvgJYDtQoi3ZRZeuq6wNrPmkxqf8POFn7kcepna7rX1JUXznPxFHdnSfILGusyIeHk2eTJx//5b+K/ZBsTmgM1EJkUyrPYwjfWZsZb+yapz/H7hMR81zDndQlEieudOUh4+pPT8eYVbO3+ZFhNh6T/qtfQW2WdUDJ4xg2R/zeRDV6alEalQYFG1CiWy8bQzKGg+9Iy186YN/PK8dh4XF8ecOXNYtmwZH3zwQZ7uyQt5+d86B/gIIcoJIcyBnsB/dcyklNFSSlcppbeU0hs4DejVmGfQs3LP4heXHhcKZ5dDzQ8KHNmSHQ5dOmPu5UXYgoXF5vRoQmoCq66v4o1Sb2j8j/qbldzwK+vIwoOBxeb0aOa4c43/US9ZCyp3Uke8JEZptm8NUZB86J07dWLDisWI1ATg1XzomX8ysi1OmzaN8ePHY21trVH9uXroUkqlEGIEsBdQACullDeEEN+hdv0NtkiltZk1/ar3Y/aF2VwKvVTozTCD4PjPkJZSqMiW7BCmprgOH8bTzycSe+AA9u3aaXwMXbPh1gaeJz/XqHeegRCCsW0r0WfFWbace0yfxt4aH0PXRG/fQerDR3guXKCdyvQtJsHSZurDRi2z9phz86Tzg7bzob/xZis2/rmD04f20qTxmlfyoWfF5cuXuX//Pl27duXBgwd51pYX8vR9Skq5S0pZSUpZQUo5Pf21r7Iy5lLKFobgnWeQcXp04aWimcrzBWKeqePOa/XK96nQvGLfqRPm5coRXgy89LiUOFbfWE2z0s3wdfPVyhhNK7pS39uJhYeKfiZGmZpK+OLF6pwtrVppZ5CSvlD1bTi1yGAzMeY1H7qUEmHrTI+P+vLPzu1Z5kPPykM/deoUly5dwtvbm6ZNm3L79m1atGihEe3F6qRoVlibWTOw5kDOBJ8p+vnSj88BmabON60lhEKB67BhJN++TezevVobRxdsuLWB6ORohtcerrUxMrz04JikIp8vPXrbNlIfP8Z15AjteOcZtJgMKXHqHEQGSF7zof+1/R9i4pNwt7ckNCTklXzoWf04OjoydOhQbt++zYMHDzh+/DiVKlXi8OHDGtFe7A06QPdK3XG3cmfBpSIcZx39RJ3vvPZHec6oWFDsO76FecUK6rX0IlrVKDYlljU31tDCswXVXatrdawmFVxpWM6ZhYeLrpeuSkkhbNEiLH19sdWQt5gtHtWgxnvqzdH4nHOO64vc8qFLKdmxew/d2jahZZP6r+RD1xevhUG3NLVkoO9ALoZe5NSzU/qWUzCO/gRSatU7z0AoFLiNGEnK3bvE/POP1sfTButuriMmJUYra+dZMa5tJcJik1l36qFOxtM0UVu3onz6DLdRo7TrnWfw5iRQJqrz+BsI+cmHHpOYytgvpnHxyo0s86HnFW9vb65fv15Qya/wWhh0UFc1KmFTgoWXimDOkucP1LVC/fqCY1mdDGnXri0WVauqvfT0MltFhaikKNbeXEtbr7ZUdamqkzEblnehmY8ri4/cJS5ZqZMxNYUqKYmIxUuwqlcXmzeyqRWqadwqqU85n/0VYkN0M6aGkFISEpuMhanilWpE+ua1MejmCnMG+w7mavhVjgUd07ec/HF4FpiY6sQ7z0CYmOA2ciSpjx4RraECtrpi5Y2VJKQmaHXtPCvGt6tMZHwKq0/c1+m4heX5pk0ow8J0551n8OZEdcTWsdm6G7MAvJwP3bdWbebPnoWHvYVu5ysPvDYGHeCdiu/gaevJ/EvzUckiEsERFgBXN0H9gWBfSqdD27ZsgaWvL2GLFqFKSdHp2AUlPDGcjf4b6VS+ExUctRMJlB21yzjSpqoHS4/eIzqhaHyrUcXHE7HsV2yaNMamQQPdDu5SAer0VlfbUikN9ptz5nzoly5dYuu+44wcPxEHK+165wWZj9fKoJuZmDGs9jBuRd5i/8P9+paTNw7NADNraDpW50MLIXAbPQrl02dEbfld5+MXhOXXlpOqSmVorYJnVCwM49pWIjZJya/H7ull/PwS+dt60iIjcRs1Sj8C0k87W8bcJyIiwmCNegbPE1JIVqbhYW+pVe9cSklERASWlpb5uk8zlUmLEB3LdWTl9ZUsuLSA1mVbY2piwFPw7Crc/Fv9obdx1YsEmyZNsK5fn/AlS3B8rysmGj7ZpkmC44PZErCFdyu+S1l73ew1vEy1UvZ08i3JyhP3+eQNb1xtLfSiIy+kRUcTsWIFti1bYlW7tn5EOJaBev3xPDyGJ847CAsL02j3SUlJ+TaK2SHTMyqamAjMYi14qmVdlpaWeHp65qtfA7Zm2kFhomBE7RGMOTyGnfd28m7Fd/UtKXsOTQdLB2g8Ive2WkIIgdvYsTz88EMif1uP66BP9aYlNzJSPAz2HaxXHWPbVGL3tWcsOnSXr7q8UjrAYIhYsRJVbCxuY0brV0jTcZhdXEu56z/D+8s12vXhw4epU0czJ8RXnbjPtzvu89uAhlT1KZyDpUldmXmtllwyaFW2FdVdqrP48mJS0gx0bfjRGbi9B5qMAitHvUqx9quDbYsWRCxfTlpMjF61ZMe96Hv8Hfg3PSr3oKRtSb1qqehuS7e6nvx2+iFBUYl61ZIdyrAwItetw75TJywrV9avGDsPaDAIrm2FYM2F8GmShBQlCw8F0ri8C29UdNG3nGx5LQ26EIJRfqN4Gv+Urbe36lvOq0gJB74BG3dopJ+14JdxGzMaVUwMEStW6ltKliy4tABLhSWf+hrGN4jRbSoBMHf/bT0ryZrwJUuRKSm4jdTft78XaDoGLO3h4P/0rSRLVp14QHhcCp+1r2xwkS2ZeS0NOkDjko2pX6I+S68uJSE9S5rBEHgAHp1UJ+Ayt9G3GgAsq1TBvmNHIteuRZnDCTp9cCPiBvsf7qdv9b44WzrrWw4ApR2t6N3Iiz8uPiEwNFbfcl4g5UkQz7dswfH99zH3MpC0v1ZO8MYY9bfSh4Z1+O95fApLDt+lTVV36no56VtOjry2Bl0IwRi/MUQmRbLm5hp9y/l/VCo48C04eYPfx/pW8wJuo0YiU1IIX7xE31JeYN7FeThaOPJxNcOar+EtK2BlpmD2PsPy0sPnz0eYmOA6zDC+/f1HwyFgW0L97dSAol0WHQ4kLkXJhPZV9C0lV15bgw7g6+ZLm7JtWH19NZFJBpL57cafEHINWn4BpvqrTZgV5t7eOHbvxvPNm0l5ZBiJqM4+O8vJpycZWHMgtua6KWeXV1xsLRjYrDy7rwdz5XGUvuUAkBQQQPT27Tj36Y2ZnvOOvIK5tfpb6ePTcGefvtUAEBSVyJpTD3mvjieVS+Q9Da++eK0NOsBIv5EkpSXx69Vf9S0FlCnqNUSPmlDjfX2ryRLXYcMQZmaEzdV/Dg6VVDHnwhxK2JSgZ5We+paTJQOblcPFxpzvd/sbRIx16Jw5mNjZ4fKpYew1vIJfX3Aur/6WqtJ/orO5+2+DhLFtC1eIXVe89ga9vEN5ulbsyuaAzQTFBeV+gza5sFqdt6XN16DJ0l8axMzdHedPPiZm1y4Sr9/Qq5Z9D/ZxI+IGI2qPwEJhmPHedpZmjGxVkdP3IjkcoNkY6/wSf+Ys8UeO4jp4EAoHB71qyRaFGbT6AkJvwNUtepVyJySWPy4+oU9jLzydDPf8RWYM02romKG1hmIiTFhwaYH+RCTFwJGZUK45VDTsep4uAwagcHQkbI7+cnCkpqUy79I8fJx86Fy+s9505IUPG3rh5WLNrD23SFPpx0uXUhI6ezamJUrg9NFHetGQZ6p1hVJ+cHAapOov7HPWngCszU0Z3lKzpR61idGgAx42HvSu2pud93ZyM+KmfkSc+AUSIqDtd2DAYVEACltbXIcNJf7kKeKOn9CLht9v/87j2MeM9RuLwkShFw15xdzUhM/aVeZWcCx/XdLPt8DYvftIunoVt5EjMdHQyUmtYWKi/j2IeaLOma4HztyL4IB/CENbVMDZxrD2snLCaNDTGVBzAE4WTsw+P1v3a50xT9WFc2t2h1JFo+6pY8+emHl6EvrjjzovghGXEsfSq0tpUKIBTUs31enYBaVTzZL4ejowZ1+AzotgyJQUQufMwcKnIg7vvqPTsQtMuWZQqQMcm6PzUnUqlWTGLn9KOljS/w3tFpPRNEaDno6duR1Dag3hbPBZ3afXPTRDXVqu1Re6HbcQmJib4z5+HMkBAUT//bdOx155fSWRSZGMqzvOoA95ZMbERDDprSo8jU5ipY7T6z7ftInUR49w//xzhMKwv828QJtvICVWXdxFh+y4+pQrT6IZ364yVuZFaL4wGvQX6F65O172Xsw5PwelSkdFCkJuwOX16qPPTt66GVND2HXogGUtX8Lm/oIqQTeHs57FPWPtzbV0Kt9J66XlNE2TCq60qerOokN3CY9L1smYadHRhC9chE2TJtg0LRrfZv7Dvao6ve7ZZRCpm+yVyco0ftwbQNWS9nStU1onY2oSo0HPhJmJGWP8xnA3+i5/Bf6l/QGlhL1TwcIemo3X/ngaRgiBx8RJKMPCiFi1Sidj/nJJHS45uo6eE0oVkMkdq5KUmsbcA7o5bBS+ZClpMTG4fz6hyHybeYGWU0FhDvu/1slwa08+5MnzRKZ2rIrCpOjNl9Ggv0Trsq3xc/djwaUFxKXE5X5DYbizD+4dghaTwNowjqznF2u/Oti1b0/EipWkhoZqdaxrYdf4594/9K3WV+8JuApKBTdbPmpYlg1nHnE7RLspAVIeP+b5b7/h8F5XLKsY/inHLLEroa4F4L8dHmh3Az4iLpl5B+/QorIbTQuZTVFfGA36Swgh+Lz+50QmRfLrNS0eNkpLVXvnLhXV1YiKMO7jxyFTUwn7RXuHjaSU/HT+J5wtnRlQc4DWxtEFo9tUwsbClBm7/LU6TuhPs8HUVH/FKzRFkxFg7wl7J6tTY2iJnw/cJiEljS866aYOrTYwGvQsqO5anbcrvM26m+t4HPtYO4OcWwERd6DdNPVhiiKMedmyOPfpQ/Sff2ntsNH+h/u5GHqRkXVGYmNmGAnLCoqzjTmjWvlwOCCMI7e1c9go/uxZYvfuxeXTgZh5eGhlDJ1hZqU+bPfsClzZqJUhAoJj2XDmEX0aeVHR3fCP+GeH0aBnw2i/0ZiamPLzhZ8133lCJBz+Hsq9qQ7NKga4Dh2CwtmZkBkzNB72maRMYvb52fg4+Rh2QZJ80LeJ+rDR/3beJDVNs16nTEsjZMb3mJYqiUv//hrtW2/U6Aal68K/30GyZpdCpZT8b+dN7CzNGN26aBzxzw6jQc8Gd2t3BtQYwP6H+zkXfE6znR/+HpJjoP0Mgz9ElFcUdna4jRlN4sWLxOzapdG+V91YxdP4p0xuMNmwSwbmAwtTBV92qkZgaBxrTz3UaN9RW/8g+dYtPCZMMPxDRHnFxAQ6zIS4YDg+R6Nd/+sfyvHAcMa08cGpCB0iygqjQc+Bj6t/TEmbksw8O1NzYYzB1+HccqjXH0rU0EyfBoLje+9hUa0qoT/+hCpRM0e2n8U9Y+W1lbT1akv9EvU10qeh0LqqO80ruTH3wG0iNBTGmBYTQ9jcuVjVq4tdh+Lx7e8/yjQA3x5wcj5E3NVIl8nKNKb9c5Pybjb0bmQgueELgdGg54ClqSUT6k/g9vPb/H5bA1XvpYTdn4Olozocq5ghFApKTJmCMjiYiF81UxtyzoU5SCSf1ftMI/0ZEkIIvupcjcSUNH7aF6CRPsMXLiQtKooSU6YUzTDF3Gj7nTqMce8UjXS3/Nh9HkQk8E2X6pgpir45LPrvQMu0KduGRiUbMf/S/MLnTL/xJzw8Aa2/LLJhirlhXa8e9p06EbF8eaFzpp8PPs+eB3voV6MfpWxLaUihYVHR3ZaPm3iz6dxjrgdFF6qvpIDbRP62Hsfu3bGsZrjFqQuFXQl1zvTbe+B24XKmB0UlsuBgIO2re9C8kpuGBOqXPBl0IUQHIUSAECJQCDEpi+vjhBA3hRBXhRD/CiGK/neXdIQQTG4wmcTURH65WIiwvJR42PcllPA1uEpEmsb9888RpqYET59e4A3SVFUq089Mp6RNSfrXKCYbe9kwuo0PLjbmfPH3dVQFzMYopST4f9+p9zLGjtGsQEOj4VB1uO+eSaAs+FLVjH/8UUnJF52Kzx+/XA26EEIBLATeAqoBvYQQL8/AJaCelNIX2Ar8oGmh+qS8Y3l6V+vNn3f+5FrYtYJ1cuQHiAmCjj+CgWcHLCxmHu64jhxJ/JGjxB06VKA+NvhvIDAqkIkNJmJlaqVhhYaFvaUZUzpW5fLjKLacL1iYbMyOHSSev4Db+HGYOhl23ctCY2oOHWZB5F04Oa9AXZwIDOefa88Y3rIiZZyLRq7zvJAXD70BECilvCelTAE2AS+kbJNSHpJSZiTzOA14alam/hlSawhuVm5MOzONtPxWUgm5CacWQO3eULaRdgQaGM69P8LCpyIh06bne4M0OD6YRZcX0dyzOa3KtNKSQsOia53SNCjnzMw9t4iMT8nXvWmxsYT88COWvr44vm+Yla40jk8bqPq2OnFXZP6SnSUr0/hq23XKOlszqHl5LQnUDyK3r8RCiG5ABynlwPTnfYCGUsoR2bRfAARLKadlcW0QMAjAw8Oj7qZNmwokOi4uDltb3dePvBB/gdXhq3nf6X1a2LfImy6povblqdjEP+Zsg0WkmtvrRmxuunSA2e3bOM/5mbiObxH/9tt51rUybCXXE68zpeQUXM10fwRbX/MVFKviq5OJvFHalP41sq7AlJU2u81bsDp8mMhJE1F66We1Ux9zZpEUTv1zw4l2qM61ml9mGQKcla7td1P4804qY+taUMtNP2GwhZmvli1bXpBS1svyopQyxx+gG7A80/M+wIJs2vZG7aFb5NZv3bp1ZUE5dOhQge8tDCqVSg7eP1g2+K2BfBb37JXrWeq6uE7Kr+2lvLBW+wKzQV/zJaWUTyZMkDdr1JRJd+68ci0rXSeenJA1VteQSy4v0YG6rNHnfM3YdVN6Tdwpzz+IyPL6y9oSrl6VN6tWk8++/VYH6rJHb3N2cqH69+vG31leflnXvbA46TN1lxy2/oIOxGVPYeYLOC+zsat5WXIJAspkeu6Z/toLCCHaAFOBt6WUuskNqmOEEHzR8AtUUsWss7NyvyEhUr0RWqYR1Dbwsl9awmPSJBTW1jz76mtkLnk4EpWJfHf6O7ztvelXo5+OFBoWo1r5UMrBksl/XiNFmfN8ydRUnn35FaaurriNHasjhQZGg0FQoibsngjJOSc7k1Ly5d/XsVCY8HXn4rMRmpm8GPRzgI8QopwQwhzoCWzP3EAIUQdYitqYazflnp7xtPNkcK3BHHh0gMOPD+fceO9U9YnQznMMtuiztjF1dsZ94kQSL14kakvOsfyLLi8iKC6Irxp/hbmiaJ/YKyg2FqZM61qD2yFxLDmS8+GZyLVr1SdCv5iKwq7o5h8pFApT6DwXYoPVaQFyYNvlpxwPDOfzDpVxty8mJ2hfIlcrI6VUAiOAvYA/sEVKeUMI8Z0QImNh9EfAFvhdCHFZCLE9m+6KBR9X/5iKjhWZfmZ69il2Aw/AlQ3q1J8eRasQg6Zx6Pou1g0bEvrTT6SGZP33/kbEDdbeXEu3St2K3YnQ/NKqigdv1yrFgoOBBIZm7XWmPHlC2PwF2LZujV3btjpWaGB41oOGg+Hsr/DodJZNIuNT+N/Om9Qu48iHDYtNVPUr5MltlFLuklJWklJWkFJOT3/tKynl9vTHbaSUHlLK2uk/r+6AFSPMTMz4tsm3hCaEZp28KzkWdowB10rQfILO9RkaQghKfvsNMiWFkGnTXolNT1Wl8s3Jb3CxdGFs3dd06eAlvupSDWsLBZP+uPZKbLqUkuCvv0GYmFDii6nF80Rofmn1JTiUge0jITXplcvf7rhBTFIqM9+vWSQLV+SV13MdQAP4uvnSp2ofttzewplnZ168+O//IPoJvL0ATLOOVnjdMPf2xnXECGL37yd29+4Xrq25sYZbkbeY2nAq9nqIAjJEXG0t+KJTNc4/fM5vZ15M3hW1dSvxJ07gNn4cZiWLZqEPjWNhC13mQvhtOPrjC5f23wxh2+WnjGjpQ5USxfvzZTTohWBEnRF42Xvx9cmvSUhND8N/dFpdA7HhYCjbUL8CDQyX/v2wrFmT4O/+hzI8HIA7z++w6PIi2nq1pbVXaz0rNCze9ytNMx9XZu6+xcOIeABMIiMJnTkL6wYNcOrVS88KDYyKrdXBByfmwrOrAMSnSqb+dY0qJewY2qKCfvXpAKNBLwSWppZ82+RbguKCmHdpHgplIvw1BBzLqL8CGnkBYWpKqe9noIqPJ/jb70hTKZl6fCp25nZ80egLfcszOIQQzHrfF4UQTPj9KmlpKuzX/YaUkpIzpiNe0432HGk3Daxd1L+HymQ23kohIj6Fn7rXwty0+M9X8X+HWqauR10+rPIh6/3XE3N/ITx/AO8uVn8FNPIKFhUr4jpyJLH793P72Cr8I/35stGXOFsWz2RlhaWUoxVfdanG2QeR7Jq5BAt/f9w/G4+5Z7E7jK0ZrJ3h7fkQeoP7W6dyPEjJkDfLU6O0g76V6QSjQdcAY+qOwdvKnZ9N7hLd8FPwbqpvSQaNS/9+yGo+1P3rIt2dWtHGq42+JRk03ep68n4JSemNy4itUAmnnj31LcmwqdSexJp98Lq1nE42txndupK+FekMo0HXAFYpicx8GkS4QsF0K82WXyuOJJHK7LdSMU+Dj/6IzPXA0WuPUsmQ42tRCRO+r9WDVON05YiUkvHR3QmSbsxULMY8LV7fknSG0aAXFilh5xiqx4TxtnUTdj/cy657mi3BVtz48dyPnDV/woOurUk5c57I1Wv0LcmgCV+8BOX1aySM+IxLKgdma6gYRnFl49nH7Lodx9V6M7FNCYXdr2T8LrYYDXphubAKbm6DVl/wplsPfN18mXZ6GkFxr2RHMAIceHiA32//Tr/q/XBs+T62bVoT+vPPJPn761uaQZJw8SLhS5bg8M47NB/8IS3KmLL06D2O3QnTtzSDJDA0lv/tvEnTiq681ek9HpXtBpd/g6saqDhWBDAa9MIQcgP2TIYKraDJaBRCwcxmM5FIJhyZQGpaqr4VGhTB8cF8ffJrqrtUZ2SdkSAEJf/3P0wdHQka/xmq+Nfnq3FeSIuO5umEzzErVQqPL9VRQL2qmOPjbsu4LVc0Voe0uJCYksbw9ZewNlcw+4NamJgIHnj3UudS2jlWY3VIDRmjQS8oKfHwez+wsIeuS//L1VLGrgzfvfEd18Kv8fPFLE6RvqakqlKZeHQiqapUZjWfhZnCDABTJydK/fgDKQ8e8Oybbwtc4ai4IVUqnk6aTGpoKKVn/4QiPdWqhUIwr1cdohNTGf/7lQJXOCqOfLP9BrdDY/m5R2080nO1SBMFvL9c/fu5tT8o85drvqhhNOgFQUrYNUF9Ku29ZWDr/sLltl5t6VWlF+turuPgo4N6EmlY/HLhFy6GXuTLRl/iZf9iLg2bRo1wGzmCmB07iNq8WU8KDYvIlSuJO3QIjwkTsKpV64VrVUva82XnahwOCGP+wUA9KTQs/rr0hM3nHzOsRYVX64M6loF3FsKzy7C/eJ8PMRr0gnB+BVxer87TUqFllk0+q/cZVZ2r8sWJL3gcU7CyYsWFfQ/2sebmGnpU7kGXCl2ybOMyeDA2zZoRMn0Giddv6FihYZFw7hyhP8/FrkMHnPr0zrJN74Zlea9Oaeb+e5vDAcU6wWmu3A6JZepf12ng7czYNtmEKFbtAo2GwZklcKX4Og1Gg55fHp1R75r7tIMWk7NtZq4wZ3aL2QgEow6N+v/UAK8Z96Lv8eWJL/F19eXz+p9n206YmFDqh1koXFwIGj0a5fPnOlRpOKSGhBA0Tn1wqOS0/2WbeEsIwfSuNansYceYzZd5HPl6fr6iElL4dO15bCxMmderDqaKHExa2+/AqynsGA3PruhOpA4xGvT8EBsMW/qAg6d6qSWXo9dl7Mrw05s/cS/6HlOPT0UlX68A4piUGMYcGoOFwoLZLWbnmuPc1MkJz3m/oAwLI2jUaGRK8V7vfBlVUhJPho9AFR9P6Xnz/ls3zw4rcwVLetclTSUZ8tsFElKUOlJqGCjTVIzceImnUYks6e1HCYdccpwrzKD7KrBygs291QVoihlGg55XUhPVH4LkWOi5Qf2hyAONSzVmfN3xHHh0gGVXl2lZpOGgVCn57PBnPI55zOwWsylhUyJP91n5+lJy+jQSzp0jeNr012aTVErJs6lfkHTjBqV+/AHLynk73ejtasO8nnXwfxbD2M2XX6tN0h/2BnDsTjjT3q1BXa88po6wdYcev6U7Z32L3Sap0aDnBZUK/hwET86rI1o88le+qk+1PnQp34WFlxey5/4eLYk0HKSUzDw7k1PPTvFl4y/zXbDCoUsXXAYNImrLFp6v36AllYZFxNJlxPzzD25jxmDXOn9ZJ1tWceeLTtXYeyOEH1+TQ0ebzz1i2dF79G3sRY/6ZfN3s2dddb6XB8dg5xh1kEMxQT8lr4saB74G/+3QbjpUy3/tDiEEXzf5mqC4IKYcn4KLlUuxrsqz4dYGNgdspl/1frzn816B+nAbM5rku3cJmTEDs1IlsWvVSsMqDYfonf8QNncu9p074zLo0wL10e8Nb+6GxbH48F3KudrwQb0yud9URDl0K5Qpf12neSU3vixobdBaPSHyPhyZCU7e8Gb2+ztFCaOHnhvnVsDJeVB/IDQeXuBuLBQWzGs1jzJ2ZRh9aDSBz4tnuNme+3uYdXYWrcq0YkzdMQXuR5iYUPqHWVjWqEHQ2HEkXLigOZEGRNzxEzydPBnr+vUpOX1agasPCSH45u3qNPNxZcqf1zh4K0TDSg2Dq0+iGLb+IlVL2rHoIz/MctoEzY0Wk8C3JxyaXmwiX4wGPSeu/g7/jAef9tBhFhSy1JeDhQOL2yzGQmHBkANDCI4P1pBQw+B40HEmH5tMHfc6zGw+ExNRuI+XiY0NZZYuwaxUKR4PHUbS7dsaUmoYJF67xpNRo7CoUAHPRQsxsShcdSszhQmLPvKjakl7hv52kTP3IjSk1DB4EB5P/9XncLE1Z+Un9bG1KOQCgxDqpRfvZrBtGNwq+jmYjAY9O/x3wl+DwesN6L5aXV1cA5SyLcXiNouJT42n/97+hMQXD0/qUuglxh4ai4+TDwtaL8DK1Eoj/Zo6OVF2+a+YWFryeOCnpDx8mPtNRYDkO3d4PGgwps7OlFm2FIWdnUb6tbM0Y03/Bng6WTFwzXmuB0VrpF998ygigV6/nkYlYXW/Brjb5RLRkldMzaHXRihZC37/GO4W7YOARoOeFYEHYGs/KFUHPtwE5tYa7b6KcxWWtF1CZFIkA/cNJCyhaCdauhx6mWEHhlHCpgSL2yzGzlwzxikDs9KlKbP8V2RqKg/7fkzKgwca7V/XJAXc5uHHnyBMTSm7/FfM3N1zvykfONuY89vAhthbmdFnxRluPC3aRv3Jc7UxT0xN47cBDanoruHiMRZ20PsPcK0MGz+Ehyc1278OMRr0l7m1S/2f6loZem9V/2drgVputVjcZjEhCSEM3DeQ8MRwrYyjbc4Fn2PQ/kE4Wzrza7tfcbFy0co4lpUqUXb1amRKCg/7fkzyvftaGUfbJAUE8OiTTxBmZnitW4u5t7dWxinpYMX6gQ2xMlPQa9lpLj+O0so42iYoKpFev54mNimV3wY0pFopLRV5tnKCPn+p0wT81g3uHtLOOFrGaNAzc2WzOtbcozp8vD3PseYFpY57HRa1XsSz+Gf03tWbhzFFaznhZNBJhh0YRkmbkqzusDrPseYFxbJyJcquWY1UKnn4cV+SAopWiF7i1as8+vgThIUFXmvXaM2YZ+DtasPmwY1xtDan9/IznL1ftA7SBATH8t6iE0QlpLJ2QEPtl5GzdYOPd6qjXjZ8AP47tDueFjAa9AzOLIO/BoFXE7Uxt9ZNjct6Jeqxot0KElIT6Lu7LzciikYekx13dzDi4Ai87L1Y2X4lbtZuud+kASwrVcJr7RqEiYKHH35E/Mmi8fU49uBBHvb9GBNbW7Ux9/LK/SYNUMbZmi2DG+Nub0HflWfYc/2ZTsYtLOceRNJ9yUmkhC2DG1O7jKNuBrbzgE92qtfUt/SFS+t1M66GMBr0tFT45zPYPQEqd4SPtLfMkh013Wqy9q21WCos6b+nP0ceH9Hp+PlBJVXMvzSfKcenUNu9Nivar9DaMkt2WFSsiPfmTZiVLs2jQYOJ+utvnY6fXyI3bODJiJFY+PjgvWkj5mXzeRCmkJRwsGTL4MZUKWHPkN8usuhwoEGfwN159Sm9l5/B1daCP4Y2oWpJLS2zZIe1M/T5G8o1V0e/7P8aVGm61VBAXm+DHh8B67rCuV+h8Qj1kWAzDe2e5xNvB2/WdVyHl70XIw6OYNHlRQaX+yUhNYGJRyey7OoyulbsytI2S3Gw0E81dbMSJfBa/xvW9evxbPJkQr6fiUw1rIIiquRknn39DSHf/Q/bN9/Ea81qTF1d9aLF1daCTYMa0dm3JD/sCeDzrVdJSjUsI6VMUzFjlz8jNlyieil7fh/SmDLOmg1IyDMWtvDh71CvP5yYCxt7QpLhby6/vgb90Wn4tQU8PgvvLoH208FEoVdJ7tburH1rLW9XeJvFVxYz4t8RRCcbxofIP8KfHjt7sPfBXsbWHcu3Tb79r0iFvlDY2VF26VKcPvqIyDVreNi7D6lPn+pVUwYpjx7xoFcvojZvxmXgADznz8PEWk/GKR1LMwXzetZhVKuK/H7hCe8uPMGdkFi9asogPC6ZPivOsuzoPfo08mLToMa42BYuLr/QmJpD55+h0xx1OOOvreDpJf1qyoXXz6ArU+Df72DVW4CAfruhdi99q/oPS1NLpr0xjakNp3Lq6Sm6buvK4ceH9aZHJVX8dvM3Ptr1EQmpCaxov4L+NfoX+ESjphHm5pT48gtKz/2Z5MBA7nd9j+h//tHbkoKUkqg//+L+e++TGvQUz8WLcP/sM4SpYWTZMDERjGtXmVX96hMWm0yXBcfZcOaRXpdgdl59Srufj3Lx0XN+6l6L/71bA3NTAzJN9QdA3+2QkgDL28CRHyHNMDNbGtCs6YDHZ2F5azg2G2p/CENPqBP1GBhCCHpW6cmGThtwtHRk5MGRTDk2haikKJ3quBV5i767+zLr3CzeKPUGW9/earA5aOw7dKDcH1sxK1OGp+M/48mQoTr31lMePeJR//48mzIFi8qVKf/nH9i1zLoAir5pWdmd3aObUc/LmSl/XaPXr6d17q2HxSYzbP0FRmy4hKeTFTtGNqVbXU+dasgz3m/AsJNQ7R04NA1WdYCnl/Wt6hVeD4Me/QT+GAgr2kJcqHqt/J2FOt/8zC9VXaqyudNmBvsOZtf9XXT8qyMrr68kSZmk1XGfJz1n5tmZ9NjZg8exj5n2xjTmtZqHk6V2wzgLi7m3N96bN+E+aSLxZ89yr3MXwhYuJC0uTqvjpkVFEfrzXO51eZuka9cp8c3XeK1bi1np0lodt7C421uytn8Dpnetgf+zWN765Rjf7/YnOkG7exHxyUp+OXCHFj8e4sDNUCa0r8yfQ5tQycOwfx+xcoJuK+G95erEXstawLbhEGs4p70N43ugtggPhNML4fIGdYrMZp9B07HqDY8igpnCjBF1RtDeuz1zL87l5ws/s8F/AwNqDuDtCm9jY2ajsbFCE0JZfWM1W29vJUmZxAeVP2BknZF62/gsCEKhwOWTT7Br05aQmd8TPn8Bz9euw3nAAJx69dTYEXtQG/LI39YTuXo1qrg47Dt2xH3i55h5eGhsDG1jYiL4qKEXHaqXYNaeWyw9co/1px/Ru5EXA5uVw1WD69jRian8fv4xS47cIzwumQ7VS/B5h8qUdys6v48A+HaHSu3gyA9wZilc/wv8+kCjoeoYdj2SJ4MuhOgA/AIogOVSypkvXbcA1gJ1gQigh5TygWal5pHkOAjcD1e3QMBudZUS3w+g+efgpJvYX23g4+TDwtYLORd8jrkX5jLjzAx+ufgLXcp34d2K71LVpWqBkmGlpKVwLOgY/9z7h8OPD6OSKjqV78SAGgMo71he829ER5h7lqbMggUkXrtO2Px5hM2ZQ/iiRdi3b49jt/exqlevQPsAUqUi4cwZorb+Qez+/ciUFGzbtMZt5EgsK1fWwjvRDS62FvzQrRb93ijHwkOBLD16l1Un7tO+egnerVOKZj5uBcpsmKaSXHkSxe/nH/P3packpqbRoJwzS/vUpa6XYX/jyxFLB3UgRd1+cPQHOLcczi5T1y6t2R0qtNZ4ypC8kKtBF0IogIVAW+AJcE4IsV1KeTNTswHAcyllRSFET2AW0EMbgl9ASnUZqeAr8OwqPD6j3o1WJoGNm7qIc4NP1VVKign1S9Tnt46/cS38GpsDNvPnnT/ZFLAJF0sXmpZuSr0S9SjvUJ7yDuWxNX/R81FJFVHJUTyMeciV0CtcDrvM2eCzxKbE4mzpzAeVP6B31d542hnoOmYBsKpZg7LLlpF47TpRW7cS888/RG/bhsLZGeuGDbBp2AjL6tUw8/RE4ej4gpGXUpIWGUnqkyck3rhBwukzJJw5Q1p0NCYODjh2747jB92LtCF/maol7VnwoR/jwuJYeeI+O68+Y/uVpzhZm9G4ggt+ZZ3w83LC28UGJ2uzV/4oRiemEhgaR2BoLKfvRXLkdhiR8SlYmpnwbu3S9G7kpf0Tn7rEtaK6HGWbb9Te+sU1cHMbmFlDxdbg2UB9SKlETfWSjZaDCURuu9tCiMbAN1LK9unPJwNIKb/P1GZveptTQghTIBhwkzl0Xq9ePXn+/Pn8K764loT932MtktVxoapMu82OXlD5LfVfybKNdR6GePjwYVq0aKHTMaOSojgWdIxjT45x4ukJYlJi/rtmZ2aHhakFqhQVZhZmRCRGoJT/P19l7Mrg5+5Hh3IdaFSyEaYmul2B08d8qRITiT1wgPjjx4k/dRplaOh/10xsbDCxtyc5KQkLCwvSYmKQCf9ffNm0VElsGjXGtukb2LZuXeh0twVB13OWolRx7E4Y/1x9xrmHkTyOTPzvmplC4GZrgYmJICY+CSkUxCb//+fL2cacNyu50aKyGy0qu+NgpfswV51/xtJS4eEJuLkd7uyD6Mf/f83ETO3ZWzly0/0dqvX4qkBDCCEuSCnrZXktDwa9G9BBSjkw/XkfoKGUckSmNtfT2zxJf343vU34S30NAgYBeHh41N20aVO+34xL+Bmcgw6ClSNKU1tSzeyJs/UmzrY8SjP9bqrExcVhm0thX22ikirCleEEpwYTnBpMTFoMSqkkITUBM1MzHBQO2CvscTF1wdvCGzvF6z1fSIkiNAzT4GeYhEdgGh6OSE4iNVWJmZkpKksr0lxdSHN1Ja1kSdJcXbXuYeWGvucsKknF3WgVEYmSqGRJdHK6/VClYm1hhpOFoKStCaVtTXC1Epi85vNllhKDbdw9bOIfYJYag1lqHKbKOO45NSepVKMC9dmyZctsDTpSyhx/gG6o180znvcBFrzU5jrgmen5XcA1p37r1q0rC8qhQ4cKfK82MerKH0Zd+cdQtRl15Y/C6ALOy2zsal52OYKAzAUKPdNfy7JN+pKLA+rNUSNGjBgxoiPyYtDPAT5CiHJCCHOgJ7D9pTbbgY/TH3cDDqb/JTFixIgRIzoi110wKaVSCDEC2Is6bHGllPKGEOI71K7/dmAFsE4IEQhEojb6RowYMWJEh+QprEFKuQvY9dJrX2V6nAR016w0I0aMGDGSH16Po/9GjBgx8hpgNOhGjBgxUkwwGnQjRowYKSYYDboRI0aMFBNyPSmqtYGFCAMKWubeFQjPtZXuMerKH0Zd+cdQtRl15Y/C6PKSUmZZlV1vBr0wCCHOy+yOvuoRo678YdSVfwxVm1FX/tCWLuOSixEjRowUE4wG3YgRI0aKCUXVoC/Tt4BsMOrKH0Zd+cdQtRl15Q+t6CqSa+hGjBgxYuRViqqHbsSIESNGXsJo0I0YMWKkmGBwBl0I0UEIESCECBRCTMriuoUQYnP69TNCCO9M1yanvx4ghGivY13jhBA3hRBXhRD/CiG8Ml1LE0JcTv95OfWwtnV9IoQIyzT+wEzXPhZC3En/+fjle7Ws6+dMmm4LIaIyXdPmfK0UQoSmV9nK6roQQsxL131VCOGX6ZpW5isPmj5K13JNCHFSCFEr07UH6a9fFkIUoKZjobW1EEJEZ/r/+irTtRw/A1rWNSGTpuvpnynn9GtamTMhRBkhxKF0O3BDCDE6izba/XxlV/lCHz+o0/PeBcoD5sAVoNpLbYYBS9If9wQ2pz+ult7eAiiX3o9Ch7paAtbpj4dm6Ep/HqfH+fqElypMpb/uDNxL/9cp/bGTrnS91H4k6rTMWp2v9L6bA37A9WyudwR2AwJoBJzRwXzlpqlJxljAWxma0p8/IJfqYFrW1gLYWdjPgKZ1vdS2C+oaDVqdM6Ak4Jf+2A64ncXvo1Y/X4bmoTcAAqWU96SUKcAm4J2X2rwDrEl/vBVoLYQQ6a9vklImSynvA4Hp/elEl5TykJQyo6LwadSVnbRNXuYrO9oD+6WUkVLK58B+oIOedPUCNmpo7ByRUh5FnbM/O94B1ko1pwFHIURJtDhfuWmSUp5MHxN099nKGDu3+cqOwnw2Na1LJ58vKeUzKeXF9MexgD9Q+qVmWv18GZpBLw1kKpPNE16dkP/aSCmVQDTgksd7takrMwNQ/xXOwFIIcV4IcVoI8a6GNOVH1/vpX++2CiEyygkaxHylL02VAw5mellb85UXstOuzfnKDy9/tiSwTwhxQaiLsOuDxkKIK0KI3UKI6umvGcR8CSGsURvGPzK9rPU5E+ql4DrAmZcuafXzlacCF0byjhCiN1APeDPTy15SyiAhRHngoBDimpTyro4k7QA2SimThRCDUX+7aaWjsfNCT2CrlDIt02v6nC+DRQjRErVBb5rp5abpc+UO7BdC3Er3XnXFRdT/X3FCiI7A34CPDsfPjS7ACSllZm9eq3MmhLBF/QdkjJQyRlP95gVD89ALU5A6L/dqUxdCiDbAVOBtKWVyxutSyqD0f+8Bh1H/5daJLillRCYty4G6eb1Xm7oy0ZOXvg5rcb7yQnbatTlfuSKE8EX9//eOlPK/AuyZ5ioU+AvNLTPmCSlljJQyLv3xLsBMCOGKnucrEzl9vjQ+Z0IIM9TGfL2U8s8smmj386XpjYFCbiqYot4MKMf/b6RUf6nNcF7cFN2S/rg6L26K3kNzm6J50VUH9SaQz0uvOwEW6Y9dgTtoaHMoj7pKZnrcFTgt/38T5n66Pqf0x8660pXergrqDSqhi/nKNIY32W/ydeLFTauz2p6vPGgqi3pPqMlLr9sAdpkenwQ6aHKu8qCtRMb/H2rD+Ch97vL0GdCWrvTrDqjX2W10MWfp73stMDeHNlr9fGn0P15Dk9IR9e7wXWBq+mvfofZ6ASyB39M/4GeB8pnunZp+XwDwlo51HQBCgMvpP9vTX28CXEv/QF8DBuhY1/fAjfTxDwFVMt3bP30eA4F+utSV/vwbYOZL92l7vjYCz4BU1OuUA4AhwJD06wJYmK77GlBP2/OVB03LgeeZPlvn018vnz5PV9L/j6dqcq7yqG1Eps/XaTL90cnqM6ArXeltPkEdKJH5Pq3NGeqlMAlczfR/1VGXny/j0X8jRowYKSYY2hq6ESNGjBgpIEaDbsSIESPFBKNBN2LEiJFigtGgGzFixEgxwWjQjRgxYqSYYDToRood6dn0XHU43tb0U605tTkghHDSlSYjrydGg27ESCFIz12ikOpTrTmxDnWmUCNGtIbRoBspkgghvIUQt4QQ64UQ/ulesnWmJiOFEBfT815XSb+ngRDilBDiUnpe8crpr1cXQpxNz499VQjhk/5670yvLxVCKLKQ8hGwLb39JCFESqZc22lCiJ/T221HnfXPiBGtYTToRooylYFFUsqqQAwvesDhUko/YDHwWfprt4BmUso6wFfAjPTXhwC/SClro06s9kQIURXoAbyR/noaauP9Mm8AFwCklDOBp0DL9HsSpZRj0689ByyEEC4aeN9GjGSJMduikaLMYynlifTHvwGjgJ/Sn2ckRroAvJf+2AFYk+6BS8As/fVTwFQhhCfwp5TyjhCiNepEZufU6faxAkKz0FASCMuj3lCgFOpkckaMaByjQTdSlHk5b0Xm5xkZJtP4/8/5/4BDUsqu6fmqDwNIKTcIIc6gTpy0Kz3NsADWSCkn56IhEXV+obxgmd7eiBGtYFxyMVKUKSuEaJz++EPgeC7tHfj/lKSfZLyYHqFyT0o5D/V6uC/wL9AtPWc2QghnkalObCb8gYrZjKcUQpin3y9QZyZ8kItGI0YKjNGgGynKBADDhRD+qFOOLs6l/Q/A90KIS7z47fQD4LoQ4jJQA3WJsJvAF6gr21xFXRKsZBZ9/oO6rmZWHAN2pj+uizp1sTK3N2XESEExZls0UiRJXzLZKaWsoWcdVqjTEr8hX6y69HK7X1CnVP5XZ+KMvHYYPXQjRgqBlDIR+Jrc6z9eNxpzI9rG6KEbMWLESDHB6KEbMWLESDHBaNCNGDFipJhgNOhGjBgxUkwwGnQjRowYKSYYDboRI0aMFBP+D7/h1S5HDR4MAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plot_phase_func(\n",
" sympy.lambdify(Δϕ, p0.subs({N_S: 1}), \"numpy\"),\n",
" sympy.lambdify(Δϕ, p0.subs({N_S: 2}), \"numpy\"),\n",
" sympy.lambdify(Δϕ, p0.subs({N_S: 3}), \"numpy\"),\n",
" sympy.lambdify(Δϕ, p0.subs({N_S: 4}), \"numpy\"),\n",
" labels=(\"N_S=1\", \"N_S=2\", \"N_S=3\", \"N_S=4\"),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We find the the population is always the same $\\cos^2\\left(\\frac{\\Delta\\phi}{2}\\right)$, just shifted by $\\frac{\\pi}{4}$ per $N_S$. As we will see in the next section, this exactly compensates the $\\Delta\\phi$ due to the splitting/swapping with $\\pi$-pulses."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generalized analysis of recombination"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Application to Rabi input states"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the above results, we can deduce that a recombining series of Rabi pulses transforms and input state $\\ket{N_S}$ to"
]
},
{
"cell_type": "code",
"execution_count": 267,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.109632Z",
"start_time": "2020-11-25T14:23:42.089702Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{\\frac{i \\pi}{2} N_{S}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{\\frac{i \\pi}{2} \\left(N_{S} - 1\\right)}}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp_polar(N_S ⅈ π/2) / √2 |0⟩^(AFI) + exp_polar(ⅈ π (N_S - 1)/2) / √2 |1⟩^(AFI)"
]
},
"execution_count": 267,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"map_recomb_N_S = (\n",
" (1 / sqrt(2)) * exp_polar(I * N_S * π / 2) * ket(0)\n",
" + (1 / sqrt(2)) * exp_polar(I * (N_S - 1) * π / 2) * ket(1)\n",
")\n",
"map_recomb_N_S"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Furthermore, for a pulse series acting on $\\ket{0}$, we find:"
]
},
{
"cell_type": "code",
"execution_count": 268,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.123889Z",
"start_time": "2020-11-25T14:23:42.112688Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + ⅈ / √2 |1⟩^(AFI)"
]
},
"execution_count": 268,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(0), frm=3, to=0)"
]
},
{
"cell_type": "code",
"execution_count": 269,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.132425Z",
"start_time": "2020-11-25T14:23:42.126116Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + ⅈ / √2 |1⟩^(AFI)"
]
},
"execution_count": 269,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"U_Rabi_recombine(ket(0), frm=1, to=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is determined *only* by the final $\\pi/2$ pulse:"
]
},
{
"cell_type": "code",
"execution_count": 270,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.145243Z",
"start_time": "2020-11-25T14:23:42.134747Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{1}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} e^{\\frac{i \\pi}{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"1/√2 |0⟩^(AFI) + (1/√2) exp_polar(ⅈ π/2) |1⟩^(AFI)"
]
},
"execution_count": 270,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"map_recomb_0 = to_polar(U_pi_half(ket(0), level_1=0, level_2=1))\n",
"map_recomb_0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Thus, acting on the superposition:"
]
},
{
"cell_type": "code",
"execution_count": 271,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.157603Z",
"start_time": "2020-11-25T14:23:42.147821Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\Delta\\phi}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert N_{S} \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ \\Delta\\phi) / √2 |0⟩^(AFI) + 1/√2 |N_S⟩^(AFI)"
]
},
"execution_count": 271,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_in = tls_50_state(0, N_S, phase1=Δϕ, phase2=0)\n",
"state_in"
]
},
{
"cell_type": "code",
"execution_count": 272,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.177739Z",
"start_time": "2020-11-25T14:23:42.160176Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{1}{2} e^{\\frac{i \\pi}{2} N_{S}} + \\frac{e^{i \\Delta\\phi}}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{1}{2} e^{\\frac{i \\pi}{2} \\left(N_{S} - 1\\right)} + \\frac{e^{i \\Delta\\phi}}{2} e^{\\frac{i \\pi}{2}}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp_polar(N_S ⅈ π/2)/2 + exp(ⅈ \\Delta\\phi)/2) |0⟩^(AFI) + (exp_polar(ⅈ π (N_S - 1)/2)/2 + exp_polar(ⅈ π/2) exp(ⅈ \\Delta\\phi)/2) |1⟩^(AFI)"
]
},
"execution_count": 272,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_out = state_in.substitute({ket(0): map_recomb_0, ket(N_S): map_recomb_N_S}).expand()\n",
"state_out"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We know that without a kick, $\\Delta\\phi = N_S \\frac{\\pi}{2}$. Thus, we can specify the input state more precisely, and simplify it by multiplying with a global phase factor:"
]
},
{
"cell_type": "code",
"execution_count": 273,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.426692Z",
"start_time": "2020-11-25T14:23:42.180155Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\phi_{kick}}}{2} + \\frac{1}{2}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{i}{2} \\left(e^{i \\phi_{kick}} - 1\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ_kick)/2 + 1/2) |0⟩^(AFI) + ⅈ (exp(ⅈ φ_kick) - 1)/2 |1⟩^(AFI)"
]
},
"execution_count": 273,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ϕ_kick = symbols('phi_kick', real=True)\n",
"state_out = (\n",
" (state_out.substitute({Δϕ: N_S * π / 2 + ϕ_kick}) * exp(-I * π / 2 * N_S))\n",
" .expand()\n",
" .simplify_scalar(lambda expr:expr.replace(exp_polar, exp))\n",
" .simplify_scalar()\n",
")\n",
"state_out"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This in fact eliminates $N_S$ from the output state!"
]
},
{
"cell_type": "code",
"execution_count": 274,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:42.432730Z",
"start_time": "2020-11-25T14:23:42.429197Z"
}
},
"outputs": [],
"source": [
"c0 = state_out.args[0].coeff.val\n",
"c1 = state_out.args[1].coeff.val"
]
},
{
"cell_type": "code",
"execution_count": 275,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:43.048549Z",
"start_time": "2020-11-25T14:23:42.435532Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} + \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
"ℯ 1 ℯ \n",
"───────── + ─ + ──────────\n",
" 4 2 4 "
]
},
"execution_count": 275,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0 = (c0 * c0.conjugate()).expand()\n",
"p0"
]
},
{
"cell_type": "code",
"execution_count": 276,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:43.736789Z",
"start_time": "2020-11-25T14:23:43.051848Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"cos(φ_kick) 1\n",
"─────────── + ─\n",
" 2 2"
]
},
"execution_count": 276,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.expand().simplify()"
]
},
{
"cell_type": "code",
"execution_count": 277,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:44.359409Z",
"start_time": "2020-11-25T14:23:43.739790Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle - \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} - \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
" ℯ 1 ℯ \n",
"- ───────── + ─ - ──────────\n",
" 4 2 4 "
]
},
"execution_count": 277,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1 = (c1 * c1.conjugate()).expand()\n",
"p1"
]
},
{
"cell_type": "code",
"execution_count": 278,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.048515Z",
"start_time": "2020-11-25T14:23:44.362348Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2}$"
],
"text/plain": [
"1 cos(φ_kick)\n",
"─ - ───────────\n",
"2 2 "
]
},
"execution_count": 278,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1.expand(sin).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### General recombination"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We define the most general recombination gate as "
]
},
{
"cell_type": "code",
"execution_count": 279,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.060313Z",
"start_time": "2020-11-25T14:23:45.052068Z"
}
},
"outputs": [],
"source": [
"@expand_sum\n",
"def U_recombine_general(state, frm=3, to=0):\n",
" assert to < frm\n",
" ϕ00, ϕ01, ϕ10, ϕ11 = symbols('phi_00, phi_01, phi10, phi11', real=True)\n",
" N_S = IdxSym('N_S')\n",
" out_state = {\n",
" ket(0): (exp(I * ϕ00) * ket(0) + exp(I * ϕ10) * ket(1)) / sqrt(2),\n",
" ket(N_S): (exp(I * ϕ01) * ket(0) + exp(I * ϕ11) * ket(1)) / sqrt(2),\n",
" ket(frm): (exp(I * ϕ01) * ket(0) + exp(I * ϕ11) * ket(1)) / sqrt(2),\n",
" }\n",
" return out_state[state].expand()"
]
},
{
"cell_type": "code",
"execution_count": 280,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.086331Z",
"start_time": "2020-11-25T14:23:45.063701Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"\\begin{equation}\n",
" \\left\\lvert 0 \\right\\rangle^{(AFI)} \\rightarrow \\frac{e^{i \\phi_{00}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{10}}}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}\n",
"\\end{equation}\n"
],
"text/plain": [
"|0⟩^(AFI) = exp(ⅈ φ₀₀) / √2 |0⟩^(AFI) + exp(ⅈ φ₁₀) / √2 |1⟩^(AFI)"
]
},
"execution_count": 280,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Eq(ket(0), U_recombine_general(ket(0)), eq_sym_tex=r'\\rightarrow')"
]
},
{
"cell_type": "code",
"execution_count": 281,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.105410Z",
"start_time": "2020-11-25T14:23:45.089069Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"\\begin{equation}\n",
" \\left\\lvert N_{S} \\right\\rangle^{(AFI)} \\rightarrow \\frac{e^{i \\phi_{01}}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{e^{i \\phi_{11}}}{\\sqrt{2}} \\left\\lvert 1 \\right\\rangle^{(AFI)}\n",
"\\end{equation}\n"
],
"text/plain": [
"|N_S⟩^(AFI) = exp(ⅈ φ₀₁) / √2 |0⟩^(AFI) + exp(ⅈ φ₁₁) / √2 |1⟩^(AFI)"
]
},
"execution_count": 281,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Eq(ket(N_S), U_recombine_general(ket(N_S)), eq_sym_tex=r'\\rightarrow')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This should be applied to an input state with an arbitrary relative phase $\\Delta\\phi + \\phi_{kick}$:"
]
},
{
"cell_type": "code",
"execution_count": 282,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.119999Z",
"start_time": "2020-11-25T14:23:45.107762Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\frac{e^{i \\left(\\Delta\\phi + \\phi_{kick}\\right)}}{\\sqrt{2}} \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\frac{1}{\\sqrt{2}} \\left\\lvert N_{S} \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"exp(ⅈ (\\Delta\\phi + φ_kick)) / √2 |0⟩^(AFI) + 1/√2 |N_S⟩^(AFI)"
]
},
"execution_count": 282,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Δϕ = symbols('\\Delta\\phi', real=True)\n",
"ϕ00, ϕ01, ϕ10, ϕ11 = symbols('phi_00, phi_01, phi10, phi11', real=True)\n",
"state_in = tls_50_state(0, N_S, phase1=(Δϕ + ϕ_kick), phase2=0)\n",
"state_in"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This results in"
]
},
{
"cell_type": "code",
"execution_count": 283,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.258617Z",
"start_time": "2020-11-25T14:23:45.123011Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\phi_{01}}}{2} + \\frac{1}{2} e^{i \\left(\\Delta\\phi + \\phi_{00} + \\phi_{kick}\\right)}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{e^{i \\phi_{11}}}{2} + \\frac{1}{2} e^{i \\left(\\Delta\\phi + \\phi_{10} + \\phi_{kick}\\right)}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ φ₀₁)/2 + exp(ⅈ (\\Delta\\phi + φ₀₀ + φ_kick))/2) |0⟩^(AFI) + (exp(ⅈ φ₁₁)/2 + exp(ⅈ (\\Delta\\phi + φ₁₀ + φ_kick))/2) |1⟩^(AFI)"
]
},
"execution_count": 283,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_out = U_recombine_general(state_in).expand()\n",
"state_out.simplify_scalar()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with the amplitude and population for $\\ket{0}$:"
]
},
{
"cell_type": "code",
"execution_count": 284,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:45.870360Z",
"start_time": "2020-11-25T14:23:45.260801Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\phi_{00}} e^{i \\left(\\Delta\\phi + \\phi_{kick}\\right)}}{2} + \\frac{e^{i \\phi_{01}}}{2}$"
],
"text/plain": [
" ⅈ⋅φ₀₀ ⅈ⋅(\\Delta\\phi + φ_kick) ⅈ⋅φ₀₁\n",
"ℯ ⋅ℯ ℯ \n",
"─────────────────────────────── + ──────\n",
" 2 2 "
]
},
"execution_count": 284,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c0 = state_out.args[0].coeff.val\n",
"c0"
]
},
{
"cell_type": "code",
"execution_count": 285,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:46.504278Z",
"start_time": "2020-11-25T14:23:45.873503Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAAvCAYAAADQKqJDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAMB0lEQVR4Ae1dgXHVOBQkDAWEXAehgwAVXK4DOCqAdJBMKmBCB+Q6OOgg6YBJOiBUwCUdcLs+6Z++v2VLtmRLzmrGsS09vbdvJT/Zsvyz9+vXryexaW9vbx91DlD3zleXMih/8JXnzg/BmBtDDv21+FULzhxtJJ3xDIT0F8osGVNivQrxKVZnDvlacI7xvSbfno5xEHXOsb0ZqPsDRFwMyOwUo86HncxxGYMYE9oah3BcrVr8qgXnuFZQrdQMDPYXGFw6psT6POhTITGoFpyx/FO+Gt+ejfEOd6dnffXQwU5R/je2Uxx/jLybfdGnO7RsCKPRk8RWKKYUcrX4VQvOFG0iHdMZGOovJcSUWC+HfDL6Fo9BteCM5Z/yNfk29snYywsuGk5hk4QT7DhN/RfPI9LPCNmponPamoo1pn4tftWCM4Z7ySZmoLKYEut9LddALThj+ad8Eb5FDca4KI55h4rtS4/H5xiIP5lyPkG/gfxRj3xTBJlD6sbJCx4PyfvKUXcQYypbPgw58mvxqxacOdpIOuMZCOkv0LpoTIn1KsQnyCSJd7HYXPlacLqYQ49r9C1qMAYRf2C7xMYBtnkCdslhB8P5d5uHQZmyXOTlfXeMOkfYOLhzwP4Nmx3AvXUg05e8GDPY6sORuqwWvybjRDt9xnaTksAcOlPioy7TP79jv3NtpbZVkD5vfzGclBBTYuny+mTaOGW8i8XmyteC08UcejzZt9QxY1AfBkxOKQ9uYIAXBYMEF25976qD/M/tfOQdY+OS7eOOMg7ANzYfx6fOMYPxkT0P2UPei5G6sA3aMjp4I0A/uT+0tvvKrEyOvbHbyT3KJvtFzMbGFfZcsTrYH7pkjI5JOA0Wcr/Tl1ybKN+0pZvvO4b8oE5f3Zz5wEW+GJw/Y2OfZ2OMboOcWFPrhp/e69XagsxOP0DebDHF4gjd9/mEssnXqtHfGZ9CMVIuN07HxqSYEuOTlU3hm8HfGzNgJ2kMCl7ABXDNZ0wY3fkumIFjKyGfF8jO9DXqXaPsGmWs016swE71EZsvHfgKuvIHMIba+gI9L43+r8DOAGnP+8q6IHXmQScvSuIZSif0KbdfBg+5ZnAcnRLhpH3e1fY+GTttFIp3UGeoopRy8OMB+t5SJ9qBr2nYN6pMifs1+Vg8piT2qZgYlOha9cZDw9vkmMILYaE2oOnemJE8BkFh8FMQwPEuvrlzx37rqRXnO3ewVjfKGORZ74PN4x7pHlvzFIA9g1Dz9Iw95e9d2dBj1OvESH0sM3Y7bZm6W3Ztvb6yUGxT5Iz9He4tvrF+uZigi68YJj2VTcFpsUAHB2L2AW781M2dMeHdKgetTZ5Tj+3KMta5sPncI3l1unJLHgMjsTdtvCSOOW3D387rlRiQiogpsXz4fEJ+UTEoF06XL9iYHFNcfaHHU3yzNqCjM2YgP0sMegrFMYl3qrcAy7v5d7Yi7lwY/G6w56KEnc3I8em4/TTIPOpk4kDMp2henHyK/p2ZI1InRugJscU7uX9aNnnOQaGvrFUly2kuv1KDnYLTYuGgysQ9P5HjHaqbOEuzNcuCfkPZc/ShT9i4VsH2K1tvSKeV035eBjr7C9qzpJgSy0inT1BSWgzKhTOWrxzyU3yzePpiRvIYtIfAZQ1zOoAD4Tm2nyaTAe8MMhx8bTk/VfqG7Svy7dR1c8dHmYBEfXa1NXXaAZqO8/0C06W1+d/p/3/HYqSGIVtG9w/Yfm4tIo++cZqag3JnGeQbHpw6vTxauZi9wbbDPXVM8cvFDj28i32JvKa9u/AZHNF9JASnkWE/4B3pV2zvu7AAA/sJ+9Et9k3qynPKBnVa2SX38IFPxrwennf5vSQ22h5q+zH4jM6dfo38WWLKnD4ZDnvjncHzA+0/KQaFtJeP+6k4gX0TD2FjckxJ2a9CfDMyvTEDfqWPQSCumaYGAN5JkLjN9DOPsW1N91n51HvY2Zl2bNuATBKMfbZQtvVS3j13j4mtfW7ykmBs+x5yDjxeDttY2+cGe++UEuok8W0Apx2QOBvR4MHeXUTHG51mASH2m0WBVtbyhPPNdDuOe3XaOkvvDc4ip6mBLUnbz8kx+eyzt6RPfdhQNikG0edUvo3FaXlH/VliirUXsx/wzRszUC9LDHoGxbzjZeDjSM8FQ5unDZzzAmR+1gT7HPRduzv2UmEMsPUWMrx75dP/a2zN4hoDqK9sUR6n+GXqsq0PsF3g/Ar9gE+mm4S8JH0kACdnY3gDeAdZYvgTG2clmrtt5D8g/xYbLxZOR9vEhYXnyGe7MdEXW96rs5HWHy8D4DRJ23sNZCgA5t6YsqRPQ9hAR1+c6StrmEzl2xScpu4sMWVM9wnwzRszcsWgZpoawDjgkjj7M5f83peJQZnvObIm2OfCLhs4O22lwhhiqxNAQGYqjAGmdkRy+kVjqXzLjXOHmIoywI29Gy9qmjpV28/ZFEP9bEmfhrBN5SmVb7XgHMNXbt9GYcIgyEDLeQ2+A3afAsfoy1ZHGLNRG6S4Bv6DHClYCByXOhgXHx9im3XN/bkW32rBGdu3xso/dSpuXro7eaUdCuOyLVID/8sytF7ra2z7Nfpke2AtvtWC0/KabW8HYy8huHvhN1UlJGFcthVq4H9ZhtZrfY1tv0afbA+sxbdacFpes+7tYMwFS3xnvEkYhPex8Xvf3oVVmwr5D4QxP8d9Fmrgvw+/ysYzsMa2X6NPtoVr8a0WnJbXrPvNd8YYePm+igu37DfG/ORp8z1wVhSByoUxkKhMYjXwn8n1rGrBK39Glp9LvDJ7PjHwJvhbKdfgGtt+jT6hzzSpFt9qwWl5zbnfDMY5jUi3GBADYkAMiAEx4GfATlP7JVQiBsSAGBADYkAMZGVAg3FWeqV8zQxgiu0YG39DudhUA8ZiyRMwMTAjAxqMZyRbplbHAN/zcis51YCxZP6ETQzMwoAG41lolhExIAbEgBgQA34GNBj7uVGJGBADYkAMiIFZGNBgPAvNMiIGxIAYEANiwM+ABmM/NyoRA2JADIgBMTALA3uw0vzzy1msyYgYKJAB/LAGrwNvwopk/hLd1i/UGWH+m0Ym/ovHdrod+scr0Bt87dWAsU2AzsWAGAhnQD/6Ec6VJMXAFgMYTPm77Yel/ErWFjhzUgPGLtzKEwOPjQFNUz+2Fpe/YkAMiAExUBwDGoyLaxIBEgNiQAyIgcfGgAbjx9bi8lcMiAExIAaKY0CDcXFNIkBiQAyIATHw2BjQYFxIi2OhzRE2rtpVemQMoN0P2fZmu8H+CtvRI6NB7iZkgP2H/SmhSqnKzIAG48wER6jn/7S1n8pEVJPoggw8wDa30QkB8xCVL7Ai+8RsL3HO/2XMQbnrc6pYW5MxxhqUfBEMKJ4U0QzhIJ6Fi0oyFwMIuqe5dEtvPgYweF4n0H4BHe9dPdB7hj7B/wbFgPrcLYs9ToQx1qzkF2RA8WRB8ieY1pPxBPJSVMWFw+lIPb2kILNOHXz6vUc/2G/B50C/j3w+OSuJgSAGFE+CaCpSSIPx8s3yDk8vl8vDEIKFGOCge4c+4Jvubg/SC8GU2UoYUDyppKHaMDVN3WZkxnPcxXJ6WossZuS8NFMYhN96MDULuFDO98dKYmCQAcWTQYqKFtCT8ULNY6YfHxBs7xaCILOFMmCmGjk9fVYoRMEqjAHFk8IaZAQcDcYjSEtUhatnNT2diMyVqeHCrUv0j08r80vu5GNA8SQft7No1mA8C83bRnAXy5Wymp7epkVnYAB9g/3iGgPxiQgRAyEMKJ6EsFS+jAbjmdvITCfta3p6ZuIrMGeC6hMNxBU0ViEQFU8KaYgEMLSAKwGJkSr4LvA1LiJORbqJC3b4S0zM5+pavS902Vn5Mdqd/47xhTsQm0DLwVnrClbe/hPcUzyZQF5JVfX/jAtpDQTee0Dh9KRvdW0hSAUjNQNoe96I8ZOUrRsw5HO1Pd8d+z57Sg1F+lbCgOJJfQ2pJ+Ny2ozfk+qb0nLaYxYkCJp8suFsyDWO3XUEB8g7wkCsRVyztMTqjCieVNakejJeuMFMAH4FGM13pdjzRyCuFIQXbpiZzKP9b2DKtn3b6i36AX+rWkkMBDGgeBJEU5FC/wJkWwetYirK6gAAAABJRU5ErkJggg==\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\Delta\\phi} e^{i \\phi_{00}} e^{- i \\phi_{01}} e^{i \\phi_{kick}}}{4} + \\frac{1}{2} + \\frac{e^{- i \\Delta\\phi} e^{- i \\phi_{00}} e^{i \\phi_{01}} e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅\\Delta\\phi ⅈ⋅φ₀₀ -ⅈ⋅φ₀₁ ⅈ⋅φ_kick -ⅈ⋅\\Delta\\phi -ⅈ⋅φ₀₀ ⅈ⋅φ₀₁ -ⅈ\n",
"ℯ ⋅ℯ ⋅ℯ ⋅ℯ 1 ℯ ⋅ℯ ⋅ℯ ⋅ℯ \n",
"────────────────────────────────────── + ─ + ─────────────────────────────────\n",
" 4 2 4 \n",
"\n",
"⋅φ_kick\n",
" \n",
"───────\n",
" "
]
},
"execution_count": 285,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c0 * c0.conjugate()).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we compare this to"
]
},
{
"cell_type": "code",
"execution_count": 286,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:47.120643Z",
"start_time": "2020-11-25T14:23:46.507180Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} + \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
"ℯ 1 ℯ \n",
"───────── + ─ + ──────────\n",
" 4 2 4 "
]
},
"execution_count": 286,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"we find the condition\n",
"\n",
"\\begin{equation}\n",
"\\Delta\\phi + \\phi_{00} - \\phi_{01} = 0\n",
"\\end{equation}"
]
},
{
"cell_type": "code",
"execution_count": 287,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:47.852758Z",
"start_time": "2020-11-25T14:23:47.123797Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"cos(φ_kick) 1\n",
"─────────── + ─\n",
" 2 2"
]
},
"execution_count": 287,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c0 * c0.conjugate()).expand().subs({ϕ01: ϕ00 + Δϕ}).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Furthermore, looking at the coefficient for $\\ket{1}$:"
]
},
{
"cell_type": "code",
"execution_count": 288,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:48.475417Z",
"start_time": "2020-11-25T14:23:47.856862Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\phi_{10}} e^{i \\left(\\Delta\\phi + \\phi_{kick}\\right)}}{2} + \\frac{e^{i \\phi_{11}}}{2}$"
],
"text/plain": [
" ⅈ⋅φ₁₀ ⅈ⋅(\\Delta\\phi + φ_kick) ⅈ⋅φ₁₁\n",
"ℯ ⋅ℯ ℯ \n",
"─────────────────────────────── + ──────\n",
" 2 2 "
]
},
"execution_count": 288,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c1 = state_out.args[1].coeff.val\n",
"c1"
]
},
{
"cell_type": "code",
"execution_count": 289,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:49.107280Z",
"start_time": "2020-11-25T14:23:48.478781Z"
}
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAAvCAYAAADQKqJDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAMIklEQVR4Ae1dgXXVNhRtOAwQ0g3CBqGdoHSDUiZo2QBOJugJG0A3KGxANuhJNgAmoGQDeq8rufrfliXZki05V+cotqWn9+67kp9sff2fk2/fvn2Xmk5OTk7R5gxtP/naUgb1d7760uUxGEtjKKG/Fb9awVmij6QznYGY8UKZLWNKqlcxPqXqLCHfCs45vrfk24M5DqLNJfIvgbafQcRVQGZQjTa/DwrnFQQxZrQ1D+G8Vq341QrOeb2gVrkZCI4XGNw6pqT6HPSpkhjUCs5U/infjG8P53iHp9NXU+0wwF6i/i/klzj/I/Fp9vGU7ti6EEajJ4utWEw55FrxqxWcOfpEOpYzEBovNcSUVC9DPhl9m8egVnCm8k/5lnyb+2bs5QU3DZewScILHLhM/SevE9KXBNmlomvaWoo1pX0rfrWCM4V7yWZmoLGYkup9K/dAKzhT+ad8Fb4lTca4KZ7yCRX53YTHl5iIX5t6vkH/AvmLCfmuCjLn1I2LxzwPyfvq0TaIMZctH4YS5a341QrOEn0knekMxIwXaN00pqR6FeMTZLLEu1RsrnwrOF3Msect+pY0GYOIn5HfInOC7d6AXXI4wHD90ZZhUqYsN3l5PztGmwtkTu6csL9HthO4tw1kppIXYwFbUzhy17Xi12Kc6Kc3yDc5CSyhMyc+6jLj8yOOg3srt62K9HnHi+GkhpiSSpfXJ9PHOeNdKjZXvhWcLubY88W+5Y4ZQX2YMLmkHMxggDcFgwQ3bn0ca4PyN8flKHuKzC3bT0fqOAHf2HKcv3TOGYwv7HXMEfJejNSFHGXL6PmAI3dv9tyYcj4kkAMez936UufG7ij3qFvsF3EbGwOfU3zKiJP8DsaSiwX1fV+65b5zyAd1+tqWLAcu9iuD8xtkjnl2xsG4K2l/S93w03u/WlyQGYwDlK0WUyyO2OOUT6hbfK8a/YtjUGmc5MvYWBRTYnl35TL6NhkzYCdrDIrewAVnu68xYXbnZ8EMHAcJ5bxBBsvXaHeNumvUsc3xZgUOqj+QfenMVzFWHsAYZQtYecPQLgPFcXoHG09M4XvIMnja62NZ77WxQTyh9II+lfYr4HMIY1+fA6dRxqfayTdjpx96+4GToM5A+yLV8OMOip9ROfqBH9Nw/DWZMo9r8rF5TMnsUzUxKMe9argZjZVTdamDe4s+MBgnY0b2GASF/Ztf6BwA+RTfPbnjePDWiuvBE6zVhzpObGz3uy3jEekrcvcWgCODUPf2jCPlv7qysedoN4qR+lhn7AZtQZbL7f0bCs+RDzDx2pWJxThHztgfcO9iwHmyXy4WtD/w2a2LPc+BEzo4EXMMMPOrbu6KCZ9WOWn1ZRYbyug/69jmypbziOTV6cpteQ6MxN718ZY41rQNf0fvV2JAqiKmpPLh8wnlfbzAefK9avRmi0GlcLp8wcbimOLqiz3P4Rt0jMYMlBeJQQ+gOCXxSfUWhNzh+Nw2xJMLg98NjtyUMMhGjm/Hx2+DLKNOJk7EfIvmzcm36J9YOCONYoSepbbOoOOfIzy85oSxRirlV27sOXAyUDHxyK/I8QnVTVylOVhlwbih7CXG0Gtk7lWw48q2C+m0cjquy8DoeEF/1hRTUhkZ9QlKaotBpXCm8lVCPodvUzEjeww6QeDqiTAT4SUKvphCBrxXkOHky2UjTpT8qtLfyO9Rbpeuuyc+lMUk6rO7ranTTtB0nJ8vML21Nv+7/P/vXIzUkGILsnyie2JxGLufcf3IokEZ/aZMx4NTTp68PFq5lKOxP+CeOlAXzSFkD/xyMUzVWTmDw+ubqZ+NE+05DvhE+h75N8u/tc8jZDhOOI5ubflYmVMX1GlltzzCB74Zsy8fjfm9JTbaBr7VxjVsrRJT1vTJcDj7XjVYP2NsBGNQTH8ZfbPvVdpggp6iMeU/K2l/l/qG9pMxA/X5YxA6tlumhqt8kiCp/fIzz5EPlvusfO4j7AyWHY9tQCYLxkhb5KJfpiYWpIMP7I+vjUwWjMe+x1wDTwyHA7+sbrT31uX0bQon65AZsLji0OHhuYORE0K3gRDHflOglXXlnPNJnVZu6yN8qHaZmlwbjjeJD3P6hnxOtdvSpxA24kYa3I8oC8Yg0zZLf83FaXkf88HW5cTp6ow9n/KNdcijcQjlRWLQQyjmkw0DH2d6bhjq3zZwzQ5ledFknkJcuwN7uTCGbJl6+n2GfIXrD+CEb2lMz3DNDuLKwI+8Ru4T6jbj0eD2cmjqR/2aqrPO5fIthBP2uBrDB8BPkCXvvyL/g9ytPqD8DuW3yLxZuBxtEzcWXqKcfcPE/rP1kzo7af3xMgBONxvXXlCBCmDmi8TU/bCZTxHYiH30XkX5ZAwiLbn6awlO09bnA2Fmw9kpS/wT8g3qvDGjVAzqlqkBjBMuibM/c8nv+zJxIuLnHEUT7HNjlw2co7ZyYYyxNQogojAXxghTA5GSftFYLt9K4xwQ01ABuLFP41UtU+fq+zW7IjTOtvQphG0pT7l8awXnHL5K+zYLEyZBBlquifAz4IM3vTkKS7URxlLMxultgf84T+qVAse1TsbVx4fUXt3zeG7Ft1Zwpo6tufIPnIYHm5Cc8ppOhXHb3miB/20Z2q/1Pfb9Hn2yI7AV31rBaXktdrSTsZcQPL3wO1U1JGHcthda4H9bhvZrfY99v0ef7AhsxbdWcFpeix7tZMxNSfzMuE+YhE+R+X1f7yaIXnidE2Fch2eflRb492FX+TIG9tj3e/TJ9nIrvrWC0/Ja9Nh/zxgTLz+v4sYt+x1jfuWp/z5wURSRyoUxkqhCYi3wX8j1omrBK39Gll+X+MEc+cbAh+C/a7kH99j3e/QJY6ZLrfjWCk7La8ljPxmXNCLdYkAMiAExIAbEgJ8Bu0ztl1CNGBADYkAMiAExUJQBTcZF6ZXyPTOAJbanyPwN5WpTCxirJU/AxMCKDGgyXpFsmdodA/ycl7nm1ALGmvkTNjGwCgOajFehWUbEgBgQA2JADPgZ0GTs50Y1YkAMiAExIAZWYUCT8So0y4gYEANiQAyIAT8Dmoz93KhGDIgBMSAGxMAqDJzASvePM1exJiNioEIG8MMavA+8CTuS+Ut0B79QZ4T5bxqZ+C8ej9Nt6B+vQG/0vdcCxmMCdC0GxEA8A/rRj3iuJCkGDhjAZMrfbT+v5VeyDsCZixYwjuFWmRi4bwxomfq+9bj8FQNiQAyIgeoY0GRcXZcIkBgQA2JADNw3BjQZ37cel79iQAyIATFQHQOajKvrEgESA2JADIiB+8aAJuNKehwbbS6QuWtX6Z4xgH4/Z9+bfIPjB+SLe0aD3M3IAMcPx1NGlVJVmAFNxoUJTlDP/2lrvyqT0EyiGzJwB9vMsxMC5jkaX2FH9guTn+Ca/8uYk/LY16lSbS3GmGpQ8lUwoHhSRTfEg3gYLyrJUgwg6L4spVt6yzGAyfM6g/Yr6PjN1QO9rzAm+N+gGFAfuXWp55kwppqV/IYMKJ5sSP4C03ozXkBejqa4cbgcqbeXHGS2qYNvv18xDk6P4HOiP0U535yVxEAUA4onUTRVKaTJePtueY63l7fbwxCCjRjgpPsJY8C33H08SW8EU2YbYUDxpJGOOoapZepjRla8xlMsl6e1yWJFzmszhUn4mQdTt4EL9fz8WEkMBBlQPAlSVLWA3ow36h6z/HiHYPtpIwgyWykDZqmRy9OvKoUoWJUxoHhSWYfMgKPJeAZpmZpw96yWpzORuTM13Lj1FuPj9c78kjvlGFA8KcftKpo1Ga9C86ERPMVyp6yWpw9p0RUYwNjguLjGRPxChIiBGAYUT2JYql9Gk/HKfWSWk061PL0y8Q2YM0H1O03EDXRWJRAVTyrpiAwwtIErA4mJKvhZ4I+4ibgU6SZu2OEvMbGcu2v1eaHLzs7P0e/8d4yP3YnYBFpOztpXsPP+X+Ce4skC8mpqqv9nXElvIPB+BRQuT/p211aCVDByM4C+54MYv5Jy8ACGcu6252fHvq895YYifTthQPGkvY7Um3E9fcbvk+o7pfX0xypIEDT5ZsPVkGucu/sIzlB2gYlYm7hW6YndGVE8aaxL9Wa8cYeZAPwDYHTfK8WRPwLxQUF4445ZyTz6/wambN8fW73FOOBvVSuJgSgGFE+iaKpS6F817xPhSeHPVAAAAABJRU5ErkJggg==\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\Delta\\phi} e^{i \\phi_{10}} e^{- i \\phi_{11}} e^{i \\phi_{kick}}}{4} + \\frac{1}{2} + \\frac{e^{- i \\Delta\\phi} e^{- i \\phi_{10}} e^{i \\phi_{11}} e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅\\Delta\\phi ⅈ⋅φ₁₀ -ⅈ⋅φ₁₁ ⅈ⋅φ_kick -ⅈ⋅\\Delta\\phi -ⅈ⋅φ₁₀ ⅈ⋅φ₁₁ -ⅈ\n",
"ℯ ⋅ℯ ⋅ℯ ⋅ℯ 1 ℯ ⋅ℯ ⋅ℯ ⋅ℯ \n",
"────────────────────────────────────── + ─ + ─────────────────────────────────\n",
" 4 2 4 \n",
"\n",
"⋅φ_kick\n",
" \n",
"───────\n",
" "
]
},
"execution_count": 289,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we compare this to"
]
},
{
"cell_type": "code",
"execution_count": 290,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:49.728301Z",
"start_time": "2020-11-25T14:23:49.111010Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle - \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} - \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
" ℯ 1 ℯ \n",
"- ───────── + ─ - ──────────\n",
" 4 2 4 "
]
},
"execution_count": 290,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"(with $e^{i \\pi} = -1$) we find the condition\n",
"\n",
"\\begin{equation}\n",
"\\Delta\\phi - \\phi_{11} + \\phi_{10} = \\pm\\pi\n",
"\\end{equation}"
]
},
{
"cell_type": "code",
"execution_count": 291,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:50.444785Z",
"start_time": "2020-11-25T14:23:49.732067Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2}$"
],
"text/plain": [
"1 cos(φ_kick)\n",
"─ - ───────────\n",
"2 2 "
]
},
"execution_count": 291,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand().subs({ϕ11: ϕ10+Δϕ+π}).simplify()"
]
},
{
"cell_type": "code",
"execution_count": 292,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:51.227762Z",
"start_time": "2020-11-25T14:23:50.447352Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2}$"
],
"text/plain": [
"1 cos(φ_kick)\n",
"─ - ───────────\n",
"2 2 "
]
},
"execution_count": 292,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(c1 * c1.conjugate()).expand().subs({ϕ11: ϕ10+Δϕ-π}).simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can verify that the phases resulting from a series of Rabi pulses fulfills this condition:"
]
},
{
"cell_type": "code",
"execution_count": 293,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:51.281834Z",
"start_time": "2020-11-25T14:23:51.231412Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"\\begin{equation}\n",
" \\begin{pmatrix}\\phi_{00} & \\phi_{01} \\\\\\phi_{10} & \\phi_{11}\\end{pmatrix} = \\begin{pmatrix}0 & \\Delta\\phi \\\\\\frac{\\pi}{2} & \\Delta\\phi - \\frac{\\pi}{2}\\end{pmatrix}\n",
"\\end{equation}\n"
],
"text/plain": [
"<qalgebra.core.matrix_algebra.Matrix object at 0x11dfff2b0> = <qalgebra.core.matrix_algebra.Matrix object at 0x11db65400>"
]
},
"execution_count": 293,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def recomb_phase_eq(ϕ00, ϕ01, ϕ10, ϕ11):\n",
" ϕ00_sym, ϕ01_sym, ϕ10_sym, ϕ11_sym = symbols(\n",
" 'phi_00, phi_01, phi_10, phi_11', real=True\n",
" )\n",
" return Eq(\n",
" Matrix([[ϕ00_sym, ϕ01_sym], [ϕ10_sym, ϕ11_sym]]),\n",
" Matrix([[ϕ00, ϕ01], [ϕ10, ϕ11]]).simplify_scalar(),\n",
" )\n",
"\n",
"\n",
"def _ovlp_phase(state1, state2):\n",
" return arg(\n",
" (Bra.create(state1) * state2)\n",
" .substitute({N_S: 2 * Δϕ / π})\n",
" .expand()\n",
" .val\n",
" )\n",
"\n",
"\n",
"recomb_phase_eq(\n",
" ϕ00=_ovlp_phase(ket(0), map_recomb_0),\n",
" ϕ01=_ovlp_phase(ket(0), map_recomb_N_S),\n",
" ϕ10=_ovlp_phase(ket(1), map_recomb_0),\n",
" ϕ11=_ovlp_phase(ket(1), map_recomb_N_S),\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From a control perspective, we may write\n",
"\n",
"\n",
"\\begin{align}\n",
" \\ket{0} &\\rightarrow \\frac{e^{i \\phi_{00}}}{\\sqrt{2}} \\left( \\ket{0} + e^{i \\Delta\\phi} \\ket{1} \\right)\\\\\n",
" \\ket{N_S} &\\rightarrow \\frac{e^{i \\phi_{10}}}{\\sqrt{2}} \\left( \\ket{0} + e^{i (\\Delta\\phi + \\pi)} \\ket{1} \\right)\n",
"\\end{align}\n",
"\n",
"which we can optimize with arbitrary phases $\\phi_{00}, \\phi_{10}$ using the [standard \"simultaneous state-to-state\" functional](https://qucontrol.github.io/krotov/v1.2.0/API/krotov.functionals.html#krotov.functionals.F_ss)\n",
"\n",
"\\begin{equation}\n",
" J_{T,ss}\n",
" = 1 - \\frac{1}{2} \\sum_{k \\in \\{0, N_S\\}}\n",
" \\vert\\langle k^{tgt} \\vert k \\rangle \\vert^2\n",
"\\end{equation}\n",
"\n",
"with\n",
"\n",
"\\begin{align}\n",
" \\ket{0^{tgt}} &= \\frac{1}{\\sqrt{2}} \\left( \\ket{0} + e^{i \\Delta\\phi} \\ket{1} \\right)\\\\\n",
" \\ket{N_S^{tgt}} &= \\frac{1}{\\sqrt{2}} \\left( \\ket{0} + e^{i (\\Delta\\phi + \\pi)} \\ket{1} \\right)\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## General gates\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Gate definitions"
]
},
{
"cell_type": "code",
"execution_count": 294,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:23:51.290798Z",
"start_time": "2020-11-25T14:23:51.284471Z"
}
},
"outputs": [],
"source": [
"Δϕ_S = symbols('\\Delta\\phi_s', real=True)\n",
"\n",
"@expand_sum\n",
"def U_split(state, frm=0, to=3, Δϕ=Δϕ_S):\n",
" assert to > frm\n",
" if state == ket(0):\n",
" return (ket(frm) + exp(I * Δϕ) * ket(to)) / sqrt(2)"
]
},
{
"cell_type": "code",
"execution_count": 311,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:44:31.202220Z",
"start_time": "2020-11-25T14:44:31.195378Z"
}
},
"outputs": [],
"source": [
"ϕ00, ϕ01, ϕ10, ϕ11 = symbols('phi_00, phi_01, phi10, phi11', real=True)\n",
"\n",
"@expand_sum\n",
"def U_recombine(state, frm=3, to=0, ϕ00=ϕ00, ϕ01=ϕ01, ϕ10=ϕ10, ϕ11=ϕ11):\n",
" assert to < frm\n",
" out_state = {\n",
" ket(0): (exp(I * ϕ00) * ket(0) + exp(I * ϕ10) * ket(1)) / sqrt(2),\n",
" ket(N_S): (exp(I * ϕ01) * ket(0) + exp(I * ϕ11) * ket(1)) / sqrt(2),\n",
" ket(frm): (exp(I * ϕ01) * ket(0) + exp(I * ϕ11) * ket(1)) / sqrt(2),\n",
" }\n",
" return out_state[state]"
]
},
{
"cell_type": "code",
"execution_count": 312,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:44:31.868512Z",
"start_time": "2020-11-25T14:44:31.863994Z"
}
},
"outputs": [],
"source": [
"Δϕ_plus = symbols('\\Delta\\phi_+', real=True)\n",
"\n",
"@expand_sum\n",
"def U_amplifier(state, frm=3, to=10, Δϕ=Δϕ_plus):\n",
" out_state = {\n",
" ket(0): ket(0),\n",
" ket(frm): exp(I * Δϕ) * ket(to),\n",
" }\n",
" return out_state[state]"
]
},
{
"cell_type": "code",
"execution_count": 313,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:44:32.467990Z",
"start_time": "2020-11-25T14:44:32.462186Z"
}
},
"outputs": [],
"source": [
"Δϕ_minus = symbols('\\Delta\\phi_-', real=True)\n",
"\n",
"def U_deamplifier(state, frm=10, to=3, Δϕ=Δϕ_minus):\n",
" return U_amplifier(state, frm=frm, to=to, Δϕ=Δϕ)"
]
},
{
"cell_type": "code",
"execution_count": 326,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:51:08.734292Z",
"start_time": "2020-11-25T14:51:08.729453Z"
}
},
"outputs": [],
"source": [
"Δϕ_SWAP = symbols('\\Delta\\phi_{SWAP}', real=True)\n",
"\n",
"@expand_sum\n",
"def U_SWAP(state, level_1=0, level_2=3, Δϕ=0):\n",
" out_state = {\n",
" ket(level_1): exp(I*Δϕ) * ket(level_2),\n",
" ket(level_2): ket(level_1),\n",
" }\n",
" return out_state[state]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Assembling the full AFI"
]
},
{
"cell_type": "code",
"execution_count": 332,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:38.178992Z",
"start_time": "2020-11-25T14:52:38.001302Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left(\\frac{e^{i \\Delta\\phi_{SWAP}}}{2} e^{i \\phi_{00}} e^{i \\phi_{kick}} + \\frac{e^{i \\Delta\\phi_{SWAP}}}{2} e^{i \\phi_{00}}\\right) \\left\\lvert 0 \\right\\rangle^{(AFI)} + \\left(\\frac{e^{i \\Delta\\phi_{SWAP}}}{2} e^{i \\phi_{10}} e^{i \\phi_{kick}} - \\frac{e^{i \\Delta\\phi_{SWAP}}}{2} e^{i \\phi_{10}}\\right) \\left\\lvert 1 \\right\\rangle^{(AFI)}$"
],
"text/plain": [
"(exp(ⅈ \\Delta\\phi_{SWAP}) exp(ⅈ φ₀₀) exp(ⅈ φ_kick)/2 + exp(ⅈ \\Delta\\phi_{SWAP}) exp(ⅈ φ₀₀)/2) |0⟩^(AFI) + (exp(ⅈ \\Delta\\phi_{SWAP}) exp(ⅈ φ₁₀) exp(ⅈ φ_kick)/2 - exp(ⅈ \\Delta\\phi_{SWAP}) exp(ⅈ φ₁₀)/2) |1⟩^(AFI)"
]
},
"execution_count": 332,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_out_full = apply_gates(\n",
" ket(0),\n",
" partial(U_split, frm=0, to=3),\n",
" partial(U_amplifier, frm=3, to=10),\n",
" partial(U_kick, level=10),\n",
" partial(U_deamplifier, frm=10, to=3),\n",
" partial(U_SWAP, level_1=3, level_2=0, Δϕ=Δϕ_SWAP),\n",
" partial(U_amplifier, frm=3, to=10),\n",
" partial(U_deamplifier, frm=10, to=3),\n",
" partial(U_recombine, frm=3, to=0, ϕ01=(ϕ00 + Δϕ), ϕ11=(ϕ10+Δϕ+π)),\n",
")\n",
"global_phase = Δϕ_S + Δϕ_plus + Δϕ_minus\n",
"state_out_full = (\n",
" (exp(-I * global_phase) * state_out_full)\n",
" .substitute({Δϕ: (Δϕ_S + Δϕ_SWAP)})\n",
" .expand()\n",
" .simplify_scalar(sympy.expand)\n",
")\n",
"state_out_full"
]
},
{
"cell_type": "code",
"execution_count": 333,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:50.236472Z",
"start_time": "2020-11-25T14:52:50.233263Z"
}
},
"outputs": [],
"source": [
"c0 = state_out_full.args[0].coeff.val\n",
"c1 = state_out_full.args[1].coeff.val"
]
},
{
"cell_type": "code",
"execution_count": 334,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:51.777156Z",
"start_time": "2020-11-25T14:52:51.081506Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} + \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
"ℯ 1 ℯ \n",
"───────── + ─ + ──────────\n",
" 4 2 4 "
]
},
"execution_count": 334,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0 = (c0 * c0.conjugate()).expand()\n",
"p0"
]
},
{
"cell_type": "code",
"execution_count": 335,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:54.127354Z",
"start_time": "2020-11-25T14:52:53.583673Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2} + \\frac{1}{2}$"
],
"text/plain": [
"cos(φ_kick) 1\n",
"─────────── + ─\n",
" 2 2"
]
},
"execution_count": 335,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p0.simplify()"
]
},
{
"cell_type": "code",
"execution_count": 336,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:55.757094Z",
"start_time": "2020-11-25T14:52:55.159049Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle - \\frac{e^{i \\phi_{kick}}}{4} + \\frac{1}{2} - \\frac{e^{- i \\phi_{kick}}}{4}$"
],
"text/plain": [
" ⅈ⋅φ_kick -ⅈ⋅φ_kick\n",
" ℯ 1 ℯ \n",
"- ───────── + ─ - ──────────\n",
" 4 2 4 "
]
},
"execution_count": 336,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1 = (c1 * c1.conjugate()).expand()\n",
"p1"
]
},
{
"cell_type": "code",
"execution_count": 337,
"metadata": {
"ExecuteTime": {
"end_time": "2020-11-25T14:52:56.721546Z",
"start_time": "2020-11-25T14:52:56.054025Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\displaystyle \\frac{1}{2} - \\frac{\\cos{\\left(\\phi_{kick} \\right)}}{2}$"
],
"text/plain": [
"1 cos(φ_kick)\n",
"─ - ───────────\n",
"2 2 "
]
},
"execution_count": 337,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1.simplify()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From a control perspective, we can summarize as follows:\n",
"\n",
"* The beamsplitter can use a \"population functional\" that maps $\\ket{0}$ to a superpostion of $\\ket{0}$ and $\\ket{N_S}$ with an arbitrary relative phase\n",
"* The amplifier and deamplifier can use a simple state-to-state functional with an arbitrary phase. The amplifiert and de-amplifier do not need to induce the same (or a complementary) phase\n",
"* The SWAP gate should be an exact SWAP gate (up to a global phase, \"SM\"-functional). Alternatively, we could allow for the introduction of an arbitrary relative phase (\"SS\"-functional???)\n",
"* The recombination must use the an SM functional, and a $\\Delta \\phi$ that corresponds to the relative phase difference observed from the initial beamsplitter. If the SWAP gate was allowed to introduce a relative phase, $\\Delta \\phi$ must include this relative phase additionally."
]
}
],
"metadata": {
"hide_input": false,
"jupytext": {
"encoding": "# -*- coding: utf-8 -*-"
},
"kernelspec": {
"display_name": "QAlgebra",
"language": "python",
"name": "qalgebra"
},
"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.1"
},
"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": true
},
"toc-autonumbering": true,
"toc-showcode": false,
"toc-showmarkdowntxt": false,
"toc-showtags": 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": 4
}
from notebook.services.config import ConfigManager
c = ConfigManager()
c.update('notebook', {"CodeCell": {"cm_config": {"autoCloseBrackets": False}}})
name: binder
channels:
- conda-forge
dependencies:
- python=3.8
- qutip
- matplotlib
- pip:
- watermark
- symbolic_equation>=0.3.0
- git+https://github.com/qalgebra/qalgebra.git@master#egg=qalgebra
#!/bin/bash
set -e
python -m jupyter nbextension enable execute_time/ExecuteTime
python -m jupyter nbextension enable toc2/main
python -m jupyter nbextension enable --py widgetsnbextension
python -m ipykernel install --user --name qalgebra --display-name "QAlgebra"
python disable_brackets.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment