yarn: Examples From Forked Libraries
What is yarn?
Introduction
- This notebook
(please view it with nbviewer ) compares 4 forked quantum optimal control libraries
The system is cQED: transmon qubit and cavity oscillator under Jaynes-Cummings interaction
in the dispersive regime
with second order anharmonicity (Kerr for the cavity)
The goal is state transfer
fock, coherent, cat
Todo
Important: figure out yarn/examplesFromForkedLibraries/PhilReinholdPygrape/operations.py, this seems to be a wrapper already
Figure out how
PhilReinholdPygrapeproduced the result from the paper , as it couldn’t even successfully generatecatstate as shown below
Import
import numpy as np
from qutip import *
import matplotlib.pyplot as plt
from yarn.qutipHelpers import (plotWigners)
from yarn.PhilReinholdPygrape import (
StateTransferSetup, run_grape, make_hmt,
)
import qutip.control.pulseoptim as cpo
states
pi2 = 2*np.pi
def cqFock(dC,nC,nQ): return tensor(fock(dC,nC), fock(2,nQ))
def cqCoherent(dC,alpha,nQ): return tensor(coherent(dC,alpha), fock(2,nQ))
def cat(dC,alpha): return (coherent(dC,alpha)+coherent(dC,-alpha)).unit()
def cqCat(dC,alpha,nQ): return tensor(cat(dC,alpha), fock(2,nQ))
plots
def plotPhilReinholdPygrape(result, ctrlNames=None):
ctrlNames = ctrlNames or [str(i) for i in range(len(result.controls))]
for i,ctrl in enumerate(result.controls):
plt.step(result.ts, ctrl, label=ctrlNames[i])
plt.legend(); plt.show()
def plotQuTip(result, ctrlNames=None):
print("Final fidelity error {}".format(result.fid_err))
optimised = result.final_amps
ctrlNames = ctrlNames or [str(i) for i in range(optimised.shape[1])]
def hstack(x,j): return np.hstack((x[:, j], x[-1, j]))
for j in range(optimised.shape[1]):
plt.step(result.time, hstack(optimised,j), label=ctrlNames[j])
plt.legend(); plt.show()
hamiltonian and controls
"""
H0, Hcs = make_hmt(
nc=dimCavity, nq=2,
chi=-2.95e-3, chi_prime=1e-6,
kerr=-5.4e-6, anharm=-215e-3,
q_drive=1e-3, c_drive=1e-3,
qobj=True, delta_q=0, delta_c=0, drive_prime=0
)
initCtrls = 1e-3 * np.ones((len(Hcs), 400))
"""
def jaynesCummings(
dimCavity, driveGHz=1e-3, pulseLen=None,
chiGHz=2e-3, anharmCavityGHz=1e-5, anharmQubitGHz=.4,
):
aC = tensor(destroy(dimCavity), qeye(2))
aQ = tensor(qeye(dimCavity), destroy(2))
H0 = ((anharmQubitGHz/2) * aQ.dag()*aQ.dag() * aQ*aQ
+(anharmCavityGHz/2) * aC.dag()*aC.dag() * aC*aC
+ chiGHz * aC.dag() * aC * aQ.dag() * aQ )*2*np.pi
drive = 2*np.pi*driveGHz
Hcs = [drive*(aQ + aQ.dag()), 1j*drive*(aQ - aQ.dag()),
drive*(aC + aC.dag()), 1j*drive*(aC - aC.dag())]
pulseLen = pulseLen or int(1 / (2 * chiGHz)) + 25
initCtrls = 1e-3 * np.ones((len(Hcs), pulseLen))
return H0, Hcs, initCtrls
dimCavity=20
H0, Hcs, initCtrls = jaynesCummings(dimCavity)
use different packages
def usePhilReinholdPygrape(initStates,finalStates):
setup = StateTransferSetup(H0, Hcs, initStates, finalStates)
result = run_grape(initCtrls, setup)
plotPhilReinholdPygrape(result)
def useQuTip(initStates,finalStates):
result = cpo.optimize_pulse_unitary(
H0, Hcs, initStates[0], finalStates[0],
initCtrls.shape[1], initCtrls.shape[1],
init_pulse_type='LIN',
)
plotQuTip(result)
state transfer: Fock
initStates = [cqFock(dimCavity,nC=0, nQ=0)]
finalStates = [cqFock(dimCavity,nC=1, nQ=0)]
plotWigners(initStates,3); plotWigners(finalStates,3)
using PhilReinholdPygrape
usePhilReinholdPygrape(initStates,finalStates)
0 - Fids: 0.002256827 1 - Fids: 0.002256827 2 - Fids: 0.09989834 3 - Fids: 0.436578 4 - Fids: 0.4906464 5 - Fids: 0.5986397 6 - Fids: 0.6037795 7 - Fids: 0.606528 8 - Fids: 0.6065401 9 - Fids: 0.606542 10 - Fids: 0.6065625 11 - Fids: 0.6066012 12 - Fids: 0.6067181 13 - Fids: 0.6070064 14 - Fids: 0.6076665 15 - Fids: 0.6085213 16 - Fids: 0.6103022 17 - Fids: 0.3060577 18 - Fids: 0.6111034 19 - Fids: 0.6121483 20 - Fids: 0.6117123 21 - Fids: 0.6172954 22 - Fids: 0.6191698 23 - Fids: 0.5973693 24 - Fids: 0.4556182 25 - Fids: 0.6193838 26 - Fids: 0.6326029 27 - Fids: 0.6300504 28 - Fids: 0.6360261 29 - Fids: 0.6376308 30 - Fids: 0.6423578 31 - Fids: 0.6440193 32 - Fids: 0.64526 33 - Fids: 0.6466951 34 - Fids: 0.653232 35 - Fids: 0.6531251 36 - Fids: 0.6626725 37 - Fids: 0.4880639 38 - Fids: 0.66756 39 - Fids: 0.6064164 40 - Fids: 0.6785587 41 - Fids: 0.6993441 42 - Fids: 0.7333667 43 - Fids: 0.7534989 44 - Fids: 0.7679612 45 - Fids: 0.7842104 46 - Fids: 0.7917553 47 - Fids: 0.7934162 48 - Fids: 0.7939697 49 - Fids: 0.7944327 50 - Fids: 0.7951356 51 - Fids: 0.7960269 52 - Fids: 0.7973393 53 - Fids: 0.7991426 54 - Fids: 0.7976141 55 - Fids: 0.7999499 56 - Fids: 0.8007199 57 - Fids: 0.801265 58 - Fids: 0.802414 59 - Fids: 0.8042573 60 - Fids: 0.8069088 61 - Fids: 0.8099786 62 - Fids: 0.8123041 63 - Fids: 0.8141022 64 - Fids: 0.8164042 65 - Fids: 0.8205328 66 - Fids: 0.8237262 67 - Fids: 0.8279741 68 - Fids: 0.7387289 69 - Fids: 0.8327773 70 - Fids: 0.823596 71 - Fids: 0.8378003 72 - Fids: 0.8437231 73 - Fids: 0.8473234 74 - Fids: 0.8521482 75 - Fids: 0.8611444 76 - Fids: 0.8698338 77 - Fids: 0.886977 78 - Fids: 0.661226 79 - Fids: 0.892643 80 - Fids: 0.9082311 81 - Fids: 0.9089344 82 - Fids: 0.9177364 83 - Fids: 0.9275957 84 - Fids: 0.932007 85 - Fids: 0.9350674 86 - Fids: 0.9392846 87 - Fids: 0.9417773 88 - Fids: 0.9416577 89 - Fids: 0.9431356 90 - Fids: 0.944973 91 - Fids: 0.9462289 92 - Fids: 0.9471246 93 - Fids: 0.950403 94 - Fids: 0.9551962 95 - Fids: 0.9592779 96 - Fids: 0.964364 97 - Fids: 0.9697083 98 - Fids: 0.9709195 99 - Fids: 0.9719175 100 - Fids: 0.973498 101 - Fids: 0.976216 102 - Fids: 0.9728387 103 - Fids: 0.977508 104 - Fids: 0.9796117 105 - Fids: 0.981689 106 - Fids: 0.9827685 107 - Fids: 0.9844316 108 - Fids: 0.9849623 109 - Fids: 0.9880994 110 - Fids: 0.9889437 111 - Fids: 0.9900033 112 - Fids: 0.9922484 113 - Fids: 0.9928912 114 - Fids: 0.9939053 115 - Fids: 0.9943651 116 - Fids: 0.9947759 117 - Fids: 0.995226 118 - Fids: 0.9955086 119 - Fids: 0.995846 120 - Fids: 0.9963599 121 - Fids: 0.9963696 122 - Fids: 0.9965119 123 - Fids: 0.9967324 124 - Fids: 0.9969066 125 - Fids: 0.9970776 126 - Fids: 0.9973091 127 - Fids: 0.9976761 128 - Fids: 0.9958393 129 - Fids: 0.9977798 130 - Fids: 0.9979534 131 - Fids: 0.9980399 132 - Fids: 0.9980604 133 - Fids: 0.9981007 134 - Fids: 0.997954 135 - Fids: 0.9981093 136 - Fids: 0.9981331 137 - Fids: 0.9981716 138 - Fids: 0.998226 139 - Fids: 0.9982892 140 - Fids: 0.9983443 141 - Fids: 0.9983946 142 - Fids: 0.9984205 143 - Fids: 0.9984408 144 - Fids: 0.998485 145 - Fids: 0.9985439 146 - Fids: 0.9985929 147 - Fids: 0.9986276 148 - Fids: 0.998649 149 - Fids: 0.9986821 150 - Fids: 0.9987085 151 - Fids: 0.9987675 152 - Fids: 0.9987969 153 - Fids: 0.9988317 154 - Fids: 0.9988431 155 - Fids: 0.9988644 156 - Fids: 0.9988962 157 - Fids: 0.9987931 158 - Fids: 0.9989146 159 - Fids: 0.9989433 160 - Fids: 0.9989621 161 - Fids: 0.9989781 162 - Fids: 0.9989998 163 - Fids: 0.9990114 164 - Fids: 0.9990289 165 - Fids: 0.9990576 166 - Fids: 0.9990055 167 - Fids: 0.9990745 168 - Fids: 0.9991133 169 - Fids: 0.9991282 170 - Fids: 0.9991469 171 - Fids: 0.9991692 172 - Fids: 0.9991906 173 - Fids: 0.9992085 174 - Fids: 0.9992152 175 - Fids: 0.9992238 176 - Fids: 0.9992267 177 - Fids: 0.9992398 178 - Fids: 0.9992568 179 - Fids: 0.9992173 180 - Fids: 0.9992627 181 - Fids: 0.9992765 182 - Fids: 0.9992854 183 - Fids: 0.9992958 184 - Fids: 0.9993088 185 - Fids: 0.9993224 186 - Fids: 0.9993359 187 - Fids: 0.9993406 188 - Fids: 0.9993574 189 - Fids: 0.9993661 190 - Fids: 0.99938 191 - Fids: 0.999395 192 - Fids: 0.9993936 193 - Fids: 0.9994039 194 - Fids: 0.9994196 195 - Fids: 0.9994285 196 - Fids: 0.9994418 197 - Fids: 0.9994581 198 - Fids: 0.9994716 199 - Fids: 0.9994823 200 - Fids: 0.9994917 201 - Fids: 0.9995102 202 - Fids: 0.9995128 203 - Fids: 0.9995311 204 - Fids: 0.9995373 205 - Fids: 0.9995455 206 - Fids: 0.9995671 207 - Fids: 0.9993795 208 - Fids: 0.9995715 209 - Fids: 0.9995846 210 - Fids: 0.9995908 211 - Fids: 0.9996035 212 - Fids: 0.9996115 213 - Fids: 0.999616 214 - Fids: 0.9996246 215 - Fids: 0.999628 216 - Fids: 0.9996349 217 - Fids: 0.9996477 218 - Fids: 0.9996609 219 - Fids: 0.9996777 220 - Fids: 0.999606 221 - Fids: 0.9996808 222 - Fids: 0.9996865 223 - Fids: 0.9996892 224 - Fids: 0.9996946 225 - Fids: 0.9997038 226 - Fids: 0.9997188 227 - Fids: 0.9997255 228 - Fids: 0.9997394 229 - Fids: 0.9997429 230 - Fids: 0.9997482 231 - Fids: 0.999754 232 - Fids: 0.9997569 233 - Fids: 0.9997633 234 - Fids: 0.9997647 235 - Fids: 0.9997663 236 - Fids: 0.9997682 237 - Fids: 0.9997722 238 - Fids: 0.9997757 239 - Fids: 0.9997786 240 - Fids: 0.9997795 241 - Fids: 0.9997823 242 - Fids: 0.9997827 243 - Fids: 0.9997847 244 - Fids: 0.9997847
using QuTip
useQuTip(initStates,finalStates)
Final fidelity error 2.704960255339728e-06
state transfer: Coherent
initStates = [cqCoherent(dimCavity,alpha=0, nQ=0)]
finalStates = [cqCoherent(dimCavity,alpha=3, nQ=0)]
plotWigners(initStates,8); plotWigners(finalStates,8)
using PhilReinholdPygrape
usePhilReinholdPygrape(initStates,finalStates)
245 - Fids: 0.01105588 246 - Fids: 0.01105588 247 - Fids: 0.014772 248 - Fids: 0.04275196 249 - Fids: 0.6402015 250 - Fids: 0.000349134 251 - Fids: 0.814156 252 - Fids: 0.9870204 253 - Fids: 0.9910069 254 - Fids: 0.6510891 255 - Fids: 0.9937727 256 - Fids: 0.01135684 257 - Fids: 0.9983244 258 - Fids: 0.999253 259 - Fids: 0.9992538 260 - Fids: 0.9992566 261 - Fids: 0.9992761 262 - Fids: 0.9993079 263 - Fids: 0.9993393 264 - Fids: 0.999353 265 - Fids: 0.999358 266 - Fids: 0.999358
using QuTip
useQuTip(initStates,finalStates)
Final fidelity error 2.59987875717016e-06
state transfer: Cat
initStates = [cqCat(dimCavity,alpha=0, nQ=0)]
finalStates = [cqCat(dimCavity,alpha=3, nQ=0)]
plotWigners(initStates,8); plotWigners(finalStates,8)
using PhilReinholdPygrape
usePhilReinholdPygrape(initStates,finalStates)
267 - Fids: 0.0157568 268 - Fids: 0.0157568 269 - Fids: 0.0157568
using QuTip
useQuTip(initStates,finalStates)
Final fidelity error 0.0001668155711808117
The Schuster Lab codes
SchusterLabQoc1 (2017)
The original package is
SchusterLab/quantum-optimal-control
The original example is
SchusterLab/GRAPE-Tensorflow-Examples/paper_examples/Transmon_Cavity_Cat_State_Transfer.ipynb
Note: The original example doesn’t work with python 3 and
TensorFlow 2, you can find the following code upgraded by me
upgraded package: tesla-cat/yarn/examplesFromForkedLibraries/SchusterLabQoc1/quantum_optimal_controlupgraded example: tesla-cat/yarn/examplesFromForkedLibraries/SchusterLabQoc1/Transmon_Cavity_Cat_State_Transfer.ipynb
Note: The original example notebook doesn’t have output,
however, most of the other original examples (simpler than this one) in
the same directory have outputs, therefore I guess the people from
SchusterLab also had problems with this example. The following is the
snapshot of the output of my upgraded example, which you can find
from the link above and run it yourself. If you think it is my upgrade
that caused the following bad result, you are welcome to modify the
original package yourself and email me if you get better results.
SchusterLabQoc2 (2019)
The original package is
SchusterLab/qoc
The original example is
SchusterLab/qoc/examples/tutorial.py
Note: The original example works and I didn’t modify anything
Note: The original example works with
line 56 | CAVITY_STATE_COUNT = 2, but when I change it to
CAVITY_STATE_COUNT = 3, the following bad result is produced