Skip to content

Commit

Permalink
Update notation
Browse files Browse the repository at this point in the history
  • Loading branch information
thangleiter committed Aug 26, 2019
1 parent 9754468 commit 3c6ab53
Show file tree
Hide file tree
Showing 13 changed files with 4,842 additions and 3,702 deletions.
12 changes: 6 additions & 6 deletions doc/source/examples/advanced_concatenation.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"In this example we want implement a Hadamard gate,\n",
"\n",
"$$\n",
" H \\doteq\\frac{1}{\\sqrt{2}}\n",
" \\text{H}\\doteq\\frac{1}{\\sqrt{2}}\n",
" \\begin{pmatrix}\n",
" 1 & 1 \\\\\n",
" 1 & -1\n",
Expand All @@ -19,13 +19,13 @@
"using $\\pi/2$ rotations about the $x$- and $y$-axis of the Bloch sphere, $\\pi/2_x$ and $\\pi/2_y$, once with optimized gates and once with primitive ones. The Hadamard transform is given by\n",
"\n",
"$$\n",
" H = \\pi/2_x \\circ \\pi/2_x \\circ \\pi/2_y.\n",
" \\text{H} = \\pi/2_x \\circ \\pi/2_x \\circ \\pi/2_y.\n",
"$$\n",
"\n",
"The optimized gates we shall use are the exchange-based singlet-triplet qubit gates presented in [Cerfontaine et al. (2019)]. For a single qubit, the control Hamiltonian reads\n",
"\n",
"$$\n",
" \\mathcal{H}_c = \\Delta B_z \\frac{\\sigma_x}{2} + J(\\epsilon)\\frac{\\sigma_z}{2}\n",
" {H}_c = \\Delta B_z \\frac{\\sigma_x}{2} + J(\\epsilon)\\frac{\\sigma_z}{2}\n",
"$$\n",
"\n",
"with $\\Delta B_z$ the magnetic field gradient and $J(\\epsilon) = \\exp(\\epsilon)$ the exchange coupling a function of the controllable detuning. Note again that, since we use $\\hbar\\equiv 1$, all energies have units of inverse time, $\\text{ns}^{-1}$ in this case.\n",
Expand Down Expand Up @@ -75,7 +75,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Since $J$ depends non-trivially on $\\epsilon$, we include the first derivative as a sensitivity to charge noise on $\\epsilon$ in the noise Hamiltonian $\\mathcal{H}_n = \\sum_j s_j(t) b_j(t) B_j$."
"Since $J$ depends non-trivially on $\\epsilon$, we include the first derivative as a sensitivity to charge noise on $\\epsilon$ in the noise Hamiltonian ${H}_n = \\sum_\\alpha s_\\alpha(t) b_\\alpha(t) B_\\alpha$."
]
},
{
Expand Down Expand Up @@ -174,7 +174,7 @@
"To verify the pulses, we plot the Bloch vector evolution starting from $|0\\rangle$. In this case, we expect the pulse to have the action\n",
"\n",
"$$\n",
" H\\colon |0\\rangle\\to \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}}\\equiv |+\\rangle.\n",
" \\text{H}\\colon |0\\rangle\\to \\frac{|0\\rangle + |1\\rangle}{\\sqrt{2}}\\equiv |+\\rangle.\n",
"$$\n"
]
},
Expand Down Expand Up @@ -244,7 +244,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
"version": "3.7.4"
}
},
"nbformat": 4,
Expand Down
2,264 changes: 1,132 additions & 1,132 deletions doc/source/examples/calculating_error_transfer_matrices.ipynb

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions doc/source/examples/extending_pulses.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"# Extending pulses\n",
"This example notebook demonstrates how to remap and extend pulses to different qubits. That is, we can map several ``PulseSequence`` instances to different qubits, thus extending existing pulses defined on different Hilbert spaces, or permute the qubit register a pulse is defined on, without having to define new pulses on the larger Hilbert space.\n",
"\n",
"The functionality is provided by `remap` and `extend`, which, similar to `concatenate`, automatically cache the control matrix and diagonalization attributes for the extended pulse if they are also cached for the mapped pulses. This is only possible for separable bases, that is, bases that can be written as $\\mathcal{C}_n = \\mathcal{C}_1^{\\otimes n}$ with $\\mathcal{C}_1$ the basis for a single qubit. Currently, the only implemented basis that fulfills this criterium is the Pauli basis $\\mathcal{P}_n = \\lbrace\\mathbb{1},\\sigma_x,\\sigma_y,\\sigma_z\\rbrace^{\\otimes n}$.\n",
"The functionality is provided by `remap` and `extend`, which, similar to `concatenate`, automatically cache the control matrix and diagonalization attributes for the extended pulse if they are also cached for the mapped pulses. This is only possible for separable bases, that is, bases that can be written as $\\mathcal{C}_n = \\mathcal{C}_1^{\\otimes n}$ with $\\mathcal{C}_1$ the basis for a single qubit. Currently, the only implemented basis that fulfills this criterium is the Pauli basis $\\mathcal{P}_n = \\lbrace\\mathbb{1},\\sigma_x,\\sigma_y,\\sigma_z\\rbrace^{\\otimes n}/d^\\frac{n}{2}$.\n",
"\n",
"Concretely, we will define a simple SWAP pulse that will swap the outer two and inner two qubits of a four-qubit register, such as is needed in a QFT.\n",
"\n",
Expand Down Expand Up @@ -230,7 +230,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
"version": "3.7.4"
}
},
"nbformat": 4,
Expand Down
14 changes: 7 additions & 7 deletions doc/source/examples/getting_started.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@
"Therefore, the decoherence can be very intuitively understood and studied by examining the filter function in the frequency domain -- if it is large, the system will be very susceptible to noise at that frequency, while if it is small, noise of that frequency will be 'filtered out'. In this regard, the filter function is very similar to the transfer function of electrical circuits.\n",
"\n",
"### The `PulseSequence` class\n",
"The central object of this package is the `PulseSequence` class. It is used to represent the control operation implementing a certain Hamiltonian $\\mathcal{H}_c$ and the sensitivities of the noise afflicting the system. More concisely, the total Hamiltonian of the system is modelled as\n",
"The central object of this package is the `PulseSequence` class. It is used to represent the control operation implementing a certain Hamiltonian ${H}_c$ and the sensitivities of the noise afflicting the system. More concisely, the total Hamiltonian of the system is modelled as\n",
"\n",
"$$\n",
" \\mathcal{H} = \\mathcal{H}_c + \\mathcal{H}_n \\\\\n",
" \\mathcal{H}_c = \\sum_i a_i(t) A_i \\\\\n",
" \\mathcal{H}_n = \\sum_j s_j(t) b_j(t) B_j \\\\\n",
" {H} = {H}_c + {H}_n \\\\\n",
" {H}_c = \\sum_i a_i(t) A_i \\\\\n",
" {H}_n = \\sum_\\alpha s_\\alpha(t) b_\\alpha(t) B_\\alpha \\\\\n",
"$$\n",
"\n",
"where $A_i$ and $B_j$ are the control and noise operators, respectively, $a_i(t)$ the control strength of $A_i$ at time $t$, $s_j(t)$ the sensitivity at time $t$ of the system to noise source $j$, and $b_j(t)$ classically fluctuating noise variables. Since the noise is captured in a spectral density function that accounts for different realizations of the random noise, the $b_j(t)$ are not required at instantiation of a `PulseSequence` instance. Note that we always calculate in units where $\\hbar\\equiv 1$.\n",
"where $A_i$ and $B_\\alpha$ are the control and noise operators, respectively, $a_i(t)$ the control strength of $A_i$ at time $t$, $s_\\alpha(t)$ the sensitivity at time $t$ of the system to noise source $\\alpha$, and $b_\\alpha(t)$ classically fluctuating noise variables. Since the noise is captured in a spectral density function that accounts for different realizations of the random noise, the $b_\\alpha(t)$ are not required at instantiation of a `PulseSequence` instance. Note that we always calculate in units where $\\hbar\\equiv 1$.\n",
"\n",
"The `PulseSequence` class requires three positional arguments at instantiation; `H_c`, `H_n`, and `dt`, with `dt` the time-deltas of piece-wise constant control. The former two represent the control and noise Hamiltonians and are passed in the same nested-list-of-lists structure of operators and coefficient lists similar to that required by [QuTiP](http://qutip.org/) (the difference being that QuTiP requires implicit functions for calculating the coefficients instead of explicit values). Optionally, we pass unique identifiers for each operator as a third element of the list. That is, \n",
"\n",
Expand Down Expand Up @@ -175,7 +175,7 @@
"This time, we assume a realistic singlet-triplet exchange qubit in a magnetic field. In this case, the control Hamiltonian is given by\n",
"\n",
"$$\n",
" \\mathcal{H}_c = \\Delta B_z\\frac{\\sigma_z}{2} + J(\\epsilon(t))\\frac{\\sigma_x}{2}\n",
" {H}_c = \\Delta B_z\\frac{\\sigma_z}{2} + J(\\epsilon(t))\\frac{\\sigma_x}{2}\n",
"$$\n",
"\n",
"with a phenomenological $J(\\epsilon(t))=\\exp(\\epsilon(t)/\\epsilon_0)$ where $\\epsilon(t)$ is the controllable detuning and $\\epsilon_0$ a normalization factor. Since the parameter that is controlled from the lab and that is physically afflicted by noise, $\\epsilon$, enters the Hamiltonian non-trivially (i.e. not linearly) through the exchange coupling $J$, the pulse is also affected non-trivally by $\\epsilon$-noise. We can to first order account for this dependence by including the derivative of $J$ with respect to $\\epsilon$ as a noise sensitivity;\n",
Expand Down Expand Up @@ -270,7 +270,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
"version": "3.7.4"
}
},
"nbformat": 4,
Expand Down
Loading

0 comments on commit 3c6ab53

Please sign in to comment.