def qpt_plot(chi, lbls_list, title=None, fig=None, axes=None): """ Visualize the quantum process tomography chi matrix. Plot the real and imaginary parts separately. Parameters ---------- chi : array Input QPT chi matrix. lbls_list : list List of labels for QPT plot axes. title : string Plot title. fig : figure instance User defined figure instance used for generating QPT plot. axes : list of figure axis instance User defined figure axis instance (list of two axes) used for generating QPT plot. Returns ------- fig, ax : tuple A tuple of the matplotlib figure and axes instances used to produce the figure. """ if axes is None or len(axes) != 2: if fig is None: fig = plt.figure(figsize=(16, 8)) ax1 = fig.add_subplot(1, 2, 1, projection='3d', position=[0, 0, 1, 1]) ax2 = fig.add_subplot(1, 2, 2, projection='3d', position=[0, 0, 1, 1]) axes = [ax1, ax2] xlabels = [] for inds in _index_permutations([len(lbls) for lbls in lbls_list]): xlabels.append("".join( [lbls_list[k][inds[k]] for k in range(len(lbls_list))])) matrix_histogram(real(chi), xlabels, xlabels, title=r"real($\chi$)", limits=[-1, 1], ax=axes[0]) matrix_histogram(imag(chi), xlabels, xlabels, title=r"imag($\chi$)", limits=[-1, 1], ax=axes[1]) if title and fig: fig.suptitle(title) return fig, axes
def qpt_plot(chi, lbls_list, title=None, fig=None, axes=None): """ Visualize the quantum process tomography chi matrix. Plot the real and imaginary parts separately. Parameters ---------- chi : array Input QPT chi matrix. lbls_list : list List of labels for QPT plot axes. title : string Plot title. fig : figure instance User defined figure instance used for generating QPT plot. axes : list of figure axis instance User defined figure axis instance (list of two axes) used for generating QPT plot. Returns ------- fig, ax : tuple A tuple of the matplotlib figure and axes instances used to produce the figure. """ if axes is None or len(axes) != 2: if fig is None: fig = plt.figure(figsize=(16, 8)) ax1 = fig.add_subplot(1, 2, 1, projection='3d', position=[0, 0, 1, 1]) ax2 = fig.add_subplot(1, 2, 2, projection='3d', position=[0, 0, 1, 1]) axes = [ax1, ax2] xlabels = [] for inds in _index_permutations([len(lbls) for lbls in lbls_list]): xlabels.append("".join([lbls_list[k][inds[k]] for k in range(len(lbls_list))])) matrix_histogram(real(chi), xlabels, xlabels, title=r"real($\chi$)", limits=[-1, 1], ax=axes[0]) matrix_histogram(imag(chi), xlabels, xlabels, title=r"imag($\chi$)", limits=[-1, 1], ax=axes[1]) if title and fig: fig.suptitle(title) return fig, axes
def dmat_hist(rho, obj='all', ind=None, im=False): """Plots 3D histogram of specified density matrix. Parameters: ----------- rho: qutip.Result.states density matrices per time instant obj: int Index of desired object in quantum system ind: int Index of specific density matrix to plot when rho is of qutip.Result.states format im: boolean Include imaginary part """ if isinstance(rho, list): dm = rho[ind] else: dm = rho if obj != 'all': if not isinstance(obj, int): raise ValueError("Give integer value for 'obj'") dm = dm.ptrace(obj) if obj == 0: title = "Histogram of density matrix of qubit" elif (isinstance(obj, int) and obj > 0): title = "Histogram of density matrix of cavity {}".format(obj) elif obj == 'all': title = "Histogram of density matrix of total system" if im: matrix_histogram_complex(dm.full(), title=title) else: matrix_histogram(dm.full().real, title=title)