#!/usr/bin/env python # coding: utf-8 # # Quantum Process Tomography # J.R. Johansson and P.D. Nation # # For more information about QuTiP see [http://qutip.org](http://qutip.org) # In[1]: import numpy as np from qutip import (about, qeye, qpt, qpt_plot_combined, sigmax, sigmay, sigmaz, spost, spre) from qutip_qip.operations import (cnot, fredkin, iswap, phasegate, snot, sqrtiswap, swap, toffoli) get_ipython().run_line_magic('matplotlib', 'inline') # In[2]: """ Plot the process tomography matrices for some 1, 2, and 3-qubit qubit gates. """ gates = [ ["C-NOT", cnot()], ["SWAP", swap()], ["$i$SWAP", iswap()], [r"$\sqrt{i\mathrm{SWAP}}$", sqrtiswap()], ["S-NOT", snot()], [r"$\pi/2$ phase gate", phasegate(np.pi / 2)], ["Toffoli", toffoli()], ["Fredkin", fredkin()], ] # In[3]: def plt_qpt_gate(gate, figsize=(8, 6)): name = gate[0] U_psi = gate[1] N = len(U_psi.dims[0]) # number of qubits # create a superoperator for the density matrix # transformation rho = U_psi * rho_0 * U_psi.dag() U_rho = spre(U_psi) * spost(U_psi.dag()) # operator basis for the process tomography op_basis = [[qeye(2), sigmax(), sigmay(), sigmaz()] for i in range(N)] # labels for operator basis op_label = [["$i$", "$x$", "$y$", "$z$"] for i in range(N)] # calculate the chi matrix chi = qpt(U_rho, op_basis) # visualize the chi matrix fig, ax = qpt_plot_combined(chi, op_label, name, figsize=figsize) ax.set_title(name) return fig, ax # In[4]: plt_qpt_gate(gates[0]); # In[5]: plt_qpt_gate(gates[1]); # In[6]: plt_qpt_gate(gates[2]); # In[7]: plt_qpt_gate(gates[3]); # In[8]: plt_qpt_gate(gates[4]); # In[9]: plt_qpt_gate(gates[5]); # In[10]: fig, ax = plt_qpt_gate(gates[6], figsize=(16, 12)) ax.axis("tight"); # In[11]: fig, ax = plt_qpt_gate(gates[7], figsize=(16, 12)) ax.axis("tight"); # ## Versions # In[12]: about()