From 213580d2fbb2774ce1b5e0cb27b1b3795129f566 Mon Sep 17 00:00:00 2001 From: Jay Gambetta Date: Tue, 15 Aug 2023 11:50:34 -0400 Subject: [PATCH] Fixing the tools for plotting Pauli vec (#10619) * fixing the plot for pauli_vec to scaled to pm 1 * testing * linting * ref figure * Update docstring to define Paulivector * add reno --------- Co-authored-by: Julien Gacon --- qiskit/visualization/state_visualization.py | 15 +++-- ...ecplot-normalization-5dd3cf3393c75afb.yaml | 7 +++ .../visualization/test_state_plot_tools.py | 55 ++++++++++++++++++ test/visual/mpl/graph/references/paulivec.png | Bin 17568 -> 17133 bytes 4 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 releasenotes/notes/paulivecplot-normalization-5dd3cf3393c75afb.yaml create mode 100644 test/python/visualization/test_state_plot_tools.py diff --git a/qiskit/visualization/state_visualization.py b/qiskit/visualization/state_visualization.py index 3f9d85131817..25c6b8f3d2c0 100644 --- a/qiskit/visualization/state_visualization.py +++ b/qiskit/visualization/state_visualization.py @@ -627,14 +627,17 @@ def plot_state_city( def plot_state_paulivec( state, title="", figsize=None, color=None, ax=None, *, rho=None, filename=None ): - r"""Plot the paulivec representation of a quantum state. + r"""Plot the Pauli-vector representation of a quantum state as bar graph. - Plot a bargraph of the density matrix of a quantum state using as a basis all - possible tensor products of Pauli operators and identities, that is, - :math:`\{\bigotimes_{i=0}^{N-1}P_i\}_{P_i\in \{I,X,Y,Z\}}`, where - :math:`N` is the number of qubits. + The Pauli-vector of a density matrix :math:`\rho` is defined by the expectation of each + possible tensor product of single-qubit Pauli operators (including the identity), that is + .. math :: + \rho = \frac{1}{2^n} \sum_{\sigma \in \{I, X, Y, Z\}^{\otimes n}} + \mathrm{Tr}(\sigma \rho) \sigma. + + This function plots the coefficients :math:`\mathrm{Tr}(\sigma\rho)` as bar graph. Args: state (Statevector or DensityMatrix or ndarray): an N-qubit quantum state. @@ -1574,4 +1577,4 @@ def _paulivec_data(state): rho = SparsePauliOp.from_operator(DensityMatrix(state)) if rho.num_qubits is None: raise VisualizationError("Input is not a multi-qubit quantum state.") - return rho.paulis.to_labels(), np.real(rho.coeffs) + return rho.paulis.to_labels(), np.real(rho.coeffs * 2**rho.num_qubits) diff --git a/releasenotes/notes/paulivecplot-normalization-5dd3cf3393c75afb.yaml b/releasenotes/notes/paulivecplot-normalization-5dd3cf3393c75afb.yaml new file mode 100644 index 000000000000..a22e2a3abc56 --- /dev/null +++ b/releasenotes/notes/paulivecplot-normalization-5dd3cf3393c75afb.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed :func:`plot_state_paulivec`, which previously damped the state coefficients by a factor of + :math:`2^n`, where :math:`n` is the number of qubits. Now the bar graph correctly displays + the coefficients as :math:`\mathrm{Tr}(\sigma\rho)`, where :math:`\rho` is the state to + be plotted and :math:`\sigma` iterates over all possible tensor products of single-qubit Paulis. diff --git a/test/python/visualization/test_state_plot_tools.py b/test/python/visualization/test_state_plot_tools.py new file mode 100644 index 000000000000..028835980415 --- /dev/null +++ b/test/python/visualization/test_state_plot_tools.py @@ -0,0 +1,55 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2022. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +"""Tests for functions used in state visualization""" + +import unittest +import numpy as np + +from qiskit.quantum_info import Statevector +from qiskit.visualization.state_visualization import _paulivec_data +from qiskit.test import QiskitTestCase + + +class TestStatePlotTools(QiskitTestCase): + """State Plotting Tools""" + + def test_state_paulivec(self): + """Test paulivec.""" + + sv = Statevector.from_label("+-rl") + output = _paulivec_data(sv) + labels = [ + "IIII", + "IIIY", + "IIYI", + "IIYY", + "IXII", + "IXIY", + "IXYI", + "IXYY", + "XIII", + "XIIY", + "XIYI", + "XIYY", + "XXII", + "XXIY", + "XXYI", + "XXYY", + ] + values = [1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1] + self.assertEqual(output[0], labels) + self.assertTrue(np.allclose(output[1], values)) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/test/visual/mpl/graph/references/paulivec.png b/test/visual/mpl/graph/references/paulivec.png index 2abce570686bab596028e3a43dcbf92d3d9eacd3..813a387265b183b700cb17ebb961b41224a2f1a5 100644 GIT binary patch literal 17133 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 literal 17568 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 N^|1V*m;-13{9nV`Va@;m