Pauli#

class qiskit.quantum_info.Pauli(data=None, x=None, *, z=None, label=None)[source]#

Bases: BasePauli

N-qubit Pauli operator.

This class represents an operator \(P\) from the full \(n\)-qubit Pauli group

\[P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}\]

where \(q\in \mathbb{Z}_4\) and \(P_i \in \{I, X, Y, Z\}\) are single-qubit Pauli matrices:

\[\begin{split}I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}, X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}.\end{split}\]

Initialization

A Pauli object can be initialized in several ways:

Pauli(obj)

where obj is a Pauli string, Pauli or ScalarOp operator, or a Pauli gate or QuantumCircuit containing only Pauli gates.

Pauli((z, x, phase))

where z and x are boolean numpy.ndarrays and phase is an integer in [0, 1, 2, 3].

Pauli((z, x))

equivalent to Pauli((z, x, 0)) with trivial phase.

String representation

An \(n\)-qubit Pauli may be represented by a string consisting of \(n\) characters from ['I', 'X', 'Y', 'Z'], and optionally phase coefficient in \(['', '-i', '-', 'i']\). For example: XYZ or '-iZIZ'.

In the string representation qubit-0 corresponds to the right-most Pauli character, and qubit-\((n-1)\) to the left-most Pauli character. For example 'XYZ' represents \(X\otimes Y \otimes Z\) with 'Z' on qubit-0, 'Y' on qubit-1, and 'X' on qubit-3.

The string representation can be converted to a Pauli using the class initialization (Pauli('-iXYZ')). A Pauli object can be converted back to the string representation using the to_label() method or str(pauli).

নোট

Using str to convert a Pauli to a string will truncate the returned string for large numbers of qubits while to_label() will return the full string with no truncation. The default truncation length is 50 characters. The default value can be changed by setting the class __truncate__ attribute to an integer value. If set to 0 no truncation will be performed.

Array Representation

The internal data structure of an \(n\)-qubit Pauli is two length-\(n\) boolean vectors \(z \in \mathbb{Z}_2^N\), \(x \in \mathbb{Z}_2^N\), and an integer \(q \in \mathbb{Z}_4\) defining the Pauli operator

\[P = (-i)^{q + z\cdot x} Z^z \cdot X^x.\]

The \(k`th qubit corresponds to the :math:`k`th entry in the :math:`z\) and \(x\) arrays

\[\begin{split}P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]}\end{split}\]

where z[k] = P.z[k], x[k] = P.x[k] respectively.

The \(z\) and \(x\) arrays can be accessed and updated using the z and x properties respectively. The phase integer \(q\) can be accessed and updated using the phase property.

Matrix Operator Representation

Pauli's can be converted to \((2^n, 2^n)\) Operator using the to_operator() method, or to a dense or sparse complex matrix using the to_matrix() method.

Data Access

The individual qubit Paulis can be accessed and updated using the [] operator which accepts integer, lists, or slices for selecting subsets of Paulis. Note that selecting subsets of Pauli's will discard the phase of the current Pauli.

For example

p = Pauli('-iXYZ')

print('P[0] =', repr(P[0]))
print('P[1] =', repr(P[1]))
print('P[2] =', repr(P[2]))
print('P[:] =', repr(P[:]))
print('P[::-1] =, repr(P[::-1]))

Initialize the Pauli.

When using the symplectic array input data both z and x arguments must be provided, however the first (z) argument can be used alone for string label, Pauli operator, or ScalarOp input data.

প্যারামিটার:

data (str or tuple or Pauli or ScalarOp) -- input data for Pauli. If input is a tuple it must be of the form (z, x) or (z, x, phase)`` where z and x are boolean Numpy arrays, and phase is an integer from Z_4. If input is a string, it must be a concatenation of a phase and a Pauli string (e.g. 'XYZ', '-iZIZ') where a phase string is a combination of at most three characters from ['+', '-', ''], ['1', ''], and ['i', 'j', ''] in this order, e.g. '', '-1j' while a Pauli string is 1 or more characters of 'I', 'X', 'Y' or 'Z', e.g. 'Z', 'XIYY'.

রেইজেস:

QiskitError -- if input array is invalid shape.

Attributes

dim#

Return tuple (input_shape, output_shape).

name#

Unique string identifier for operation type.

num_clbits#

Number of classical bits.

num_qubits#

Return the number of qubits if a N-qubit operator or None otherwise.

phase#

Return the group phase exponent for the Pauli.

qargs#

Return the qargs for the operator.

settings#

Return settings.

x#

The x vector for the Pauli.

z#

The z vector for the Pauli.

Methods

adjoint()[source]#

Return the adjoint of the Operator.

anticommutes(other, qargs=None)[source]#

Return True if other Pauli anticommutes with self.

প্যারামিটার:
  • other (Pauli) -- another Pauli operator.

  • qargs (list) -- qubits to apply dot product on (default: None).

রিটার্নস:

True if Pauli's anticommute, False if they commute.

রিটার্ন টাইপ:

bool

commutes(other, qargs=None)[source]#

Return True if the Pauli commutes with other.

প্যারামিটার:
  • other (Pauli or PauliList) -- another Pauli operator.

  • qargs (list) -- qubits to apply dot product on (default: None).

রিটার্নস:

True if Pauli's commute, False if they anti-commute.

রিটার্ন টাইপ:

bool

compose(other, qargs=None, front=False, inplace=False)[source]#

Return the operator composition with another Pauli.

প্যারামিটার:
  • other (Pauli) -- a Pauli object.

  • qargs (list or None) -- Optional, qubits to apply dot product on (default: None).

  • front (bool) -- If True compose using right operator multiplication, instead of left multiplication [default: False].

  • inplace (bool) -- If True update in-place (default: False).

রিটার্নস:

The composed Pauli.

রিটার্ন টাইপ:

Pauli

রেইজেস:

QiskitError -- if other cannot be converted to an operator, or has incompatible dimensions for specified subsystems.

নোট

Composition (&) by default is defined as left matrix multiplication for matrix operators, while dot() is defined as right matrix multiplication. That is that A & B == A.compose(B) is equivalent to B.dot(A) when A and B are of the same type.

Setting the front=True kwarg changes this to right matrix multiplication and is equivalent to the dot() method A.dot(B) == A.compose(B, front=True).

conjugate()[source]#

Return the conjugate of each Pauli in the list.

copy()#

Make a deep copy of current operator.

delete(qubits)[source]#

Return a Pauli with qubits deleted.

প্যারামিটার:

qubits (int or list) -- qubits to delete from Pauli.

রিটার্নস:

the resulting Pauli with the specified qubits removed.

রিটার্ন টাইপ:

Pauli

রেইজেস:

QiskitError -- if ind is out of bounds for the array size or number of qubits.

dot(other, qargs=None, inplace=False)[source]#

Return the right multiplied operator self * other.

প্যারামিটার:
  • other (Pauli) -- an operator object.

  • qargs (list or None) -- Optional, qubits to apply dot product on (default: None).

  • inplace (bool) -- If True update in-place (default: False).

রিটার্নস:

The operator self * other.

রিটার্ন টাইপ:

Pauli

equiv(other)[source]#

Return True if Pauli's are equivalent up to group phase.

প্যারামিটার:

other (Pauli) -- an operator object.

রিটার্নস:

True if the Pauli's are equivalent up to group phase.

রিটার্ন টাইপ:

bool

evolve(other, qargs=None, frame='h')[source]#

Performs either Heisenberg (default) or Schrödinger picture evolution of the Pauli by a Clifford and returns the evolved Pauli.

Schrödinger picture evolution can be chosen by passing parameter frame='s'. This option yields a faster calculation.

Heisenberg picture evolves the Pauli as \(P^\prime = C^\dagger.P.C\).

Schrödinger picture evolves the Pauli as \(P^\prime = C.P.C^\dagger\).

প্যারামিটার:
  • other (Pauli or Clifford or QuantumCircuit) -- The Clifford operator to evolve by.

  • qargs (list) -- a list of qubits to apply the Clifford to.

  • frame (string) -- 'h' for Heisenberg (default) or 's' for

  • framework. (Schrödinger) --

রিটার্নস:

the Pauli \(C^\dagger.P.C\) (Heisenberg picture) or the Pauli \(C.P.C^\dagger\) (Schrödinger picture).

রিটার্ন টাইপ:

Pauli

রেইজেস:

QiskitError -- if the Clifford number of qubits and qargs don't match.

expand(other)[source]#

Return the reverse-order tensor product with another Pauli.

প্যারামিটার:

other (Pauli) -- a Pauli object.

রিটার্নস:

the tensor product \(b \otimes a\), where \(a\)

is the current Pauli, and \(b\) is the other Pauli.

রিটার্ন টাইপ:

Pauli

input_dims(qargs=None)#

Return tuple of input dimension for specified subsystems.

insert(qubits, value)[source]#

Insert a Pauli at specific qubit value.

প্যারামিটার:
  • qubits (int or list) -- qubits index to insert at.

  • value (Pauli) -- value to insert.

রিটার্নস:

the resulting Pauli with the entries inserted.

রিটার্ন টাইপ:

Pauli

রেইজেস:

QiskitError -- if the insertion qubits are invalid.

inverse()[source]#

Return the inverse of the Pauli.

output_dims(qargs=None)#

Return tuple of output dimension for specified subsystems.

power(n)#

Return the compose of a operator with itself n times.

প্যারামিটার:

n (int) -- the number of times to compose with self (n>0).

রিটার্নস:

the n-times composed operator.

রিটার্ন টাইপ:

Pauli

রেইজেস:

QiskitError -- if the input and output dimensions of the operator are not equal, or the power is not a positive integer.

reshape(input_dims=None, output_dims=None, num_qubits=None)#

Return a shallow copy with reshaped input and output subsystem dimensions.

প্যারামিটার:
  • input_dims (None or tuple) -- new subsystem input dimensions. If None the original input dims will be preserved [Default: None].

  • output_dims (None or tuple) -- new subsystem output dimensions. If None the original output dims will be preserved [Default: None].

  • num_qubits (None or int) -- reshape to an N-qubit operator [Default: None].

রিটার্নস:

returns self with reshaped input and output dimensions.

রিটার্ন টাইপ:

BaseOperator

রেইজেস:

QiskitError -- if combined size of all subsystem input dimension or subsystem output dimensions is not constant.

classmethod set_truncation(val)[source]#

Set the max number of Pauli characters to display before truncation/

প্যারামিটার:

val (int) -- the number of characters.

নোট

Truncation will be disabled if the truncation value is set to 0.

tensor(other)[source]#

Return the tensor product with another Pauli.

প্যারামিটার:

other (Pauli) -- a Pauli object.

রিটার্নস:

the tensor product \(a \otimes b\), where \(a\)

is the current Pauli, and \(b\) is the other Pauli.

রিটার্ন টাইপ:

Pauli

নোট

The tensor product can be obtained using the ^ binary operator. Hence a.tensor(b) is equivalent to a ^ b.

to_instruction()[source]#

Convert to Pauli circuit instruction.

to_label()[source]#

Convert a Pauli to a string label.

নোট

The difference between to_label and __str__() is that the later will truncate the output for large numbers of qubits.

রিটার্নস:

the Pauli string label.

রিটার্ন টাইপ:

str

to_matrix(sparse=False)[source]#

Convert to a Numpy array or sparse CSR matrix.

প্যারামিটার:

sparse (bool) -- if True return sparse CSR matrices, otherwise return dense Numpy arrays (default: False).

রিটার্নস:

The Pauli matrix.

রিটার্ন টাইপ:

array

transpose()[source]#

Return the transpose of each Pauli in the list.