def plot_state_hinton(rho, title='', figsize=None):
    """Plot a hinton diagram for the quanum state.

    Args:
        rho (ndarray): Numpy array for state vector or density matrix.
        title (str): a string that represents the plot title
        figsize (tuple): Figure size in inches.
    Returns:
         matplotlib.Figure: The matplotlib.Figure of the visualization

    Raises:
        ImportError: Requires matplotlib.
    """
    if not HAS_MATPLOTLIB:
        raise ImportError('Must have Matplotlib installed.')
    rho = _validate_input_state(rho)
    if figsize is None:
        figsize = (8, 5)
    num = int(np.log2(len(rho)))
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=figsize)
    max_weight = 2 ** np.ceil(np.log(np.abs(rho).max()) / np.log(2))
    datareal = np.real(rho)
    dataimag = np.imag(rho)
    column_names = [bin(i)[2:].zfill(num) for i in range(2**num)]
    row_names = [bin(i)[2:].zfill(num) for i in range(2**num)]
    lx = len(datareal[0])            # Work out matrix dimensions
    ly = len(datareal[:, 0])
    # Real
    ax1.patch.set_facecolor('gray')
    ax1.set_aspect('equal', 'box')
    ax1.xaxis.set_major_locator(plt.NullLocator())
    ax1.yaxis.set_major_locator(plt.NullLocator())

    for (x, y), w in np.ndenumerate(datareal):
        color = 'white' if w > 0 else 'black'
        size = np.sqrt(np.abs(w) / max_weight)
        rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
                             facecolor=color, edgecolor=color)
        ax1.add_patch(rect)

    ax1.set_xticks(np.arange(0, lx+0.5, 1))
    ax1.set_yticks(np.arange(0, ly+0.5, 1))
    ax1.set_yticklabels(row_names, fontsize=14)
    ax1.set_xticklabels(column_names, fontsize=14, rotation=90)
    ax1.autoscale_view()
    ax1.invert_yaxis()
    ax1.set_title('Real[rho]', fontsize=14)
    # Imaginary
    ax2.patch.set_facecolor('gray')
    ax2.set_aspect('equal', 'box')
    ax2.xaxis.set_major_locator(plt.NullLocator())
    ax2.yaxis.set_major_locator(plt.NullLocator())

    for (x, y), w in np.ndenumerate(dataimag):
        color = 'white' if w > 0 else 'black'
        size = np.sqrt(np.abs(w) / max_weight)
        rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
                             facecolor=color, edgecolor=color)
        ax2.add_patch(rect)
    if np.any(dataimag != 0):
        ax2.set_xticks(np.arange(0, lx+0.5, 1))
        ax2.set_yticks(np.arange(0, ly+0.5, 1))
        ax2.set_yticklabels(row_names, fontsize=14)
        ax2.set_xticklabels(column_names, fontsize=14, rotation=90)
    ax2.autoscale_view()
    ax2.invert_yaxis()
    ax2.set_title('Imag[rho]', fontsize=14)
    if title:
        fig.suptitle(title, fontsize=16)
    plt.tight_layout()
    plt.close(fig)
    return fig
def plot_state_hinton(rho, title='', figsize=None):
    """Plot a hinton diagram for the quanum state.

    Args:
        rho (ndarray): Numpy array for state vector or density matrix.
        title (str): a string that represents the plot title
        figsize (tuple): Figure size in inches.
    Returns:
         matplotlib.Figure: The matplotlib.Figure of the visualization

    Raises:
        ImportError: Requires matplotlib.
    """
    if not HAS_MATPLOTLIB:
        raise ImportError('Must have Matplotlib installed.')
    rho = _validate_input_state(rho)
    if figsize is None:
        figsize = (8, 5)
    num = int(np.log2(len(rho)))
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=figsize)
    max_weight = 2 ** np.ceil(np.log(np.abs(rho).max()) / np.log(2))
    datareal = np.real(rho)
    dataimag = np.imag(rho)
    column_names = [bin(i)[2:].zfill(num) for i in range(2**num)]
    row_names = [bin(i)[2:].zfill(num) for i in range(2**num)]
    lx = len(datareal[0])            # Work out matrix dimensions
    ly = len(datareal[:, 0])
    # Real
    ax1.patch.set_facecolor('gray')
    ax1.set_aspect('equal', 'box')
    ax1.xaxis.set_major_locator(plt.NullLocator())
    ax1.yaxis.set_major_locator(plt.NullLocator())

    for (x, y), w in np.ndenumerate(datareal):
        color = 'white' if w > 0 else 'black'
        size = np.sqrt(np.abs(w) / max_weight)
        rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
                             facecolor=color, edgecolor=color)
        ax1.add_patch(rect)

    ax1.set_xticks(np.arange(0, lx+0.5, 1))
    ax1.set_yticks(np.arange(0, ly+0.5, 1))
    ax1.set_yticklabels(row_names, fontsize=14)
    ax1.set_xticklabels(column_names, fontsize=14, rotation=90)
    ax1.autoscale_view()
    ax1.invert_yaxis()
    ax1.set_title('Real[rho]', fontsize=14)
    # Imaginary
    ax2.patch.set_facecolor('gray')
    ax2.set_aspect('equal', 'box')
    ax2.xaxis.set_major_locator(plt.NullLocator())
    ax2.yaxis.set_major_locator(plt.NullLocator())

    for (x, y), w in np.ndenumerate(dataimag):
        color = 'white' if w > 0 else 'black'
        size = np.sqrt(np.abs(w) / max_weight)
        rect = plt.Rectangle([x - size / 2, y - size / 2], size, size,
                             facecolor=color, edgecolor=color)
        ax2.add_patch(rect)
    if np.any(dataimag != 0):
        ax2.set_xticks(np.arange(0, lx+0.5, 1))
        ax2.set_yticks(np.arange(0, ly+0.5, 1))
        ax2.set_yticklabels(row_names, fontsize=14)
        ax2.set_xticklabels(column_names, fontsize=14, rotation=90)
    ax2.autoscale_view()
    ax2.invert_yaxis()
    ax2.set_title('Imag[rho]', fontsize=14)
    if title:
        fig.suptitle(title, fontsize=16)
    plt.tight_layout()
    plt.close(fig)
    return fig
def plot_state_hinton ( rho , title = '' , figsize = None ) : if not HAS_MATPLOTLIB : raise ImportError ( 'Must have Matplotlib installed.' ) rho = _validate_input_state ( rho ) if figsize is None : figsize = ( 8 , 5 ) num = int ( np . log2 ( len ( rho ) ) ) fig , ( ax1 , ax2 ) = plt . subplots ( 1 , 2 , figsize = figsize ) max_weight = 2 ** np . ceil ( np . log ( np . abs ( rho ) . max ( ) ) / np . log ( 2 ) ) datareal = np . real ( rho ) dataimag = np . imag ( rho ) column_names = [ bin ( i ) [ 2 : ] . zfill ( num ) for i in range ( 2 ** num ) ] row_names = [ bin ( i ) [ 2 : ] . zfill ( num ) for i in range ( 2 ** num ) ] lx = len ( datareal [ 0 ] ) # Work out matrix dimensions ly = len ( datareal [ : , 0 ] ) # Real ax1 . patch . set_facecolor ( 'gray' ) ax1 . set_aspect ( 'equal' , 'box' ) ax1 . xaxis . set_major_locator ( plt . NullLocator ( ) ) ax1 . yaxis . set_major_locator ( plt . NullLocator ( ) ) for ( x , y ) , w in np . ndenumerate ( datareal ) : color = 'white' if w > 0 else 'black' size = np . sqrt ( np . abs ( w ) / max_weight ) rect = plt . Rectangle ( [ x - size / 2 , y - size / 2 ] , size , size , facecolor = color , edgecolor = color ) ax1 . add_patch ( rect ) ax1 . set_xticks ( np . arange ( 0 , lx + 0.5 , 1 ) ) ax1 . set_yticks ( np . arange ( 0 , ly + 0.5 , 1 ) ) ax1 . set_yticklabels ( row_names , fontsize = 14 ) ax1 . set_xticklabels ( column_names , fontsize = 14 , rotation = 90 ) ax1 . autoscale_view ( ) ax1 . invert_yaxis ( ) ax1 . set_title ( 'Real[rho]' , fontsize = 14 ) # Imaginary ax2 . patch . set_facecolor ( 'gray' ) ax2 . set_aspect ( 'equal' , 'box' ) ax2 . xaxis . set_major_locator ( plt . NullLocator ( ) ) ax2 . yaxis . set_major_locator ( plt . NullLocator ( ) ) for ( x , y ) , w in np . ndenumerate ( dataimag ) : color = 'white' if w > 0 else 'black' size = np . sqrt ( np . abs ( w ) / max_weight ) rect = plt . Rectangle ( [ x - size / 2 , y - size / 2 ] , size , size , facecolor = color , edgecolor = color ) ax2 . add_patch ( rect ) if np . any ( dataimag != 0 ) : ax2 . set_xticks ( np . arange ( 0 , lx + 0.5 , 1 ) ) ax2 . set_yticks ( np . arange ( 0 , ly + 0.5 , 1 ) ) ax2 . set_yticklabels ( row_names , fontsize = 14 ) ax2 . set_xticklabels ( column_names , fontsize = 14 , rotation = 90 ) ax2 . autoscale_view ( ) ax2 . invert_yaxis ( ) ax2 . set_title ( 'Imag[rho]' , fontsize = 14 ) if title : fig . suptitle ( title , fontsize = 16 ) plt . tight_layout ( ) plt . close ( fig ) return fig
Plot a hinton diagram for the quanum state.

    Args:
        rho (ndarray): Numpy array for state vector or density matrix.
        title (str): a string that represents the plot title
        figsize (tuple): Figure size in inches.
    Returns:
         matplotlib.Figure: The matplotlib.Figure of the visualization

    Raises:
        ImportError: Requires matplotlib.
Plot a hinton diagram for the quanum state .