|
13 | 13 | "source": [ |
14 | 14 | "# Quantum Process Tomography\n", |
15 | 15 | "\n", |
16 | | - "* **Last Updated:** April 29, 2019\n", |
| 16 | + "* **Last Updated:** June 17, 2019\n", |
17 | 17 | "* **Requires:** qiskit-terra 0.8, qiskit-ignis 0.1.1, qiskit-aer 0.2" |
18 | 18 | ] |
19 | 19 | }, |
|
37 | 37 | "# Import QISKit classes\n", |
38 | 38 | "import qiskit\n", |
39 | 39 | "from qiskit import QuantumRegister, QuantumCircuit, Aer\n", |
40 | | - "from qiskit.quantum_info import state_fidelity\n", |
| 40 | + "from qiskit.quantum_info import state_fidelity, process_fidelity\n", |
41 | 41 | "from qiskit.tools.qi.qi import outer\n", |
42 | 42 | "\n", |
43 | 43 | "# Tomography functions\n", |
|
60 | 60 | "data": { |
61 | 61 | "text/plain": [ |
62 | 62 | "{(('Zp',), ('X',)): {'0': 4000},\n", |
63 | | - " (('Zp',), ('Y',)): {'0': 1980, '1': 2020},\n", |
64 | | - " (('Zp',), ('Z',)): {'0': 2053, '1': 1947},\n", |
| 63 | + " (('Zp',), ('Y',)): {'0': 2033, '1': 1967},\n", |
| 64 | + " (('Zp',), ('Z',)): {'0': 1985, '1': 2015},\n", |
65 | 65 | " (('Zm',), ('X',)): {'1': 4000},\n", |
66 | | - " (('Zm',), ('Y',)): {'0': 2064, '1': 1936},\n", |
67 | | - " (('Zm',), ('Z',)): {'0': 2018, '1': 1982},\n", |
68 | | - " (('Xp',), ('X',)): {'0': 1982, '1': 2018},\n", |
69 | | - " (('Xp',), ('Y',)): {'0': 2023, '1': 1977},\n", |
| 66 | + " (('Zm',), ('Y',)): {'0': 1959, '1': 2041},\n", |
| 67 | + " (('Zm',), ('Z',)): {'0': 2026, '1': 1974},\n", |
| 68 | + " (('Xp',), ('X',)): {'0': 2030, '1': 1970},\n", |
| 69 | + " (('Xp',), ('Y',)): {'0': 1993, '1': 2007},\n", |
70 | 70 | " (('Xp',), ('Z',)): {'0': 4000},\n", |
71 | | - " (('Yp',), ('X',)): {'0': 1944, '1': 2056},\n", |
| 71 | + " (('Yp',), ('X',)): {'0': 2040, '1': 1960},\n", |
72 | 72 | " (('Yp',), ('Y',)): {'1': 4000},\n", |
73 | | - " (('Yp',), ('Z',)): {'0': 1986, '1': 2014}}" |
| 73 | + " (('Yp',), ('Z',)): {'0': 1979, '1': 2021}}" |
74 | 74 | ] |
75 | 75 | }, |
76 | 76 | "execution_count": 2, |
|
109 | 109 | "output_type": "stream", |
110 | 110 | "text": [ |
111 | 111 | "Least-Sq Fitter\n", |
112 | | - "fit time: 0.025106191635131836\n", |
113 | | - "fit fidelity: 0.9935435801308409\n", |
| 112 | + "fit time: 0.009121894836425781\n", |
| 113 | + "fit fidelity (state): 0.9976767994222256\n", |
| 114 | + "fit fidelity (process): 0.995358994837865\n", |
114 | 115 | "\n", |
115 | 116 | "CVXOPT Fitter\n", |
116 | | - "fit time: 0.14531993865966797\n", |
117 | | - "fit fidelity: 0.9999047428166897\n" |
| 117 | + "fit time: 0.05771899223327637\n", |
| 118 | + "fit fidelity (state): 0.9999108703920029\n", |
| 119 | + "fit fidelity (process): 0.9998217487227923\n" |
118 | 120 | ] |
119 | 121 | } |
120 | 122 | ], |
|
124 | 126 | "choi_lstsq = qpt_tomo.fit(method='lstsq')\n", |
125 | 127 | "print('Least-Sq Fitter')\n", |
126 | 128 | "print('fit time:', time.time() - t)\n", |
127 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 129 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 130 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_lstsq.data, require_cptp=False)))\n", |
| 131 | + "\n", |
128 | 132 | "\n", |
129 | 133 | "# CVXOPT Semidefinite-Program tomographic reconstruction\n", |
130 | 134 | "t = time.time()\n", |
131 | 135 | "choi_cvx = qpt_tomo.fit(method='cvx')\n", |
132 | 136 | "print('\\nCVXOPT Fitter')\n", |
133 | 137 | "print('fit time:', time.time() - t)\n", |
134 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))" |
| 138 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))\n", |
| 139 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_cvx.data, require_cptp=False)))\n" |
135 | 140 | ] |
136 | 141 | }, |
137 | 142 | { |
|
151 | 156 | { |
152 | 157 | "data": { |
153 | 158 | "text/plain": [ |
154 | | - "{(('Zp',), ('X',)): {'0': 985, '1': 1015},\n", |
155 | | - " (('Zp',), ('Y',)): {'0': 1029, '1': 971},\n", |
| 159 | + "{(('Zp',), ('X',)): {'0': 1007, '1': 993},\n", |
| 160 | + " (('Zp',), ('Y',)): {'0': 962, '1': 1038},\n", |
156 | 161 | " (('Zp',), ('Z',)): {'0': 2000},\n", |
157 | | - " (('Zm',), ('X',)): {'0': 981, '1': 1019},\n", |
158 | | - " (('Zm',), ('Y',)): {'0': 1016, '1': 984},\n", |
| 162 | + " (('Zm',), ('X',)): {'0': 1059, '1': 941},\n", |
| 163 | + " (('Zm',), ('Y',)): {'0': 1000, '1': 1000},\n", |
159 | 164 | " (('Zm',), ('Z',)): {'1': 2000},\n", |
160 | 165 | " (('Xp',), ('X',)): {'0': 2000},\n", |
161 | | - " (('Xp',), ('Y',)): {'0': 955, '1': 1045},\n", |
162 | | - " (('Xp',), ('Z',)): {'0': 958, '1': 1042},\n", |
163 | | - " (('Yp',), ('X',)): {'0': 989, '1': 1011},\n", |
| 166 | + " (('Xp',), ('Y',)): {'0': 1010, '1': 990},\n", |
| 167 | + " (('Xp',), ('Z',)): {'0': 995, '1': 1005},\n", |
| 168 | + " (('Yp',), ('X',)): {'0': 1003, '1': 997},\n", |
164 | 169 | " (('Yp',), ('Y',)): {'0': 2000},\n", |
165 | | - " (('Yp',), ('Z',)): {'0': 1003, '1': 997}}" |
| 170 | + " (('Yp',), ('Z',)): {'0': 978, '1': 1022}}" |
166 | 171 | ] |
167 | 172 | }, |
168 | 173 | "execution_count": 4, |
|
200 | 205 | "output_type": "stream", |
201 | 206 | "text": [ |
202 | 207 | "Least-Sq Fitter\n", |
203 | | - "fit time: 0.009311914443969727\n", |
204 | | - "fit fidelity: 0.9874012369433787\n", |
| 208 | + "fit time: 0.006497859954833984\n", |
| 209 | + "fit fidelity (state): 0.9866920175150853\n", |
| 210 | + "fit fidelity (process): 0.9735611374279911\n", |
205 | 211 | "\n", |
206 | 212 | "CVXOPT Fitter\n", |
207 | | - "fit time: 0.06017184257507324\n", |
208 | | - "fit fidelity: 0.9998944136683781\n" |
| 213 | + "fit time: 0.04198098182678223\n", |
| 214 | + "fit fidelity (state): 0.999940174723841\n", |
| 215 | + "fit fidelity (process): 0.9998803530267468\n" |
209 | 216 | ] |
210 | 217 | } |
211 | 218 | ], |
|
215 | 222 | "choi_lstsq = qpt_tomo.fit(method='lstsq')\n", |
216 | 223 | "print('Least-Sq Fitter')\n", |
217 | 224 | "print('fit time:', time.time() - t)\n", |
218 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 225 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 226 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_lstsq.data, require_cptp=False)))\n", |
219 | 227 | "\n", |
220 | 228 | "# CVXOPT Semidefinite-Program tomographic reconstruction\n", |
221 | 229 | "t = time.time()\n", |
222 | 230 | "choi_cvx = qpt_tomo.fit(method='cvx')\n", |
223 | 231 | "print('\\nCVXOPT Fitter')\n", |
224 | 232 | "print('fit time:', time.time() - t)\n", |
225 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))" |
| 233 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))\n", |
| 234 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_cvx.data, require_cptp=False)))" |
226 | 235 | ] |
227 | 236 | }, |
228 | 237 | { |
|
242 | 251 | "output_type": "stream", |
243 | 252 | "text": [ |
244 | 253 | "Least-Sq Fitter\n", |
245 | | - "fit time: 0.14422106742858887\n", |
246 | | - "fit fidelity: 0.984365187084024\n", |
| 254 | + "fit time: 0.1802959442138672\n", |
| 255 | + "fit fidelity (state): 0.9842194915019892\n", |
| 256 | + "fit fidelity (process): 0.9686880063880137\n", |
247 | 257 | "\n", |
248 | 258 | "CVXOPT Fitter\n", |
249 | | - "fit time: 1.1474080085754395\n", |
250 | | - "fit fidelity: 0.9998986962593072\n" |
| 259 | + "fit time: 1.1846849918365479\n", |
| 260 | + "fit fidelity (state): 0.9999324749848556\n", |
| 261 | + "fit fidelity (process): 0.9998649545043932\n" |
251 | 262 | ] |
252 | 263 | } |
253 | 264 | ], |
|
275 | 286 | "choi_lstsq = qpt_tomo.fit(method='lstsq')\n", |
276 | 287 | "print('Least-Sq Fitter')\n", |
277 | 288 | "print('fit time:', time.time() - t)\n", |
278 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 4, choi_lstsq.data / 4))\n", |
| 289 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 4, choi_lstsq.data / 4))\n", |
| 290 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_lstsq.data, require_cptp=False)))\n", |
279 | 291 | "\n", |
280 | 292 | "t = time.time()\n", |
281 | 293 | "choi_cvx = qpt_tomo.fit(method='cvx')\n", |
282 | 294 | "print('\\nCVXOPT Fitter')\n", |
283 | 295 | "print('fit time:', time.time() - t)\n", |
284 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 4, choi_cvx.data / 4))" |
| 296 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 4, choi_cvx.data / 4))\n", |
| 297 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_cvx.data, require_cptp=False)))" |
285 | 298 | ] |
286 | 299 | }, |
287 | 300 | { |
|
300 | 313 | "data": { |
301 | 314 | "text/plain": [ |
302 | 315 | "{(('S0',), ('X',)): {'0': 2000},\n", |
303 | | - " (('S0',), ('Y',)): {'0': 995, '1': 1005},\n", |
304 | | - " (('S0',), ('Z',)): {'0': 1027, '1': 973},\n", |
305 | | - " (('S1',), ('X',)): {'0': 682, '1': 1318},\n", |
306 | | - " (('S1',), ('Y',)): {'0': 1049, '1': 951},\n", |
307 | | - " (('S1',), ('Z',)): {'0': 1952, '1': 48},\n", |
308 | | - " (('S2',), ('X',)): {'0': 674, '1': 1326},\n", |
309 | | - " (('S2',), ('Y',)): {'0': 1832, '1': 168},\n", |
310 | | - " (('S2',), ('Z',)): {'0': 504, '1': 1496},\n", |
311 | | - " (('S3',), ('X',)): {'0': 683, '1': 1317},\n", |
312 | | - " (('S3',), ('Y',)): {'0': 182, '1': 1818},\n", |
313 | | - " (('S3',), ('Z',)): {'0': 512, '1': 1488}}" |
| 316 | + " (('S0',), ('Y',)): {'0': 999, '1': 1001},\n", |
| 317 | + " (('S0',), ('Z',)): {'0': 1013, '1': 987},\n", |
| 318 | + " (('S1',), ('X',)): {'0': 713, '1': 1287},\n", |
| 319 | + " (('S1',), ('Y',)): {'0': 977, '1': 1023},\n", |
| 320 | + " (('S1',), ('Z',)): {'0': 1938, '1': 62},\n", |
| 321 | + " (('S2',), ('X',)): {'0': 665, '1': 1335},\n", |
| 322 | + " (('S2',), ('Y',)): {'0': 1828, '1': 172},\n", |
| 323 | + " (('S2',), ('Z',)): {'0': 543, '1': 1457},\n", |
| 324 | + " (('S3',), ('X',)): {'0': 645, '1': 1355},\n", |
| 325 | + " (('S3',), ('Y',)): {'0': 206, '1': 1794},\n", |
| 326 | + " (('S3',), ('Z',)): {'0': 507, '1': 1493}}" |
314 | 327 | ] |
315 | 328 | }, |
316 | 329 | "execution_count": 7, |
|
349 | 362 | "output_type": "stream", |
350 | 363 | "text": [ |
351 | 364 | "Least-Sq Fitter\n", |
352 | | - "fit time: 0.008871316909790039\n", |
353 | | - "fit fidelity: 0.9969739538161556\n", |
| 365 | + "fit time: 0.007508039474487305\n", |
| 366 | + "fit fidelity (state): 0.9906085840000641\n", |
| 367 | + "fit fidelity (process): 0.9813053636480525\n", |
354 | 368 | "\n", |
355 | 369 | "CVXOPT Fitter\n", |
356 | | - "fit time: 0.0575709342956543\n", |
357 | | - "fit fidelity: 0.9995559180011946\n" |
| 370 | + "fit time: 0.04143118858337402\n", |
| 371 | + "fit fidelity (state): 0.9958380801102131\n", |
| 372 | + "fit fidelity (process): 0.9916934801256183\n" |
358 | 373 | ] |
359 | 374 | } |
360 | 375 | ], |
|
364 | 379 | "choi_lstsq = qpt_tomo.fit(method='lstsq')\n", |
365 | 380 | "print('Least-Sq Fitter')\n", |
366 | 381 | "print('fit time:', time.time() - t)\n", |
367 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 382 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_lstsq.data / 2))\n", |
| 383 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_lstsq.data, require_cptp=False)))\n", |
368 | 384 | "\n", |
369 | 385 | "# CVXOPT Semidefinite-Program tomographic reconstruction\n", |
370 | 386 | "t = time.time()\n", |
371 | 387 | "choi_cvx = qpt_tomo.fit(method='cvx')\n", |
372 | 388 | "\n", |
373 | 389 | "print('\\nCVXOPT Fitter')\n", |
374 | 390 | "print('fit time:', time.time() - t)\n", |
375 | | - "print('fit fidelity:', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))" |
| 391 | + "print('fit fidelity (state):', state_fidelity(choi_ideal / 2, choi_cvx.data / 2))\n", |
| 392 | + "print('fit fidelity (process):', np.real(process_fidelity(choi_ideal, choi_cvx.data, require_cptp=False)))" |
376 | 393 | ] |
377 | 394 | } |
378 | 395 | ], |
379 | 396 | "metadata": { |
380 | 397 | "kernelspec": { |
381 | | - "display_name": "Python 3", |
| 398 | + "display_name": "stable", |
382 | 399 | "language": "python", |
383 | | - "name": "python3" |
| 400 | + "name": "stable" |
384 | 401 | }, |
385 | 402 | "language_info": { |
386 | 403 | "codemirror_mode": { |
|
392 | 409 | "name": "python", |
393 | 410 | "nbconvert_exporter": "python", |
394 | 411 | "pygments_lexer": "ipython3", |
395 | | - "version": "3.6.8" |
| 412 | + "version": "3.7.0" |
396 | 413 | } |
397 | 414 | }, |
398 | 415 | "nbformat": 4, |
|
0 commit comments