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)[código fonte]#
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.- Parâmetros:
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].
- Retorno:
The average gate fidelity \(F_{\text{ave}}\).
- Tipo de retorno:
- Levanta:
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)[código fonte]#
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.- Parâmetros:
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].
- Retorno:
The process fidelity \(F_{\text{pro}}\).
- Tipo de retorno:
- Levanta:
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)[código fonte]#
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\).- Parâmetros:
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].
- Retorno:
The average gate error \(E\).
- Tipo de retorno:
- Levanta:
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)[código fonte]#
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].
- Parâmetros:
- Retorno:
The completely-bounded trace norm \(\|\mathcal{E}\|_{\diamond}\).
- Tipo de retorno:
- Levanta:
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).
Nota
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)[código fonte]#
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|\).
- Parâmetros:
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]
- Retorno:
The state fidelity \(F(\rho_1, \rho_2)\).
- Tipo de retorno:
- Levanta:
QiskitError – if
validate=True
and the inputs are invalid quantum states.
- qiskit.quantum_info.purity(state, validate=True)[código fonte]#
Calculate the purity of a quantum state.
The purity of a density matrix \(\rho\) is
\[\text{Purity}(\rho) = Tr[\rho^2]\]- Parâmetros:
state (Statevector or DensityMatrix) – a quantum state.
validate (bool) – check if input state is valid [Default: True]
- Retorno:
the purity \(Tr[\rho^2]\).
- Tipo de retorno:
- Levanta:
QiskitError – if the input isn’t a valid quantum state.
- qiskit.quantum_info.concurrence(state)[código fonte]#
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}}\).
- Parâmetros:
state (Statevector or DensityMatrix) – a 2-qubit quantum state.
- Retorno:
The concurrence.
- Tipo de retorno:
- Levanta:
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)[código fonte]#
Calculate the von-Neumann entropy of a quantum state.
The entropy \(S\) is given by
\[S(\rho) = - Tr[\rho \log(\rho)]\]- Parâmetros:
state (Statevector or DensityMatrix) – a quantum state.
base (int) – the base of the logarithm [Default: 2].
- Retorno:
The von-Neumann entropy S(rho).
- Tipo de retorno:
- Levanta:
QiskitError – if the input state is not a valid QuantumState.
- qiskit.quantum_info.entanglement_of_formation(state)[código fonte]#
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.
- Parâmetros:
state (Statevector or DensityMatrix) – a 2-qubit quantum state.
- Retorno:
The entanglement of formation.
- Tipo de retorno:
- Levanta:
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)[código fonte]#
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}\).
- Parâmetros:
state (Statevector or DensityMatrix) – a bipartite state.
base (int) – the base of the logarithm [Default: 2].
- Retorno:
The mutual information \(I(\rho_{AB})\).
- Tipo de retorno:
- Levanta:
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)[código fonte]#
Calculates the negativity.
The mathematical expression for negativity is given by:
\[{\cal{N}}(\rho) = \frac{|| \rho^{T_A}|| - 1 }{2}\]- Parâmetros:
state (Statevector or DensityMatrix) – a quantum state.
qargs (list) – The subsystems to be transposed.
- Retorno:
Negativity value of the quantum state
- Tipo de retorno:
- Levanta:
QiskitError – if the input state is not a valid QuantumState.
- qiskit.quantum_info.partial_trace(state, qargs)[código fonte]#
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.- Parâmetros:
state (Statevector or DensityMatrix) – the input state.
qargs (list) – The subsystems to trace over.
- Retorno:
The reduced density matrix.
- Tipo de retorno:
- Levanta:
QiskitError – if input state is invalid.
- qiskit.quantum_info.schmidt_decomposition(state, qargs)[código fonte]#
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.
- Parâmetros:
state (Statevector or DensityMatrix) – the input state.
qargs (list) – the list of Input state positions corresponding to subsystem \(B\).
- Retorno:
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.- Tipo de retorno:
- Levanta:
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.
Nota
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)[código fonte]#
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)[código fonte]#
Compute commutator of a and b.
\[ab - ba.\]- Parâmetros:
a (OperatorTypeT) – Operator a.
b (OperatorTypeT) – Operator b.
- Retorno:
The commutator
- Tipo de retorno:
OperatorTypeT
- qiskit.quantum_info.anti_commutator(a, b)[código fonte]#
Compute anti-commutator of a and b.
\[ab + ba.\]- Parâmetros:
a (OperatorTypeT) – Operator a.
b (OperatorTypeT) – Operator b.
- Retorno:
The anti-commutator
- Tipo de retorno:
OperatorTypeT
- qiskit.quantum_info.double_commutator(a, b, c, *, commutator=True)[código fonte]#
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.\]- Parâmetros:
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.
- Retorno:
The double commutator
- Tipo de retorno:
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)[código fonte]#
Generator a random Statevector.
The statevector is sampled from the uniform (Haar) measure.
- Parâmetros:
- Retorno:
the random statevector.
- Tipo de retorno:
- qiskit.quantum_info.random_density_matrix(dims, rank=None, method='Hilbert-Schmidt', seed=None)[código fonte]#
Generator a random DensityMatrix.
- Parâmetros:
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.
- Retorno:
the random density matrix.
- Tipo de retorno:
- Levanta:
QiskitError – if the method is not valid.
- qiskit.quantum_info.random_unitary(dims, seed=None)[código fonte]#
Return a random unitary Operator.
The operator is sampled from the unitary Haar measure.
- qiskit.quantum_info.random_hermitian(dims, traceless=False, seed=None)[código fonte]#
Return a random hermitian Operator.
The operator is sampled from Gaussian Unitary Ensemble.
- Parâmetros:
- Retorno:
a Hermitian operator.
- Tipo de retorno:
- qiskit.quantum_info.random_pauli(num_qubits, group_phase=False, seed=None)[código fonte]#
Return a random Pauli.
- Parâmetros:
- Retorno:
a random Pauli
- Tipo de retorno:
- qiskit.quantum_info.random_clifford(num_qubits, seed=None)[código fonte]#
Return a random Clifford operator.
The Clifford is sampled using the method of Reference [1].
- Parâmetros:
- Retorno:
a random Clifford operator.
- Tipo de retorno:
- 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)[código fonte]#
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.
- Parâmetros:
- Retorno:
a quantum channel operator.
- Tipo de retorno:
- Levanta:
QiskitError – if rank or dimensions are invalid.
- qiskit.quantum_info.random_cnotdihedral(num_qubits, seed=None)[código fonte]#
Return a random CNOTDihedral element.
- Parâmetros:
- Retorno:
a random CNOTDihedral element.
- Tipo de retorno:
- qiskit.quantum_info.random_pauli_table(num_qubits, size=1, seed=None)[código fonte]#
Return a random PauliTable.
- Parâmetros:
- Retorno:
a random PauliTable.
- Tipo de retorno:
- qiskit.quantum_info.random_pauli_list(num_qubits, size=1, seed=None, phase=True)[código fonte]#
Return a random PauliList.
- Parâmetros:
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]
- Retorno:
a random PauliList.
- Tipo de retorno:
- qiskit.quantum_info.random_stabilizer_table(num_qubits, size=1, seed=None)[código fonte]#
DEPRECATED: Return a random StabilizerTable.
Obsoleto desde a versão 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
.- Parâmetros:
- Retorno:
a random StabilizerTable.
- Tipo de retorno:
Analysis#
- qiskit.quantum_info.hellinger_distance(dist_p, dist_q)[código fonte]#
Computes the Hellinger distance between two counts distributions.
- Parâmetros:
- Retorno:
Distance
- Tipo de retorno:
References
- qiskit.quantum_info.hellinger_fidelity(dist_p, dist_q)[código fonte]#
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.
- Parâmetros:
- Retorno:
Fidelity
- Tipo de retorno:
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)#
- Tipo de retorno:
- qiskit.quantum_info.decompose_clifford(clifford, method=None)[código fonte]#
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].
Obsoleto desde a versão 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.- Parâmetros:
- Retorno:
a circuit implementation of the Clifford.
- Tipo de retorno:
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]