Skip to main content
IBM Quantum Platform

Pauli

class qiskit.quantum_info.Pauli(data=None)

GitHub

Bases: BasePauli

N-qubit Pauli operator.

This class represents an operator PP from the full nn-qubit Pauli group

P=(−i)qPn−1⊗...⊗P0P = (-i)^{q} P_{n-1} \otimes ... \otimes P_{0}

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

I=(1001),X=(0110),Y=(0−ii0),Z=(100−1).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}.

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 nn-qubit Pauli may be represented by a string consisting of nn 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)(n-1) to the left-most Pauli character. For example 'XYZ' represents X⊗Y⊗ZX\otimes Y \otimes Z with 'Z' on qubit-0, 'Y' on qubit-1, and 'X' on qubit-2.

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).

Note

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 nn-qubit Pauli is two length-nn boolean vectors z∈Z2Nz \in \mathbb{Z}_2^N, x∈Z2Nx \in \mathbb{Z}_2^N, and an integer q∈Z4q \in \mathbb{Z}_4 defining the Pauli operator

P=(−i)q+z⋅xZz⋅Xx.P = (-i)^{q + z\cdot x} Z^z \cdot X^x.

The kk-th qubit corresponds to the kk-th entry in the zz and xx arrays

P=Pn−1⊗...⊗P0Pk=(−i)z[k]∗x[k]Zz[k]⋅Xx[k]\begin{aligned} P &= P_{n-1} \otimes ... \otimes P_{0} \\ P_k &= (-i)^{z[k] * x[k]} Z^{z[k]}\cdot X^{x[k]} \end{aligned}

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

The zz and xx arrays can be accessed and updated using the z and x properties respectively. The phase integer qq can be accessed and updated using the phase property.

Matrix Operator Representation

Pauli’s can be converted to (2n,2n)(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

from qiskit.quantum_info import Pauli

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.

Parameters

data (str ortuple orPauli orScalarOp) – 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 Z4\mathbb{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'.

Raises

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

adjoint()

GitHub

Return the adjoint of the Operator.

anticommutes

anticommutes(other, qargs=None)

GitHub

Return True if other Pauli anticommutes with self.

Parameters

  • other (Pauli) – another Pauli operator.
  • qargs (list) – qubits to apply dot product on (default: None).

Returns

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

Return type

bool

apply_layout

apply_layout(layout, num_qubits=None)

GitHub

Apply a transpiler layout to this Pauli

Parameters

  • layout (TranspileLayout |list[int] | None) – Either a TranspileLayout, a list of integers or None. If both layout and num_qubits are none, a copy of the operator is returned.
  • num_qubits (int | None) – The number of qubits to expand the operator to. If not provided then if layout is a TranspileLayout the number of the transpiler output circuit qubits will be used by default. If layout is a list of integers the permutation specified will be applied without any expansion. If layout is None, the operator will be expanded to the given number of qubits.

Returns

A new Pauli with the provided layout applied

Return type

Pauli

commutes

commutes(other, qargs=None)

GitHub

Return True if the Pauli commutes with other.

Parameters

  • other (Pauli orPauliList) – another Pauli operator.
  • qargs (list) – qubits to apply dot product on (default: None).

Returns

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

Return type

bool

compose

compose(other, qargs=None, front=False, inplace=False)

GitHub

Return the operator composition with another Pauli.

Parameters

  • other (Pauli) – a Pauli object.
  • qargs (list or None) – 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).

Returns

The composed Pauli.

Return type

Pauli

Raises

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

Note

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

conjugate()

GitHub

Return the complex conjugate of the Pauli with respect to the Z basis.

copy

copy()

GitHub

Make a deep copy of current operator.

delete

delete(qubits)

GitHub

Return a Pauli with qubits deleted.

Parameters

qubits (int orlist) – qubits to delete from Pauli.

Returns

the resulting Pauli with the specified qubits removed.

Return type

Pauli

Raises

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

dot

dot(other, qargs=None, inplace=False)

GitHub

Return the right multiplied operator self * other.

Parameters

  • other (Pauli) – an operator object.
  • qargs (list or None) – qubits to apply dot product on (default: None).
  • inplace (bool) – If True update in-place (default: False).

Returns

The operator self * other.

Return type

Pauli

equiv

equiv(other)

GitHub

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

Parameters

other (Pauli) – an operator object.

Returns

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

Return type

bool

evolve

evolve(other, qargs=None, frame='h')

GitHub

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′=C†.P.CP^\prime = C^\dagger.P.C.

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

Parameters

  • other (Pauli orClifford orQuantumCircuit) – 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 Schrödinger framework.

Returns

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

Return type

Pauli

Raises

QiskitError – if the Clifford number of qubits and qargs don’t match.

expand

expand(other)

GitHub

Return the reverse-order tensor product with another Pauli.

Parameters

other (Pauli) – a Pauli object.

Returns

the tensor product b⊗ab \otimes a, where aa

is the current Pauli, and bb is the other Pauli.

Return type

Pauli

input_dims

input_dims(qargs=None)

GitHub

Return tuple of input dimension for specified subsystems.

insert

insert(qubits, value)

GitHub

Insert a Pauli at specific qubit value.

Parameters

  • qubits (int orlist) – qubits index to insert at.
  • value (Pauli) – value to insert.

Returns

the resulting Pauli with the entries inserted.

Return type

Pauli

Raises

QiskitError – if the insertion qubits are invalid.

inverse

inverse()

GitHub

Return the inverse of the Pauli.

output_dims

output_dims(qargs=None)

GitHub

Return tuple of output dimension for specified subsystems.

power

power(n)

GitHub

Return the composition of an operator with itself n times.

Parameters

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

Returns

the n-times composed operator.

Return type

Clifford

Raises

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

reshape

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

GitHub

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

Parameters

  • 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

returns self with reshaped input and output dimensions.

Return type

BaseOperator

Raises

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

set_truncation

classmethod set_truncation(val)

GitHub

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

Parameters

val (int) – the number of characters.

Note

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

tensor

tensor(other)

GitHub

Return the tensor product with another Pauli.

Parameters

other (Pauli) – a Pauli object.

Returns

the tensor product a⊗ba \otimes b, where aa

is the current Pauli, and bb is the other Pauli.

Return type

Pauli

Note

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

to_instruction

to_instruction()

GitHub

Convert to Pauli circuit instruction.

to_label

to_label()

GitHub

Convert a Pauli to a string label.

Note

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

Returns

the Pauli string label.

Return type

str

to_matrix

to_matrix(sparse=False)

GitHub

Convert to a Numpy array or sparse CSR matrix.

Parameters

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

Returns

The Pauli matrix.

Return type

array

transpose

transpose()

GitHub

Return the transpose of each Pauli in the list.

Was this page helpful?
Report a bug, typo, or request content on GitHub.