Quantum Information (qiskit.quantum_info
)#
Operators#
|
Matrix operator class |
|
N-qubit Pauli operator. |
|
An N-qubit unitary operator from the Clifford group. |
|
Scalar identity operator class. |
|
Sparse N-qubit operator in a Pauli basis representation. |
|
An N-qubit operator from the CNOT-Dihedral group. |
|
List of N-qubit Pauli operators. |
|
DEPRECATED: Symplectic representation of a list Pauli matrices. |
|
DEPRECATED: Symplectic representation of a list Stabilizer matrices. |
|
Return the ordered PauliTable or PauliList for the n-qubit Pauli basis. |
States#
|
Statevector class |
|
DensityMatrix class |
|
StabilizerState class. |
Channels#
|
Choi-matrix representation of a Quantum Channel. |
|
Superoperator representation of a quantum channel. |
|
Kraus representation of a quantum channel. |
|
Stinespring representation of a quantum channel. |
|
Pauli basis Chi-matrix representation of a quantum channel. |
|
Pauli Transfer Matrix (PTM) representation of a Quantum Channel. |
Measures#
- qiskit.quantum_info.average_gate_fidelity(channel, target=None, require_cp=True, require_tp=False)[source]#
Return the average gate fidelity of a noisy quantum channel.
The average gate fidelity \(F_{\text{ave}}\) is given by
\[\begin{split}F_{\text{ave}}(\mathcal{E}, U) &= \int d\psi \langle\psi|U^\dagger \mathcal{E}(|\psi\rangle\!\langle\psi|)U|\psi\rangle \\ &= \frac{d F_{\text{pro}}(\mathcal{E}, U) + 1}{d + 1}\end{split}\]where \(F_{\text{pro}}(\mathcal{E}, U)\) is the
process_fidelity()
of the input quantum channel \(\mathcal{E}\) with a target unitary \(U\), and \(d\) is the dimension of the channel.- Parameters:
channel (QuantumChannel or Operator) -- noisy quantum channel.
target (Operator or None) -- target unitary operator. If None target is the identity operator [Default: None].
require_cp (bool) -- check if input and target channels are completely-positive and if non-CP log warning containing negative eigenvalues of Choi-matrix [Default: True].
require_tp (bool) -- check if input and target channels are trace-preserving and if non-TP log warning containing negative eigenvalues of partial Choi-matrix \(Tr_{\mbox{out}}[\mathcal{E}] - I\) [Default: True].
- Returns:
The average gate fidelity \(F_{\text{ave}}\).
- Return type:
- Raises:
QiskitError -- if the channel and target do not have the same dimensions, or have different input and output dimensions.
- qiskit.quantum_info.process_fidelity(channel, target=None, require_cp=True, require_tp=True)[source]#
Return the process fidelity of a noisy quantum channel.
The process fidelity \(F_{\text{pro}}(\mathcal{E}, \mathcal{F})\) between two quantum channels \(\mathcal{E}, \mathcal{F}\) is given by
\[F_{\text{pro}}(\mathcal{E}, \mathcal{F}) = F(\rho_{\mathcal{E}}, \rho_{\mathcal{F}})\]where \(F\) is the
state_fidelity()
, \(\rho_{\mathcal{E}} = \Lambda_{\mathcal{E}} / d\) is the normalizedChoi
matrix for the channel \(\mathcal{E}\), and \(d\) is the input dimension of \(\mathcal{E}\).When the target channel is unitary this is equivalent to
\[F_{\text{pro}}(\mathcal{E}, U) = \frac{Tr[S_U^\dagger S_{\mathcal{E}}]}{d^2}\]where \(S_{\mathcal{E}}, S_{U}\) are the
SuperOp
matrices for the input quantum channel \(\mathcal{E}\) and target unitary \(U\) respectively, and \(d\) is the input dimension of the channel.- Parameters:
channel (Operator or QuantumChannel) -- input quantum channel.
target (Operator or QuantumChannel or None) -- target quantum channel. If None target is the identity operator [Default: None].
require_cp (bool) -- check if input and target channels are completely-positive and if non-CP log warning containing negative eigenvalues of Choi-matrix [Default: True].
require_tp (bool) -- check if input and target channels are trace-preserving and if non-TP log warning containing negative eigenvalues of partial Choi-matrix \(Tr_{\mbox{out}}[\mathcal{E}] - I\) [Default: True].
- Returns:
The process fidelity \(F_{\text{pro}}\).
- Return type:
- Raises:
QiskitError -- if the channel and target do not have the same dimensions.
- qiskit.quantum_info.gate_error(channel, target=None, require_cp=True, require_tp=False)[source]#
Return the gate error of a noisy quantum channel.
The gate error \(E\) is given by the average gate infidelity
\[E(\mathcal{E}, U) = 1 - F_{\text{ave}}(\mathcal{E}, U)\]where \(F_{\text{ave}}(\mathcal{E}, U)\) is the
average_gate_fidelity()
of the input quantum channel \(\mathcal{E}\) with a target unitary \(U\).- Parameters:
channel (QuantumChannel) -- noisy quantum channel.
target (Operator or None) -- target unitary operator. If None target is the identity operator [Default: None].
require_cp (bool) -- check if input and target channels are completely-positive and if non-CP log warning containing negative eigenvalues of Choi-matrix [Default: True].
require_tp (bool) -- check if input and target channels are trace-preserving and if non-TP log warning containing negative eigenvalues of partial Choi-matrix \(Tr_{\mbox{out}}[\mathcal{E}] - I\) [Default: True].
- Returns:
The average gate error \(E\).
- Return type:
- Raises:
QiskitError -- if the channel and target do not have the same dimensions, or have different input and output dimensions.
- qiskit.quantum_info.diamond_norm(choi, solver='SCS', **kwargs)[source]#
Return the diamond norm of the input quantum channel object.
This function computes the completely-bounded trace-norm (often referred to as the diamond-norm) of the input quantum channel object using the semidefinite-program from reference [1].
- Parameters:
- Returns:
The completely-bounded trace norm \(\|\mathcal{E}\|_{\diamond}\).
- Return type:
- Raises:
QiskitError -- if CVXPY package cannot be found.
- Additional Information:
The input to this function is typically not a CPTP quantum channel, but rather the difference between two quantum channels \(\|\Delta\mathcal{E}\|_\diamond\) where \(\Delta\mathcal{E} = \mathcal{E}_1 - \mathcal{E}_2\).
- Reference:
J. Watrous. "Simpler semidefinite programs for completely bounded norms", arXiv:1207.5726 [quant-ph] (2012).
Note
This function requires the optional CVXPY package to be installed. Any additional kwargs will be passed to the
cvxpy.solve
function. See the CVXPY documentation for information on available SDP solvers.
- qiskit.quantum_info.state_fidelity(state1, state2, validate=True)[source]#
Return the state fidelity between two quantum states.
The state fidelity \(F\) for density matrix input states \(\rho_1, \rho_2\) is given by
\[F(\rho_1, \rho_2) = Tr[\sqrt{\sqrt{\rho_1}\rho_2\sqrt{\rho_1}}]^2.\]If one of the states is a pure state this simplifies to \(F(\rho_1, \rho_2) = \langle\psi_1|\rho_2|\psi_1\rangle\), where \(\rho_1 = |\psi_1\rangle\!\langle\psi_1|\).
- Parameters:
state1 (Statevector or DensityMatrix) -- the first quantum state.
state2 (Statevector or DensityMatrix) -- the second quantum state.
validate (bool) -- check if the inputs are valid quantum states [Default: True]
- Returns:
The state fidelity \(F(\rho_1, \rho_2)\).
- Return type:
- Raises:
QiskitError -- if
validate=True
and the inputs are invalid quantum states.
- qiskit.quantum_info.purity(state, validate=True)[source]#
Calculate the purity of a quantum state.
The purity of a density matrix \(\rho\) is
\[\text{Purity}(\rho) = Tr[\rho^2]\]- Parameters:
state (Statevector or DensityMatrix) -- a quantum state.
validate (bool) -- check if input state is valid [Default: True]
- Returns:
the purity \(Tr[\rho^2]\).
- Return type:
- Raises:
QiskitError -- if the input isn't a valid quantum state.
- qiskit.quantum_info.concurrence(state)[source]#
Calculate the concurrence of a quantum state.
The concurrence of a bipartite
Statevector
\(|\psi\rangle\) is given by\[C(|\psi\rangle) = \sqrt{2(1 - Tr[\rho_0^2])}\]where \(\rho_0 = Tr_1[|\psi\rangle\!\langle\psi|]\) is the reduced state from by taking the
partial_trace()
of the input state.For density matrices the concurrence is only defined for 2-qubit states, it is given by:
\[C(\rho) = \max(0, \lambda_1 - \lambda_2 - \lambda_3 - \lambda_4)\]where \(\lambda _1 \ge \lambda _2 \ge \lambda _3 \ge \lambda _4\) are the ordered eigenvalues of the matrix \(R=\sqrt{\sqrt{\rho }(Y\otimes Y)\overline{\rho}(Y\otimes Y)\sqrt{\rho}}\).
- Parameters:
state (Statevector or DensityMatrix) -- a 2-qubit quantum state.
- Returns:
The concurrence.
- Return type:
- Raises:
QiskitError -- if the input state is not a valid QuantumState.
QiskitError -- if input is not a bipartite QuantumState.
QiskitError -- if density matrix input is not a 2-qubit state.
- qiskit.quantum_info.entropy(state, base=2)[source]#
Calculate the von-Neumann entropy of a quantum state.
The entropy \(S\) is given by
\[S(\rho) = - Tr[\rho \log(\rho)]\]- Parameters:
state (Statevector or DensityMatrix) -- a quantum state.
base (int) -- the base of the logarithm [Default: 2].
- Returns:
The von-Neumann entropy S(rho).
- Return type:
- Raises:
QiskitError -- if the input state is not a valid QuantumState.
- qiskit.quantum_info.entanglement_of_formation(state)[source]#
Calculate the entanglement of formation of quantum state.
The input quantum state must be either a bipartite state vector, or a 2-qubit density matrix.
- Parameters:
state (Statevector or DensityMatrix) -- a 2-qubit quantum state.
- Returns:
The entanglement of formation.
- Return type:
- Raises:
QiskitError -- if the input state is not a valid QuantumState.
QiskitError -- if input is not a bipartite QuantumState.
QiskitError -- if density matrix input is not a 2-qubit state.
- qiskit.quantum_info.mutual_information(state, base=2)[source]#
Calculate the mutual information of a bipartite state.
The mutual information \(I\) is given by:
\[I(\rho_{AB}) = S(\rho_A) + S(\rho_B) - S(\rho_{AB})\]where \(\rho_A=Tr_B[\rho_{AB}], \rho_B=Tr_A[\rho_{AB}]\), are the reduced density matrices of the bipartite state \(\rho_{AB}\).
- Parameters:
state (Statevector or DensityMatrix) -- a bipartite state.
base (int) -- the base of the logarithm [Default: 2].
- Returns:
The mutual information \(I(\rho_{AB})\).
- Return type:
- Raises:
QiskitError -- if the input state is not a valid QuantumState.
QiskitError -- if input is not a bipartite QuantumState.
Utility Functions#
- qiskit.quantum_info.negativity(state, qargs)[source]#
Calculates the negativity.
The mathematical expression for negativity is given by:
\[{\cal{N}}(\rho) = \frac{|| \rho^{T_A}|| - 1 }{2}\]- Parameters:
state (Statevector or DensityMatrix) -- a quantum state.
qargs (list) -- The subsystems to be transposed.
- Returns:
Negativity value of the quantum state
- Return type:
- Raises:
QiskitError -- if the input state is not a valid QuantumState.
- qiskit.quantum_info.partial_trace(state, qargs)[source]#
Return reduced density matrix by tracing out part of quantum state.
If all subsystems are traced over this returns the
trace()
of the input state.- Parameters:
state (Statevector or DensityMatrix) -- the input state.
qargs (list) -- The subsystems to trace over.
- Returns:
The reduced density matrix.
- Return type:
- Raises:
QiskitError -- if input state is invalid.
- qiskit.quantum_info.schmidt_decomposition(state, qargs)[source]#
Return the Schmidt Decomposition of a pure quantum state.
For an arbitrary bipartite state:
\[|\psi\rangle_{AB} = \sum_{i,j} c_{ij} |x_i\rangle_A \otimes |y_j\rangle_B,\]its Schmidt Decomposition is given by the single-index sum over k:
\[|\psi\rangle_{AB} = \sum_{k} \lambda_{k} |u_k\rangle_A \otimes |v_k\rangle_B\]where \(|u_k\rangle_A\) and \(|v_k\rangle_B\) are an orthonormal set of vectors in their respective spaces \(A\) and \(B\), and the Schmidt coefficients \(\lambda_k\) are positive real values.
- Parameters:
state (Statevector or DensityMatrix) -- the input state.
qargs (list) -- the list of Input state positions corresponding to subsystem \(B\).
- Returns:
list of tuples
(s, u, v)
, wheres
(float) are the Schmidt coefficients \(\lambda_k\), andu
(Statevector),v
(Statevector) are the Schmidt vectors \(|u_k\rangle_A\), \(|u_k\rangle_B\), respectively.- Return type:
- Raises:
QiskitError -- if Input qargs is not a list of positions of the Input state.
QiskitError -- if Input qargs is not a proper subset of Input state.
Note
In Qiskit, qubits are ordered using little-endian notation, with the least significant qubits having smaller indices. For example, a four-qubit system is represented as \(|q_3q_2q_1q_0\rangle\). Using this convention, setting
qargs=[0]
will partition the state as \(|q_3q_2q_1\rangle_A\otimes|q_0\rangle_B\). Furthermore, qubits will be organized in this notation regardless of the order they are passed. For instance, passing eitherqargs=[1,2]
orqargs=[2,1]
will result in partitioning the state as \(|q_3q_0\rangle_A\otimes|q_2q_1\rangle_B\).
- qiskit.quantum_info.shannon_entropy(pvec, base=2)[source]#
Compute the Shannon entropy of a probability vector.
The shannon entropy of a probability vector \(\vec{p} = [p_0, ..., p_{n-1}]\) is defined as
\[H(\vec{p}) = \sum_{i=0}^{n-1} p_i \log_b(p_i)\]where \(b\) is the log base and (default 2), and \(0 \log_b(0) \equiv 0\).
- qiskit.quantum_info.commutator(a, b)[source]#
Compute commutator of a and b.
\[ab - ba.\]- Parameters:
a (OperatorTypeT) -- Operator a.
b (OperatorTypeT) -- Operator b.
- Returns:
The commutator
- Return type:
OperatorTypeT
- qiskit.quantum_info.anti_commutator(a, b)[source]#
Compute anti-commutator of a and b.
\[ab + ba.\]- Parameters:
a (OperatorTypeT) -- Operator a.
b (OperatorTypeT) -- Operator b.
- Returns:
The anti-commutator
- Return type:
OperatorTypeT
- qiskit.quantum_info.double_commutator(a, b, c, *, commutator=True)[source]#
Compute symmetric double commutator of a, b and c.
See also Equation (13.6.18) in [1].
If commutator is True, it returns
\[[[A, B], C]/2 + [A, [B, C]]/2 = (2ABC + 2CBA - BAC - CAB - ACB - BCA)/2.\]If commutator is False, it returns
\[\lbrace[A, B], C\rbrace/2 + \lbrace A, [B, C]\rbrace/2 = (2ABC - 2CBA - BAC + CAB - ACB + BCA)/2.\]- Parameters:
a (OperatorTypeT) -- Operator a.
b (OperatorTypeT) -- Operator b.
c (OperatorTypeT) -- Operator c.
commutator (bool) -- If
True
compute the double commutator, ifFalse
the double anti-commutator.
- Returns:
The double commutator
- Return type:
OperatorTypeT
References
- [1]: R. McWeeny.
Methods of Molecular Quantum Mechanics. 2nd Edition, Academic Press, 1992. ISBN 0-12-486552-6.
Random#
- qiskit.quantum_info.random_statevector(dims, seed=None)[source]#
Generator a random Statevector.
The statevector is sampled from the uniform (Haar) measure.
- Parameters:
- Returns:
the random statevector.
- Return type:
- qiskit.quantum_info.random_density_matrix(dims, rank=None, method='Hilbert-Schmidt', seed=None)[source]#
Generator a random DensityMatrix.
- Parameters:
rank (int or None) -- Optional, the rank of the density matrix. The default value is full-rank.
method (string) -- Optional. The method to use. 'Hilbert-Schmidt': (Default) sample from the Hilbert-Schmidt metric. 'Bures': sample from the Bures metric.
seed (int or np.random.Generator) -- Optional. Set a fixed seed or generator for RNG.
- Returns:
the random density matrix.
- Return type:
- Raises:
QiskitError -- if the method is not valid.
- qiskit.quantum_info.random_unitary(dims, seed=None)[source]#
Return a random unitary Operator.
The operator is sampled from the unitary Haar measure.
- qiskit.quantum_info.random_hermitian(dims, traceless=False, seed=None)[source]#
Return a random hermitian Operator.
The operator is sampled from Gaussian Unitary Ensemble.
- Parameters:
- Returns:
a Hermitian operator.
- Return type:
- qiskit.quantum_info.random_pauli(num_qubits, group_phase=False, seed=None)[source]#
Return a random Pauli.
- Parameters:
- Returns:
a random Pauli
- Return type:
- qiskit.quantum_info.random_clifford(num_qubits, seed=None)[source]#
Return a random Clifford operator.
The Clifford is sampled using the method of Reference [1].
- Parameters:
- Returns:
a random Clifford operator.
- Return type:
- Reference:
S. Bravyi and D. Maslov, Hadamard-free circuits expose the structure of the Clifford group. arXiv:2003.09412 [quant-ph]
- qiskit.quantum_info.random_quantum_channel(input_dims=None, output_dims=None, rank=None, seed=None)[source]#
Return a random CPTP quantum channel.
This constructs the Stinespring operator for the quantum channel by sampling a random isometry from the unitary Haar measure.
- Parameters:
- Returns:
a quantum channel operator.
- Return type:
- Raises:
QiskitError -- if rank or dimensions are invalid.
- qiskit.quantum_info.random_cnotdihedral(num_qubits, seed=None)[source]#
Return a random CNOTDihedral element.
- Parameters:
- Returns:
a random CNOTDihedral element.
- Return type:
- qiskit.quantum_info.random_pauli_table(num_qubits, size=1, seed=None)[source]#
Return a random PauliTable.
- Parameters:
- Returns:
a random PauliTable.
- Return type:
- qiskit.quantum_info.random_pauli_list(num_qubits, size=1, seed=None, phase=True)[source]#
Return a random PauliList.
- Parameters:
num_qubits (int) -- the number of qubits.
size (int) -- Optional. The length of the Pauli list (Default: 1).
seed (int or np.random.Generator) -- Optional. Set a fixed seed or generator for RNG.
phase (bool) -- If True the Pauli phases are randomized, otherwise the phases are fixed to 0. [Default: True]
- Returns:
a random PauliList.
- Return type:
- qiskit.quantum_info.random_stabilizer_table(num_qubits, size=1, seed=None)[source]#
DEPRECATED: Return a random StabilizerTable.
Deprecated since version 0.22.0: The function
qiskit.quantum_info.operators.symplectic.random.random_stabilizer_table()
is deprecated as of qiskit-terra 0.22.0. It will be removed no earlier than 3 months after the release date. Instead, use the functionrandom_pauli_list
.- Parameters:
- Returns:
a random StabilizerTable.
- Return type:
Analysis#
- qiskit.quantum_info.hellinger_distance(dist_p, dist_q)[source]#
Computes the Hellinger distance between two counts distributions.
- Parameters:
- Returns:
Distance
- Return type:
References
- qiskit.quantum_info.hellinger_fidelity(dist_p, dist_q)[source]#
Computes the Hellinger fidelity between two counts distributions.
The fidelity is defined as \(\left(1-H^{2}\right)^{2}\) where H is the Hellinger distance. This value is bounded in the range [0, 1].
This is equivalent to the standard classical fidelity \(F(Q,P)=\left(\sum_{i}\sqrt{p_{i}q_{i}}\right)^{2}\) that in turn is equal to the quantum state fidelity for diagonal density matrices.
- Parameters:
- Returns:
Fidelity
- Return type:
Example
from qiskit import QuantumCircuit, execute, BasicAer from qiskit.quantum_info.analysis import hellinger_fidelity qc = QuantumCircuit(5, 5) qc.h(2) qc.cx(2, 1) qc.cx(2, 3) qc.cx(3, 4) qc.cx(1, 0) qc.measure(range(5), range(5)) sim = BasicAer.get_backend('qasm_simulator') res1 = execute(qc, sim).result() res2 = execute(qc, sim).result() hellinger_fidelity(res1.get_counts(), res2.get_counts())
References
|
The $Z_2$ symmetry converter identifies symmetries from the problem hamiltonian and uses them to provide a tapered - more efficient - representation of operators as Paulis for this problem. |
Synthesis#
|
A class for decomposing 1-qubit unitaries into Euler angle rotations. |
|
A class for decomposing 2-qubit unitaries into minimal number of uses of a 2-qubit basis gate. |
|
A class representing a Quaternion. |
|
A class for optimal decomposition of 2-qubit unitaries into 2-qubit basis gates of XX type (i.e., each locally equivalent to CAN(alpha, 0, 0) for a possibly varying alpha). |
- qiskit.quantum_info.two_qubit_cnot_decompose(*args, **kwargs)#
- Return type:
- qiskit.quantum_info.decompose_clifford(clifford, method=None)[source]#
DEPRECATED: Decompose a Clifford operator into a QuantumCircuit.
For N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 qubits this is done using the general non-optimal greedy compilation routine from reference [3], which typically yields better CX cost compared to the AG method in [2].
Deprecated since version 0.23.0: The function
qiskit.quantum_info.synthesis.clifford_decompose.decompose_clifford()
is deprecated as of qiskit-terra 0.23.0. It will be removed no earlier than 3 months after the release date. Instead, use the function qiskit.synthesis.synth_clifford_full.- Parameters:
- Returns:
a circuit implementation of the Clifford.
- Return type:
References
S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
Sergey Bravyi, Shaohan Hu, Dmitri Maslov, Ruslan Shaydulin, Clifford Circuit Optimization with Templates and Symbolic Pauli Gates, arXiv:2105.02291 [quant-ph]