visualization documentation edits and examples added (#3308)

This commit is contained in:
dennis-liu-1 2019-10-24 10:41:31 -04:00 committed by Luciano
parent f8a7520fa6
commit 77662d1e7a
12 changed files with 305 additions and 16 deletions

View File

@ -203,8 +203,8 @@ def circuit_drawer(circuit,
You must specify all the necessary values if using this. There is You must specify all the necessary values if using this. There is
no provision for passing an incomplete dict in. no provision for passing an incomplete dict in.
displaycolor (dict): The color codes to use for each circuit element. displaycolor (dict):
The default values are:: The color codes to use for each circuit element. The default values are::
{ {
'id': '#F0E442', 'id': '#F0E442',
@ -246,6 +246,18 @@ def circuit_drawer(circuit,
creglinestyle (str): The style of line to use for classical registers. creglinestyle (str): The style of line to use for classical registers.
Choices are `'solid'`, `'doublet'`, or any valid matplotlib Choices are `'solid'`, `'doublet'`, or any valid matplotlib
`linestyle` kwarg value. Defaults to `doublet` `linestyle` kwarg value. Defaults to `doublet`
Example:
.. jupyter-execute::
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit.tools.visualization import circuit_drawer
q = QuantumRegister(1)
c = ClassicalRegister(1)
qc = QuantumCircuit(q, c)
qc.h(q)
qc.measure(q, c)
circuit_drawer(qc)
""" """
image = None image = None
config = user_config.get_config() config = user_config.get_config()

View File

@ -75,7 +75,8 @@ def plot_histogram(data, figsize=(7, 5), color=None, number_to_keep=None,
will be no returned Figure since it is redundant. will be no returned Figure since it is redundant.
Returns: Returns:
matplotlib.Figure: A figure for the rendered histogram, if the ``ax`` matplotlib.Figure:
A figure for the rendered histogram, if the ``ax``
kwarg is not set. kwarg is not set.
Raises: Raises:
@ -97,7 +98,7 @@ def plot_histogram(data, figsize=(7, 5), color=None, number_to_keep=None,
backend = BasicAer.get_backend('qasm_simulator') backend = BasicAer.get_backend('qasm_simulator')
job = execute(qc, backend) job = execute(qc, backend)
plot_histogram(job.result().get_counts()) plot_histogram(job.result().get_counts(), color='midnightblue', title="New Histogram")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')

View File

@ -40,12 +40,31 @@ def dag_drawer(dag, scale=0.7, filename=None, style='color'):
'color' (default): color input/output/op nodes 'color' (default): color input/output/op nodes
Returns: Returns:
Ipython.display.Image: if in Jupyter notebook and not saving to file, Ipython.display.Image: if in Jupyter notebook and not saving to file,
otherwise None. otherwise None.
Raises: Raises:
VisualizationError: when style is not recognized. VisualizationError: when style is not recognized.
ImportError: when nxpd or pydot not installed. ImportError: when nxpd or pydot not installed.
Example:
.. code-block::
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit.dagcircuit import DAGCircuit
from qiskit.converters import circuit_to_dag
from qiskit.visualization import dag_drawer
q = QuantumRegister(3, 'q')
c = ClassicalRegister(3, 'c')
circ = QuantumCircuit(q, c)
circ.h(q[0])
circ.cx(q[0], q[1])
circ.measure(q[0], c[0])
circ.rz(0.5, q[1]).c_if(c, 2)
dag = circuit_to_dag(circ)
dag_drawer(dag)
""" """
try: try:
import nxpd import nxpd

View File

@ -100,6 +100,18 @@ def plot_gate_map(backend, figsize=None,
Raises: Raises:
QiskitError: if tried to pass a simulator. QiskitError: if tried to pass a simulator.
ImportError: if matplotlib not installed. ImportError: if matplotlib not installed.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute, IBMQ
from qiskit.visualization import plot_gate_map
%matplotlib inline
provider = IBMQ.load_account()
accountProvider = IBMQ.get_provider(hub='ibm-q')
backend = accountProvider.get_backend('ibmq_vigo')
plot_gate_map(backend)
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -269,6 +281,27 @@ def plot_circuit_layout(circuit, backend, view='virtual'):
Raises: Raises:
QiskitError: Invalid view type given. QiskitError: Invalid view type given.
VisualizationError: Circuit has no layout attribute. VisualizationError: Circuit has no layout attribute.
Example:
.. code-block::
import numpy as np
from qiskit import *
from qiskit.visualization import plot_histogram, plot_gate_map, plot_circuit_layout
from qiskit.tools.monitor import job_monitor
import matplotlib.pyplot as plt
%matplotlib inline
provider = IBMQ.get_provider(group='open')
ghz = QuantumCircuit(5, 5)
ghz.h(0)
for idx in range(1,5):
ghz.cx(0,idx)
ghz.barrier(range(5))
ghz.measure(range(5), range(5))
backend = provider.get_backend('ibmq_16_melbourne')
new_circ_lv0 = transpile(ghz, backend=backend, optimization_level=0)
plot_circuit_layout(new_circ_lv0, backend)
""" """
if circuit._layout is None: if circuit._layout is None:
raise QiskitError('Circuit has no layout. ' raise QiskitError('Circuit has no layout. '
@ -328,6 +361,17 @@ def plot_error_map(backend, figsize=(12, 9), show_title=True):
Raises: Raises:
VisualizationError: Input is not IBMQ backend. VisualizationError: Input is not IBMQ backend.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute, IBMQ
from qiskit.visualization import plot_error_map
%matplotlib inline
provider = IBMQ.load_account()
accountProvider = IBMQ.get_provider(hub='ibm-q')
backend = accountProvider.get_backend('ibmq_vigo')
plot_error_map(backend)
""" """
color_map = cm.viridis color_map = cm.viridis

View File

@ -38,6 +38,22 @@ def iplot_bloch_multivector(rho, figsize=None):
Args: Args:
rho (array): State vector or density matrix rho (array): State vector or density matrix
figsize (tuple): Figure size in pixels. figsize (tuple): Figure size in pixels.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_bloch_multivector
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
iplot_bloch_multivector(job.get_statevector(qc))
""" """
# HTML # HTML

View File

@ -35,6 +35,22 @@ def iplot_state_city(rho, figsize=None):
Args: Args:
rho (array): State vector or density matrix. rho (array): State vector or density matrix.
figsize (tuple): The figure size in pixels. figsize (tuple): The figure size in pixels.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_state_city
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
iplot_state_city(job.get_statevector(qc))
""" """
# HTML # HTML

View File

@ -36,6 +36,23 @@ def iplot_state_hinton(rho, figsize=None):
Args: Args:
rho (array): Density matrix rho (array): Density matrix
figsize (tuple): Figure size in pixels. figsize (tuple): Figure size in pixels.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_state_hinton
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
iplot_state_hinton(job.get_statevector(qc))
""" """
# HTML # HTML

View File

@ -73,9 +73,26 @@ def iplot_histogram(data, figsize=None, number_to_keep=None,
sort (string): Could be 'asc' or 'desc' sort (string): Could be 'asc' or 'desc'
legend (list): A list of strings to use for labels of the data. legend (list): A list of strings to use for labels of the data.
The number of entries must match the length of data. The number of entries must match the length of data.
Raises: Raises:
VisualizationError: When legend is provided and the length doesn't VisualizationError: When legend is provided and the length doesn't
match the input data. match the input data.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_histogram
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('qasm_simulator')
job = execute(qc, backend)
iplot_histogram(job.result().get_counts())
""" """
# HTML # HTML

View File

@ -53,6 +53,22 @@ def iplot_state_paulivec(rho, figsize=None, slider=False, show_legend=False):
figsize (tuple): Figure size in pixels. figsize (tuple): Figure size in pixels.
slider (bool): activate slider slider (bool): activate slider
show_legend (bool): show legend of graph content show_legend (bool): show legend of graph content
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_state_paulivec
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
iplot_state_paulivec(job.get_statevector(qc))
""" """
# HTML # HTML

View File

@ -44,6 +44,22 @@ def iplot_state_qsphere(rho, figsize=None):
Args: Args:
rho (array): State vector or density matrix. rho (array): State vector or density matrix.
figsize (tuple): Figure size in pixels. figsize (tuple): Figure size in pixels.
Example:
.. code-block::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import iplot_state_qsphere
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
iplot_state_qsphere(job.get_statevector(qc))
""" """
# HTML # HTML

View File

@ -58,6 +58,26 @@ def pass_manager_drawer(pass_manager, filename, style=None, raw=False):
Raises: Raises:
ImportError: when nxpd or pydot not installed. ImportError: when nxpd or pydot not installed.
VisualizationError: If raw=True and filename=None. VisualizationError: If raw=True and filename=None.
Example:
.. code-block::
from qiskit import QuantumCircuit
from qiskit.compiler import transpile
from qiskit.transpiler import PassManager
from qiskit.visualization import pass_manager_drawer
from qiskit.transpiler.passes import Unroller
circ = QuantumCircuit(3)
circ.ccx(0, 1, 2)
circ.draw()
pass_ = Unroller(['u1', 'u2', 'u3', 'cx'])
pm = PassManager(pass_)
new_circ = pm.run(circ)
new_circ.draw(output='mpl')
pass_manager_drawer(pm, "passmanager.jpg")
""" """
try: try:

View File

@ -59,7 +59,7 @@ if HAS_MATPLOTLIB:
def plot_state_hinton(rho, title='', figsize=None, ax_real=None, ax_imag=None): def plot_state_hinton(rho, title='', figsize=None, ax_real=None, ax_imag=None):
"""Plot a hinton diagram for the quanum state. """Plot a hinton diagram for the quantum state.
Args: Args:
rho (ndarray): Numpy array for state vector or density matrix. rho (ndarray): Numpy array for state vector or density matrix.
@ -79,11 +79,28 @@ def plot_state_hinton(rho, title='', figsize=None, ax_real=None, ax_imag=None):
it is redundant. it is redundant.
Returns: Returns:
matplotlib.Figure: The matplotlib.Figure of the visualization if matplotlib.Figure:
The matplotlib.Figure of the visualization if
neither ax_real or ax_imag is set. neither ax_real or ax_imag is set.
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
Example:
.. jupyter-execute::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import plot_state_hinton
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
plot_state_hinton(job.get_statevector(qc), title="New Hinton Plot")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -169,13 +186,21 @@ def plot_bloch_vector(bloch, title="", ax=None, figsize=None):
title (str): a string that represents the plot title title (str): a string that represents the plot title
ax (matplotlib.axes.Axes): An Axes to use for rendering the bloch ax (matplotlib.axes.Axes): An Axes to use for rendering the bloch
sphere sphere
figsize (tuple): Figure size in inches. Has no effect is passing `ax`. figsize (tuple): Figure size in inches. Has no effect is passing ``ax``.
Returns: Returns:
Figure: A matplotlib figure instance if `ax = None`. Figure: A matplotlib figure instance if ``ax = None``.
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
Example:
.. jupyter-execute::
from qiskit.visualization import plot_bloch_vector
%matplotlib inline
plot_bloch_vector([0,1,0], title="New Bloch Sphere")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -205,10 +230,27 @@ def plot_bloch_multivector(rho, title='', figsize=None):
figsize (tuple): Has no effect, here for compatibility only. figsize (tuple): Has no effect, here for compatibility only.
Returns: Returns:
Figure: A matplotlib figure instance. matplotlib.Figure:
A matplotlib figure instance.
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
Example:
.. jupyter-execute::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import plot_bloch_multivector
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
plot_bloch_multivector(job.get_statevector(qc), title="New Bloch Multivector")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -247,7 +289,7 @@ def plot_state_city(rho, title="", figsize=None, color=None,
title (str): a string that represents the plot title title (str): a string that represents the plot title
figsize (tuple): Figure size in inches. figsize (tuple): Figure size in inches.
color (list): A list of len=2 giving colors for real and color (list): A list of len=2 giving colors for real and
imaginary components of matrix elements. imaginary components of matrix elements.
alpha (float): Transparency value for bars alpha (float): Transparency value for bars
ax_real (matplotlib.axes.Axes): An optional Axes object to be used for ax_real (matplotlib.axes.Axes): An optional Axes object to be used for
the visualization output. If none is specified a new matplotlib the visualization output. If none is specified a new matplotlib
@ -263,12 +305,30 @@ def plot_state_city(rho, title="", figsize=None, color=None,
it is redundant. it is redundant.
Returns: Returns:
matplotlib.Figure: The matplotlib.Figure of the visualization if the matplotlib.Figure:
``ax_real`` and ``ax_imag`` kwargs are not set The matplotlib.Figure of the visualization if the
``ax_real`` and ``ax_imag`` kwargs are not set
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
ValueError: When 'color' is not a list of len=2. ValueError: When 'color' is not a list of len=2.
Example:
.. jupyter-execute::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import plot_state_city
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
plot_state_city(job.get_statevector(qc), color=['midnightblue', 'midnightblue'],
title="New State City")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -428,10 +488,29 @@ def plot_state_paulivec(rho, title="", figsize=None, color=None, ax=None):
will be no returned Figure since it is redundant. will be no returned Figure since it is redundant.
Returns: Returns:
matplotlib.Figure: The matplotlib.Figure of the visualization if the matplotlib.Figure:
``ax`` kwarg is not set The matplotlib.Figure of the visualization if the
``ax`` kwarg is not set
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
Example:
.. jupyter-execute::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import plot_state_paulivec
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
plot_state_paulivec(job.get_statevector(qc), color='midnightblue',
title="New PauliVec plot")
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')
@ -542,7 +621,7 @@ def plot_state_qsphere(rho, figsize=None, ax=None):
Args: Args:
rho (ndarray): State vector or density matrix representation. rho (ndarray): State vector or density matrix representation.
of quantum state. of quantum state.
figsize (tuple): Figure size in inches. figsize (tuple): Figure size in inches.
ax (matplotlib.axes.Axes): An optional Axes object to be used for ax (matplotlib.axes.Axes): An optional Axes object to be used for
the visualization output. If none is specified a new matplotlib the visualization output. If none is specified a new matplotlib
@ -554,6 +633,22 @@ def plot_state_qsphere(rho, figsize=None, ax=None):
Raises: Raises:
ImportError: Requires matplotlib. ImportError: Requires matplotlib.
Example:
.. jupyter-execute::
from qiskit import QuantumCircuit, BasicAer, execute
from qiskit.visualization import plot_state_qsphere
%matplotlib inline
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
backend = BasicAer.get_backend('statevector_simulator')
job = execute(qc, backend).result()
plot_state_qsphere(job.get_statevector(qc))
""" """
if not HAS_MATPLOTLIB: if not HAS_MATPLOTLIB:
raise ImportError('Must have Matplotlib installed.') raise ImportError('Must have Matplotlib installed.')